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