def testBody(self, logger): try: self.srv = Server(os.path.join(self.test_root_path(), 'srv', 'config'), os.path.join(self.test_root_path(), 'srv', 'data')) self.cl0 = Server(os.path.join(self.test_root_path(), 'cl0', 'config'), os.path.join(self.test_root_path(), 'cl0', 'data')) self.cl1 = Server(os.path.join(self.test_root_path(), 'cl1', 'config'), os.path.join(self.test_root_path(), 'cl1', 'data')) self.cl2 = Server(os.path.join(self.test_root_path(), 'cl2', 'config'), os.path.join(self.test_root_path(), 'cl2', 'data')) srvid = self.srv.syncthingHandler.myId() cl0id = self.cl0.syncthingHandler.myId() cl1id = self.cl1.syncthingHandler.myId() cl2id = self.cl2.syncthingHandler.myId() fpath0s = os.path.join(self.test_root_path(), 'folder0_s') fpath1s = os.path.join(self.test_root_path(), 'folder1_s') fpath2s = os.path.join(self.test_root_path(), 'folder2_s') for fpath in (fpath0s, fpath1s, fpath2s): try: os.makedirs(fpath) except OSError as e: if e.errno != errno.EEXIST: raise self.cl0.syncthingHandler.set_server_secret('wowsecret2').result() self.cl1.syncthingHandler.set_server_secret('wowsecret2').result() self.cl2.syncthingHandler.set_server_secret('wowsecret2').result() self.srv.syncthingHandler.set_server_secret('wowsecret2').result() self.srv.syncthingHandler.add_server(srvid).result() self.srv.syncthingHandler.add_device(cl0id).result() self.srv.syncthingHandler.add_device(cl1id).result() self.srv.syncthingHandler.add_device(cl2id).result() ### self.cl0.syncthingHandler.add_server(srvid).result() self.cl1.syncthingHandler.add_server(srvid).result() self.cl2.syncthingHandler.add_server(srvid).result() logger.print('srv cl0 cl1 cl2 initialized') fidA = self.srv.syncthingHandler.add_folder(fpath0s, 'folder_A', [cl0id]).result() fidB = self.srv.syncthingHandler.add_folder(fpath1s, 'folder_B', [cl1id]).result() fidC = self.srv.syncthingHandler.add_folder(fpath2s, 'folder_C', [cl2id]).result() logger.print('adding folders: folder_A<-cl0, folder_B<-cl1, folder_C<-cl2') for i in range(5): logger.print('starting iteration %d' % i) self.srv.start() self.cl0.start() self.cl1.start() self.cl2.start() logger.print('all servers/clients started') logger.print('waiting 10s') time.sleep(10) logger.print('filling folders with random data') s0 = 'f0 random information %s' % ''.join([random.choice(string.printable) for _ in range(16)]) s1 = 'f1 randomer informationes %s' % ''.join([random.choice(string.printable) for _ in range(16)]) s2 = 'f2 even randomer informationes %s' % ''.join([random.choice(string.printable) for _ in range(16)]) with open(os.path.join(fpath0s, 'f0_test.txt'), 'w') as f: f.write(s0) with open(os.path.join(fpath1s, 'f1_test.txt'), 'w') as f: f.write(s1) with open(os.path.join(fpath2s, 'f2_test.txt'), 'w') as f: f.write(s2) logger.print('waiting for 25s') time.sleep(25) logger.print('checking data on clients') with open(os.path.join(fpath0s, 'f0_test.txt'), 'r') as f: ss0 = f.read() with open(os.path.join(fpath1s, 'f1_test.txt'), 'r') as f: ss1 = f.read() with open(os.path.join(fpath2s, 'f2_test.txt'), 'r') as f: ss2 = f.read() with open(os.path.join(self.test_root_path(), 'cl0', 'data', 'folder_A', 'f0_test.txt'), 'r') as f: assert ss0 == f.read(), 'c0 folder 0 contents mismatch. test failed. \n%s' % s0 with open(os.path.join(self.test_root_path(), 'cl1', 'data', 'folder_B', 'f1_test.txt'), 'r') as f: assert ss1 == f.read(), 'c1 folder 1 contents mismatch. test failed. \n%s' % s1 with open(os.path.join(self.test_root_path(), 'cl2', 'data', 'folder_C', 'f2_test.txt'), 'r') as f: assert ss2 == f.read(), 'c2 folder 2 contents mismatch. test failed. \n%s' % s2 logger.print('removing cl0 from fA, cl1 from fB, cl2 from fC') self.srv.syncthingHandler.remove_device_from_folder(fidA, cl0id).result() self.srv.syncthingHandler.remove_device_from_folder(fidB, cl1id).result() self.srv.syncthingHandler.remove_device_from_folder(fidC, cl2id).result() logger.print('adding cl1 to fA, cl2 to fB, cl0 to fC') self.srv.syncthingHandler.add_device_to_folder(fidA, cl1id).result() self.srv.syncthingHandler.add_device_to_folder(fidB, cl2id).result() self.srv.syncthingHandler.add_device_to_folder(fidC, cl0id).result() logger.print('waiting 25s') time.sleep(25) logger.print('checking data on clients') assert not os.path.exists(os.path.join(self.test_root_path(), 'cl0', 'data', 'folder_A')), 'FolderA not deleted from cl0' assert not os.path.exists(os.path.join(self.test_root_path(), 'cl1', 'data', 'folder_B')), 'FolderB not deleted from cl1' assert not os.path.exists(os.path.join(self.test_root_path(), 'cl2', 'data', 'folder_C')), 'FolderC not deleted from cl2' with open(os.path.join(self.test_root_path(), 'cl1', 'data', 'folder_A', 'f0_test.txt'), 'r') as f: assert ss0 == f.read(), 'c1 folder 0 contents mismatch. test failed. \n%s' % s0 with open(os.path.join(self.test_root_path(), 'cl2', 'data', 'folder_B', 'f1_test.txt'), 'r') as f: assert ss1 == f.read(), 'c2 folder 1 contents mismatch. test failed. \n%s' % s1 with open(os.path.join(self.test_root_path(), 'cl0', 'data', 'folder_C', 'f2_test.txt'), 'r') as f: assert ss2 == f.read(), 'c3 folder 2 contents mismatch. test failed. \n%s' % s2 logger.print('stopping servers/clients') self.cl0.stop() self.cl1.stop() self.cl2.stop() self.srv.stop() logger.print("EVERYTHING STOPPED! ITERATION %d DONE" % i) self.srv = Server(os.path.join(self.test_root_path(), 'srv', 'config'), os.path.join(self.test_root_path(), 'srv', 'data')) self.cl0 = Server(os.path.join(self.test_root_path(), 'cl0', 'config'), os.path.join(self.test_root_path(), 'cl0', 'data')) self.cl1 = Server(os.path.join(self.test_root_path(), 'cl1', 'config'), os.path.join(self.test_root_path(), 'cl1', 'data')) self.cl2 = Server(os.path.join(self.test_root_path(), 'cl2', 'config'), os.path.join(self.test_root_path(), 'cl2', 'data')) self.srv.syncthingHandler.remove_device_from_folder(fidA, cl1id).result() self.srv.syncthingHandler.remove_device_from_folder(fidB, cl2id).result() self.srv.syncthingHandler.remove_device_from_folder(fidC, cl0id).result() self.srv.syncthingHandler.add_device_to_folder(fidA, cl0id).result() self.srv.syncthingHandler.add_device_to_folder(fidB, cl1id).result() self.srv.syncthingHandler.add_device_to_folder(fidC, cl2id).result() finally: try: self.cl0.stop() except: pass try: self.cl1.stop() except: pass try: self.cl2.stop() except: pass try: self.srv.stop() except: pass
def testBody(self, logger): try: self.srv0 = Server( os.path.join(self.test_root_path(), 'srv0', 'config'), os.path.join(self.test_root_path(), 'srv0', 'data')) self.srv1 = Server( os.path.join(self.test_root_path(), 'srv1', 'config'), os.path.join(self.test_root_path(), 'srv1', 'data')) self.cl0 = Server( os.path.join(self.test_root_path(), 'cl0', 'config'), os.path.join(self.test_root_path(), 'cl0', 'data')) self.cl1 = Server( os.path.join(self.test_root_path(), 'cl1', 'config'), os.path.join(self.test_root_path(), 'cl1', 'data')) fpath0s0 = os.path.join(self.test_root_path(), 'folder0_s0') fpath1s0 = os.path.join(self.test_root_path(), 'folder1_s0') fpath0s1 = os.path.join(self.test_root_path(), 'folder0_s1') fpath1s1 = os.path.join(self.test_root_path(), 'folder1_s1') for fpath in (fpath0s0, fpath1s0, fpath0s1, fpath1s1): try: os.makedirs(fpath) except OSError as e: if e.errno != errno.EEXIST: raise self.cl0.syncthingHandler.set_server_secret('wowsecret').result() self.cl1.syncthingHandler.set_server_secret('wowsecret').result() self.srv0.syncthingHandler.set_server_secret('wowsecret').result() self.srv1.syncthingHandler.set_server_secret('wowsecret').result() self.srv0.syncthingHandler.add_server( self.srv0.syncthingHandler.myId()).result() self.srv0.syncthingHandler.add_server( self.srv1.syncthingHandler.myId()).result() self.srv1.syncthingHandler.add_server( self.srv0.syncthingHandler.myId()).result() self.srv1.syncthingHandler.add_server( self.srv1.syncthingHandler.myId()).result() self.srv0.syncthingHandler.add_device( self.cl0.syncthingHandler.myId()).result() self.srv0.syncthingHandler.add_device( self.cl1.syncthingHandler.myId()).result() self.cl0.syncthingHandler.add_server( self.srv0.syncthingHandler.myId()).result() self.cl1.syncthingHandler.add_server( self.srv0.syncthingHandler.myId()).result() self.srv0.add_project('testproject1') for i in range(3): logger.print('starting iteration %d' % i) self.srv0.start() self.srv1.start() self.cl0.start() self.cl1.start() logger.print('all servers started') logger.print('checking project manager for project') def _check0_(): assert len( self.srv0.projectManagers ) == 1, 'srv0 has %d projects instead of 1' % len( self.srv0.projectManagers) assert len( self.srv1.projectManagers ) == 1, 'srv1 has %d projects instead of 1' % len( self.srv1.projectManagers) logger.check(_check0_, timeout=35, time_to_hold=10) srv0_pm = tuple(self.srv0.projectManagers.values())[0] srv1_pm = tuple(self.srv1.projectManagers.values())[0] assert srv0_pm.project_name( ) == 'testproject1', 'srv0 project name mismatch. got %s' % srv0_pm.project_name( ) assert srv1_pm.project_name( ) == 'testproject1', 'srv1 project name mismatch. got %s' % srv1_pm.project_name( ) srv0_shts = srv0_pm.get_shots().result() srv1_shts = srv1_pm.get_shots().result() assert len( srv0_shts ) == 0, 'srv0 shotcount == %d, expected 0' % len(srv0_shts) assert len( srv1_shts ) == 0, 'srv1 shotcount == %d, expected 0' % len(srv1_shts) logger.print('adding a test shot') srv0_pm.add_shot('first shot', 'firstshot_id', fpath0s0).result() logger.print('adding a user') srv1_pm.add_user('al.bob', 'Alice Bobovich', [ self.cl0.syncthingHandler.myId(), self.cl1.syncthingHandler.myId() ], [('firstshot_id', 'main')]).result() s0 = 'f0 random information %s' % ''.join( [random.choice(string.printable) for _ in range(16)]) with open(os.path.join(fpath0s0, 'f0_test.txt'), 'w') as f: f.write(s0) with open(os.path.join(fpath0s0, 'f0_test.txt'), 'r') as f: s0 = f.read() logger.print( 'checking if user exists and checking shot folder') def _check1_(): assert 'al.bob' in srv0_pm.get_users().result( ), 'al.bob not in srv0' assert 'al.bob' in srv1_pm.get_users().result( ), 'al.bob not in srv1' with open( os.path.join(self.test_root_path(), 'srv1', 'data', 'first shot :main', 'f0_test.txt'), 'r') as f: assert s0 == f.read( ), 'srv1 folder 0 contents mismatch. test failed. \n%s' % s0 with open( os.path.join(self.test_root_path(), 'cl0', 'data', 'first shot :main', 'f0_test.txt'), 'r') as f: assert s0 == f.read( ), 'c0 shot folder contents mismatch. test failed. \n%s' % s0 with open( os.path.join(self.test_root_path(), 'cl1', 'data', 'first shot :main', 'f0_test.txt'), 'r') as f: assert s0 == f.read( ), 'c1 shot folder contents mismatch. test failed. \n%s' % s0 logger.check(_check1_, timeout=35, time_to_hold=10) logger.print('removing shot') srv1_pm.remove_shot('firstshot_id').result() logger.print('checking the shot is removed') def _check2_(): assert os.path.exists( fpath0s0 ), 'srv0 shotpath does not exists' # servers do not delete folders from disc assert os.path.exists( os.path.join(self.test_root_path(), 'srv1', 'data', 'first shot :main') ), 'srv1 shotpath does not exists' # servers do not delete folders from disc assert not os.path.exists( os.path.join( self.test_root_path(), 'cl0', 'data', 'first shot :main')), 'cl0 shotpath still exists' assert not os.path.exists( os.path.join( self.test_root_path(), 'cl1', 'data', 'first shot :main')), 'cl1 shotpath still exists' logger.check(_check2_, timeout=35, time_to_hold=10) logger.print('removing user') srv1_pm.remove_user('al.bob') logger.print('checking if user is gone') def _check3_(): assert len(srv0_pm.get_users().result() ) == 0, 'srv0 has nonzero users' assert len(srv1_pm.get_users().result() ) == 0, 'srv1 has nonzero users' logger.check(_check3_, timeout=35, time_to_hold=10) logger.print('stopping all servers') self.cl0.stop() self.cl1.stop() self.srv0.stop() self.srv1.stop() logger.print("EVERYTHING STOPPED! ITERATION %d DONE" % i) self.srv0 = Server( os.path.join(self.test_root_path(), 'srv0', 'config'), os.path.join(self.test_root_path(), 'srv0', 'data')) self.srv1 = Server( os.path.join(self.test_root_path(), 'srv1', 'config'), os.path.join(self.test_root_path(), 'srv1', 'data')) self.cl0 = Server( os.path.join(self.test_root_path(), 'cl0', 'config'), os.path.join(self.test_root_path(), 'cl0', 'data')) self.cl1 = Server( os.path.join(self.test_root_path(), 'cl1', 'config'), os.path.join(self.test_root_path(), 'cl1', 'data')) finally: try: self.cl0.stop() except: pass try: self.cl1.stop() except: pass try: self.srv0.stop() except: pass try: self.srv1.stop() except: pass
def testBody(self, logger): try: self.srv = Server( os.path.join(self.test_root_path(), 'srv', 'config'), os.path.join(self.test_root_path(), 'srv', 'data')) self.cl0 = Server( os.path.join(self.test_root_path(), 'cl0', 'config'), os.path.join(self.test_root_path(), 'cl0', 'data')) fpath0s = os.path.join(self.test_root_path(), 'folder0_s') fpath1s = os.path.join(self.test_root_path(), 'folder1_s') for fpath in (fpath0s, fpath1s): try: os.makedirs(fpath) except OSError as e: if e.errno != errno.EEXIST: raise self.cl0.syncthingHandler.set_server_secret('wowsecret').result() self.srv.syncthingHandler.set_server_secret('wowsecret').result() self.srv.syncthingHandler.add_server( self.srv.syncthingHandler.myId()).result() self.srv.syncthingHandler.add_device( self.cl0.syncthingHandler.myId()).result() self.cl0.syncthingHandler.add_server( self.srv.syncthingHandler.myId()).result() fid0 = self.srv.syncthingHandler.add_folder( fpath0s, 'le folder 0', [self.cl0.syncthingHandler.myId()]).result() fid1 = self.srv.syncthingHandler.add_folder( fpath1s, 'la foldero 1', [self.cl0.syncthingHandler.myId()]).result() for i in range(3): logger.print('starting iteration %d' % i) logger.print('starting servers...') self.srv.start() self.cl0.start() logger.sleep(10) logger.print('filling folders f0 f1 with junk') s0 = 'f0 random information %s' % ''.join( [random.choice(string.printable) for _ in range(16)]) s1 = 'f1 randomer informationes %s' % ''.join( [random.choice(string.printable) for _ in range(16)]) with open(os.path.join(fpath0s, 'f0_test.txt'), 'w') as f: f.write(s0) with open(os.path.join(fpath1s, 'f1_test.txt'), 'w') as f: f.write(s1) logger.sleep(15) logger.print('checking folders at cl0 side') with open(os.path.join(fpath0s, 'f0_test.txt'), 'r') as f: ss0 = f.read() with open(os.path.join(fpath1s, 'f1_test.txt'), 'r') as f: ss1 = f.read() with open( os.path.join(self.test_root_path(), 'cl0', 'data', 'le folder 0', 'f0_test.txt'), 'r') as f: assert ss0 == f.read( ), 'c0 folder 0 contents mismatch. test failed. \n%s' % s0 with open( os.path.join(self.test_root_path(), 'cl0', 'data', 'la foldero 1', 'f1_test.txt'), 'r') as f: assert ss1 == f.read( ), 'c0 folder 1 contents mismatch. test failed. \n%s' % s1 logger.print( 'test 0, iter %d.\n %s\n %s\n----\n %s\n %s\n' % (i, s0, ss0, s1, ss1)) logger.print( 'stopping cl0 and removing then it from folder access') self.cl0.stop() self.srv.syncthingHandler.remove_device_from_folder( fid0, self.cl0.syncthingHandler.myId()) logger.sleep(10) logger.print('starting cl0...') self.cl0 = Server( os.path.join(self.test_root_path(), 'cl0', 'config'), os.path.join(self.test_root_path(), 'cl0', 'data')) self.cl0.start() logger.sleep(15) logger.print('checking folder access') assert not os.path.exists( os.path.join(self.test_root_path(), 'cl0', 'data', 'le folder 0') ), 'removed f 0 while client was down, but it is still here' assert os.path.exists( os.path.join(self.test_root_path(), 'cl0', 'data', 'la foldero 1') ), 'removed f 0 while client was down, but f 1 is not in place' with open( os.path.join(self.test_root_path(), 'cl0', 'data', 'la foldero 1', 'f1_test.txt'), 'r') as f: assert ss1 == f.read( ), 'c0 folder 1 contents mismatch. test failed. \n%s' % s1 logger.print( 'stopping cl0 and removing then it from folder access') self.cl0.stop() self.srv.syncthingHandler.remove_device_from_folder( fid1, self.cl0.syncthingHandler.myId()) logger.sleep(10) logger.print('starting cl0...') self.cl0 = Server( os.path.join(self.test_root_path(), 'cl0', 'config'), os.path.join(self.test_root_path(), 'cl0', 'data')) self.cl0.start() logger.sleep(15) logger.print('checking folder access') assert not os.path.exists( os.path.join(self.test_root_path(), 'cl0', 'data', 'le folder 0') ), 'removed f 1 while client was down, but f 0 it is still here' assert not os.path.exists( os.path.join(self.test_root_path(), 'cl0', 'data', 'la foldero 1') ), 'removed f 1 while client was down, but it is still here' with open(os.path.join(fpath0s, 'f0_test.txt'), 'r') as f: ss00 = f.read() assert ss00 == ss0, 'after folder deletion servers f0 content changed!\n%s\nvs\n%s\n' % ( ss00, ss0) with open(os.path.join(fpath1s, 'f1_test.txt'), 'r') as f: ss11 = f.read() assert ss11 == ss1, 'after folder deletion servers f1 content changed!\n%s\nvs\n%s\n' % ( ss11, ss1) logger.print( 'stopping cl0 and then adding it to folder access') self.cl0.stop() self.srv.syncthingHandler.add_device_to_folder( fid0, self.cl0.syncthingHandler.myId()) logger.sleep(10) logger.print('starting cl0...') self.cl0 = Server( os.path.join(self.test_root_path(), 'cl0', 'config'), os.path.join(self.test_root_path(), 'cl0', 'data')) self.cl0.start() logger.sleep(15) logger.print('checking folder access') assert os.path.exists( os.path.join(self.test_root_path(), 'cl0', 'data', 'le folder 0') ), 'added f 0 while client was down, but it is not here' assert not os.path.exists( os.path.join(self.test_root_path(), 'cl0', 'data', 'la foldero 1') ), 'added f 0 while client was down, but f 1 is here' with open( os.path.join(self.test_root_path(), 'cl0', 'data', 'le folder 0', 'f0_test.txt'), 'r') as f: assert ss0 == f.read( ), 'c0 folder 0 contents mismatch. test failed. \n%s' % s0 logger.print( 'stopping cl0 and then adding it to folder access') self.cl0.stop() self.srv.syncthingHandler.add_device_to_folder( fid1, self.cl0.syncthingHandler.myId()) logger.sleep(10) logger.print('starting cl0...') self.cl0 = Server( os.path.join(self.test_root_path(), 'cl0', 'config'), os.path.join(self.test_root_path(), 'cl0', 'data')) self.cl0.start() logger.sleep(15) logger.print('checking folder access') assert os.path.exists( os.path.join(self.test_root_path(), 'cl0', 'data', 'le folder 0') ), 'added f 1 while client was down, but f 0 it is not here' assert os.path.exists( os.path.join(self.test_root_path(), 'cl0', 'data', 'la foldero 1') ), 'added f 1 while client was down, but it is not here' with open( os.path.join(self.test_root_path(), 'cl0', 'data', 'le folder 0', 'f0_test.txt'), 'r') as f: assert ss0 == f.read( ), 'c0 folder 0 contents mismatch. test failed. \n%s' % s0 with open( os.path.join(self.test_root_path(), 'cl0', 'data', 'la foldero 1', 'f1_test.txt'), 'r') as f: assert ss1 == f.read( ), 'c0 folder 1 contents mismatch. test failed. \n%s' % s1 with open(os.path.join(fpath0s, 'f0_test.txt'), 'r') as f: ss00 = f.read() assert ss00 == ss0, 'after folder deletion servers f0 content changed!\n%s\nvs\n%s\n' % ( ss00, ss0) with open(os.path.join(fpath1s, 'f1_test.txt'), 'r') as f: ss11 = f.read() assert ss11 == ss1, 'after folder deletion servers f1 content changed!\n%s\nvs\n%s\n' % ( ss11, ss1) logger.print('stopping all') self.cl0.stop() self.srv.stop() logger.print("EVERYTHING STOPPED! ITERATION %d DONE" % i) self.srv = Server( os.path.join(self.test_root_path(), 'srv', 'config'), os.path.join(self.test_root_path(), 'srv', 'data')) self.cl0 = Server( os.path.join(self.test_root_path(), 'cl0', 'config'), os.path.join(self.test_root_path(), 'cl0', 'data')) finally: try: self.cl0.stop() except: pass try: self.srv.stop() except: pass
import sys from PySide2.QtWidgets import QApplication from lance.server import Server from lance_gui.detailviewer import DetailViewer if __name__ == '__main__': qapp = QApplication(sys.argv) wgt = DetailViewer() srv = Server('/tmp/lancetemp/cfg', '/tmp/lancetemp/data') wgt.set_server(srv) srv.start() wgt.show() res = qapp.exec_() srv.stop() sys.exit(res)
def runthread(self): try: self.srv = Server( os.path.join(self.test_root_path(), 'srv', 'config'), os.path.join(self.test_root_path(), 'srv', 'data')) self.cl0 = Server( os.path.join(self.test_root_path(), 'cl0', 'config'), os.path.join(self.test_root_path(), 'cl0', 'data')) self.cl1 = Server( os.path.join(self.test_root_path(), 'cl1', 'config'), os.path.join(self.test_root_path(), 'cl1', 'data')) self.cl2 = Server( os.path.join(self.test_root_path(), 'cl2', 'config'), os.path.join(self.test_root_path(), 'cl2', 'data')) srvid = self.srv.syncthingHandler.myId() cl0id = self.cl0.syncthingHandler.myId() cl1id = self.cl1.syncthingHandler.myId() cl2id = self.cl2.syncthingHandler.myId() fpath0s = os.path.join(self.test_root_path(), 'folder0_s') fpath1s = os.path.join(self.test_root_path(), 'folder1_s') fpath2s = os.path.join(self.test_root_path(), 'folder2_s') for fpath in (fpath0s, fpath1s, fpath2s): try: os.makedirs(fpath) except OSError as e: if e.errno != errno.EEXIST: raise self.cl0.syncthingHandler.set_server_secret('wowsecret2').result() self.cl1.syncthingHandler.set_server_secret('wowsecret2').result() self.cl2.syncthingHandler.set_server_secret('wowsecret2').result() self.srv.syncthingHandler.set_server_secret('wowsecret2').result() self.srv.syncthingHandler.add_server(srvid).result() self.srv.syncthingHandler.add_device(cl0id).result() self.srv.syncthingHandler.add_device(cl1id).result() self.srv.syncthingHandler.add_device(cl2id).result() ### self.cl0.syncthingHandler.add_server(srvid).result() self.cl1.syncthingHandler.add_server(srvid).result() self.cl2.syncthingHandler.add_server(srvid).result() fidA = self.srv.syncthingHandler.add_folder( fpath0s, 'folder_A', [cl0id, cl1id]).result() fidB = self.srv.syncthingHandler.add_folder( fpath1s, 'folder_B', [cl1id, cl2id]).result() fidC = self.srv.syncthingHandler.add_folder( fpath2s, 'folder_C', [cl2id, cl0id]).result() for i in range(3): self.wgt0.set_server( self.cl0 ) # This particular part might be not quite threadsafe, self.srv.start() self.cl0.start() self.cl1.start() self.cl2.start() time.sleep(10) s0 = 'f0 random information %s' % ''.join( [random.choice(string.printable) for _ in range(16)]) s1 = 'f1 randomer informationes %s' % ''.join( [random.choice(string.printable) for _ in range(16)]) s2 = 'f2 even randomer informationes %s' % ''.join( [random.choice(string.printable) for _ in range(16)]) with open(os.path.join(fpath0s, 'f0_test.txt'), 'w') as f: f.write(s0) with open(os.path.join(fpath1s, 'f1_test.txt'), 'w') as f: f.write(s1) with open(os.path.join(fpath2s, 'f2_test.txt'), 'w') as f: f.write(s2) time.sleep(15) with open(os.path.join(fpath0s, 'f0_test.txt'), 'r') as f: ss0 = f.read() with open(os.path.join(fpath1s, 'f1_test.txt'), 'r') as f: ss1 = f.read() with open(os.path.join(fpath2s, 'f2_test.txt'), 'r') as f: ss2 = f.read() with open( os.path.join(self.test_root_path(), 'cl0', 'data', 'folder_A', 'f0_test.txt'), 'r') as f: assert ss0 == f.read( ), 'c0 folder 0 contents mismatch. test failed. \n%s' % s0 with open( os.path.join(self.test_root_path(), 'cl1', 'data', 'folder_A', 'f0_test.txt'), 'r') as f: assert ss0 == f.read( ), 'c1 folder 0 contents mismatch. test failed. \n%s' % s0 with open( os.path.join(self.test_root_path(), 'cl1', 'data', 'folder_B', 'f1_test.txt'), 'r') as f: assert ss1 == f.read( ), 'c1 folder 1 contents mismatch. test failed. \n%s' % s1 with open( os.path.join(self.test_root_path(), 'cl2', 'data', 'folder_B', 'f1_test.txt'), 'r') as f: assert ss1 == f.read( ), 'c2 folder 1 contents mismatch. test failed. \n%s' % s1 with open( os.path.join(self.test_root_path(), 'cl2', 'data', 'folder_C', 'f2_test.txt'), 'r') as f: assert ss2 == f.read( ), 'c2 folder 2 contents mismatch. test failed. \n%s' % s2 with open( os.path.join(self.test_root_path(), 'cl0', 'data', 'folder_C', 'f2_test.txt'), 'r') as f: assert ss2 == f.read( ), 'c0 folder 2 contents mismatch. test failed. \n%s' % s2 self.srv.syncthingHandler.remove_device_from_folder( fidA, cl1id).result() self.srv.syncthingHandler.remove_device_from_folder( fidB, cl2id).result() self.srv.syncthingHandler.remove_device_from_folder( fidC, cl0id).result() self.srv.syncthingHandler.add_device_to_folder(fidA, cl2id).result() self.srv.syncthingHandler.add_device_to_folder(fidB, cl0id).result() self.srv.syncthingHandler.add_device_to_folder(fidC, cl1id).result() time.sleep(15) assert not os.path.exists( os.path.join(self.test_root_path(), 'cl1', 'data', 'folder_A')), 'FolderA not deleted from cl1' assert not os.path.exists( os.path.join(self.test_root_path(), 'cl2', 'data', 'folder_B')), 'FolderB not deleted from cl2' assert not os.path.exists( os.path.join(self.test_root_path(), 'cl0', 'data', 'folder_C')), 'FolderC not deleted from cl0' with open( os.path.join(self.test_root_path(), 'cl0', 'data', 'folder_A', 'f0_test.txt'), 'r') as f: assert ss0 == f.read( ), 'c0 folder 0 contents mismatch. test failed. \n%s' % s0 with open( os.path.join(self.test_root_path(), 'cl2', 'data', 'folder_A', 'f0_test.txt'), 'r') as f: assert ss0 == f.read( ), 'c2 folder 0 contents mismatch. test failed. \n%s' % s0 with open( os.path.join(self.test_root_path(), 'cl1', 'data', 'folder_B', 'f1_test.txt'), 'r') as f: assert ss1 == f.read( ), 'c1 folder 1 contents mismatch. test failed. \n%s' % s1 with open( os.path.join(self.test_root_path(), 'cl0', 'data', 'folder_B', 'f1_test.txt'), 'r') as f: assert ss1 == f.read( ), 'c0 folder 1 contents mismatch. test failed. \n%s' % s1 with open( os.path.join(self.test_root_path(), 'cl2', 'data', 'folder_C', 'f2_test.txt'), 'r') as f: assert ss2 == f.read( ), 'c2 folder 2 contents mismatch. test failed. \n%s' % s2 with open( os.path.join(self.test_root_path(), 'cl1', 'data', 'folder_C', 'f2_test.txt'), 'r') as f: assert ss2 == f.read( ), 'c1 folder 2 contents mismatch. test failed. \n%s' % s2 self.srv.syncthingHandler.remove_device_from_folder( fidA, cl0id).result() self.srv.syncthingHandler.remove_device_from_folder( fidB, cl1id).result() self.srv.syncthingHandler.remove_device_from_folder( fidC, cl2id).result() self.srv.syncthingHandler.add_device_to_folder(fidA, cl1id).result() self.srv.syncthingHandler.add_device_to_folder(fidB, cl2id).result() self.srv.syncthingHandler.add_device_to_folder(fidC, cl0id).result() time.sleep(15) assert not os.path.exists( os.path.join(self.test_root_path(), 'cl0', 'data', 'folder_A')), 'FolderA not deleted from cl0' assert not os.path.exists( os.path.join(self.test_root_path(), 'cl1', 'data', 'folder_B')), 'FolderB not deleted from cl1' assert not os.path.exists( os.path.join(self.test_root_path(), 'cl2', 'data', 'folder_C')), 'FolderC not deleted from cl2' with open( os.path.join(self.test_root_path(), 'cl1', 'data', 'folder_A', 'f0_test.txt'), 'r') as f: assert ss0 == f.read( ), 'c1 folder 0 contents mismatch. test failed. \n%s' % s0 with open( os.path.join(self.test_root_path(), 'cl2', 'data', 'folder_A', 'f0_test.txt'), 'r') as f: assert ss0 == f.read( ), 'c2 folder 0 contents mismatch. test failed. \n%s' % s0 with open( os.path.join(self.test_root_path(), 'cl2', 'data', 'folder_B', 'f1_test.txt'), 'r') as f: assert ss1 == f.read( ), 'c2 folder 1 contents mismatch. test failed. \n%s' % s1 with open( os.path.join(self.test_root_path(), 'cl0', 'data', 'folder_B', 'f1_test.txt'), 'r') as f: assert ss1 == f.read( ), 'c0 folder 1 contents mismatch. test failed. \n%s' % s1 with open( os.path.join(self.test_root_path(), 'cl0', 'data', 'folder_C', 'f2_test.txt'), 'r') as f: assert ss2 == f.read( ), 'c0 folder 2 contents mismatch. test failed. \n%s' % s2 with open( os.path.join(self.test_root_path(), 'cl1', 'data', 'folder_C', 'f2_test.txt'), 'r') as f: assert ss2 == f.read( ), 'c1 folder 2 contents mismatch. test failed. \n%s' % s2 self.cl0.stop() self.cl1.stop() self.cl2.stop() self.srv.stop() print("EVERYTHING STOPPED! ITERATION %d DONE" % i) self.srv = Server( os.path.join(self.test_root_path(), 'srv', 'config'), os.path.join(self.test_root_path(), 'srv', 'data')) self.cl0 = Server( os.path.join(self.test_root_path(), 'cl0', 'config'), os.path.join(self.test_root_path(), 'cl0', 'data')) self.cl1 = Server( os.path.join(self.test_root_path(), 'cl1', 'config'), os.path.join(self.test_root_path(), 'cl1', 'data')) self.cl2 = Server( os.path.join(self.test_root_path(), 'cl2', 'config'), os.path.join(self.test_root_path(), 'cl2', 'data')) self.srv.syncthingHandler.remove_device_from_folder( fidA, cl2id).result() self.srv.syncthingHandler.remove_device_from_folder( fidB, cl0id).result() self.srv.syncthingHandler.remove_device_from_folder( fidC, cl1id).result() self.srv.syncthingHandler.add_device_to_folder(fidA, cl0id).result() self.srv.syncthingHandler.add_device_to_folder(fidB, cl1id).result() self.srv.syncthingHandler.add_device_to_folder(fidC, cl2id).result() except Exception as e: self.error = e self.qapp.quit() finally: if isinstance(self.wgt0, DetailViewer): self.wgt0.close() try: self.cl0.stop() except: pass try: self.cl1.stop() except: pass try: self.cl2.stop() except: pass try: self.srv.stop() except: pass
def testBody(self, logger): try: self.srv0 = Server( os.path.join(self.test_root_path(), 'srv0', 'config'), os.path.join(self.test_root_path(), 'srv0', 'data')) self.srv1 = Server( os.path.join(self.test_root_path(), 'srv1', 'config'), os.path.join(self.test_root_path(), 'srv1', 'data')) self.cl0 = Server( os.path.join(self.test_root_path(), 'cl0', 'config'), os.path.join(self.test_root_path(), 'cl0', 'data')) self.cl1 = Server( os.path.join(self.test_root_path(), 'cl1', 'config'), os.path.join(self.test_root_path(), 'cl1', 'data')) fpath0s0 = os.path.join(self.test_root_path(), 'folder0_s0') fpath1s0 = os.path.join(self.test_root_path(), 'folder1_s0') fpath0s1 = os.path.join(self.test_root_path(), 'folder0_s1') fpath1s1 = os.path.join(self.test_root_path(), 'folder1_s1') for fpath in (fpath0s0, fpath1s0, fpath0s1, fpath1s1): try: os.makedirs(fpath) except OSError as e: if e.errno != errno.EEXIST: raise self.cl0.syncthingHandler.set_server_secret('wowsecret').result() self.cl1.syncthingHandler.set_server_secret('wowsecret').result() self.srv0.syncthingHandler.set_server_secret('wowsecret').result() self.srv1.syncthingHandler.set_server_secret('wowsecret').result() self.srv0.syncthingHandler.add_server( self.srv0.syncthingHandler.myId()).result() self.srv0.syncthingHandler.add_server( self.srv1.syncthingHandler.myId()).result() self.srv1.syncthingHandler.add_server( self.srv0.syncthingHandler.myId()).result() self.srv1.syncthingHandler.add_server( self.srv1.syncthingHandler.myId()).result() #self.srv0.syncthingHandler.add_device(self.cl0.syncthingHandler.myId()).result() #self.srv0.syncthingHandler.add_device(self.cl1.syncthingHandler.myId()).result() self.cl0.syncthingHandler.add_server( self.srv0.syncthingHandler.myId()).result() self.cl1.syncthingHandler.add_server( self.srv0.syncthingHandler.myId()).result() self.srv0.add_project('testproject1') for i in range(5): logger.print('starting iteration %d' % i) self.srv0.start() self.srv1.start() self.cl0.start() self.cl1.start() logger.print('all servers started') logger.print('checking project manager for project') def _check0_(): assert len( self.srv0.projectManagers ) == 1, 'srv0 has %d projects instead of 1' % len( self.srv0.projectManagers) assert len( self.srv1.projectManagers ) == 1, 'srv1 has %d projects instead of 1' % len( self.srv1.projectManagers) assert os.path.exists( os.path.join(self.test_root_path(), 'srv0', 'data', 'project_testproject1_configuration', 'config.cfg') ), 'srv0 init project configuration is missing' assert os.path.exists( os.path.join(self.test_root_path(), 'srv1', 'data', 'project testproject1 configuration', 'config.cfg') ), 'srv1 init project configuration is missing' logger.check(_check0_, timeout=300, time_to_hold=30) srv0_pm = tuple(self.srv0.projectManagers.values())[0] srv1_pm = tuple(self.srv1.projectManagers.values())[0] assert srv0_pm.project_name( ) == 'testproject1', 'srv0 project name mismatch. got %s' % srv0_pm.project_name( ) assert srv1_pm.project_name( ) == 'testproject1', 'srv1 project name mismatch. got %s' % srv1_pm.project_name( ) srv0_shts = srv0_pm.get_shots().result() srv1_shts = srv1_pm.get_shots().result() assert len( srv0_shts ) == 0, 'srv0 shotcount == %d, expected 0' % len(srv0_shts) assert len( srv1_shts ) == 0, 'srv1 shotcount == %d, expected 0' % len(srv1_shts) logger.print('adding a test shotid') srv0_pm.add_shot('first shotid', 'firstshot_id', fpath0s0).result() logger.print('adding a user') srv1_pm.add_user('al.bob', 'Alice Bobovich', [], [('firstshot_id', 'main')]).result() s0 = 'f0 random information %s' % ''.join( [random.choice(string.printable) for _ in range(16)]) with open(os.path.join(fpath0s0, 'f0_test.txt'), 'w') as f: f.write(s0) with open(os.path.join(fpath0s0, 'f0_test.txt'), 'r') as f: s0 = f.read() logger.print( 'checking if user exists and checking shotid folder') def _check1_(): """ checking for user and shotid exist """ assert 'al.bob' in srv0_pm.get_users().result( ), 'al.bob not in srv0' assert 'al.bob' in srv1_pm.get_users().result( ), 'al.bob not in srv1' assert not os.path.exists( os.path.join(self.test_root_path(), 'cl0', 'data', 'first shotid :main')), 'cl0 has shotid!' assert not os.path.exists( os.path.join(self.test_root_path(), 'cl1', 'data', 'first shotid :main')), 'cl1 has shotid!' assert 'firstshot_id' in srv0_pm.get_shots().result() assert 'firstshot_id' in srv1_pm.get_shots().result() def _check1a_(): """ checking for shotid data sync """ _check1_() with open( os.path.join(self.test_root_path(), 'srv1', 'data', 'first shotid :main', 'f0_test.txt'), 'r') as f: assert s0 == f.read( ), 'srv1 folder 0 contents mismatch. test failed. \n%s' % s0 logger.check(_check1_, timeout=300) logger.check(_check1a_, timeout=300, time_to_hold=30) logger.print('adding cl0 to user devices') srv0_pm.add_devices_to_user('al.bob', self.cl0.syncthingHandler.myId()) def _check2_(): """ checking cl0 has the shotid """ assert 'al.bob' in srv0_pm.get_users().result( ), 'al.bob not in srv0' assert 'al.bob' in srv1_pm.get_users().result( ), 'al.bob not in srv1' assert 'firstshot_id' in srv0_pm.get_shots().result() assert 'firstshot_id' in srv1_pm.get_shots().result() assert not os.path.exists( os.path.join(self.test_root_path(), 'cl1', 'data', 'first shotid :main')), 'cl1 has shotid!' assert os.path.exists( os.path.join( self.test_root_path(), 'cl0', 'data', 'first shotid :main')), 'cl0 does not have shotid!' def _check2a_(): """ checking for data sync """ _check2_() with open( os.path.join(self.test_root_path(), 'srv1', 'data', 'first shotid :main', 'f0_test.txt'), 'r') as f: assert s0 == f.read( ), 'srv1 folder 0 contents mismatch. test failed. \n%s' % s0 with open( os.path.join(self.test_root_path(), 'cl0', 'data', 'first shotid :main', 'f0_test.txt'), 'r') as f: assert s0 == f.read( ), 'c0 shotid folder contents mismatch. test failed. \n%s' % s0 logger.check(_check2_, timeout=300) logger.check(_check2a_, timeout=300, time_to_hold=30) logger.print('adding cl1 to user devices') srv1_pm.add_devices_to_user('al.bob', self.cl1.syncthingHandler.myId()) def _check3_(): assert 'al.bob' in srv0_pm.get_users().result( ), 'al.bob not in srv0' assert 'al.bob' in srv1_pm.get_users().result( ), 'al.bob not in srv1' with open( os.path.join(self.test_root_path(), 'srv1', 'data', 'first shotid :main', 'f0_test.txt'), 'r') as f: assert s0 == f.read( ), 'srv1 folder 0 contents mismatch. test failed. \n%s' % s0 with open( os.path.join(self.test_root_path(), 'cl0', 'data', 'first shotid :main', 'f0_test.txt'), 'r') as f: assert s0 == f.read( ), 'c0 shotid folder contents mismatch. test failed. \n%s' % s0 with open( os.path.join(self.test_root_path(), 'cl1', 'data', 'first shotid :main', 'f0_test.txt'), 'r') as f: assert s0 == f.read( ), 'c1 shotid folder contents mismatch. test failed. \n%s' % s0 assert 'firstshot_id' in srv0_pm.get_shots().result() assert 'firstshot_id' in srv1_pm.get_shots().result() logger.check(_check3_, timeout=300, time_to_hold=30) logger.print('removing cl0 from user devices') srv1_pm.remove_devices_from_user( 'al.bob', self.cl0.syncthingHandler.myId()) def _check4_(): srv0users = srv0_pm.get_users().result() srv1users = srv1_pm.get_users().result() cl0id = self.cl0.syncthingHandler.myId() assert 'al.bob' in srv0users, 'al.bob not in srv0' assert 'al.bob' in srv1users, 'al.bob not in srv1' assert cl0id not in srv0users['al.bob'].device_ids() assert cl0id not in srv1users['al.bob'].device_ids() with open( os.path.join(self.test_root_path(), 'srv1', 'data', 'first shotid :main', 'f0_test.txt'), 'r') as f: assert s0 == f.read( ), 'srv1 folder 0 contents mismatch. test failed. \n%s' % s0 assert not os.path.exists( os.path.join(self.test_root_path(), 'cl0', 'data', 'first shotid :main')), 'cl0 has shotid!' with open( os.path.join(self.test_root_path(), 'cl1', 'data', 'first shotid :main', 'f0_test.txt'), 'r') as f: assert s0 == f.read( ), 'c1 shotid folder contents mismatch. test failed. \n%s' % s0 assert 'firstshot_id' in srv0_pm.get_shots().result() assert 'firstshot_id' in srv1_pm.get_shots().result() logger.check(_check4_, timeout=300, time_to_hold=40) logger.print('removing cl1 from user devices') srv0_pm.remove_devices_from_user( 'al.bob', self.cl1.syncthingHandler.myId()) def _check5_(): srv0users = srv0_pm.get_users().result() srv1users = srv1_pm.get_users().result() cl1id = self.cl1.syncthingHandler.myId() assert 'al.bob' in srv0users, 'al.bob not in srv0' assert 'al.bob' in srv1users, 'al.bob not in srv1' assert cl1id not in srv0users['al.bob'].device_ids() assert cl1id not in srv1users['al.bob'].device_ids() with open( os.path.join(self.test_root_path(), 'srv1', 'data', 'first shotid :main', 'f0_test.txt'), 'r') as f: assert s0 == f.read( ), 'srv1 folder 0 contents mismatch. test failed. \n%s' % s0 assert not os.path.exists( os.path.join(self.test_root_path(), 'cl0', 'data', 'first shotid :main')), 'cl0 has shotid!' assert not os.path.exists( os.path.join(self.test_root_path(), 'cl1', 'data', 'first shotid :main')), 'cl1 has shotid!' assert 'firstshot_id' in srv0_pm.get_shots().result() assert 'firstshot_id' in srv1_pm.get_shots().result() logger.check(_check5_, timeout=300, time_to_hold=40) logger.print('removing shotid') srv1_pm.remove_shot('firstshot_id').result() logger.print('checking the shotid is removed') def _check6_(): assert os.path.exists( fpath0s0 ), 'srv0 shotpath does not exists' # servers do not delete folders from disc assert os.path.exists( os.path.join(self.test_root_path(), 'srv1', 'data', 'first shotid :main') ), 'srv1 shotpath does not exists' # servers do not delete folders from disc #assert len([x for x in os.listdir(os.path.join(self.test_root_path(), 'srv0', 'data', 'server', 'configuration', 'folders')) if 'firstshot' in x]) == 0, 'firstshot is still in srv0 config' #assert len([x for x in os.listdir(os.path.join(self.test_root_path(), 'srv1', 'data', 'server', 'configuration', 'folders')) if 'firstshot' in x]) == 0, 'firstshot is still in srv1 config' assert not os.path.exists( os.path.join( self.test_root_path(), 'cl0', 'data', 'first shotid :main')), 'cl0 shotpath still exists' assert not os.path.exists( os.path.join( self.test_root_path(), 'cl1', 'data', 'first shotid :main')), 'cl1 shotpath still exists' assert 'firstshot_id' not in srv0_pm.get_shots().result() assert 'firstshot_id' not in srv1_pm.get_shots().result() logger.check(_check6_, timeout=300, time_to_hold=20) logger.print('removing user') srv1_pm.remove_user('al.bob') logger.print('checking if user is gone') def _check7_(): assert len(srv0_pm.get_users().result() ) == 0, 'srv0 has nonzero users' assert len(srv1_pm.get_users().result() ) == 0, 'srv1 has nonzero users' logger.check(_check7_, timeout=300, time_to_hold=30) logger.print('stopping all servers') self.cl0.stop() self.cl1.stop() self.srv0.stop() self.srv1.stop() logger.print("EVERYTHING STOPPED! ITERATION %d DONE" % i) self.srv0 = Server( os.path.join(self.test_root_path(), 'srv0', 'config'), os.path.join(self.test_root_path(), 'srv0', 'data')) self.srv1 = Server( os.path.join(self.test_root_path(), 'srv1', 'config'), os.path.join(self.test_root_path(), 'srv1', 'data')) self.cl0 = Server( os.path.join(self.test_root_path(), 'cl0', 'config'), os.path.join(self.test_root_path(), 'cl0', 'data')) self.cl1 = Server( os.path.join(self.test_root_path(), 'cl1', 'config'), os.path.join(self.test_root_path(), 'cl1', 'data')) finally: try: self.cl0.stop() except: pass try: self.cl1.stop() except: pass try: self.srv0.stop() except: pass try: self.srv1.stop() except: pass