Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat(zenko-367): Add Backbeat CRR tests to eve #219

Merged
merged 1 commit into from
Jul 25, 2018
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion charts/cloudserver/values.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,7 @@ mongodb:
# When Orbit is enabled, there will be an additional fully stateless replica
# added which serves as the "manager" for reporting metrics. For example,
# with a "replicaCount: 2" and Orbit management enabled, there would be a
# total of 3 pods deployed (2 worker replicas + 1 manager).
# total of 3 pods deployed (2 worker replicas + 1 manager).
replicaCount: 2

image:
Expand Down
102 changes: 81 additions & 21 deletions eve/main.yml
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@ models:
source: tests/artifacts
urls:
- "*"
- env: &global_env
- env: &secrets_env # contains values used for test config
AWS_GCP_BACKEND_ACCESS_KEY: '%(secret:aws_gcp_backend_access_key)s'
AWS_GCP_BACKEND_ACCESS_KEY_2: '%(secret:aws_gcp_backend_access_key_2)s'
AWS_GCP_BACKEND_SECRET_KEY: '%(secret:aws_gcp_backend_secret_key)s'
Expand All @@ -39,7 +39,6 @@ models:
AZURE_BACKEND_CONTAINER_NAME_2: ci-zenko-azure-target-bucket-2
AZURE_BACKEND_ENDPOINT: '%(secret:azure_backend_endpoint)s'
AZURE_BACKEND_ENDPOINT_2: '%(secret:azure_backend_endpoint_2)s'
E2E_DOCKER_IMAGE_NAME: '%(secret:private_registry_url)s/zenko/zenko-e2e'
GCP_BUCKET_NAME: ci-zenko-gcp-target-bucket
GCP_BUCKET_NAME_2: ci-zenko-gcp-target-bucket-2
GCP_CRR_BUCKET_NAME: ci-zenko-gcp-crr-target-bucket
Expand All @@ -49,51 +48,66 @@ models:
GCP_MPU_BUCKET_NAME_2: ci-zenko-gcp-mpu-bucket-2
INSTALL_TIMEOUT: "400"
MULTI_CRR_SRC_BUCKET: ci-zenko-multi-crr-src-bucket
TILLER_NAMESPACE: '%(prop:testNamespace)s'
TRANSIENT_SRC_BUCKET: ci-zenko-transient-src-bucket
ZENKO_ACCESS_KEY: HEYIMAACCESSKEY
ZENKO_SECRET_KEY: loOkAtMEImASecRetKEy123=
ZENKO_STORAGE_ACCOUNT_ACCESS_KEY: HEYIMAACCESSKEY
ZENKO_STORAGE_ACCOUNT_SECRET_KEY: loOkAtMEImASecRetKEy123=
AWS_S3_BACKEND_SOURCE_LOCATION: awsbackend
AWS_S3_BACKEND_DESTINATION_LOCATION: awsbackendmismatch
AZURE_BACKEND_DESTINATION_LOCATION: azurebackendmismatch
GCP_BACKEND_DESTINATION_LOCATION: gcpbackendmismatch

- env: &docker_env # contains values for build test images
E2E_DOCKER_IMAGE_NAME: '%(secret:private_registry_url)s/zenko/zenko-e2e'
BACKBEAT_DOCKER_IMAGE_NAME: '%(secret:private_registry_url)s/zenko/backbeat-e2e'

- env: &k8s_env # containes values for running helm and kubectl
ZENKO_HELM_RELEASE: 'zenko-test'
ZENKO_K8S_NAMESPACE: '%(prop:testNamespace)s'
ZENKO_SECRET_KEY: loOkAtMEImASecRetKEy123=
TILLER_NAMESPACE: '%(prop:testNamespace)s'

- env: &global_env # contains all env values
<<: [*secrets_env, *docker_env, *k8s_env]

- ShellCommand: &install_tiller
name: install helm (tiller into kubernetes)
command: >-
helm init --wait
haltOnFailure: true
env:
<<: *global_env
<<: *k8s_env
- ShellCommand: &helm_repos
name: Install needed helm repos
command: |-
helm repo add incubator http://storage.googleapis.com/kubernetes-charts-incubator
haltOnFailure: true
env:
TILLER_NAMESPACE: '%(prop:testNamespace)s'
<<: *k8s_env
- ShellCommand: &start_orbit_simulator
name: Start orbit simulator
command: >-
git clone git@github.com:scality/orbit-simulator.git &&
helm upgrade ciutil
--install orbit-simulator/charts/orbit-simulator
--set simulator.shim.cloudserver_release=$(echo ${ZENKO_HELM_RELEASE})
--set simulator.shim.cloudserver_pod="cloudserver"
--wait $(./ci_env.sh set)
workdir: build/eve/workers
haltOnFailure: true
env:
<<: *global_env
<<: [*k8s_env, *secrets_env]
- ShellCommand: &helm_build_dep
name: Retrieve dependency
command: >-
helm dep build charts/zenko
haltOnFailure: true
env:
<<: *global_env
<<: *k8s_env
- ShellCommand: &helm_lint
name: Lint charts
command: helm lint charts/*
haltOnFailure: true
- ShellCommand: &test_zenko
- ShellCommand: &run_zenko_e2e
name: Test zenko
command: >-
make DOCKER_IMAGE_NAME=$E2E_DOCKER_IMAGE_NAME
Expand All @@ -107,7 +121,7 @@ models:
command: make dump-logs
workdir: build/tests
env:
<<: *global_env
<<: *k8s_env

stages:
pre-merge:
Expand All @@ -119,13 +133,14 @@ stages:
name: trigger all the tests
stage_names:
- build-e2e
- helm_test_kube_1.9.6
- build-backbeat-e2e
- test-zenko

build-e2e:
worker: *pod
steps: &build_e2e
- Git: *git_pull
- ShellCommand:
- ShellCommand: &private_registry_login
name: Private Registry Login
command: >
docker login
Expand All @@ -139,17 +154,38 @@ stages:
DOCKER_IMAGE_TAG='%(prop:commit_short_revision)s' container-image
workdir: build/tests
env:
<<: *global_env
<<: [*docker_env, *k8s_env]
- ShellCommand:
name: push end2end image
command: >-
make DOCKER_IMAGE_NAME=$E2E_DOCKER_IMAGE_NAME
DOCKER_IMAGE_TAG='%(prop:commit_short_revision)s' container-push
workdir: build/tests
env:
<<: *global_env
<<: [*docker_env, *k8s_env]

helm_test_kube_1.9.6:
build-backbeat-e2e:
worker: *pod
steps:
- Git: *git_pull
- ShellCommand: *private_registry_login
# - ShellCommand:
# name: Insert GCP key
# command: >-
# cat '{"private_key": "%(secret:gcp_backend_service_key)s", "client_email": "$(secret:gcp_backend_service_email)s"}'
- ShellCommand:
name: build backbeat e2e image
command: docker build -t "$BACKBEAT_DOCKER_IMAGE_NAME:%(prop:commit_short_revision)s" --no-cache .
workdir: build/tests/backbeat
env:
<<: *docker_env
- ShellCommand:
name: push backbeat e2e image
command: docker push "$BACKBEAT_DOCKER_IMAGE_NAME:%(prop:commit_short_revision)s"
env:
<<: *docker_env

test-zenko:
worker: &kube_cluster
<<: *pod
service:
Expand All @@ -165,6 +201,9 @@ stages:
apk --update add curl
- Git: *git_pull
- ShellCommand: *install_tiller
- ShellCommand:
name: Instal base64
command: apk --update add coreutils
- ShellCommand: *helm_repos
- ShellCommand: *start_orbit_simulator
- ShellCommand: *helm_build_dep
Expand All @@ -175,11 +214,33 @@ stages:
helm upgrade $ZENKO_HELM_RELEASE --namespace %(prop:testNamespace)s
--install charts/zenko
-f eve/ci-values.yml
$(./eve/workers/ci_env.sh set)
haltOnFailure: true
env:
<<: *k8s_env
- ShellCommand: *run_zenko_e2e
- ShellCommand:
name: Run backbeat crr tests
command: >-
kubectl run zenko-backbeat-e2e --image=$BACKBEAT_DOCKER_IMAGE_NAME:%(prop:commit_short_revision)s
--rm --restart=Never --namespace $ZENKO_K8S_NAMESPACE --attach=True
$(../eve/workers/ci_env.sh env)
--env CLOUDSERVER_ENDPOINT="http://$ZENKO_HELM_RELEASE-cloudserver:80"
-- npm run test_crr
workdir: build/tests
env:
<<: *global_env
- ShellCommand:
name: Run backbeat api tests
command: >-
kubectl run zenko-backbeat-e2e --image=$BACKBEAT_DOCKER_IMAGE_NAME:%(prop:commit_short_revision)s
--rm --restart=Never --namespace $ZENKO_K8S_NAMESPACE --attach=True
$(../eve/workers/ci_env.sh env)
--env CLOUDSERVER_ENDPOINT="http://$ZENKO_HELM_RELEASE-cloudserver:80"
--env CLOUDSERVER_HOST="$ZENKO_HELM_RELEASE-cloudserver"
-- npm run test_api
workdir: build/tests
env:
<<: *global_env
- ShellCommand: *test_zenko
- ShellCommand: *dump_logs
- Upload: *upload_artifacts

Expand Down Expand Up @@ -235,10 +296,9 @@ stages:
--set backbeat.image.repository=%(secret:private_registry_url)s/zenko/backbeat
--set s3-data.image.tag='%(prop:cloudserver_sha1)s'
--set s3-data.image.repository=%(secret:private_registry_url)s/zenko/cloudserver
$(./eve/workers/ci_env.sh set)
haltOnFailure: true
env:
<<: *global_env
- ShellCommand: *test_zenko
<<: *k8s_env
- ShellCommand: *run_zenko_e2e
- ShellCommand: *dump_logs
- Upload: *upload_artifacts
12 changes: 11 additions & 1 deletion eve/workers/ci_env.sh
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,8 @@ else
echo "usage: ci_env.sh [set|env]"
fi

GCP_PRIV_KEY=$(echo "$GCP_BACKEND_SERVICE_KEY" | base64 | tr -d '\n')

FLAGS="\
--$CLI_FLAG ${CI_PREFIX}AWS_GCP_BACKEND_ACCESS_KEY=$AWS_GCP_BACKEND_ACCESS_KEY \
--$CLI_FLAG ${CI_PREFIX}AWS_GCP_BACKEND_ACCESS_KEY_2=$AWS_GCP_BACKEND_ACCESS_KEY_2 \
Expand Down Expand Up @@ -46,7 +48,15 @@ FLAGS="\
--$CLI_FLAG ${CI_PREFIX}AWS_S3_BACKBEAT_SRC_BUCKET_NAME=$AWS_S3_BACKBEAT_SRC_BUCKET_NAME \
--$CLI_FLAG ${CI_PREFIX}GCP_CRR_SRC_BUCKET_NAME=$GCP_CRR_SRC_BUCKET_NAME \
--$CLI_FLAG ${CI_PREFIX}AZURE_BACKBEAT_SRC_CONTAINER_NAME=$AZURE_BACKBEAT_SRC_CONTAINER_NAME \
--$CLI_FLAG ${CI_PREFIX}TRANSIENT_SRC_BUCKET=$TRANSIENT_SRC_BUCKET"
--$CLI_FLAG ${CI_PREFIX}TRANSIENT_SRC_BUCKET=$TRANSIENT_SRC_BUCKET \
--$CLI_FLAG ${CI_PREFIX}ZENKO_STORAGE_ACCOUNT_ACCESS_KEY=$ZENKO_STORAGE_ACCOUNT_ACCESS_KEY \
--$CLI_FLAG ${CI_PREFIX}ZENKO_STORAGE_ACCOUNT_SECRET_KEY=$ZENKO_STORAGE_ACCOUNT_SECRET_KEY \
--$CLI_FLAG ${CI_PREFIX}AWS_S3_BACKEND_SOURCE_LOCATION=$AWS_S3_BACKEND_SOURCE_LOCATION \
--$CLI_FLAG ${CI_PREFIX}AWS_S3_BACKEND_DESTINATION_LOCATION=$AWS_S3_BACKEND_DESTINATION_LOCATION \
--$CLI_FLAG ${CI_PREFIX}AZURE_BACKEND_DESTINATION_LOCATION=$AZURE_BACKEND_DESTINATION_LOCATION \
--$CLI_FLAG ${CI_PREFIX}GCP_BACKEND_DESTINATION_LOCATION=$GCP_BACKEND_DESTINATION_LOCATION \
--$CLI_FLAG ${CI_PREFIX}GCP_BACKEND_SERVICE_KEY=$GCP_PRIV_KEY \
--$CLI_FLAG ${CI_PREFIX}GCP_BACKEND_SERVICE_EMAIL=$GCP_BACKEND_SERVICE_EMAIL"

if [ ! -z "$ZENKO_ACCESS_KEY" ]; then
FLAGS="$FLAGS --$CLI_FLAG ${CI_PREFIX}ZENKO_ACCESS_KEY=$ZENKO_ACCESS_KEY"
Expand Down
9 changes: 9 additions & 0 deletions tests/backbeat/Dockerfile
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
FROM node:6-alpine


ADD ./ /tests/
WORKDIR /tests
RUN chmod +x gcp_shim.sh
RUN npm install

ENTRYPOINT [ "/tests/gcp_shim.sh" ]
Original file line number Diff line number Diff line change
Expand Up @@ -21,15 +21,15 @@ class ReplicationUtility {
_compareObjectBody(body1, body2) {
const digest1 = crypto.createHash('md5').update(body1).digest('hex');
const digest2 = crypto.createHash('md5').update(body2).digest('hex');
if (digest1 !== digest2) {
// dump data for later investigation
const filePrefix = `${process.env.CIRCLE_ARTIFACTS}/` +
`genericStaas_backbeat_md5_mismatch_body`;
fs.writeFileSync(`${filePrefix}1.bin`, body1);
fs.writeFileSync(`${filePrefix}2.bin`, body2);
console.error('md5 mismatch: data dumped in ' +
`${filePrefix}{1,2}.bin`);
}
// if (digest1 !== digest2) {
// // dump data for later investigation
// const filePrefix = `${process.env.CIRCLE_ARTIFACTS}/` +
// `genericStaas_backbeat_md5_mismatch_body`;
// fs.writeFileSync(`${filePrefix}1.bin`, body1);
// fs.writeFileSync(`${filePrefix}2.bin`, body2);
// console.error('md5 mismatch: data dumped in ' +
// `${filePrefix}{1,2}.bin`);
// }
assert.strictEqual(digest1, digest2);
}

Expand Down
8 changes: 4 additions & 4 deletions tests/zenko_e2e/backbeat/Using.md → tests/backbeat/Using.md
Original file line number Diff line number Diff line change
Expand Up @@ -53,8 +53,8 @@ export AZURE_BACKBEAT_CONTAINER_NAME=<destination-azure-container-name>
export AZURE_BACKEND_DESTINATION_LOCATION=<destination-azure-location-name>
export GCP_CRR_BUCKET_NAME=<destination-gcp-bucket-name>
export GCP_BACKEND_DESTINATION_LOCATION=<destination-gcp-location-name>
export GCP_BACKEND_PRIVATE_KEY=<gcp-private-key>
export GCP_BACKEND_CLIENT_EMAIL=<gcp-client-email>
export GCP_BACKEND_SERVICE_KEY=<gcp-private-key>
export GCP_BACKEND_SERVICE_EMAIL=<gcp-client-email>
```

9. If using `*.env` files, source the files:
Expand All @@ -68,8 +68,8 @@ source .env && source .secrets.env
```
cat >gcp_key.json <<EOF
{
"private_key": "${GCP_BACKEND_PRIVATE_KEY}",
"client_email": "${GCP_BACKEND_CLIENT_EMAIL}"
"private_key": "${GCP_BACKEND_SERVICE_KEY}",
"client_email": "${GCP_BACKEND_SERVICE_EMAIL}"
}
EOF
```
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
const azure = require('azure-storage');

const storageAccount = process.env.AZURE_BACKBEAT_ACCOUNT_NAME;
const storageAccessKey = process.env.AZURE_BACKBEAT_ACCESS_KEY;
const storageAccount = process.env.AZURE_BACKEND_ACCOUNT_NAME;
const storageAccessKey = process.env.AZURE_BACKEND_ACCESS_KEY;
const storageEndpoint = process.env.AZURE_BACKBEAT_ENDPOINT;

const sharedBlobSvc =
Expand Down
10 changes: 10 additions & 0 deletions tests/backbeat/fix_priv_key.awk
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
{
for(i = 1; i <= NF; i++) {
if (index($i, "-----")) {
printf "%s %s %s\\n", $i, $(i+1), $(i+2);
i = i + 3;
} else {
printf "%s\\n", $i;
}
}
}
File renamed without changes.
15 changes: 15 additions & 0 deletions tests/backbeat/gcp_shim.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
#!/bin/sh

GCP_PRIV_KEY="$(echo $GCP_BACKEND_SERVICE_KEY | base64 -d | awk -f fix_priv_key.awk)"

echo "Converted private key to:"
echo "$GCP_PRIV_KEY"

cat >gcp_key.json <<EOF
{
"private_key": "${GCP_PRIV_KEY}",
"client_email": "${GCP_BACKEND_SERVICE_EMAIL}"
}
EOF

exec $@
File renamed without changes.
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ const scalityS3Client = new S3({
accessKeyId: process.env.ZENKO_STORAGE_ACCOUNT_ACCESS_KEY,
secretAccessKey: process.env.ZENKO_STORAGE_ACCOUNT_SECRET_KEY,
sslEnabled: false,
endpoint: 'http://zenko.local',
endpoint: process.env.CLOUDSERVER_ENDPOINT,
apiVersions: { s3: '2006-03-01' },
signatureCache: false,
signatureVersion: 'v4',
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@ function makeDelayedGETRequest(endpoint, cb) {
}, 5000);
}

describe('Backbeat replication metrics', function dF() {
describe.skip('Backbeat replication metrics', function dF() {
this.timeout(REPLICATION_TIMEOUT);
const roleArn = 'arn:aws:iam::root:role/s3-replication-role';

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -515,4 +515,3 @@ describe('Replication with AWS backend: source AWS location', function() {
undefined, next),
], done));
});

Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@ const copySource = `/${srcBucket}/${file}`;
const fileutf8 = `${filePrefix}/%EA%9D%8B崰㈌㒈保轖䳷䀰⺩ቆ楪僷ꈅꓜ퇬枅࿷염곞召㸾⌙ꪊᆐ庍뉆䌗↎幐냂詴 끴鹲萯⇂쫤ᛩ꺶㖭簹릍铰᫫暨鿐魪셑蛃춧㡡竺뫁噛̷ᗰⷑ錜⑔痴䧫㾵᏷ำꎆ꼵껪멷㄀誕㳓腜쒃컹㑻鳃삚舿췈孨੦⮀NJ곓⵪꺼꜈嗼뫘悕錸瑺⁤⑬১㵀⡸Ҏ礄䧛졼⮦ٞ쫁퓡厈譤擵泶鵇俻縫륒㜓垻ㆩꝿ詀펉ᆙ舑䜾힑藪碙ꀎꂰ췊Ᏻ 㘺幽醛잯ද汧Ꟑꛒⶨ쪸숞헹㭔ꡔᘼ뺓ᡆ᡾ᑟ䅅퀭耓弧⢠⇙폪ް蛧⃪Ἔ돫ꕢ븥ヲ캂䝄쟐颺ᓾ둾Ұ껗礞ᾰ瘹蒯硳풛瞋襎奺熝妒컚쉴⿂㽝㝳駵鈚䄖戭䌸᫲ᇁ䙪鸮ᐴ稫ⶭ뀟ھ⦿䴳稉ꉕ捈袿놾띐✯伤䃫⸧ꠏ瘌틳藔ˋ㫣敀䔩㭘식↴⧵佶痊牌ꪌ搒꾛æᤈべ쉴挜炩⽍舘ꆗ줣徭Z䐨 敗羥誜嘳ֶꫜ걵ࣀ묟ኋ拃秷䨸菥䟆곘縧멀煣⧃⏶혣뎧邕⢄⭖陙䣎灏ꗛ僚䌁䠒䲎둘ꪎ傩쿌ᨌ뀻阥눉넠猌ㆯ㰢船戦跏灳蝒礯鞰諾벥煸珬㟑孫鞹Ƭꄹ孙ꢱ钐삺ᓧ鈠䁞〯蘼᫩헸ῖ"`; // eslint-disable-line
const REPLICATION_TIMEOUT = 300000;

describe('Replication with GCP backend', function() {
describe.skip('Replication with GCP backend', function() {
this.timeout(REPLICATION_TIMEOUT);
let roleArn = 'arn:aws:iam::root:role/s3-replication-role';

Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
const http = require('http');
const aws4 = require('aws4');

const DEFAULT_HOST = 'zenko.local';
const DEFAULT_HOST = process.env.CLOUDSERVER_HOST || 'zenko.local';
const DEFAULT_PORT = '80';

const accessKeyId = process.env.ZENKO_STORAGE_ACCOUNT_ACCESS_KEY;
Expand Down
Loading