Merge branch '16430-add-jenkins-integration-test-minikube'
[arvados-k8s.git] / tests / test_library.sh
1 #!/bin/bash
2
3 if [[ "$DEBUG" == "--debug" ]]; then
4   set -x
5 fi
6
7 testReady() {
8   loadK8sIP
9   set +e
10   ready=0
11   k8sReady=0
12   apiReady=0
13   keepProxyReady=0
14
15   # Is k8s ready?
16   if [[ -n "$K8S_IP" ]]; then
17     k8sReady=1
18   else
19     set -e
20     return
21   fi
22
23   # Is the Arvados API server ready?
24   curl --connect-timeout 1 -k -s -H "Authorization: Bearer $MANAGEMENTTOKEN" https://$K8S_IP:444/rails/_health/ping |grep -q OK
25   if [[ $? -eq 0 ]]; then
26     apiReady=1
27   else
28     set -e
29     return
30   fi
31
32   # Is the Arvados Keep proxy ready?
33   curl --connect-timeout 1 -k -s -H "Authorization: Bearer $MANAGEMENTTOKEN" https://$K8S_IP:25107/_health/ping |grep -q OK
34   if [[ $? -eq 0 ]]; then
35     keepProxyReady=1
36   else
37     set -e
38     return
39   fi
40
41   # Everything is working
42   ready=1
43   set -e
44 }
45
46 stopCluster() {
47   echo "Stopping Arvados cluster..."
48   cd $MY_PATH/../charts/arvados
49   helm delete arvados
50
51   stopK8s
52 }
53
54 kubectlStatus() {
55   echo "Current k8s status:"
56   echo "services:"
57   kubectl get svc
58   echo "pods:"
59   kubectl get pods
60   echo
61 }
62
63 startCluster() {
64   startK8s
65
66   echo "Starting Arvados cluster..."
67   cd $MY_PATH/../charts/arvados
68   ./cert-gen.sh "$K8S_IP"
69
70   helm install arvados . --set externalIP="$K8S_IP"
71
72   if [[ "$CLUSTERTYPE" == "minikube" ]]; then
73     ./minikube-external-ip.sh
74   fi
75
76   awaitHealthOK
77 }
78
79 awaitHealthOK() {
80   echo "Waiting for cluster health OK..."
81   # Wait for up to 15 minutes for a healthy Arvados cluster.
82   counter=450
83   while [[ $ready -ne 1 ]] && [[ $counter -gt 0 ]]; do
84     testReady
85     kubectlStatus
86     sleep 2
87     (( counter = counter-1 )) || true
88   done
89   if [[ $ready -ne 1 ]]; then
90     echo "Timed out waiting for cluster health OK. Shutting down cluster..."
91     stopCluster
92     exit 1
93   fi
94 }
95
96 run() {
97   MY_PATH=`pwd`
98   MANAGEMENTTOKEN=`cat $MY_PATH/../charts/arvados/config/config.yml |grep Management |cut -f2 -d ':' |sed -e 's/ //'`
99   date
100   testReady
101   if [[ $ready -ne 1 ]]; then
102     startCluster
103   else
104     if [[ "$CLUSTERTYPE" == "GKE" ]]; then
105       # create the necessary kubectl context for the running cluster
106       gcloud container clusters get-credentials arvados --zone us-central1-a
107       kubectlStatus
108     fi
109   fi
110
111   date
112   echo "cluster health OK"
113
114   export ARVADOS_API_HOST=$K8S_IP:444
115   export ARVADOS_API_HOST_INSECURE=true
116   export ARVADOS_API_TOKEN=`grep superUserSecret $MY_PATH/../charts/arvados/values.yaml |cut -f2 -d\"`
117
118   cd $MY_PATH/cwl-diagnostics-hasher/
119
120   echo "uploading requirements for CWL hasher"
121   arv-put 4xphq-8i9sb-fmwod1qn74cemdp.log.txt  --no-resume
122   echo "uploading Arvados jobs image for CWL hasher"
123   # just in case, clear the arv-put cache first, arv-keepdocker doesn't pass through --no-resume
124   rm -rf ~/.cache/arvados/arv-put
125   echo "running CWL hasher"
126   cwl-runner hasher-workflow.cwl hasher-workflow-job.yml
127   if [[ $? -eq 0 ]]; then
128     echo "Success!"
129   else
130     echo "Test failed!"
131   fi
132
133   stopCluster
134 }