2019-06-30 20:14:03 +00:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								__filename__  =  " tests.py "  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								__author__  =  " Bob Mottram "  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								__license__  =  " AGPL3+ "  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								__version__  =  " 0.0.1 "  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								__maintainer__  =  " Bob Mottram "  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								__email__  =  " bob@freedombone.net "  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								__status__  =  " Production "  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								import  base64  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								import  time  
						 
					
						
							
								
									
										
										
										
											2019-06-30 21:20:02 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								import  os  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								import  shutil  
						 
					
						
							
								
									
										
										
										
											2019-06-30 20:14:03 +00:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								from  person  import  createPerson  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								from  Crypto . Hash  import  SHA256  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								from  httpsig  import  signPostHeaders  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								from  httpsig  import  verifyPostHeaders  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								from  cache  import  storePersonInCache  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								from  cache  import  getPersonFromCache  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								from  threads  import  threadWithTrace  
						 
					
						
							
								
									
										
										
										
											2019-06-30 21:20:02 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								from  daemon  import  runDaemon  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								from  session  import  createSession  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								from  person  import  createPerson  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								from  posts  import  deleteAllPosts  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								from  posts  import  createPublicPost  
						 
					
						
							
								
									
										
										
										
											2019-06-30 22:56:37 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								from  posts  import  sendPost  
						 
					
						
							
								
									
										
										
										
											2019-07-01 11:09:09 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								from  follow  import  clearFollows  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								from  follow  import  clearFollowers  
						 
					
						
							
								
									
										
										
										
											2019-06-30 21:20:02 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								from  follow  import  followPerson  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								from  follow  import  followerOfPerson  
						 
					
						
							
								
									
										
										
										
											2019-07-01 11:09:09 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								from  follow  import  unfollowPerson  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								from  follow  import  unfollowerOfPerson  
						 
					
						
							
								
									
										
										
										
											2019-06-30 20:14:03 +00:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2019-06-30 21:27:25 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								testServerAliceRunning  =  False  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								testServerBobRunning  =  False  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2019-06-30 20:14:03 +00:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								def  testHttpsigBase ( withDigest ) :  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    print ( ' testHttpsig( '  +  str ( withDigest )  +  ' ) ' ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    username = ' socrates ' 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    domain = ' argumentative.social ' 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    https = True 
							 
						 
					
						
							
								
									
										
										
										
											2019-07-01 09:31:02 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    port = 5576 
							 
						 
					
						
							
								
									
										
										
										
											2019-06-30 22:56:37 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    baseDir = os . getcwd ( ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    privateKeyPem , publicKeyPem , person , wfEndpoint = createPerson ( baseDir , username , domain , port , https , False ) 
							 
						 
					
						
							
								
									
										
										
										
											2019-07-01 09:31:02 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    messageBodyJsonStr  =  ' { " a key " :  " a value " ,  " another key " :  " A string " } ' 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    headersDomain = domain 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    if  port != 80  and  port  != 443 : 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        headersDomain = domain + ' : ' + str ( port ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2019-06-30 20:14:03 +00:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								    if  not  withDigest : 
							 
						 
					
						
							
								
									
										
										
										
											2019-07-01 09:31:02 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        headers  =  { ' host ' :  headersDomain } 
							 
						 
					
						
							
								
									
										
										
										
											2019-06-30 20:14:03 +00:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								    else : 
							 
						 
					
						
							
								
									
										
										
										
											2019-07-01 09:31:02 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        bodyDigest  =  base64 . b64encode ( SHA256 . new ( messageBodyJsonStr . encode ( ) ) . digest ( ) ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        headers  =  { ' host ' :  headersDomain ,  ' digest ' :  f ' SHA-256= { bodyDigest } ' } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2019-06-30 20:14:03 +00:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								    path = ' /inbox ' 
							 
						 
					
						
							
								
									
										
										
										
											2019-07-01 09:31:02 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    signatureHeader  =  signPostHeaders ( privateKeyPem ,  username ,  domain ,  port ,  path ,  https ,  None ) 
							 
						 
					
						
							
								
									
										
										
										
											2019-06-30 20:14:03 +00:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								    headers [ ' signature ' ]  =  signatureHeader 
							 
						 
					
						
							
								
									
										
										
										
											2019-07-01 09:31:02 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    assert  verifyPostHeaders ( https ,  publicKeyPem ,  headers ,  ' /inbox '  , False ,  messageBodyJsonStr ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    assert  verifyPostHeaders ( https ,  publicKeyPem ,  headers ,  ' /parambulator/inbox ' ,  False  ,  messageBodyJsonStr )  ==  False 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    assert  verifyPostHeaders ( https ,  publicKeyPem ,  headers ,  ' /inbox ' ,  True ,  messageBodyJsonStr )  ==  False 
							 
						 
					
						
							
								
									
										
										
										
											2019-06-30 20:14:03 +00:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								    if  not  withDigest : 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        # fake domain 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        headers  =  { ' host ' :  ' bogon.domain ' } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    else : 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        # correct domain but fake message 
							 
						 
					
						
							
								
									
										
										
										
											2019-07-01 09:31:02 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        messageBodyJsonStr  =  ' { " a key " :  " a value " ,  " another key " :  " Fake GNUs " } ' 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        bodyDigest  =  base64 . b64encode ( SHA256 . new ( messageBodyJsonStr . encode ( ) ) . digest ( ) ) 
							 
						 
					
						
							
								
									
										
										
										
											2019-06-30 20:14:03 +00:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								        headers  =  { ' host ' :  domain ,  ' digest ' :  f ' SHA-256= { bodyDigest } ' }         
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    headers [ ' signature ' ]  =  signatureHeader 
							 
						 
					
						
							
								
									
										
										
										
											2019-07-01 09:31:02 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    assert  verifyPostHeaders ( https ,  publicKeyPem ,  headers ,  ' /inbox ' ,  True ,  messageBodyJsonStr )  ==  False 
							 
						 
					
						
							
								
									
										
										
										
											2019-06-30 20:14:03 +00:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								def  testHttpsig ( ) :  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    testHttpsigBase ( False ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    testHttpsigBase ( True ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								def  testCache ( ) :  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    print ( ' testCache ' ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    personUrl = " cat@cardboard.box " 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    personJson = {  " id " :  123456 ,  " test " :  " This is a test "  } 
							 
						 
					
						
							
								
									
										
										
										
											2019-07-01 14:30:48 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    personCache = { } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    storePersonInCache ( personUrl , personJson , personCache ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    result = getPersonFromCache ( personUrl , personCache ) 
							 
						 
					
						
							
								
									
										
										
										
											2019-06-30 20:14:03 +00:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								    assert  result [ ' id ' ] == 123456 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    assert  result [ ' test ' ] == ' This is a test ' 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								def  testThreadsFunction ( param :  str ) :  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    for  i  in  range ( 10000 ) : 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        time . sleep ( 2 ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								def  testThreads ( ) :  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    print ( ' testThreads ' ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    thr  =  threadWithTrace ( target = testThreadsFunction , args = ( ' test ' , ) , daemon = True ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    thr . start ( ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    assert  thr . isAlive ( ) == True 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    time . sleep ( 1 ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    thr . kill ( ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    thr . join ( ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    assert  thr . isAlive ( ) == False 
							 
						 
					
						
							
								
									
										
										
										
											2019-06-30 21:20:02 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2019-07-01 21:01:43 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								def  createServerAlice ( path :  str , domain :  str , port :  int , federationList :  [ ] ) :  
						 
					
						
							
								
									
										
										
										
											2019-06-30 21:20:02 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    print ( ' Creating test server: Alice on port  ' + str ( port ) ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    if  os . path . isdir ( path ) : 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        shutil . rmtree ( path ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    os . mkdir ( path ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    os . chdir ( path ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    username = ' alice ' 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    https = False 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    useTor = False 
							 
						 
					
						
							
								
									
										
										
										
											2019-06-30 22:56:37 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    privateKeyPem , publicKeyPem , person , wfEndpoint = createPerson ( path , username , domain , port , https , True ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    deleteAllPosts ( username , domain , path ) 
							 
						 
					
						
							
								
									
										
										
										
											2019-07-02 09:25:29 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    followPerson ( path , username , domain , ' bob ' , ' 127.0.0.100:61936 ' , federationList ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    followerOfPerson ( path , username , domain , ' bob ' , ' 127.0.0.100:61936 ' , federationList ) 
							 
						 
					
						
							
								
									
										
										
										
											2019-07-01 12:47:08 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    createPublicPost ( path , username ,  domain ,  port , https ,  " No wise fish would go anywhere without a porpoise " ,  False ,  True ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    createPublicPost ( path , username ,  domain ,  port , https ,  " Curiouser and curiouser! " ,  False ,  True ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    createPublicPost ( path , username ,  domain ,  port , https ,  " In the gardens of memory, in the palace of dreams, that is where you and I shall meet " ,  False ,  True ) 
							 
						 
					
						
							
								
									
										
										
										
											2019-06-30 21:27:25 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    global  testServerAliceRunning 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    testServerAliceRunning  =  True 
							 
						 
					
						
							
								
									
										
										
										
											2019-06-30 21:20:02 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    print ( ' Server running: Alice ' ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    runDaemon ( domain , port , https , federationList , useTor ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2019-07-01 21:01:43 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								def  createServerBob ( path :  str , domain :  str , port :  int , federationList :  [ ] ) :  
						 
					
						
							
								
									
										
										
										
											2019-06-30 21:20:02 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    print ( ' Creating test server: Bob on port  ' + str ( port ) ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    if  os . path . isdir ( path ) : 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        shutil . rmtree ( path ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    os . mkdir ( path ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    os . chdir ( path ) 
							 
						 
					
						
							
								
									
										
										
										
											2019-07-01 08:22:15 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    username = ' bob ' 
							 
						 
					
						
							
								
									
										
										
										
											2019-06-30 21:20:02 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    https = False 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    useTor = False 
							 
						 
					
						
							
								
									
										
										
										
											2019-06-30 22:56:37 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    privateKeyPem , publicKeyPem , person , wfEndpoint = createPerson ( path , username , domain , port , https , True ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    deleteAllPosts ( username , domain , path ) 
							 
						 
					
						
							
								
									
										
										
										
											2019-07-02 09:25:29 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    followPerson ( path , username , domain , ' alice ' , ' 127.0.0.50:61935 ' , federationList ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    followerOfPerson ( path , username , domain , ' alice ' , ' 127.0.0.50:61935 ' , federationList ) 
							 
						 
					
						
							
								
									
										
										
										
											2019-07-01 12:47:08 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    createPublicPost ( path , username ,  domain ,  port , https ,  " It ' s your life, live it your way. " ,  False ,  True ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    createPublicPost ( path , username ,  domain ,  port , https ,  " One of the things I ' ve realised is that I am very simple " ,  False ,  True ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    createPublicPost ( path , username ,  domain ,  port , https ,  " Quantum physics is a bit of a passion of mine " ,  False ,  True ) 
							 
						 
					
						
							
								
									
										
										
										
											2019-06-30 21:27:25 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    global  testServerBobRunning 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    testServerBobRunning  =  True 
							 
						 
					
						
							
								
									
										
										
										
											2019-06-30 21:20:02 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    print ( ' Server running: Bob ' ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    runDaemon ( domain , port , https , federationList , useTor ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								def  testPostMessageBetweenServers ( ) :  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    print ( ' Testing sending message from one server to the inbox of another ' ) 
							 
						 
					
						
							
								
									
										
										
										
											2019-06-30 21:27:25 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    global  testServerAliceRunning 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    global  testServerBobRunning 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    testServerAliceRunning  =  False 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    testServerBobRunning  =  False 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2019-06-30 22:56:37 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    https = False 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    useTor = False 
							 
						 
					
						
							
								
									
										
										
										
											2019-07-02 09:25:29 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    federationList = [ ' 127.0.0.50 ' , ' 127.0.0.100 ' ] 
							 
						 
					
						
							
								
									
										
										
										
											2019-06-30 22:56:37 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2019-06-30 21:20:02 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    baseDir = os . getcwd ( ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    if  not  os . path . isdir ( baseDir + ' /.tests ' ) : 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        os . mkdir ( baseDir + ' /.tests ' ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    # create the servers 
							 
						 
					
						
							
								
									
										
										
										
											2019-06-30 22:56:37 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    aliceDir = baseDir + ' /.tests/alice ' 
							 
						 
					
						
							
								
									
										
										
										
											2019-07-02 09:25:29 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    aliceDomain = ' 127.0.0.50 ' 
							 
						 
					
						
							
								
									
										
										
										
											2019-06-30 22:56:37 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    alicePort = 61935 
							 
						 
					
						
							
								
									
										
										
										
											2019-07-01 21:01:43 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    thrAlice  =  threadWithTrace ( target = createServerAlice , args = ( aliceDir , aliceDomain , alicePort , federationList ) , daemon = True ) 
							 
						 
					
						
							
								
									
										
										
										
											2019-06-30 21:20:02 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2019-06-30 22:56:37 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    bobDir = baseDir + ' /.tests/bob ' 
							 
						 
					
						
							
								
									
										
										
										
											2019-07-02 09:25:29 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    bobDomain = ' 127.0.0.100 ' 
							 
						 
					
						
							
								
									
										
										
										
											2019-06-30 22:56:37 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    bobPort = 61936 
							 
						 
					
						
							
								
									
										
										
										
											2019-07-01 21:01:43 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    thrBob  =  threadWithTrace ( target = createServerBob , args = ( bobDir , bobDomain , bobPort , federationList ) , daemon = True ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    thrAlice . start ( ) 
							 
						 
					
						
							
								
									
										
										
										
											2019-06-30 21:20:02 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    thrBob . start ( ) 
							 
						 
					
						
							
								
									
										
										
										
											2019-07-01 21:01:43 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    assert  thrAlice . isAlive ( ) == True 
							 
						 
					
						
							
								
									
										
										
										
											2019-06-30 21:20:02 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    assert  thrBob . isAlive ( ) == True 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2019-06-30 21:27:25 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    # wait for both servers to be running 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    while  not  ( testServerAliceRunning  and  testServerBobRunning ) : 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        time . sleep ( 1 ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        
							 
						 
					
						
							
								
									
										
										
										
											2019-07-01 21:01:43 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    time . sleep ( 6 ) 
							 
						 
					
						
							
								
									
										
										
										
											2019-06-30 21:20:02 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2019-06-30 22:56:37 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    print ( ' Alice sends to Bob ' ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    os . chdir ( aliceDir ) 
							 
						 
					
						
							
								
									
										
										
										
											2019-07-02 09:25:29 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    sessionAlice  =  createSession ( aliceDomain , alicePort , useTor ) 
							 
						 
					
						
							
								
									
										
										
										
											2019-06-30 22:56:37 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    inReplyTo = None 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    inReplyToAtomUri = None 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    subject = None 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    aliceSendThreads  =  [ ] 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    alicePostLog  =  [ ] 
							 
						 
					
						
							
								
									
										
										
										
											2019-07-01 12:51:55 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    followersOnly = False 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    saveToFile = True 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    ccUrl = None 
							 
						 
					
						
							
								
									
										
										
										
											2019-07-01 14:30:48 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    alicePersonCache = { } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    aliceCachedWebfingers = { } 
							 
						 
					
						
							
								
									
										
										
										
											2019-07-01 21:01:43 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    sendResult  =  sendPost ( sessionAlice , aliceDir , ' alice ' ,  aliceDomain ,  alicePort ,  ' bob ' ,  bobDomain ,  bobPort ,  ccUrl ,  https ,  ' Why is a mouse when it spins? ' ,  followersOnly ,  saveToFile ,  federationList ,  aliceSendThreads ,  alicePostLog ,  aliceCachedWebfingers , alicePersonCache , inReplyTo ,  inReplyToAtomUri ,  subject ) 
							 
						 
					
						
							
								
									
										
										
										
											2019-06-30 22:56:37 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    print ( ' sendResult:  ' + str ( sendResult ) ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2019-07-01 21:01:43 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    for  i  in  range ( 10 ) : 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        time . sleep ( 1 ) 
							 
						 
					
						
							
								
									
										
										
										
											2019-06-30 22:56:37 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    
							 
						 
					
						
							
								
									
										
										
										
											2019-06-30 21:20:02 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    # stop the servers 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    thrAlice . kill ( ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    thrAlice . join ( ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    assert  thrAlice . isAlive ( ) == False 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    thrBob . kill ( ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    thrBob . join ( ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    assert  thrBob . isAlive ( ) == False 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								def  runAllTests ( ) :  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    print ( ' Running tests... ' ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    testHttpsig ( ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    testCache ( ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    testThreads ( ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    print ( ' Tests succeeded \n ' )