2
0
mirror of https://github.com/meganz/MEGAcmd synced 2025-08-22 18:07:09 +00:00
MEGAcmd/tests/megacmd_put_test.py

317 lines
8.6 KiB
Python
Raw Normal View History

2024-02-07 19:55:35 +05:30
#!/usr/bin/python3
2017-10-03 14:32:22 +02:00
# -*- coding: utf-8 -*-
#better run in an empty folder
2024-02-07 19:55:35 +05:30
import os, subprocess, shutil, platform
2017-10-03 14:32:22 +02:00
from megacmd_tests_common import *
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-10-03 14:32:22 +02:00
SHARE="mega-share"
FIND="mega-find"
WHOAMI="mega-whoami"
LOGOUT="mega-logout"
LOGIN="mega-login"
IPC="mega-ipc"
IMPORT="mega-import"
ABSPWD=os.getcwd()
currentTest=1
try:
MEGA_EMAIL=os.environ["MEGA_EMAIL"]
MEGA_PWD=os.environ["MEGA_PWD"]
2024-02-07 19:55:35 +05:30
# MEGA_EMAIL_AUX=os.environ["MEGA_EMAIL_AUX"]
# MEGA_PWD_AUX=os.environ["MEGA_PWD_AUX"]
2017-10-03 14:32:22 +02:00
except:
2024-02-07 19:55:35 +05:30
logging.fatal("You must define variables MEGA_EMAIL MEGA_PWD. WARNING: Use an empty account for $MEGA_EMAIL")
2017-10-03 14:32:22 +02:00
exit(1)
try:
os.environ['VERBOSE']
VERBOSE=True
except:
VERBOSE=False
#VERBOSE=True
try:
MEGACMDSHELL=os.environ['MEGACMDSHELL']
CMDSHELL=True
#~ FIND="executeinMEGASHELL find" #TODO
except:
CMDSHELL=False
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"))
2017-10-03 14:32:22 +02:00
2017-10-05 12:26:28 +02:00
cmd_ec(RM+' -rf "*"')
cmd_ec(RM+' -rf "//bin/*"')
2017-10-03 14:32:22 +02:00
rmfolderifexisting("localUPs")
rmfolderifexisting("localtmp")
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-10-03 14:32:22 +02:00
initialize_contents()
currentTest=1
def compare_and_clear() :
global currentTest
if VERBOSE:
2024-02-07 19:55:35 +05:30
print("test $currentTest")
2017-10-03 14:32:22 +02:00
2017-10-05 12:26:28 +02:00
megafind=sort(cmd_ef(FIND))
2017-10-03 14:32:22 +02:00
localfind=sort(find('localUPs','.'))
#~ if diff --side-by-side megafind.txt localfind.txt 2>/dev/null >/dev/null; then
if (megafind == localfind):
if VERBOSE:
2024-02-07 19:55:35 +05:30
print("diff megafind vs localfind:")
2017-10-03 14:32:22 +02:00
#diff --side-by-side megafind.txt localfind.txt#TODO: do this
2024-02-07 19:55:35 +05:30
print("MEGAFIND:")
print(megafind)
print("LOCALFIND")
print(localfind)
print("test "+str(currentTest)+" succesful!")
2017-10-03 14:32:22 +02:00
else:
2024-02-07 19:55:35 +05:30
print("test "+str(currentTest)+" failed!")
print("diff megafind vs localfind:")
2017-10-03 14:32:22 +02:00
#~ diff --side-by-side megafind.txt localfind.txt #TODO: do this
2024-02-07 19:55:35 +05:30
print("MEGAFIND:")
print(megafind)
print("LOCALFIND")
print(localfind)
2017-10-03 14:32:22 +02:00
#cd $ABSPWD #TODO: consider this
exit(1)
clear_local_and_remote()
currentTest+=1
2017-10-05 12:26:28 +02:00
cmd_ef(CD+" /")
2017-10-03 14:32:22 +02:00
def check_failed_and_clear(o,status):
global currentTest
if status == 0:
2024-02-07 19:55:35 +05:30
print("test "+str(currentTest)+" failed!")
print(o)
2017-10-03 14:32:22 +02:00
exit(1)
else:
2024-02-07 19:55:35 +05:30
print("test "+str(currentTest)+" succesful!")
2017-10-03 14:32:22 +02:00
clear_local_and_remote()
currentTest+=1
2017-10-05 12:26:28 +02:00
cmd_ef(CD+" /")
2017-10-03 14:32:22 +02:00
def initialize():
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"))
2017-10-03 14:32:22 +02:00
if len(os.listdir(".")):
2024-02-07 19:55:35 +05:30
logging.error("initialization folder not empty!")
2017-10-03 14:32:22 +02:00
#~ cd $ABSPWD
exit(1)
2024-02-07 19:55:35 +05:30
if cmd_es(FIND+" /") != b"/":
logging.error("REMOTE Not empty, please clear it before starting!")
2017-10-03 14:32:22 +02:00
#~ cd $ABSPWD
exit(1)
#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()
def initialize_contents():
remotefolders=['01/'+a for a in ['s01/ss01']+ ['s02/ss0'+z for z in ['1','2']] ]
2017-10-05 12:26:28 +02:00
cmd_ef(MKDIR+" -p "+" ".join(remotefolders))
2017-10-03 14:32:22 +02:00
for f in ['localUPs/01/'+a for a in ['s01/ss01']+ ['s02/ss0'+z for z in ['1','2']] ]: makedir(f)
#INITIALIZATION
clean_all()
initialize()
ABSMEGADLFOLDER=ABSPWD+'/megaDls'
clear_local_and_remote()
#Test 01 #clean comparison
compare_and_clear()
#Test 02 #no destiny empty file upload
2017-10-05 12:26:28 +02:00
cmd_ef(PUT+' '+'localtmp/file01.txt')
2017-10-03 14:32:22 +02:00
shutil.copy2('localtmp/file01.txt','localUPs/')
compare_and_clear()
#Test 03 #/ destiny empty file upload
2017-10-05 12:26:28 +02:00
cmd_ef(PUT+' '+'localtmp/file01.txt /')
2017-10-03 14:32:22 +02:00
shutil.copy2('localtmp/file01.txt','localUPs/')
compare_and_clear()
2018-08-08 12:39:05 +02:00
#Test 04 #no destiny non empty file upload
2017-10-05 12:26:28 +02:00
cmd_ef(PUT+' '+'localtmp/file01nonempty.txt')
2017-10-03 14:32:22 +02:00
shutil.copy2('localtmp/file01nonempty.txt','localUPs/')
compare_and_clear()
2018-08-08 12:39:05 +02:00
#Test 05 #update non empty file upload
out('newfile01contents', 'localtmp/file01nonempty.txt')
cmd_ef(PUT+' '+'localtmp/file01nonempty.txt')
shutil.copy2('localtmp/file01nonempty.txt','localUPs/file01nonempty.txt')
compare_and_clear()
#Test 06 #empty folder
2017-10-05 12:26:28 +02:00
cmd_ef(PUT+' '+'localtmp/le01/les01/less01')
2017-10-03 14:32:22 +02:00
copyfolder('localtmp/le01/les01/less01','localUPs/')
compare_and_clear()
2018-08-08 12:39:05 +02:00
#Test 07 #1 file folder
2017-10-05 12:26:28 +02:00
cmd_ef(PUT+' '+'localtmp/lf01/lfs01/lfss01')
2017-10-03 14:32:22 +02:00
copyfolder('localtmp/lf01/lfs01/lfss01','localUPs/')
compare_and_clear()
2018-08-08 12:39:05 +02:00
#Test 08 #entire empty folders structure
2017-10-05 12:26:28 +02:00
cmd_ef(PUT+' '+'localtmp/le01')
2017-10-03 14:32:22 +02:00
copyfolder('localtmp/le01','localUPs/')
compare_and_clear()
2018-08-08 12:39:05 +02:00
#Test 09 #entire non empty folders structure
2017-10-05 12:26:28 +02:00
cmd_ef(PUT+' '+'localtmp/lf01')
2017-10-03 14:32:22 +02:00
copyfolder('localtmp/lf01','localUPs/')
compare_and_clear()
2018-08-08 12:39:05 +02:00
#Test 10 #copy structure into subfolder
2017-10-05 12:26:28 +02:00
cmd_ef(PUT+' '+'localtmp/le01 /01/s01')
2017-10-03 14:32:22 +02:00
copyfolder('localtmp/le01','localUPs/01/s01')
compare_and_clear()
2018-08-08 12:39:05 +02:00
#~ #Test 11 #copy exact structure
makedir('auxx')
copyfolder('localUPs/01','auxx')
2017-10-05 12:26:28 +02:00
cmd_ef(PUT+' '+'auxx/01/s01 /01/s01')
copyfolder('auxx/01/s01','localUPs/01/s01')
rmfolderifexisting("auxx")
2017-10-03 14:32:22 +02:00
compare_and_clear()
2018-08-08 12:39:05 +02:00
#~ #Test 12 #merge increased structure
makedir('auxx')
copyfolder('localUPs/01','auxx')
touch('auxx/01/s01/another.txt')
2017-10-05 12:26:28 +02:00
cmd_ef(PUT+' '+'auxx/01/s01 /01/')
shutil.copy2('auxx/01/s01/another.txt','localUPs/01/s01')
2017-10-03 14:32:22 +02:00
compare_and_clear()
rmfolderifexisting("auxx")
2017-10-03 14:32:22 +02:00
2018-08-08 12:39:05 +02:00
#Test 13 #multiple upload
2017-10-05 12:26:28 +02:00
cmd_ef(PUT+' '+'localtmp/le01 localtmp/lf01 /01/s01')
2017-10-03 14:32:22 +02:00
copyfolder('localtmp/le01','localUPs/01/s01')
copyfolder('localtmp/lf01','localUPs/01/s01')
compare_and_clear()
2018-08-08 12:39:05 +02:00
currentTest=14
#Test 14 #local regexp
2017-10-05 12:26:28 +02:00
if (platform.system() != "Windows" and not CMDSHELL):
cmd_ef(PUT+' '+'localtmp/*txt /01/s01')
copybyfilepattern('localtmp/','*.txt','localUPs/01/s01')
compare_and_clear()
2017-10-03 14:32:22 +02:00
2018-08-08 12:39:05 +02:00
currentTest=15
#Test 15 #../
2017-10-05 12:26:28 +02:00
cmd_ef(CD+' 01')
cmd_ef(PUT+' '+'localtmp/le01 ../01/s01')
cmd_ef(CD+' /')
2017-10-03 14:32:22 +02:00
copyfolder('localtmp/le01','localUPs/01/s01')
compare_and_clear()
2018-08-08 12:39:05 +02:00
currentTest=16
2017-10-03 14:32:22 +02:00
2018-08-08 12:39:05 +02:00
#Test 16 #spaced stuff
2017-10-03 14:32:22 +02:00
if CMDSHELL: #TODO: think about this again
2017-10-05 12:26:28 +02:00
cmd_ef(PUT+' '+'localtmp/ls\ 01')
2017-10-03 14:32:22 +02:00
else:
2017-10-05 12:26:28 +02:00
cmd_ef(PUT+' '+'"localtmp/ls 01"')
2017-10-03 14:32:22 +02:00
copyfolder('localtmp/ls 01','localUPs')
compare_and_clear()
###TODO: do stuff in shared folders...
########
##Test XX #merge structure with file updated
##This test fails, because it creates a remote copy of the updated file.
##That's expected. If ever provided a way to create a real merge (e.g.: put -m ...) to do BACKUPs, reuse this test.
#mkdir aux
#shutil.copy2('-pr localUPs/01','aux')
#touch aux/01/s01/another.txt
2017-10-05 12:26:28 +02:00
#cmd_ef(PUT+' '+'aux/01/s01 /01/')
2017-10-03 14:32:22 +02:00
#rsync -aLp aux/01/s01/ localUPs/01/s01/
#echo "newcontents" > aux/01/s01/another.txt
2017-10-05 12:26:28 +02:00
#cmd_ef(PUT+' '+'aux/01/s01 /01/')
2017-10-03 14:32:22 +02:00
#rsync -aLp aux/01/s01/ localUPs/01/s01/
#rm -r aux
#compare_and_clear()
# Clean all
if not VERBOSE:
clean_all()