mirror of
https://github.com/meganz/MEGAcmd
synced 2025-08-22 09:57:09 +00:00
392 lines
13 KiB
Python
Executable File
392 lines
13 KiB
Python
Executable File
#!/usr/bin/python3
|
|
# -*- coding: utf-8 -*-
|
|
#better run in an empty folder
|
|
|
|
import os, shutil
|
|
import unittest
|
|
import xmlrunner
|
|
from megacmd_tests_common import *
|
|
|
|
def setUpModule():
|
|
global ABSPWD
|
|
global ABSMEGADLFOLDER
|
|
|
|
ABSPWD = os.getcwd()
|
|
ABSMEGADLFOLDER=ABSPWD+'/megaDls'
|
|
|
|
def clean_all():
|
|
if not clean_root_confirmed_by_user():
|
|
raise Exception("Tests need to be run with YES_I_KNOW_THIS_WILL_CLEAR_MY_MEGA_ACCOUNT=1")
|
|
|
|
if cmd_es(WHOAMI) != osvar("MEGA_EMAIL"):
|
|
cmd_ef(LOGOUT)
|
|
cmd_ef(LOGIN+" " +osvar("MEGA_EMAIL")+" "+osvar("MEGA_PWD"))
|
|
|
|
cmd_ec(RM+' -rf "/*"')
|
|
cmd_ec(RM+' -rf "*"')
|
|
cmd_ec(RM+' -rf "//bin/*"')
|
|
|
|
rmfolderifexisting("localUPs")
|
|
rmfolderifexisting("localtmp")
|
|
rmfolderifexisting("origin")
|
|
rmfolderifexisting("megaDls")
|
|
rmfolderifexisting("localDls")
|
|
|
|
rmfileifexisting("megafind.txt")
|
|
rmfileifexisting("localfind.txt")
|
|
|
|
def clear_dls():
|
|
rmcontentsifexisting("megaDls")
|
|
rmcontentsifexisting("localDls")
|
|
|
|
|
|
def safe_export(path):
|
|
command = EXPORT + ' ' + path
|
|
stdout, _, err = cmd_esc(command + ' -f -a')
|
|
|
|
# Run export without the `-a` option (also need to remove `-f` or it'll fail)
|
|
# Output is slightly different in this case:
|
|
# * Link is surrounded by parenthesis, so we need to remove the trailing ')'
|
|
# * If path is a folder it'll also return the list of nodes inside, so we
|
|
# need to keep only the first line
|
|
# Note: We can't rely on the exit code, since we can't get it reliably from shell commands
|
|
if b'already exported' in err:
|
|
stdout = cmd_ef(command).split(b'\n')[0].strip(b')')
|
|
if b'AuthKey=' in stdout:
|
|
# In this case the authkey is the last word,
|
|
# so the link is second from the right
|
|
return stdout.split(b' ')[-2]
|
|
else:
|
|
return stdout.split(b' ')[-1]
|
|
else:
|
|
return stdout.split(b' ')[-1]
|
|
|
|
|
|
def initialize_contents():
|
|
global URIFOREIGNEXPORTEDFOLDER
|
|
global URIFOREIGNEXPORTEDFILE
|
|
global URIEXPORTEDFOLDER
|
|
global URIEXPORTEDFILE
|
|
|
|
if cmd_es(WHOAMI) != osvar("MEGA_EMAIL_AUX"):
|
|
cmd_ef(LOGOUT)
|
|
cmd_ef(LOGIN+" " +osvar("MEGA_EMAIL_AUX")+" "+osvar("MEGA_PWD_AUX"))
|
|
|
|
if len(os.listdir(".")):
|
|
raise Exception("initialization folder not empty!")
|
|
|
|
#initialize localtmp estructure:
|
|
makedir('foreign')
|
|
|
|
for f in ['cloud0'+a for a in ['1','2']] + \
|
|
['bin0'+a for a in ['1','2']] + \
|
|
['cloud0'+a+'/c0'+b+'s0'+c for a in ['1','2'] for b in ['1','2'] for c in ['1','2']] + \
|
|
['foreign'] + \
|
|
['foreign/sub0'+a for a in ['1','2']] + \
|
|
['bin0'+a+'/c0'+b+'s0'+c for a in ['1','2'] for b in ['1','2'] for c in ['1','2']]:
|
|
makedir(f)
|
|
out(f,f+'/fileat'+f.split('/')[-1]+'.txt')
|
|
|
|
cmd_ef(PUT+' foreign /')
|
|
cmd_ef(SHARE+' foreign -a --with='+osvar("MEGA_EMAIL"))
|
|
|
|
URIFOREIGNEXPORTEDFOLDER=safe_export('foreign/sub01').decode()
|
|
URIFOREIGNEXPORTEDFILE=safe_export('foreign/sub02/fileatsub02.txt').decode()
|
|
|
|
print(f'URIFOREIGNEXPORTEDFOLDER={URIFOREIGNEXPORTEDFOLDER}')
|
|
print(f'URIFOREIGNEXPORTEDFILE={URIFOREIGNEXPORTEDFILE}')
|
|
|
|
cmd_ef(LOGOUT)
|
|
cmd_ef(LOGIN+" " +osvar("MEGA_EMAIL")+" "+osvar("MEGA_PWD"))
|
|
cmd_ec(IPC+" -a "+osvar("MEGA_EMAIL_AUX"))
|
|
|
|
cmd_ef(PUT+' foreign /')
|
|
|
|
#~ mega-put cloud0* /
|
|
cmd_ef(PUT+" cloud01 cloud02 /")
|
|
|
|
#~ mega-put bin0* //bin
|
|
cmd_ef(PUT+" bin01 bin02 //bin")
|
|
|
|
URIEXPORTEDFOLDER=safe_export('cloud01/c01s01').decode()
|
|
URIEXPORTEDFILE=safe_export('cloud02/fileatcloud02.txt').decode()
|
|
|
|
print(f'URIEXPORTEDFOLDER={URIEXPORTEDFOLDER}')
|
|
print(f'URIEXPORTEDFILE={URIEXPORTEDFILE}')
|
|
|
|
class MEGAcmdGetTest(unittest.TestCase):
|
|
|
|
@classmethod
|
|
def setUpClass(cls):
|
|
global URIEXPORTEDFOLDER
|
|
global URIEXPORTEDFILE
|
|
clean_all()
|
|
makedir('origin')
|
|
os.chdir('origin')
|
|
initialize_contents()
|
|
os.chdir(ABSPWD)
|
|
|
|
makedir('megaDls')
|
|
makedir('localDls')
|
|
|
|
URIEXPORTEDFOLDER=safe_export('cloud01/c01s01').decode()
|
|
URIEXPORTEDFILE=safe_export('cloud02/fileatcloud02.txt').decode()
|
|
|
|
clear_dls()
|
|
|
|
@classmethod
|
|
def tearDownClass(cls):
|
|
clean_all()
|
|
|
|
def tearDown(self):
|
|
clear_dls()
|
|
cmd_ef(CD+" /")
|
|
|
|
def check_failed(self, o, status):
|
|
self.assertNotEqual(status, 0, o)
|
|
|
|
def compare(self):
|
|
megaDls=sort(find('megaDls'))
|
|
localDls=sort(find('localDls'))
|
|
self.assertEqual(megaDls, localDls)
|
|
print(f"megaDls: {megaDls}, localDls: {localDls}")
|
|
|
|
def test_01(self):
|
|
cmd_ef(GET+' /cloud01/fileatcloud01.txt '+ABSMEGADLFOLDER+'/')
|
|
shutil.copy2('origin/cloud01/fileatcloud01.txt','localDls/')
|
|
self.compare()
|
|
|
|
def test_02(self):
|
|
cmd_ef(GET+' //bin/bin01/fileatbin01.txt '+ABSMEGADLFOLDER)
|
|
shutil.copy2('origin/bin01/fileatbin01.txt','localDls/')
|
|
self.compare()
|
|
|
|
def test_03(self):
|
|
#Test 03
|
|
cmd_ef(GET+' //bin/bin01/fileatbin01.txt '+ABSMEGADLFOLDER+'/')
|
|
shutil.copy2('origin/bin01/fileatbin01.txt','localDls/')
|
|
self.compare()
|
|
|
|
def test_04(self):
|
|
cmd_ef(GET+' '+osvar('MEGA_EMAIL_AUX')+':foreign/fileatforeign.txt '+ABSMEGADLFOLDER+'/')
|
|
shutil.copy2('origin/foreign/fileatforeign.txt','localDls/')
|
|
self.compare()
|
|
|
|
def test_05(self):
|
|
cmd_ef(GET+' '+osvar('MEGA_EMAIL_AUX')+':foreign/fileatforeign.txt '+ABSMEGADLFOLDER+'/')
|
|
shutil.copy2('origin/foreign/fileatforeign.txt','localDls/')
|
|
self.compare()
|
|
|
|
def test_06(self):
|
|
cmd_ef(CD+' cloud01')
|
|
cmd_ef(GET+' "*.txt" '+ABSMEGADLFOLDER+'')
|
|
copybyfilepattern('origin/cloud01/','*.txt','localDls/')
|
|
self.compare()
|
|
|
|
def test_07(self):
|
|
cmd_ef(CD+' //bin/bin01')
|
|
cmd_ef(GET+' "*.txt" '+ABSMEGADLFOLDER+'')
|
|
copybyfilepattern('origin/bin01/','*.txt','localDls/')
|
|
self.compare()
|
|
|
|
def test_08(self):
|
|
cmd_ef(CD+' '+osvar('MEGA_EMAIL_AUX')+':foreign')
|
|
cmd_ef(GET+' "*.txt" '+ABSMEGADLFOLDER+'')
|
|
copybyfilepattern('origin/foreign/','*.txt','localDls/')
|
|
self.compare()
|
|
|
|
def test_09(self):
|
|
cmd_ef(GET+' cloud01/c01s01 '+ABSMEGADLFOLDER+'')
|
|
copyfolder('origin/cloud01/c01s01','localDls/')
|
|
self.compare()
|
|
|
|
def test_10(self):
|
|
cmd_ef(GET+' cloud01/c01s01 '+ABSMEGADLFOLDER+'/')
|
|
copyfolder('origin/cloud01/c01s01','localDls/')
|
|
self.compare()
|
|
|
|
def test_11(self):
|
|
cmd_ef(GET+' cloud01/c01s01 '+ABSMEGADLFOLDER+' -m')
|
|
shutil.copytree('origin/cloud01/c01s01/', 'localDls/', dirs_exist_ok=True)
|
|
self.compare()
|
|
|
|
|
|
def test_12(self):
|
|
cmd_ef(GET+' cloud01/c01s01 '+ABSMEGADLFOLDER+'/ -m')
|
|
shutil.copytree('origin/cloud01/c01s01/', 'localDls/', dirs_exist_ok=True)
|
|
self.compare()
|
|
|
|
def test_13(self):
|
|
#Test 13
|
|
cmd_ef(GET+' "'+URIEXPORTEDFOLDER+'" '+ABSMEGADLFOLDER+'')
|
|
copyfolder('origin/cloud01/c01s01','localDls/')
|
|
self.compare()
|
|
|
|
def test_14(self):
|
|
cmd_ef(GET+' "'+URIEXPORTEDFILE+'" '+ABSMEGADLFOLDER+'')
|
|
shutil.copy2('origin/cloud02/fileatcloud02.txt','localDls/')
|
|
self.compare()
|
|
|
|
def test_15(self):
|
|
cmd_ef(GET+' "'+URIEXPORTEDFOLDER+'" '+ABSMEGADLFOLDER+' -m')
|
|
shutil.copytree('origin/cloud01/c01s01/', 'localDls/', dirs_exist_ok=True)
|
|
self.compare()
|
|
|
|
def test_16(self):
|
|
cmd_ef(CD+' /cloud01/c01s01')
|
|
cmd_ef(GET+' . '+ABSMEGADLFOLDER+'')
|
|
copyfolder('origin/cloud01/c01s01','localDls/')
|
|
self.compare()
|
|
|
|
def test_17(self):
|
|
cmd_ef(CD+' /cloud01/c01s01')
|
|
cmd_ef(GET+' . '+ABSMEGADLFOLDER+' -m')
|
|
shutil.copytree('origin/cloud01/c01s01/', 'localDls/', dirs_exist_ok=True)
|
|
self.compare()
|
|
|
|
def test_18(self):
|
|
cmd_ef(CD+' /cloud01/c01s01')
|
|
cmd_ef(GET+' ./ '+ABSMEGADLFOLDER+'')
|
|
copyfolder('origin/cloud01/c01s01','localDls/')
|
|
self.compare()
|
|
|
|
def test_19(self):
|
|
cmd_ef(CD+' /cloud01/c01s01')
|
|
cmd_ef(GET+' ./ '+ABSMEGADLFOLDER+' -m')
|
|
shutil.copytree('origin/cloud01/c01s01/', 'localDls/', dirs_exist_ok=True)
|
|
self.compare()
|
|
|
|
def test_20(self):
|
|
cmd_ef(CD+' /cloud01/c01s01')
|
|
cmd_ef(GET+' .. '+ABSMEGADLFOLDER+' -m')
|
|
shutil.copytree('origin/cloud01/', 'localDls/', dirs_exist_ok=True)
|
|
self.compare()
|
|
|
|
def test_21(self):
|
|
cmd_ef(CD+' /cloud01/c01s01')
|
|
cmd_ef(GET+' ../ '+ABSMEGADLFOLDER+'')
|
|
copyfolder('origin/cloud01','localDls/')
|
|
self.compare()
|
|
|
|
def test_22(self):
|
|
out("existing",ABSMEGADLFOLDER+'/existing')
|
|
cmd_ef(GET+' /cloud01/fileatcloud01.txt '+ABSMEGADLFOLDER+'/existing')
|
|
shutil.copy2('origin/cloud01/fileatcloud01.txt','localDls/existing (1)')
|
|
out("existing",'localDls/existing')
|
|
self.compare()
|
|
|
|
def test_23(self):
|
|
out("existing",'megaDls/existing')
|
|
cmd_ef(GET+' /cloud01/fileatcloud01.txt megaDls/existing')
|
|
shutil.copy2('origin/cloud01/fileatcloud01.txt','localDls/existing (1)')
|
|
out("existing",'localDls/existing')
|
|
self.compare()
|
|
|
|
def test_24(self):
|
|
cmd_ef(GET+' cloud01/c01s01 megaDls')
|
|
copyfolder('origin/cloud01/c01s01','localDls/')
|
|
self.compare()
|
|
|
|
|
|
def test_25(self):
|
|
cmd_ef(GET+' cloud01/fileatcloud01.txt megaDls')
|
|
shutil.copy2('origin/cloud01/fileatcloud01.txt','localDls/')
|
|
self.compare()
|
|
|
|
def test_26(self):
|
|
o, status, e = cmd_ec(f'{GET} cloud01/fileatcloud01.txt /no/where')
|
|
if not CMDSHELL:
|
|
self.check_failed(o, status)
|
|
self.assertIn('is not a valid download folder', e.decode().lower())
|
|
|
|
def test_27(self):
|
|
o, status, e = cmd_ec(f'{GET} /cloud01/cloud01/fileatcloud01.txt /no/where')
|
|
if not CMDSHELL:
|
|
self.check_failed(o, status)
|
|
self.assertIn('is not a valid download folder', e.decode().lower())
|
|
|
|
def test_28(self):
|
|
cmd_ef(GET+' /cloud01/fileatcloud01.txt '+ABSMEGADLFOLDER+'/newfile')
|
|
shutil.copy2('origin/cloud01/fileatcloud01.txt','localDls/newfile')
|
|
self.compare()
|
|
|
|
def test_29(self):
|
|
os.chdir(ABSMEGADLFOLDER)
|
|
cmd_ef(GET+' /cloud01/fileatcloud01.txt .')
|
|
os.chdir(ABSPWD)
|
|
shutil.copy2('origin/cloud01/fileatcloud01.txt','localDls/')
|
|
self.compare()
|
|
|
|
def test_30(self):
|
|
os.chdir(ABSMEGADLFOLDER)
|
|
cmd_ef(GET+' /cloud01/fileatcloud01.txt ./')
|
|
os.chdir(ABSPWD)
|
|
shutil.copy2('origin/cloud01/fileatcloud01.txt','localDls/')
|
|
self.compare()
|
|
|
|
def test_31(self):
|
|
makedir(ABSMEGADLFOLDER+'/newfol')
|
|
os.chdir(ABSMEGADLFOLDER+'/newfol')
|
|
cmd_ef(GET+' /cloud01/fileatcloud01.txt ..')
|
|
os.chdir(ABSPWD)
|
|
makedir('localDls/newfol')
|
|
shutil.copy2('origin/cloud01/fileatcloud01.txt','localDls/')
|
|
self.compare()
|
|
|
|
def test_32(self):
|
|
makedir(ABSMEGADLFOLDER+'/newfol')
|
|
os.chdir(ABSMEGADLFOLDER+'/newfol')
|
|
cmd_ef(GET+' /cloud01/fileatcloud01.txt ../')
|
|
os.chdir(ABSPWD)
|
|
makedir('localDls/newfol')
|
|
shutil.copy2('origin/cloud01/fileatcloud01.txt','localDls/')
|
|
self.compare()
|
|
|
|
def test_33(self):
|
|
o, status, e = cmd_ec(f'{GET} path/to/nowhere {ABSMEGADLFOLDER}')
|
|
if not CMDSHELL:
|
|
self.check_failed(o, status)
|
|
self.assertIn("couldn't find file", e.decode().lower())
|
|
|
|
def test_34(self):
|
|
o, status, e = cmd_ec(f'{GET} /path/to/nowhere {ABSMEGADLFOLDER}')
|
|
if not CMDSHELL:
|
|
self.check_failed(o, status)
|
|
self.assertIn("couldn't find file", e.decode().lower())
|
|
|
|
def test_35(self):
|
|
os.chdir(ABSMEGADLFOLDER)
|
|
cmd_ef(GET+' /cloud01/fileatcloud01.txt')
|
|
os.chdir(ABSPWD)
|
|
shutil.copy2('origin/cloud01/fileatcloud01.txt','localDls/')
|
|
self.compare()
|
|
|
|
def test_36_import_folder(self):
|
|
cmd_ex(RM+' -rf /imported')
|
|
cmd_ef(MKDIR+' -p /imported')
|
|
cmd_ef(IMPORT+' '+URIFOREIGNEXPORTEDFOLDER+' /imported')
|
|
cmd_ef(GET+' /imported/* '+ABSMEGADLFOLDER+'')
|
|
copyfolder('origin/foreign/sub01','localDls/')
|
|
self.compare()
|
|
|
|
def test_37_import_file(self):
|
|
cmd_ex(RM+' -rf /imported')
|
|
cmd_ef(MKDIR+' -p /imported')
|
|
cmd_ef(IMPORT+' '+URIFOREIGNEXPORTEDFILE+' /imported')
|
|
cmd_ef(GET+' /imported/fileatsub02.txt '+ABSMEGADLFOLDER+'')
|
|
shutil.copy2('origin/foreign/sub02/fileatsub02.txt','localDls/')
|
|
self.compare()
|
|
|
|
|
|
def test_38_download_file_from_inshare(self):
|
|
"""get from //from/XXX"""
|
|
cmd_ex(GET+' //from/'+osvar('MEGA_EMAIL_AUX')+':foreign/sub02/fileatsub02.txt '+ABSMEGADLFOLDER+'')
|
|
shutil.copy2('origin/foreign/sub02/fileatsub02.txt','localDls/')
|
|
self.compare()
|
|
|
|
if __name__ == '__main__':
|
|
if "OUT_DIR_JUNIT_XML" in os.environ:
|
|
unittest.main(testRunner=xmlrunner.XMLTestRunner(output=os.environ["OUT_DIR_JUNIT_XML"]), failfast=False, buffer=False, catchbreak=False)
|
|
else:
|
|
unittest.main()
|