@ -1,3 +1,5 @@
#!/usr/bin/env python3
import os
import time
import threading
import unittest
@ -50,66 +52,72 @@ class TestUploader(UploaderTestCase):
self . end_event . set ( )
self . up_thread . join ( )
def gen_files ( self , lock = False ) :
def gen_files ( self , lock = False , boot = True ) :
f_paths = list ( )
for t in [ " bootlog.bz2 " , " qlog.bz2" , " rlog.bz2 " , " dcamera.hevc " , " fcamera.hevc " ] :
for t in [ " qlog.bz2 " , " rlog.bz2 " , " dcamera.hevc " , " fcamera.hevc " ] :
f_paths . append ( self . make_file_with_data ( self . seg_dir , t , 1 , lock = lock ) )
if boot :
f_paths . append ( self . make_file_with_data ( " boot " , f " { self . seg_dir } .bz2 " , 1 , lock = lock ) )
return f_paths
def gen_order ( self , seg1 , seg2 ) :
keys = [ f " { self . seg_format . format ( i ) } /qlog.bz2 " for i in seg1 ]
def gen_order ( self , seg1 , seg2 , boot = True ) :
keys = [ ]
if boot :
keys + = [ f " boot/ { self . seg_format . format ( i ) } .bz2 " for i in seg1 ]
keys + = [ f " boot/ { self . seg_format2 . format ( i ) } .bz2 " for i in seg2 ]
keys + = [ f " { self . seg_format . format ( i ) } /qlog.bz2 " for i in seg1 ]
keys + = [ f " { self . seg_format2 . format ( i ) } /qlog.bz2 " for i in seg2 ]
for i in seg1 :
keys + = [ f " { self . seg_format . format ( i ) } / { f } " for f in [ ' rlog.bz2 ' , ' fcamera.hevc ' , ' dcamera.hevc ' ] ]
for i in seg2 :
keys + = [ f " { self . seg_format2 . format ( i ) } / { f } " for f in [ ' rlog.bz2 ' , ' fcamera.hevc ' , ' dcamera.hevc ' ] ]
keys + = [ f " { self . seg_format . format ( i ) } /bootlog.bz2 " for i in seg1 ]
keys + = [ f " { self . seg_format2 . format ( i ) } /bootlog.bz2 " for i in seg2 ]
return keys
def test_upload ( self ) :
f_paths = self . gen_files ( lock = False )
self . gen_files ( lock = False )
self . start_thread ( )
# allow enough time that files could upload twice if there is a bug in the logic
time . sleep ( 5 )
self . join_thread ( )
self . assertTrue ( len ( log_handler . upload_ignored ) == 0 , " Some files were ignored " )
self . assertFalse ( len ( log_handler . upload_order ) < len ( f_paths ) , " Some files failed to upload " )
self . assertFalse ( len ( log_handler . upload_order ) > len ( f_paths ) , " Some files were uploaded twice " )
for f_path in f_paths :
self . assertTrue ( getxattr ( f_path , uploader . UPLOAD_ATTR_NAME ) , " All files not uploaded " )
exp_order = self . gen_order ( [ self . seg_num ] , [ ] )
self . assertTrue ( len ( log_handler . upload_ignored ) == 0 , " Some files were ignored " )
self . assertFalse ( len ( log_handler . upload_order ) < len ( exp_order ) , " Some files failed to upload " )
self . assertFalse ( len ( log_handler . upload_order ) > len ( exp_order ) , " Some files were uploaded twice " )
for f_path in exp_order :
self . assertTrue ( getxattr ( os . path . join ( self . root , f_path ) , uploader . UPLOAD_ATTR_NAME ) , " All files not uploaded " )
self . assertTrue ( log_handler . upload_order == exp_order , " Files uploaded in wrong order " )
def test_upload_ignored ( self ) :
self . set_ignore ( )
f_paths = self . gen_files ( lock = False )
self . gen_files ( lock = False )
self . start_thread ( )
# allow enough time that files could upload twice if there is a bug in the logic
time . sleep ( 5 )
self . join_thread ( )
self . assertTrue ( len ( log_handler . upload_order ) == 0 , " Some files were not ignored " )
self . assertFalse ( len ( log_handler . upload_ignored ) < len ( f_paths ) , " Some files failed to ignore " )
self . assertFalse ( len ( log_handler . upload_ignored ) > len ( f_paths ) , " Some files were ignored twice " )
for f_path in f_paths :
self . assertTrue ( getxattr ( f_path , uploader . UPLOAD_ATTR_NAME ) , " All files not ignored " )
exp_order = self . gen_order ( [ self . seg_num ] , [ ] )
self . assertTrue ( len ( log_handler . upload_order ) == 0 , " Some files were not ignored " )
self . assertFalse ( len ( log_handler . upload_ignored ) < len ( exp_order ) , " Some files failed to ignore " )
self . assertFalse ( len ( log_handler . upload_ignored ) > len ( exp_order ) , " Some files were ignored twice " )
for f_path in exp_order :
self . assertTrue ( getxattr ( os . path . join ( self . root , f_path ) , uploader . UPLOAD_ATTR_NAME ) , " All files not ignored " )
self . assertTrue ( log_handler . upload_ignored == exp_order , " Files ignored in wrong order " )
def test_upload_files_in_create_order ( self ) :
f_paths = list ( )
seg1_nums = [ 0 , 1 , 2 , 10 , 20 ]
for i in seg1_nums :
self . seg_dir = self . seg_format . format ( i )
f_paths + = self . gen_files ( )
self . gen_files ( boot = False )
seg2_nums = [ 5 , 50 , 51 ]
for i in seg2_nums :
self . seg_dir = self . seg_format2 . format ( i )
f_paths + = self . gen_files ( )
self . gen_files ( boot = False )
exp_order = self . gen_order ( seg1_nums , seg2_nums , boot = False )
self . start_thread ( )
# allow enough time that files could upload twice if there is a bug in the logic
@ -117,15 +125,15 @@ class TestUploader(UploaderTestCase):
self . join_thread ( )
self . assertTrue ( len ( log_handler . upload_ignored ) == 0 , " Some files were ignored " )
self . assertFalse ( len ( log_handler . upload_order ) < len ( f_paths ) , " Some files failed to upload " )
self . assertFalse ( len ( log_handler . upload_order ) > len ( f_paths ) , " Some files were uploaded twice " )
for f_path in f_paths :
self . assertTrue ( getxattr ( f_path , uploader . UPLOAD_ATTR_NAME ) , " All files not uploaded " )
exp_order = self . gen_order ( seg1_nums , seg2_nums )
self . assertFalse ( len ( log_handler . upload_order ) < len ( exp_order ) , " Some files failed to upload " )
self . assertFalse ( len ( log_handler . upload_order ) > len ( exp_order ) , " Some files were uploaded twice " )
for f_path in exp_order :
self . assertTrue ( getxattr ( os . path . join ( self . root , f_path ) , uploader . UPLOAD_ATTR_NAME ) , " All files not uploaded " )
self . assertTrue ( log_handler . upload_order == exp_order , " Files uploaded in wrong order " )
def test_no_upload_with_lock_file ( self ) :
f_paths = self . gen_files ( lock = True )
f_paths = self . gen_files ( lock = True , boot = False )
self . start_thread ( )
# allow enough time that files should have been uploaded if they would be uploaded
@ -137,4 +145,4 @@ class TestUploader(UploaderTestCase):
if __name__ == " __main__ " :
unittest . main ( )
unittest . main ( failfast = True )