- base64 decode the old initscript
[plcapi.git] / peers-test.mk
1 ### -*-Makefile-*-
2 CHROOT=/plc/root
3 PORT=5432
4 SITEDIR=/etc/planetlab/configs
5 SITE=site.xml
6 RPM=$(shell ls -rt /root/myplc*rpm | tail -1)
7 APIDIR=/usr/share/plc_api
8
9 PLC1=planetlab-devbox.inria.fr
10 PLC2=lurch.cs.princeton.edu
11 PLC1SSH=root@$(PLC1)
12 PLC2SSH=root@$(PLC2)
13
14 PY=python -u
15
16 all:help
17
18 ####################
19 PUSH=pclean pplc1 papi1 pplc2 papi2
20 #EXTRA-PUSHS= ./Shell.py ./TestPeers.py ./planetlab4.sql ./dummy-config ./peers-test.mk ./person-password.sh
21 EXTRA-PUSHS=  ./TestPeers.py ./planetlab4.sql ./dummy-config ./peers-test.mk ./person-password.sh ./plcsh
22
23 push:$(PUSH)
24
25 papi: pclean papi1 papi2
26 pplc: pclean pplc1 pplc2
27
28 pclean:
29         -find . '(' -name '*.pyc' -o -name '*~' ')' | xargs rm
30 papi1:
31         rsync -a -v -C ./ root@$(PLC1):new_plc_api/
32 pplc1:
33         rsync -a -v -C $(EXTRA-PUSHS) ./PLC root@$(PLC1):$(CHROOT)$(APIDIR)/
34 papi2:
35         rsync -a -v -C ./ root@$(PLC2):new_plc_api/
36 pplc2:
37         rsync -a -v -C $(EXTRA-PUSHS) ./PLC root@$(PLC2):$(CHROOT)$(APIDIR)/
38
39 ####################
40 DB=install-schema stop-clients db-drop restart-full-db
41 DBRESTORE= stop-clients db-drop restart-db db-restore restart-http
42 WEB=install-api restart
43
44 db: $(DB)
45         @date
46
47 dbrestore: $(DBRESTORE)
48         @echo Restored $(DBDUMPFILE) on $(shell hostname) at $(shell date)
49
50 DBDUMPFILE=planetlab4.dump
51
52 db-dump:
53         chroot $(CHROOT) pg_dump -c -U pgsqluser planetlab4 > $(DBDUMPFILE)
54
55 web: $(WEB)
56
57 install-schema:
58         @echo 'installing schema'
59         @rsync -a -v planetlab4.sql $(CHROOT)$(APIDIR)/planetlab4.sql
60
61 install-api:
62         find . -name '*.py' | xargs tar cf - | ( cd $(CHROOT)$(APIDIR) ; tar xf -)
63         -find $(CHROOT)$(APIDIR) -name '*pyc' | xargs rm
64
65 stop-clients:
66         @echo 'pkilling psql'
67         @-pkill psql
68         @echo 'pkilling Shell.py'
69         @-pkill Shell.py
70         @echo stopping httpd
71         service plc stop httpd
72
73 db-drop:
74         echo 'dropping db'
75         chroot $(CHROOT) psql -U postgres --port $(PORT) template1 -c 'drop database planetlab4'
76
77 db-restore: 
78         echo Restoring $(DBDUMPFILE)
79         rm -f $(DBDUMPFILE).rest-log  $(DBDUMPFILE).rest-err
80         chroot $(CHROOT) psql -U postgres --port $(PORT) -d planetlab4 < $(DBDUMPFILE) > $(DBDUMPFILE).rest-log 2> $(DBDUMPFILE).rest-err
81         ls -l $(DBDUMPFILE).rest-log  $(DBDUMPFILE).rest-err
82
83 restart-db:
84         @echo 'restarting db only'
85         service plc stop postgresql
86         service plc start postgresql
87
88 restart-full-db:
89         @echo 'restarting full db'
90         service plc stop db postgresql httpd
91         service plc start httpd postgresql db
92
93 restart:
94         @echo 'Restarting PLC'
95         @chroot $(CHROOT) service plc restart
96
97 restart-http:
98         @echo 'Restarting httpd'
99         service plc stop httpd
100         service plc start httpd
101
102 ####################
103 PEERS= peer-gpg peer-push-gpg peer-push-cacert
104
105 peers: $(PEERS)
106 peer-gpg: peer-gpg-1 peer-gpg-2
107 peer-gpg-1:
108         ssh $(PLC1SSH) "gpg --homedir=/etc/planetlab --export --armor > /etc/planetlab/gpg_plc1.pub"
109 peer-gpg-2:
110         ssh $(PLC2SSH) "gpg --homedir=/etc/planetlab --export --armor > /etc/planetlab/gpg_plc2.pub"
111
112 # directly scp'ing from one url to the other does not work, looks like
113 # first host tries to connect the second one
114 peer-push-gpg: peer-push-gpg-1 peer-push-gpg-2
115 peer-push-gpg-1:
116         scp $(PLC1SSH):/etc/planetlab/gpg_plc1.pub ./
117         scp ./gpg_plc1.pub $(PLC2SSH):/etc/planetlab/
118 peer-push-gpg-2:
119         scp $(PLC2SSH):/etc/planetlab/gpg_plc2.pub ./
120         scp ./gpg_plc2.pub $(PLC1SSH):/etc/planetlab/
121
122 peer-push-cacert: peer-push-cacert-1 peer-push-cacert-2
123 peer-push-cacert-1:
124         scp $(PLC1SSH):/etc/planetlab/api_ca_ssl.crt ./api_plc1.crt
125         scp ./api_plc1.crt $(PLC2SSH):/etc/planetlab/
126 peer-push-cacert-2:
127         scp $(PLC2SSH):/etc/planetlab/api_ca_ssl.crt ./api_plc2.crt
128         scp ./api_plc2.crt $(PLC1SSH):/etc/planetlab/
129
130 HELP += peers-clean
131 peers-clean: peers-clean-1 peers-clean-2
132 peers-clean-1:
133         ssh $(PLC1SSH) "rm -f /etc/planetlab/*plc[12]*"
134 peers-clean-2:
135         ssh $(PLC1SSH) "rm -f /etc/planetlab/*plc[12]*"
136
137 ####################
138 UPGRADE=stop-clients down clean-plc up reconfig restart
139
140 upgrade: $(UPGRADE)
141
142 rpm:
143         @echo latest rpm is $(RPM)
144
145 down:
146         cp $(SITEDIR)/$(SITE) .
147         rpm -e myplc
148 clean-plc:
149         rm -rf /plc
150 up:
151         rpm -i $(RPM)
152
153 reconfig:
154         service plc mount
155         mkdir -p $(SITEDIR)
156         cp $(SITE) $(SITEDIR)
157         (echo w; echo q) | chroot $(CHROOT) plc-config-tty
158
159 ####################
160 RUN=api sql log
161 api:
162         chroot $(CHROOT) /usr/bin/plcsh
163
164 sql:
165         chroot $(CHROOT) psql -U pgsqluser planetlab4
166
167 log:
168         emacs /plc/data/var/log/httpd/error_log /plc/data/var/log/boot.log
169
170 ####################
171 # remove time/delay dependent output
172 normalize       = egrep -v "'expires':|^+++.*ellapsed"
173
174 TEST=run diff ckp
175 run: run-en 
176 diff: diff-en
177 ckp: ckp-en
178
179 %.nout: %.out
180         $(normalize) $*.out > $@
181 %.nref: %.ref
182         $(normalize) $*.ref > $@
183
184 # variant runs
185 VARIANT-TESTS :=
186
187 # run end of test (after it was populated) with mini size
188 VARIANT-TESTS += run-em
189 run-em:
190         $(PY) ./TestPeers.py -e -m > testpeers-em.out 2>&1
191 VARIANT-TESTS += run-en
192 run-en:
193         $(PY) ./TestPeers.py -e > testpeers-en.out 2>&1
194 # big size
195 VARIANT-TESTS += run-eb
196 run-eb:
197         $(PY) ./TestPeers.py -e -b > testpeers-eb.out 2>&1
198 # huge size
199 VARIANT-TESTS += run-eh
200 run-eh:
201         $(PY) ./TestPeers.py -e -H > testpeers-eh.out 2>&1
202
203 # normal size - performs diff and checkpoint (adopt result)
204 VARIANT-TESTS += diff-en
205 diff-en: testpeers-en.nref testpeers-en.nout 
206         diff testpeers-en.nref testpeers-en.nout
207 VARIANT-TESTS += ckp-en
208 ckp-en:
209         cp testpeers-en.out testpeers-en.ref
210         rm -f testpeers-en.n???
211
212 VARIANT-TESTS += diff-eb
213 diff-eb: testpeers-eb.nref testpeers-eb.nout 
214         diff testpeers-eb.nref testpeers-eb.nout
215 VARIANT-TESTS += ckp-eb
216 ckp-eb:
217         cp testpeers-eb.out testpeers-eb.ref
218         rm -f testpeers-eb.n???
219
220 VARIANT-TESTS += diff-eh
221 diff-eh: testpeers-eh.nref testpeers-eh.nout 
222         diff testpeers-eh.nref testpeers-eh.nout
223 VARIANT-TESTS += ckp-eh
224 ckp-eh:
225         cp testpeers-eh.out testpeers-eh.ref
226         rm -f testpeers-eh.n???
227
228 ### locally populate, various sizes
229 # need to run in installed plc for gaining direct access (psycopg2 broken)
230 VARIANT-TESTS += run-lpn-1
231 run-lpm-1:
232         chroot $(CHROOT) make -C $(APIDIR) -f peers-test.mk chroot-run-lpm-1
233 chroot-run-lpm-1:
234         $(PY) TestPeers.py -m -p -l 1 > testpeers-pm-1.out
235 VARIANT-TESTS += run-lpm-2
236 run-lpm-2:
237         chroot $(CHROOT) make -C $(APIDIR) -f peers-test.mk chroot-run-lpm-2
238 chroot-run-lpm-2:
239         $(PY) TestPeers.py -m -p -l 2 > testpeers-pm-2.out
240
241 VARIANT-TESTS += run-lpn-1
242 run-lpn-1:
243         chroot $(CHROOT) make -C $(APIDIR) -f peers-test.mk chroot-run-lpn-1
244 chroot-run-lpn-1:
245         $(PY) TestPeers.py -p -l 1 > testpeers-pn-1.out
246 VARIANT-TESTS += run-lpn-2
247 run-lpn-2:
248         chroot $(CHROOT) make -C $(APIDIR) -f peers-test.mk chroot-run-lpn-2
249 chroot-run-lpn-2:
250         $(PY) TestPeers.py -p -l 2 > testpeers-pn-2.out
251
252 VARIANT-TESTS += run-lpb-1
253 run-lpb-1:
254         chroot $(CHROOT) make -C $(APIDIR) -f peers-test.mk chroot-run-lpb-1
255 chroot-run-lpb-1:
256         $(PY) TestPeers.py -b -p -l 1 > testpeers-pb-1.out
257 VARIANT-TESTS += run-lpb-2
258 run-lpb-2:
259         chroot $(CHROOT) make -C $(APIDIR) -f peers-test.mk chroot-run-lpb-2
260 chroot-run-lpb-2:
261         $(PY) TestPeers.py -b -p -l 2 > testpeers-pb-2.out
262
263 VARIANT-TESTS += run-lph-1
264 run-lph-1:
265         chroot $(CHROOT) make -C $(APIDIR) -f peers-test.mk chroot-run-lph-1
266 chroot-run-lph-1:
267         $(PY) TestPeers.py -H -p -l 1 > testpeers-ph-1.out
268 VARIANT-TESTS += run-lph-1
269 run-lph-2:
270         chroot $(CHROOT) make -C $(APIDIR) -f peers-test.mk chroot-run-lph-2
271 chroot-run-lph-2:
272         $(PY) TestPeers.py -H -p -l 2 > testpeers-ph-2.out
273
274
275 ### old-fashioned all-in-one tests - too slow
276 VARIANT-TESTS += run-n
277 run-n: 
278         $(PY) ./TestPeers.py > testpeers-n.out 2>&1
279 VARIANT-TESTS += run-m
280 run-m:
281         $(PY) ./TestPeers.py -m > testpeers-m.out 2>&1
282 VARIANT-TESTS += diff-m
283 diff-m: testpeers-m.nref testpeers-m.nout 
284         diff testpeers-m.nref testpeers-m.nout
285 VARIANT-TESTS += ckp-m
286 ckp-m:
287         cp testpeers-m.out testpeers-m.ref
288         rm -f testpeers-m.n???
289
290 ### populating only, but remotely - too slow too
291 VARIANT-TESTS += run-p run-pn
292 run-pn:
293         $(PY) ./TestPeers.py -p > testpeers-pn.out 2>&1
294 VARIANT-TESTS += run-pb
295 run-pb:
296         $(PY) ./TestPeers.py -p -b > testpeers-pb.out 2>&1
297 VARIANT-TESTS += run-ph
298 run-ph:
299         $(PY) ./TestPeers.py -p -H > testpeers-ph.out 2>&1
300
301 ##############################
302 VARIANTS-DB := 
303
304 DB1=populate-1.sql
305 DB2=populate-2.sql
306
307 VARIANT-DB += save-n
308 save-n: save-n-1 save-n-2
309 save-n-1: DB1=populate-n-1.sql
310 save-n-1: save1
311 save-n-2: DB2=populate-n-2.sql
312 save-n-2:save2
313
314 VARIANT-DB += save-b
315 save-b: save-b-1 save-b-2
316 save-b-1: DB1=populate-b-1.sql
317 save-b-1: save1
318 save-b-2: DB2=populate-b-2.sql
319 save-b-2:save2
320
321 VARIANT-DB += save-h
322 save-h: save-h-1 save-h-2
323 save-h-1: DB1=populate-h-1.sql
324 save-h-1: save1
325 save-h-2: DB2=populate-h-2.sql
326 save-h-2:save2
327
328 save1:
329         ssh $(PLC1SSH) make -C new_plc_api -f peers-test.mk DBDUMPFILE=$(DB1) db-dump
330         scp $(PLC1SSH):new_plc_api/$(DB1) .
331 save2:
332         ssh $(PLC2SSH) make -C new_plc_api -f peers-test.mk DBDUMPFILE=$(DB2) db-dump
333         scp $(PLC2SSH):new_plc_api/$(DB2) .
334
335 VARIANT-DB += restore-n
336 restore-n: restore-n-1 restore-n-2
337 restore-n-1: DB1=populate-n-1.sql
338 restore-n-1: restore1
339 restore-n-2: DB2=populate-n-2.sql
340 restore-n-2:restore2
341
342 VARIANT-DB += restore-b
343 restore-b: restore-b-1 restore-b-2
344 restore-b-1: DB1=populate-b-1.sql
345 restore-b-1: restore1
346 restore-b-2: DB2=populate-b-2.sql
347 restore-b-2:restore2
348
349 VARIANT-DB += restore-h
350 restore-h: restore-h-1 restore-h-2
351 restore-h-1: DB1=populate-h-1.sql
352 restore-h-1: restore1
353 restore-h-2: DB2=populate-h-2.sql
354 restore-h-2:restore2
355
356 restore1:
357         scp $(DB1) $(PLC1SSH):new_plc_api/
358         ssh $(PLC1SSH) make -C  new_plc_api -f peers-test.mk DBDUMPFILE=$(DB1) dbrestore
359 restore2:
360         scp $(DB2) $(PLC2SSH):new_plc_api/
361         ssh $(PLC2SSH) make -C  new_plc_api -f peers-test.mk DBDUMPFILE=$(DB2) dbrestore
362
363 #######
364 HELP=rpm db-dump restart-http
365
366 help:
367         @echo known targets:
368         @echo push: $(PUSH) 
369         @echo peers: $(PEERS)
370         @echo db: $(DB) 
371         @echo dbrestore: $(DBRESTORE) 
372         @echo run: $(RUN)
373         @echo web: $(WEB) 
374         @echo upgrade: $(UPGRADE)
375         @echo test: $(TEST)
376         @echo other test targets: $(VARIANT-TESTS)
377         @echo db targets: $(VARIANT-DB)
378         @echo OTHERS: $(HELP)
379