add new multi node test script and deployment ssh keys
[domino.git] / tests / run_multinode.sh
1 #!/bin/bash -ex
2
3 #Copyright 2016 Open Platform for NFV Project, Inc. and its contributors
4 #   Licensed under the Apache License, Version 2.0 (the "License");
5 #   you may not use this file except in compliance with the License.
6 #   You may obtain a copy of the License at
7 #       http://www.apache.org/licenses/LICENSE-2.0
8 #   Unless required by applicable law or agreed to in writing, software
9 #   distributed under the License is distributed on an "AS IS" BASIS,
10 #   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
11 #   See the License for the specific language governing permissions and
12 #   limitations under the License.
13
14 USERNAME=ubuntu
15 SSH_KEY_PATH=/home/opnfv/.ssh/id_rsa
16 DOMINO_CODE_PATH=/home/opnfv/repos/domino
17 CONTROLLER_NODE_1=192.168.2.165
18 CONTROLLER_NODE_2=192.168.2.180
19 CONTROLLER_NODE_3=192.168.2.181
20
21 CLIENT1_PORT=9091
22 CLIENT2_PORT=9092
23 CLIENT1_CLIPORT=9100
24 CLIENT2_CLIPORT=9200
25 LOGLEVEL=DEBUG
26
27 toscafile_test1=./tosca-templates/tosca_helloworld_nfv.yaml
28 test1_reffile1=./tests/refdata/test1_client1.ref
29 test1_reffile2=./tests/refdata/test1_client2.ref
30 client1_log=./tests/logdata/client1.log
31 client2_log=./tests/logdata/client2.log
32 server_log=./tests/logdata/server.log
33
34 install_dependency() {
35   ssh -i "$SSH_KEY_PATH" "$USERNAME"@"$CONTROLLER_NODE_1" 'sudo pip install tosca-parser'
36   ssh -i "$SSH_KEY_PATH" "$USERNAME"@"$CONTROLLER_NODE_1" 'sudo pip install heat-translator'
37   ssh -i "$SSH_KEY_PATH" "$USERNAME"@"$CONTROLLER_NODE_2" 'sudo pip install tosca-parser'
38   ssh -i "$SSH_KEY_PATH" "$USERNAME"@"$CONTROLLER_NODE_2" 'sudo pip install heat-translator'
39   ssh -i "$SSH_KEY_PATH" "$USERNAME"@"$CONTROLLER_NODE_3" 'sudo pip install tosca-parser'
40   ssh -i "$SSH_KEY_PATH" "$USERNAME"@"$CONTROLLER_NODE_3" 'sudo pip install heat-translator'
41 }
42
43 remove_codes(){
44   ssh -i "$SSH_KEY_PATH" "$USERNAME"@"$CONTROLLER_NODE_1" 'rm -rf domino'
45   ssh -i "$SSH_KEY_PATH" "$USERNAME"@"$CONTROLLER_NODE_2" 'rm -rf domino'
46   ssh -i "$SSH_KEY_PATH" "$USERNAME"@"$CONTROLLER_NODE_3" 'rm -rf domino'
47 }
48
49 deploy_codes(){
50   scp -i "$SSH_KEY_PATH" -r "$DOMINO_CODE_PATH" "$USERNAME"@"$CONTROLLER_NODE_1":.
51   scp -i "$SSH_KEY_PATH" -r "$DOMINO_CODE_PATH" "$USERNAME"@"$CONTROLLER_NODE_2":.
52   scp -i "$SSH_KEY_PATH" -r "$DOMINO_CODE_PATH" "$USERNAME"@"$CONTROLLER_NODE_3":.
53 }
54
55 start_server() {
56   ssh -i "$SSH_KEY_PATH" "$USERNAME"@"$CONTROLLER_NODE_1" 'pgrep -f "python DominoServer.py"' && return 0
57   ssh -f -i "$SSH_KEY_PATH" "$USERNAME"@"$CONTROLLER_NODE_1" "sh -c 'cd ./domino; nohup python DominoServer.py --log "$LOGLEVEL" > "$server_log" > /dev/null 2>&1 &'"
58 }
59
60 start_client1() {
61   ssh -i "$SSH_KEY_PATH" "$USERNAME"@"$CONTROLLER_NODE_2" 'pgrep -f "python DominoClient.py"' && return 0
62   ssh -f -i "$SSH_KEY_PATH" "$USERNAME"@"$CONTROLLER_NODE_2" "sh -c 'cd ./domino; nohup python DominoClient.py -p $CLIENT1_PORT --cliport $CLIENT1_CLIPORT --ipaddr $CONTROLLER_NODE_1 --log "$LOGLEVEL" > "$client1_log" > /dev/null 2>&1 &'"
63 }
64
65 start_client2() {
66   ssh -i "$SSH_KEY_PATH" "$USERNAME"@"$CONTROLLER_NODE_3" 'pgrep -f "python DominoClient.py"' && return 0
67   ssh -f -i "$SSH_KEY_PATH" "$USERNAME"@"$CONTROLLER_NODE_3" "sh -c 'cd ./domino; nohup python DominoClient.py -p $CLIENT2_PORT --cliport $CLIENT2_CLIPORT --ipaddr $CONTROLLER_NODE_1 --log "$LOGLEVEL" > "$client2_log" > /dev/null 2>&1 &'"
68 }
69
70 stop_server() {
71   ssh -i "$SSH_KEY_PATH" "$USERNAME"@"$CONTROLLER_NODE_1" 'pgrep -f "python DominoServer.py"' || return 0
72   ssh -i "$SSH_KEY_PATH" "$USERNAME"@"$CONTROLLER_NODE_1" 'kill $(pgrep -f "python DominoServer.py")'
73 }
74
75 stop_client1() {
76   ssh -i "$SSH_KEY_PATH" "$USERNAME"@"$CONTROLLER_NODE_2" 'pgrep -f "python DominoClient.py"' || return 0
77   ssh -i "$SSH_KEY_PATH" "$USERNAME"@"$CONTROLLER_NODE_2" 'kill $(pgrep -f "python DominoClient.py")'
78 }
79
80 stop_client2() {
81   ssh -i "$SSH_KEY_PATH" "$USERNAME"@"$CONTROLLER_NODE_3" 'pgrep -f "python DominoClient.py"' || return 0
82   ssh -i "$SSH_KEY_PATH" "$USERNAME"@"$CONTROLLER_NODE_3" 'kill $(pgrep -f "python DominoClient.py")'
83 }
84
85 cleanup() {
86   set +e
87   echo "cleanup..."
88   
89   echo "Stopping Domino Clients..."
90   stop_client1
91   stop_client2
92  
93   echo "Stopping Domino Server..."
94   stop_server
95   sleep 1
96 }
97
98 prepare_testenv() {
99   install_dependency
100   remove_codes
101   deploy_codes
102 }
103
104 launch_domino() {
105   echo "Launching Domino Server..."
106   start_server
107   sleep 1
108   echo "Launching Domino Client 1..."
109   start_client1
110   sleep 1
111   echo "Launching Domino Client 2..."
112   start_client2
113   sleep 1
114 }
115
116 echo "domino/tests/run_multinode.sh has been executed."
117
118 trap cleanup EXIT
119
120 cleanup
121 prepare_testenv
122 launch_domino
123
124
125 echo "Test Heartbeat"
126 ssh -i "$SSH_KEY_PATH" "$USERNAME"@"$CONTROLLER_NODE_1" \ 
127         'python domino-cli.py $CLIENT1_CLIPORT heartbeat'
128 sleep 1
129
130 echo "Test Subscribe API"
131 ssh -i "$SSH_KEY_PATH" "$USERNAME"@"$CONTROLLER_NODE_1" \
132         'python domino-cli.py $CLIENT1_CLIPORT subscribe -t hot \
133         -l tosca.policies.Placement:properties:region:nova-1'  
134 sleep 1
135 ssh -i "$SSH_KEY_PATH" "$USERNAME"@"$CONTROLLER_NODE_1" \
136         'python domino-cli.py $CLIENT1_CLIPORT subscribe -t dummy1,dummy2 --top OVERWRITE'
137 sleep 1
138 ssh -i "$SSH_KEY_PATH" "$USERNAME"@"$CONTROLLER_NODE_1" \
139         'python domino-cli.py $CLIENT1_CLIPORT subscribe -t dummy1,dummy2 --top DELETE'
140 sleep 1
141 ssh -i "$SSH_KEY_PATH" "$USERNAME"@"$CONTROLLER_NODE_1" \
142         'python domino-cli.py $CLIENT1_CLIPORT subscribe \
143          -l tosca.policies.Placement:properties:region:nova-2'
144 sleep 1
145 ssh -i "$SSH_KEY_PATH" "$USERNAME"@"$CONTROLLER_NODE_1" \
146         'python domino-cli.py $CLIENT1_CLIPORT subscribe \
147          -l tosca.policies.Placement:properties:region:nova-3 \
148          --lop OVERWRITE'
149 sleep 1
150 ssh -i "$SSH_KEY_PATH" "$USERNAME"@"$CONTROLLER_NODE_1" \
151         'python domino-cli.py $CLIENT1_CLIPORT subscribe \
152          -l tosca.policies.Placement:properties:region:nova-3 \
153          --lop DELETE'
154 sleep 1
155
156 echo "Test Publish API"
157 ssh -i "$SSH_KEY_PATH" "$USERNAME"@"$CONTROLLER_NODE_1" \
158         'python domino-cli.py $CLIENT1_CLIPORT publish -t "$toscafile_test1"' 
159
160 sleep 1
161 ssh -i "$SSH_KEY_PATH" "$USERNAME"@"$CONTROLLER_NODE_1" \
162         'python domino-cli.py $CLIENT1_CLIPORT subscribe \
163          -l tosca.policies.Placement.Geolocation:properties:region:us-west-1'
164 sleep 1
165 ssh -i "$SSH_KEY_PATH" "$USERNAME"@"$CONTROLLER_NODE_2" \
166         'python domino-cli.py $CLIENT2_CLIPORT publish -t "$toscafile_test1"'
167
168 echo "done"
169