|
| 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