Skip to content
This repository was archived by the owner on Feb 8, 2021. It is now read-only.

Commit 1a2d1cd

Browse files
authored
Merge pull request #238 from Jimmy-Xu/autotest-dockerfile
add docker image hyperhq/hypercli-auto-test:auto
2 parents 3c4b717 + 03d756b commit 1a2d1cd

19 files changed

+522
-19
lines changed

integration-cli/README.md

100755100644
File mode changed.

integration-cli/autotest/Dockerfile

Lines changed: 82 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,82 @@
1+
FROM centos:7.3.1611
2+
3+
#This Dockerfile is used for autotest hypercli
4+
#REF: integration-cli/README.md
5+
6+
###################################
7+
## install common package ##
8+
###################################
9+
RUN yum install -y\
10+
automake \
11+
autoconf \
12+
make \
13+
gcc \
14+
wget \
15+
time \
16+
git \
17+
which \
18+
screen &&\
19+
yum clean all
20+
21+
22+
########################################
23+
## prepare java run env ##
24+
########################################
25+
RUN wget --no-check-certificate --no-cookies \
26+
--header "Cookie: oraclelicense=accept-securebackup-cookie" \
27+
http://download.oracle.com/otn-pub/java/jdk/8u141-b15/336fa29ff2bb4ef291e347e091f7f4a7/jdk-8u141-linux-x64.rpm \
28+
&& rpm -ivh jdk-8u141-linux-x64.rpm && rm -rf jdk-8u141-linux-x64.rpm
29+
30+
ENV JAVA_HOME /usr/java/jdk1.8.0_141
31+
ENV PATH $PATH:$JAVA_HOME/bin
32+
33+
34+
###########################
35+
## install golang ##
36+
###########################
37+
ENV GO_VERSION 1.8.3
38+
RUN wget http://golangtc.com/static/go/${GO_VERSION}/go${GO_VERSION}.linux-amd64.tar.gz
39+
RUN tar -xzf go${GO_VERSION}.linux-amd64.tar.gz -C /usr/local
40+
ENV GOROOT /usr/local/go
41+
ENV PATH $GOROOT/bin:$PATH
42+
43+
44+
##########################################
45+
## prepare jenkins slave run env ##
46+
##########################################
47+
ENV HOME /home/jenkins
48+
RUN groupadd -g 10000 jenkins
49+
RUN useradd -c "Jenkins user" -d $HOME -u 10000 -g 10000 -m jenkins
50+
RUN mkdir /home/jenkins/.tmp
51+
VOLUME ["/home/jenkins"]
52+
53+
WORKDIR $HOME
54+
USER root
55+
56+
################################
57+
## prepare for build env ##
58+
################################
59+
## Env
60+
ENV PATH /go/bin:/usr/local/go/bin:/usr/bin:/usr/local/bin:$PATH
61+
ENV GOPATH /go:/go/src/github.com/hyperhq/hypercli/integration-cli/vendor:/go/src/github.com/hyperhq/hypercli/vendor
62+
63+
#TARGET_REGION could be: us-west-1|eu-central-1|RegionOne
64+
ENV TARGET_REGION=${TARGET_REGION:-us-west-1}
65+
ENV BRANCH=${BRANCH:-master}
66+
ENV TEST_CASE_REG=${TEST_CASE_REG:-TestCli.*}
67+
68+
## hyper account for test
69+
ENV ACCESS_KEY=
70+
ENV SECRET_KEY=
71+
72+
## slack parameter
73+
ENV SLACK_TOKEN=
74+
ENV SLACK_CHANNEL_ID=
75+
76+
77+
COPY entrypoint.sh /usr/local/bin/entrypoint.sh
78+
COPY script/slack.sh /usr/local/bin/slack.sh
79+
COPY script/run.sh /usr/local/bin/run.sh
80+
81+
ENTRYPOINT ["entrypoint.sh"]
82+
CMD ["run.sh"]
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
#!/bin/bash
2+
3+
exec "$@"
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
config
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
TARGET_REGION="us-west-1"
2+
BRANCH="master"
3+
TEST_CASE_REG="TestCli.*Basic"
4+
TIMEOUT="90m"
5+
6+
# hyper credentrial for test
7+
ACCESS_KEY=""
8+
SECRET_KEY=""
9+
10+
################################
11+
# slack token
12+
# https://api.slack.com/methods/workspace-tokens
13+
# https://api.slack.com/docs/token-types
14+
# https://api.slack.com/custom-integrations/legacy-tokens
15+
################################
16+
SLACK_TOKEN="xoxp-xxxxxxxxxxx"
17+
SLACK_CHANNEL_ID="C7AB6M1NJ" #hykins-monitor
Lines changed: 279 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,279 @@
1+
#!/bin/bash
2+
3+
export HYPER_CONFIG=~/.hyper
4+
export DOCKER_REMOTE_DAEMON=1
5+
export DOCKER_CERT_PATH=fixtures/hyper_ssl
6+
export DOCKER_TLS_VERIFY=
7+
8+
#check hyper credentrial
9+
if [[ "${ACCESS_KEY}" == "" ]] || [[ "${SECRET_KEY}" == "" ]];then
10+
echo "Error: Please set ACCESS_KEY and SECRET_KEY"
11+
exit 1
12+
fi
13+
14+
15+
if [ "${TARGET_REGION}" = "eu-central-1" ]
16+
then
17+
#test eu1 with zl2 container
18+
export TARGET_NAME="eu1"
19+
export REGION="eu-central-1"
20+
export DOCKER_HOST="tcp://${REGION}.hyper.sh:443"
21+
elif [ "${TARGET_REGION}" = "us-west-1" ]
22+
then
23+
#test zl2 with eu1 container
24+
export TARGET_NAME="zl2"
25+
export REGION="us-west-1"
26+
export DOCKER_HOST="tcp://${REGION}.hyper.sh:443"
27+
elif [ "${TARGET_REGION}" = "RegionOne" ]
28+
then
29+
#test packet with zl2 container
30+
export TARGET_NAME="pkt"
31+
export REGION="RegionOne"
32+
export DOCKER_HOST="tcp://147.75.195.39:6443"
33+
else
34+
echo "unknow TARGET_REGION:${TARGET_REGION}"
35+
exit 1
36+
fi
37+
TITLE="*hypercli integration auto-test for \`${TARGET_NAME}\`* - ${BEGIN_TIME} *\`${TEST_CASE_REG}\`*"
38+
39+
40+
# job url
41+
JOB_URL="http://ci.hypercontainer.io:8080/job/${JOB_NAME}/${BUILD_NUMBER}/console"
42+
echo "JOB_URL: ${JOB_URL}"
43+
44+
# branch url
45+
PR_PRE=$(expr substr ${BRANCH} 1 1)
46+
if [ "$PR_PRE" = "#" ]
47+
then
48+
PR_NUMBER=$(echo ${BRANCH} | awk '{print substr($1,2)}')
49+
echo "========== Task: test PR ${PR_NUMBER} =========="
50+
BRANCH_URL="https://github.com/hyperhq/hypercli/pull/${PR_NUMBER}/commits"
51+
else
52+
echo "========== Task: test BRANCH ${BRANCH} =========="
53+
BRANCH_URL="https://github.com/hyperhq/hypercli/commits/${BRANCH}"
54+
fi
55+
echo "BRANCH_URL: ${BRANCH_URL}"
56+
57+
#ensure config for hyper cli
58+
mkdir -p ${HYPER_CONFIG}
59+
cat > ${HYPER_CONFIG}/config.json <<EOF
60+
{
61+
"clouds": {
62+
"${DOCKER_HOST}": {
63+
"accesskey": "${ACCESS_KEY}",
64+
"secretkey": "${SECRET_KEY}",
65+
"region": "${REGION}"
66+
},
67+
"tcp://*.hyper.sh:443": {
68+
"accesskey": "${ACCESS_KEY}",
69+
"secretkey": "${SECRET_KEY}",
70+
"region": "${REGION}"
71+
}
72+
}
73+
}
74+
EOF
75+
76+
echo "========== config git proxy =========="
77+
if [ "${http_proxy}" != "" ];then
78+
git config --global http.proxy ${http_proxy}
79+
fi
80+
if [ "${https_proxy}" != "" ];then
81+
git config --global https.proxy ${https_proxy}
82+
fi
83+
git config --list | grep proxy
84+
85+
echo "========== ping github.com =========="
86+
ping -c 3 -W 10 github.com
87+
88+
echo "========== Clone hypercli repo =========="
89+
mkdir -p /go/src/github.com/{hyperhq,docker}
90+
cd /go/src/github.com/hyperhq
91+
git clone https://github.com/hyperhq/hypercli.git
92+
93+
echo "========== Build hypercli =========="
94+
cd /go/src/github.com/hyperhq/hypercli
95+
if [[ "${PR_PRE}" == "#" ]];then
96+
echo "checkout pr :#${PR_NUMBER}"
97+
git fetch origin pull/${PR_NUMBER}/head:pr-${PR_NUMBER}
98+
git checkout pr-${PR_NUMBER}
99+
else
100+
echo "checkout branch :${BRANCH}"
101+
git checkout ${BRANCH}
102+
fi
103+
104+
if [[ $? -ne 0 ]];then
105+
echo "Branch ${BRANCH} not exist!"
106+
exit 1
107+
fi
108+
109+
./build.sh
110+
if [ $? -ne 0 ];then
111+
echo "Build hypercli failed"
112+
exit 1
113+
fi
114+
ln -s /go/src/github.com/hyperhq/hypercli /go/src/github.com/docker/docker
115+
ln -s /go/src/github.com/hyperhq/hypercli/hyper/hyper /usr/bin/hyper
116+
echo alias hypercli=\"hyper --region \${DOCKER_HOST}\" >> ~/.bashrc
117+
source ~/.bashrc
118+
119+
echo "##############################################################################################"
120+
echo "## Welcome to integration test ##"
121+
echo "##############################################################################################"
122+
#show config for hyper cli
123+
echo "Current hyper config: ${HYPER_CONFIG}/config.json"
124+
echo "----------------------------------------------------------------------------------------------"
125+
cat ${HYPER_CONFIG}/config.json \
126+
| sed 's/"secretkey":.*/"secretkey": "******************************",/g' \
127+
| sed 's/"auth":.*/"auth": "******************************"/g'
128+
echo "----------------------------------------------------------------------------------------------"
129+
130+
131+
## send begin message to slack
132+
COMMIT_SHORT_ID=$(git rev-parse --short HEAD)
133+
COMMIT_ID=$(git rev-parse HEAD)
134+
COMMIT_URL="https://github.com/hyperhq/hypercli/commit/${COMMIT_ID}"
135+
136+
ATT_LINK="LINK: GITHUB(<${BRANCH_URL}|${BRANCH}> - <${COMMIT_URL}|${COMMIT_SHORT_ID}>) JOB(<${JOB_URL}|${BUILD_NUMBER}>)"
137+
ATTACHMENT="[{'text':'$ATT_LINK'}]"
138+
MESSAGE="[BEGIN] - $TITLE"
139+
slack.sh "$MESSAGE" "$ATTACHMENT"
140+
141+
TEST_HOME="/go/src/github.com/hyperhq/hypercli/integration-cli"
142+
cd /go/src/github.com/hyperhq/hypercli/integration-cli
143+
144+
cat <<EOF
145+
##########################################
146+
DOCKER_HOST: ${DOCKER_HOST}
147+
REGION: ${REGION}
148+
BRANCH: ${BRANCH}
149+
TEST_HOME: ${TEST_HOME}
150+
TEST_CASE_REG: ${TEST_CASE_REG}
151+
SLACK_TOKEN: ${SLACK_TOKEN:0:15}-xxxxxxxxxxx
152+
SLACK_CHANNEL_ID: ${SLACK_CHANNEL_ID}
153+
##########################################
154+
EOF
155+
156+
echo "========================================="
157+
env
158+
echo "========================================="
159+
160+
##############################################
161+
# start test
162+
##############################################
163+
## first test
164+
LOG="test1.log"
165+
echo "====================first test(${TEST_CASE_REG} ${TIMEOUT} ${LOG})===================="
166+
rm -rf $LOG >/dev/null 2>&1
167+
script -ec "go test -check.f '${TEST_CASE_REG}' -timeout ${TIMEOUT:-90m}" | tee $LOG
168+
ls -l $LOG
169+
echo =========================
170+
171+
FAIL_COUNT1=`grep "^FAIL:" ${LOG} | wc -l`
172+
TEST_RESULT1=`grep -E "^(OK:|OOPS:)" ${LOG}`
173+
DURATION1=`grep -P "\tgithub.heygears.com/hyperhq/hypercli/integration-cli\t" ${LOG} | awk '{print $NF}'`
174+
175+
echo "----------get failed test case(1st)----------"
176+
FAILED_FILE=failed1.log
177+
cat ${LOG} | grep "^FAIL:" > ${FAILED_FILE}
178+
FAILED_TEST_CASE1=`cat ${FAILED_FILE} | awk -F. '{if(NR==1){CASE=$NF}else{CASE=CASE"|"$NF}}END{printf CASE}'`
179+
echo "-----------------------------------------"
180+
echo "FAILED_TEST_CASE1: $FAILED_TEST_CASE1"
181+
182+
183+
RETEST_CASE=""
184+
RETEST_COUNT="0"
185+
while read LINE
186+
do
187+
if [ "${TARGET_REGION}" = "RegionOne" ]
188+
then
189+
HAS_VOL=`echo ${LINE} | grep -i Volume 2>/dev/null | wc -l`
190+
HAS_FIP=`echo ${LINE} | grep -i Fip 2>/dev/null | wc -l`
191+
if [ $HAS_VOL -ne 0 -o $HAS_FIP -ne 0 ]
192+
then
193+
echo "[SKIP FOR PKT]: ${LINE}"
194+
continue
195+
fi
196+
fi
197+
CASE_NAME=`echo ${LINE} | awk -F. '{printf $NF}'`
198+
if [ "${RETEST_CASE}" = "" ]
199+
then
200+
RETEST_CASE="$CASE_NAME"
201+
else
202+
RETEST_CASE="${RETEST_CASE}|$CASE_NAME"
203+
fi
204+
RETEST_COUNT=`expr $RETEST_COUNT + 1`
205+
done < ${FAILED_FILE}
206+
207+
echo "-----------------------------------------"
208+
echo "RETEST_CASE: ${RETEST_CASE}"
209+
echo "-----------------------------------------"
210+
211+
if [ $RETEST_COUNT -ne 0 ];then
212+
## second test
213+
LOG="test2.log"
214+
echo "====================second test(${RETEST_CASE} ${TIMEOUT} ${LOG})===================="
215+
rm -rf $LOG >/dev/null 2>&1
216+
script -ec "go test -check.f '${RETEST_CASE}' -timeout ${TIMEOUT:-90m}" | tee $LOG
217+
ls -l $LOG
218+
echo =========================
219+
220+
echo "----------get failed test case(2nd)----------"
221+
FAILED_FILE=failed2.log
222+
cat ${LOG} | grep "^FAIL:" > ${FAILED_FILE}
223+
FAILED_TEST_CASE2=`cat ${FAILED_FILE} | awk -F. '{if(NR==1){CASE=$NF}else{CASE=CASE"|"$NF}}END{printf CASE}'`
224+
echo "-----------------------------------------"
225+
echo "FAILED_TEST_CASE2: $FAILED_TEST_CASE2"
226+
227+
FAIL_COUNT2=`grep "^FAIL:" ${LOG} | wc -l`
228+
TEST_RESULT2=`grep -E "^(OK:|OOPS:)" ${LOG}`
229+
DURATION2=`grep -P "\tgithub.heygears.com/hyperhq/hypercli/integration-cli\t" ${LOG} | awk '{print $NF}'`
230+
231+
END_TIME=`date "+%Y/%m/%d %H:%M:%S"`
232+
if [ $FAIL_COUNT2 -ne 0 ];then
233+
icon=":scream:"
234+
if [ "${TEST_RESULT1}" = "" -o "${TEST_RESULT2}" = "" ];then
235+
icon=":exclamation:"
236+
fi
237+
ATTACHMENT="[{'text':'${ATT_LINK}'},{'text':'DURATION(1st): ${DURATION1}'},{'text':'TEST_RESULT(1st): ${TEST_RESULT1}'},{'text':'RE_TEST_CASE(2nd): ${RETEST_CASE}'},{'text':'DURATION(2nd): ${DURATION2}'},{'text':'TEST_RESULT(2nd): ${TEST_RESULT2}'},{'text':'FAILED_TEST_CASE(2nd): $FAILED_TEST_CASE2'}]"
238+
else
239+
icon=":smile:"
240+
ATTACHMENT="[{'text':'${ATT_LINK}'},{'text':'DURATION(1st): ${DURATION1}'},{'text':'TEST_RESULT(1st): ${TEST_RESULT1}'},{'text':'RE_TEST_CASE(2nd): ${RETEST_CASE}'},{'text':'DURATION(2nd): ${DURATION2}'},{'text':'TEST_RESULT(2nd): ${TEST_RESULT2}'}]"
241+
fi
242+
echo "ATTACHMENT(1):${ATTACHMENT}"
243+
MESSAGE="[END] - ${TITLE} :${icon} - ${END_TIME}"
244+
else
245+
END_TIME=`date "+%Y/%m/%d %H:%M:%S"`
246+
ATTACHMENT="[{'text':'${ATT_LINK}'},{'text':'DURATION: ${DURATION1}'},{'text':'TEST_RESULT: ${TEST_RESULT1}'}]"
247+
icon=":smile:"
248+
if [ "${TEST_RESULT1}" = "" ];then
249+
icon=":exclamation:"
250+
fi
251+
if [ $FAIL_COUNT1 -ne 0 ];then
252+
echo "first failed, second passed"
253+
icon=":scream:"
254+
ATTACHMENT="[{'text':'${ATT_LINK}'},{'text':'DURATION: ${DURATION1}'},{'text':'TEST_RESULT: ${TEST_RESULT1}'},{'text':'FAILED_TEST_CASE: $FAILED_TEST_CASE1'}]"
255+
fi
256+
echo "ATTACHMENT(2):${ATTACHMENT}"
257+
MESSAGE="[END] - ${TITLE} :${icon} - ${END_TIME}"
258+
fi
259+
260+
cat <<EOF
261+
--------------------------------------
262+
FAIL_COUNT1: ${FAIL_COUNT1}
263+
DURATION1: ${DURATION1}
264+
TEST_RESULT1: ${TEST_RESULT1}
265+
FAILED_TEST_CASE1: ${FAILED_TEST_CASE1}
266+
267+
RETEST_COUNT: ${RETEST_COUNT}
268+
RETEST_CASE: ${RETEST_CASE}
269+
270+
FAIL_COUNT2: ${FAIL_COUNT2}
271+
DURATION2: ${DURATION2}
272+
TEST_RESULT2: ${TEST_RESULT2}
273+
FAILED_TEST_CASE2: ${FAILED_TEST_CASE2}
274+
--------------------------------------
275+
MESSAGE: ${MESSAGE}
276+
ATTACHMENT: ${ATTACHMENT}
277+
EOF
278+
279+
slack.sh "${MESSAGE}" "${ATTACHMENT}"

0 commit comments

Comments
 (0)