1#!/bin/bash
2#better run in an empty folder
3
4GET=mega-get
5RM=mega-rm
6CD=mega-cd
7LCD=mega-lcd
8EXPORT=mega-export
9MKDIR=mega-mkdir
10IMPORT=mega-import
11ABSPWD=`pwd`
12
13if [ "x$VERBOSE" == "x" ]; then
14VERBOSE=0
15fi
16
17if [ "x$MEGACMDSHELL" != "x" ]; then
18GET="executeinMEGASHELL get"
19CMDSHELL=1
20fi
21
22
23function executeinMEGASHELL()
24{
25	command=$1
26	shift;
27	echo lcd "$PWD" > /tmp/shellin
28	echo $command "$@" >> /tmp/shellin
29	#~ echo $command "$@" > /tmp/shellin
30
31	$MEGACMDSHELL < /tmp/shellin  | sed "s#^.*\[K##g" | grep $MEGA_EMAIL -A 1000 | grep -v $MEGA_EMAIL
32}
33
34
35function clean_all() {
36	if [[ $(mega-whoami) != *"$MEGA_EMAIL" ]]; then
37	mega-logout || :
38	mega-login $MEGA_EMAIL $MEGA_PWD || exit -1
39	fi
40	$RM -rf "*" > /dev/null
41	$RM -rf "//bin/*" > /dev/null
42	if [ -e origin ]; then rm -r origin; fi
43	if [ -e megaDls ]; then rm -r megaDls; fi
44	if [ -e localDls ]; then rm -r localDls; fi
45}
46
47function clear_dls() {
48	rm -r megaDls/* 2>/dev/null
49	rm -r localDls/* 2>/dev/null
50}
51
52currentTest=1
53
54function compare_and_clear() {
55if [ "$VERBOSE" == "1" ]; then
56	echo "test $currentTest"
57	echo "megaDls:"
58	find megaDls
59	echo
60	echo "localDls:"
61	find localDls
62	echo
63fi
64
65if diff megaDls localDls 2>/dev/null >/dev/null; then
66	echo "test $currentTest succesful!"
67else
68	echo "test $currentTest failed!"
69	cd $ABSPWD
70	exit 1
71fi
72
73clear_dls
74currentTest=$((currentTest+1))
75$CD /
76}
77
78function check_failed_and_clear() {
79if [ "$?" != "0" ]; then
80	echo "test $currentTest succesful!"
81else
82	echo "test $currentTest failed!"
83	cd $ABSPWD
84	exit 1
85fi
86
87clear_dls
88currentTest=$((currentTest+1))
89$CD /
90}
91
92function initialize_contents() {
93
94if [[ $(mega-whoami) != *"$MEGA_EMAIL_AUX" ]]; then
95mega-logout || :
96mega-login $MEGA_EMAIL_AUX $MEGA_PWD_AUX || exit -1
97fi
98
99
100if [ "$(ls -A .)" ]; then
101	echo "initialization folder not empty!"
102	cd $ABSPWD
103	exit 1
104fi
105mkdir -p cloud0{1,2}/c0{1,2}s0{1,2}
106mkdir -p foreign/sub0{1,2}
107mkdir -p bin0{1,2}/c0{1,2}s0{1,2}
108for i in `find *`; do echo $i >  $i/fileat`basename $i`.txt; done
109
110mega-put foreign /
111mega-share foreign -a --with=$MEGA_EMAIL
112URIFOREIGNEXPORTEDFOLDER=`$EXPORT foreign/sub01 -a | awk '{print $NF}'`
113URIFOREIGNEXPORTEDFILE=`$EXPORT foreign/sub02/fileatsub02.txt -a | awk '{print $NF}'`
114
115mega-logout
116
117mega-login $MEGA_EMAIL $MEGA_PWD
118mega-ipc -a $MEGA_EMAIL_AUX >/dev/null
119
120mega-put cloud0* /
121mega-put bin0* //bin
122URIEXPORTEDFOLDER=`$EXPORT cloud01/c01s01 -a | awk '{print $NF}'`
123URIEXPORTEDFILE=`$EXPORT cloud02/fileatcloud02.txt -a | awk '{print $NF}'`
124
125}
126
127if [ "$MEGA_EMAIL" == "" ] || [ "$MEGA_PWD" == "" ] || [ "$MEGA_EMAIL_AUX" == "" ] || [ "$MEGA_PWD_AUX" == "" ]; then
128	echo "You must define variables MEGA_EMAIL MEGA_PWD MEGA_EMAIL_AUX MEGA_PWD_AUX. WARNING: Use an empty account for $MEGA_EMAIL"
129	cd $ABSPWD
130	exit 1
131fi
132
133#INITIALIZATION
134clean_all
135mkdir origin
136pushd origin > /dev/null
137initialize_contents
138popd > /dev/null
139
140mkdir -p megaDls
141mkdir -p localDls
142
143ABSMEGADLFOLDER=$PWD/megaDls
144
145URIEXPORTEDFOLDER=`mega-export cloud01/c01s01 -a | awk '{print $NF}'`
146URIEXPORTEDFILE=`mega-export cloud02/fileatcloud02.txt -a | awk '{print $NF}'`
147
148clear_dls
149
150#Test 01
151$GET /cloud01/fileatcloud01.txt $ABSMEGADLFOLDER/
152cp origin/cloud01/fileatcloud01.txt localDls/
153compare_and_clear
154
155#Test 02
156$GET //bin/bin01/fileatbin01.txt $ABSMEGADLFOLDER
157cp origin/bin01/fileatbin01.txt localDls/
158compare_and_clear
159
160#Test 03
161$GET //bin/bin01/fileatbin01.txt $ABSMEGADLFOLDER/
162cp origin/bin01/fileatbin01.txt localDls/
163compare_and_clear
164
165#Test 04
166$GET $MEGA_EMAIL_AUX:foreign/fileatforeign.txt $ABSMEGADLFOLDER/
167cp origin/foreign/fileatforeign.txt localDls/
168compare_and_clear
169
170#Test 05
171$GET $MEGA_EMAIL_AUX:foreign/fileatforeign.txt $ABSMEGADLFOLDER/
172cp origin/foreign/fileatforeign.txt localDls/
173compare_and_clear
174
175#Test 06
176$CD cloud01
177$GET "*.txt" $ABSMEGADLFOLDER
178cp origin/cloud01/*.txt localDls/
179compare_and_clear
180
181#Test 07
182$CD //bin/bin01
183$GET "*.txt" $ABSMEGADLFOLDER
184cp origin/bin01/*.txt localDls/
185compare_and_clear
186
187#Test 08
188$CD $MEGA_EMAIL_AUX:foreign
189$GET "*.txt" $ABSMEGADLFOLDER
190cp origin/foreign/*.txt localDls/
191compare_and_clear
192
193#Test 09
194$GET cloud01/c01s01 $ABSMEGADLFOLDER
195cp -r origin/cloud01/c01s01 localDls/
196compare_and_clear
197
198#Test 10
199$GET cloud01/c01s01 $ABSMEGADLFOLDER/
200cp -r origin/cloud01/c01s01 localDls/
201compare_and_clear
202
203#Test 11
204$GET cloud01/c01s01 $ABSMEGADLFOLDER -m
205rsync -r origin/cloud01/c01s01/ localDls/
206compare_and_clear
207
208#Test 12
209$GET cloud01/c01s01 $ABSMEGADLFOLDER/ -m
210rsync -r origin/cloud01/c01s01/ localDls/
211compare_and_clear
212
213#Test 13
214$GET "$URIEXPORTEDFOLDER" $ABSMEGADLFOLDER
215cp -r origin/cloud01/c01s01 localDls/
216compare_and_clear
217
218#Test 14
219$GET "$URIEXPORTEDFILE" $ABSMEGADLFOLDER
220cp origin/cloud02/fileatcloud02.txt localDls/
221compare_and_clear
222
223#Test 15
224$GET "$URIEXPORTEDFOLDER" $ABSMEGADLFOLDER -m
225rsync -r  origin/cloud01/c01s01/ localDls/
226compare_and_clear
227
228#Test 16
229$CD /cloud01/c01s01
230$GET . $ABSMEGADLFOLDER
231cp -r origin/cloud01/c01s01 localDls/
232compare_and_clear
233
234#Test 17
235$CD /cloud01/c01s01
236$GET . $ABSMEGADLFOLDER -m
237rsync -r origin/cloud01/c01s01/ localDls/
238compare_and_clear
239
240#Test 18
241$CD /cloud01/c01s01
242$GET ./ $ABSMEGADLFOLDER
243cp -r origin/cloud01/c01s01 localDls/
244compare_and_clear
245
246#Test 19
247$CD /cloud01/c01s01
248$GET ./ $ABSMEGADLFOLDER -m
249rsync -r origin/cloud01/c01s01/ localDls/
250compare_and_clear
251
252#Test 20
253$CD /cloud01/c01s01
254$GET .. $ABSMEGADLFOLDER -m
255rsync -r origin/cloud01/ localDls/
256compare_and_clear
257
258#Test 21
259$CD /cloud01/c01s01
260$GET ../ $ABSMEGADLFOLDER
261cp -r origin/cloud01 localDls/
262compare_and_clear
263
264#Test 22
265echo "existing" > $ABSMEGADLFOLDER/existing
266$GET /cloud01/fileatcloud01.txt $ABSMEGADLFOLDER/existing
267cp origin/cloud01/fileatcloud01.txt "localDls/existing (1)"
268echo "existing" > localDls/existing
269compare_and_clear
270
271#Test 23
272echo "existing" > megaDls/existing
273$GET /cloud01/fileatcloud01.txt megaDls/existing
274cp origin/cloud01/fileatcloud01.txt "localDls/existing (1)"
275echo "existing" > localDls/existing
276compare_and_clear
277
278#Test 24
279$GET cloud01/c01s01 megaDls
280cp -r origin/cloud01/c01s01 localDls/
281compare_and_clear
282
283#Test 25
284$GET cloud01/fileatcloud01.txt megaDls
285cp -r origin/cloud01/fileatcloud01.txt localDls/
286compare_and_clear
287
288if [ "x$CMDSHELL" != "x1" ]; then #TODO: currently there is no way to know last CMSHELL status code
289	#Test 26
290	$GET cloud01/fileatcloud01.txt /no/where > /dev/null
291	check_failed_and_clear
292
293	#Test 27
294	$GET /cloud01/cloud01/fileatcloud01.txt /no/where > /dev/null
295	check_failed_and_clear
296fi
297
298currentTest=28
299
300#Test 28
301$GET /cloud01/fileatcloud01.txt $ABSMEGADLFOLDER/newfile
302cp origin/cloud01/fileatcloud01.txt localDls/newfile
303compare_and_clear
304
305#Test 29
306pushd $ABSMEGADLFOLDER > /dev/null
307$GET /cloud01/fileatcloud01.txt .
308popd > /dev/null
309cp origin/cloud01/fileatcloud01.txt localDls/
310compare_and_clear
311
312#Test 30
313pushd $ABSMEGADLFOLDER > /dev/null
314$GET /cloud01/fileatcloud01.txt ./
315popd > /dev/null
316cp origin/cloud01/fileatcloud01.txt localDls/
317compare_and_clear
318
319#Test 31
320mkdir $ABSMEGADLFOLDER/newfol
321pushd $ABSMEGADLFOLDER/newfol > /dev/null
322$GET /cloud01/fileatcloud01.txt ..
323popd > /dev/null
324mkdir localDls/newfol
325cp origin/cloud01/fileatcloud01.txt localDls/
326compare_and_clear
327
328#Test 32
329mkdir $ABSMEGADLFOLDER/newfol
330pushd $ABSMEGADLFOLDER/newfol > /dev/null
331$GET /cloud01/fileatcloud01.txt ../
332popd > /dev/null
333mkdir localDls/newfol
334cp origin/cloud01/fileatcloud01.txt localDls/
335compare_and_clear
336
337if [ "x$CMDSHELL" != "x1" ]; then #TODO: currently there is no way to know last CMSHELL status code
338#Test 33
339$GET path/to/nowhere $ABSMEGADLFOLDER > /dev/null
340check_failed_and_clear
341
342#Test 34
343$GET /path/to/nowhere $ABSMEGADLFOLDER > /dev/null
344check_failed_and_clear
345fi
346
347currentTest=35
348
349#Test 35
350pushd $ABSMEGADLFOLDER > /dev/null
351$GET /cloud01/fileatcloud01.txt
352popd > /dev/null
353cp origin/cloud01/fileatcloud01.txt localDls/
354compare_and_clear
355
356currentTest=36
357
358#Test 36 # imported stuff (to test import folder)
359$RM -rf /imported 2>&1 >/dev/null || :
360$MKDIR -p /imported
361$IMPORT $URIFOREIGNEXPORTEDFOLDER /imported > /dev/null
362$GET /imported/* $ABSMEGADLFOLDER
363cp -r origin/foreign/sub01 localDls/
364compare_and_clear
365
366#Test 37 # imported stuff (to test import file)
367$RM -rf /imported 2>&1 >/dev/null || :
368$MKDIR -p /imported
369$IMPORT $URIFOREIGNEXPORTEDFILE /imported/ > /dev/null
370$GET /imported/fileatsub02.txt $ABSMEGADLFOLDER
371cp origin/foreign/sub02/fileatsub02.txt localDls/
372compare_and_clear
373
374# Clean all
375clean_all
376