2
0
mirror of https://github.com/meganz/MEGAcmd synced 2025-08-23 10:27:18 +00:00
MEGAcmd/tests/megacmd_find_test.py

224 lines
6.8 KiB
Python
Raw Normal View History

2024-02-07 19:55:35 +05:30
#!/usr/bin/python3
2017-09-29 10:42:25 +02:00
# -*- coding: utf-8 -*-
import os, shutil
2024-03-07 19:30:21 +05:30
import unittest
import xmlrunner
from megacmd_tests_common import *
2017-09-29 10:42:25 +02:00
GET="mega-get"
PUT="mega-put"
RM="mega-rm"
CD="mega-cd"
LCD="mega-lcd"
MKDIR="mega-mkdir"
2018-01-08 14:18:03 +01:00
EXPORT="mega-export -f"
2017-09-29 10:42:25 +02:00
FIND="mega-find"
WHOAMI="mega-whoami"
LOGOUT="mega-logout"
LOGIN="mega-login"
def setUpModule():
global VERBOSE
global MEGA_PWD
global MEGA_EMAIL
global MEGACMDSHELL
global CMDSHELL
global ABSPWD
2017-09-29 10:42:25 +02:00
ABSPWD = os.getcwd()
2017-09-29 10:42:25 +02:00
VERBOSE = 'VERBOSE' in os.environ
if "MEGA_EMAIL" in os.environ and "MEGA_PWD" in os.environ:
MEGA_EMAIL=os.environ["MEGA_EMAIL"]
MEGA_PWD=os.environ["MEGA_PWD"]
else:
raise Exception("Environment variables MEGA_EMAIL or MEGA_PWD are not defined")
2017-09-29 10:42:25 +02:00
CMDSHELL= "MEGACMDSHELL" in os.environ
if CMDSHELL:
MEGACMDSHELL=os.environ["MEGACMDSHELL"]
2017-09-29 10:42:25 +02:00
def initialize_contents():
2017-10-05 12:26:28 +02:00
contents=" ".join(['"localtmp/'+x+'"' for x in os.listdir('localtmp/')])
cmd_ef(PUT+" "+contents+" /")
2017-09-29 12:18:00 +02:00
shutil.copytree('localtmp', 'localUPs')
2017-09-29 10:42:25 +02:00
2024-03-07 19:30:21 +05:30
def clean_all():
2017-10-05 12:26:28 +02:00
if cmd_es(WHOAMI) != osvar("MEGA_EMAIL"):
cmd_ef(LOGOUT)
cmd_ef(LOGIN+" " +osvar("MEGA_EMAIL")+" "+osvar("MEGA_PWD"))
2024-03-07 19:30:21 +05:30
2017-09-29 10:42:25 +02:00
#~ rm pipe > /dev/null 2>/dev/null || :
2017-10-05 12:26:28 +02:00
cmd_ec(RM+' -rf "*"')
cmd_ec(RM+' -rf "//bin/*"')
2024-03-07 19:30:21 +05:30
2017-09-29 10:42:25 +02:00
rmfolderifexisting("localUPs")
rmfolderifexisting("localtmp")
2024-03-07 19:30:21 +05:30
2017-09-29 10:42:25 +02:00
rmfileifexisting("megafind.txt")
rmfileifexisting("localfind.txt")
def clear_local_and_remote():
rmfolderifexisting("localUPs")
2017-10-05 12:26:28 +02:00
cmd_ec(RM+' -rf "/*"')
2017-09-29 10:42:25 +02:00
initialize_contents()
def initialize():
2017-10-05 12:26:28 +02:00
if cmd_es(WHOAMI) != osvar("MEGA_EMAIL"):
cmd_es(LOGOUT)
cmd_ef(LOGIN+" " +osvar("MEGA_EMAIL")+" "+osvar("MEGA_PWD"))
2017-09-29 10:42:25 +02:00
if len(os.listdir(".")):
2024-03-07 19:30:21 +05:30
raise Exception("initialization folder not empty!")
2017-09-29 10:42:25 +02:00
#~ cd $ABSPWD
2024-02-07 19:55:35 +05:30
if cmd_es(FIND+" /") != b"/":
2024-03-07 19:30:21 +05:30
raise Exception("REMOTE Not empty, please clear it before starting!")
2017-09-29 10:42:25 +02:00
#initialize localtmp estructure:
makedir("localtmp")
touch("localtmp/file01.txt")
out('file01contents', 'localtmp/file01nonempty.txt')
#local empty folders structure
for f in ['localtmp/le01/'+a for a in ['les01/less01']+ ['les02/less0'+z for z in ['1','2']] ]: makedir(f)
#local filled folders structure
for f in ['localtmp/lf01/'+a for a in ['lfs01/lfss01']+ ['lfs02/lfss0'+z for z in ['1','2']] ]: makedir(f)
for f in ['localtmp/lf01/'+a for a in ['lfs01/lfss01']+ ['lfs02/lfss0'+z for z in ['1','2']] ]: touch(f+"/commonfile.txt")
#spaced structure
for f in ['localtmp/ls 01/'+a for a in ['ls s01/ls ss01']+ ['ls s02/ls ss0'+z for z in ['1','2']] ]: makedir(f)
for f in ['localtmp/ls 01/'+a for a in ['ls s01/ls ss01']+ ['ls s02/ls ss0'+z for z in ['1','2']] ]: touch(f+"/common file.txt")
# localtmp/
# ├── file01nonempty.txt
# ├── file01.txt
# ├── le01
# │   ├── les01
# │   │   └── less01
# │   └── les02
# │   ├── less01
# │   └── less02
# ├── lf01
# │   ├── lfs01
# │   │   └── lfss01
# │   │   └── commonfile.txt
# │   └── lfs02
# │   ├── lfss01
# │   │   └── commonfile.txt
# │   └── lfss02
# │   └── commonfile.txt
# └── ls 01
# ├── ls s01
# │   └── ls ss01
# │   └── common file.txt
# └── ls s02
# ├── ls ss01
# │   └── common file.txt
# └── ls ss02
# └── common file.txt
#initialize dynamic contents:
clear_local_and_remote()
2024-03-07 19:30:21 +05:30
class MEGAcmdFindTest(unittest.TestCase):
@classmethod
def setUpClass(cls):
#INITIALIZATION
clean_all()
initialize()
@classmethod
def tearDownClass(cls):
if not VERBOSE:
clean_all()
def compare_find(self, what, localFindPrefix='localUPs'):
if not isinstance(what, list):
what = [what]
megafind=b""
localfind=""
for w in what:
megafind+=cmd_ef(FIND+" "+w)+b"\n"
localfind+=find(localFindPrefix+'/'+w,w)+"\n"
megafind=sort(megafind).strip()
localfind=sort(localfind).strip()
#~ megafind=$FIND "$@" | sort > $ABSPWD/megafind.txt
#~ (cd localUPs 2>/dev/null; find "$@" | sed "s#\./##g" | sort) > $ABSPWD/localfind.txt
self.assertEqual(megafind, localfind)
2024-03-07 19:30:21 +05:30
def test_empty_file(self):
self.compare_find('file01.txt')
2024-03-07 19:30:21 +05:30
def test_entire_empty_folders(self):
self.compare_find('le01/les01/less01')
2024-03-07 19:30:21 +05:30
def test_1_file_folder(self):
self.compare_find('lf01/lfs01/lfss01')
2024-03-07 19:30:21 +05:30
def test_entire_non_empty_folders_structure(self):
self.compare_find('lf01')
2024-03-07 19:30:21 +05:30
def test_multiple_names(self):
self.compare_find(['lf01','le01/les01'])
2024-03-07 19:30:21 +05:30
def test_current_wd(self):
"""."""
cmd_ef(CD+" le01")
self.compare_find('.','localUPs/le01')
2024-03-07 19:30:21 +05:30
cmd_ef(CD+" /")
def test_current_wd_global(self):
""". global"""
self.compare_find('.')
2024-03-07 19:30:21 +05:30
def test_spaced(self):
megafind=sort(cmd_ef(FIND+" "+"ls\ 01"))
localfind=sort(find('localUPs/ls 01',"ls 01"))
self.assertEqual(megafind,localfind)
def test_multiple(self):
"""XX/.."""
megafind=sort(cmd_ef(FIND+" "+"ls\ 01/.."))
localfind=sort(find('localUPs/',"/"))
self.assertEqual(megafind,localfind)
def test_multiple_2(self):
cmd_ef(CD+' le01')
megafind=sort(cmd_ef(FIND+" "+".."))
cmd_ef(CD+' /')
localfind=sort(find('localUPs/',"/"))
self.assertEqual(megafind,localfind)
def test_complex(self):
megafind=sort(cmd_ef(FIND+" "+"ls\ 01/../le01/les01" +" " +"lf01/../ls\ *01/ls\ s02"))
localfind=sort(find('localUPs/le01/les01',"/le01/les01"))
localfind+="\n"+sort(find('localUPs/ls 01/ls s02',"/ls 01/ls s02"))
self.assertEqual(megafind,localfind)
def test_inside_folder(self):
megafind=sort(cmd_ef(FIND+" "+"le01/"))
localfind=sort(find('localUPs/le01',"le01"))
self.assertEqual(megafind,localfind)
@unittest.skipIf(CMDSHELL, "only for non-CMDSHELL")
def test_non_existent(self):
#Test 13 #file01.txt/non-existent
megafind,status=cmd_ec(FIND+" "+"file01.txt/non-existent")
self.assertNotEqual(status, 0)
2024-03-07 19:30:21 +05:30
def test_root(self):
self.compare_find('/')
2017-09-29 10:42:25 +02:00
###TODO: do stuff in shared folders...
2024-03-07 19:30:21 +05:30
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, exit=False)
else:
unittest.main()