mirror of https://gitlab.com/bashrc2/epicyon
Fixing unit tests
parent
55dcdd546d
commit
4bd90ca3a4
|
@ -5476,20 +5476,21 @@ def runDaemon(mediaInstance: bool,maxRecentPosts: int, \
|
||||||
print('Invalid domain: ' + domain)
|
print('Invalid domain: ' + domain)
|
||||||
return
|
return
|
||||||
|
|
||||||
serverAddress = ('', proxyPort)
|
|
||||||
if unitTest:
|
if unitTest:
|
||||||
|
serverAddress = (domain, proxyPort)
|
||||||
pubHandler = partial(PubServerUnitTest)
|
pubHandler = partial(PubServerUnitTest)
|
||||||
else:
|
else:
|
||||||
|
serverAddress = ('', proxyPort)
|
||||||
pubHandler = partial(PubServer)
|
pubHandler = partial(PubServer)
|
||||||
|
|
||||||
try:
|
try:
|
||||||
httpd = ThreadingHTTPServer(serverAddress, pubHandler)
|
httpd = ThreadingHTTPServer(serverAddress, pubHandler)
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
if e.errno==98:
|
if e.errno==98:
|
||||||
print('ERROR: HTTP Server address is already in use. '+str(serverAddress))
|
print('ERROR: HTTP server address is already in use. '+str(serverAddress))
|
||||||
return False
|
return False
|
||||||
|
|
||||||
print('ERROR: HTTP Server failed to start. '+str(e))
|
print('ERROR: HTTP server failed to start. '+str(e))
|
||||||
return False
|
return False
|
||||||
|
|
||||||
httpd.useBlurHash=useBlurHash
|
httpd.useBlurHash=useBlurHash
|
||||||
|
|
310
tests.py
310
tests.py
|
@ -551,316 +551,6 @@ def testPostMessageBetweenServers():
|
||||||
shutil.rmtree(aliceDir)
|
shutil.rmtree(aliceDir)
|
||||||
shutil.rmtree(bobDir)
|
shutil.rmtree(bobDir)
|
||||||
|
|
||||||
def testFollowBetweenServersWithCapabilities():
|
|
||||||
print('Testing sending a follow request from one server to another')
|
|
||||||
|
|
||||||
global testServerAliceRunning
|
|
||||||
global testServerBobRunning
|
|
||||||
global testServerEveRunning
|
|
||||||
testServerAliceRunning = False
|
|
||||||
testServerBobRunning = False
|
|
||||||
testServerEveRunning = False
|
|
||||||
|
|
||||||
httpPrefix='http'
|
|
||||||
useTor=False
|
|
||||||
federationList=[]
|
|
||||||
|
|
||||||
baseDir=os.getcwd()
|
|
||||||
if os.path.isdir(baseDir+'/.tests'):
|
|
||||||
shutil.rmtree(baseDir+'/.tests')
|
|
||||||
os.mkdir(baseDir+'/.tests')
|
|
||||||
|
|
||||||
ocapAlways=True
|
|
||||||
|
|
||||||
# create the servers
|
|
||||||
aliceDir=baseDir+'/.tests/alice'
|
|
||||||
aliceDomain='127.0.0.52'
|
|
||||||
alicePort=61935
|
|
||||||
aliceSendThreads=[]
|
|
||||||
aliceAddress=aliceDomain+':'+str(alicePort)
|
|
||||||
|
|
||||||
bobDir=baseDir+'/.tests/bob'
|
|
||||||
bobDomain='127.0.0.78'
|
|
||||||
bobPort=61936
|
|
||||||
bobSendThreads=[]
|
|
||||||
bobAddress=bobDomain+':'+str(bobPort)
|
|
||||||
|
|
||||||
global thrAlice
|
|
||||||
if thrAlice:
|
|
||||||
while thrAlice.isAlive():
|
|
||||||
thrAlice.stop()
|
|
||||||
time.sleep(1)
|
|
||||||
thrAlice.kill()
|
|
||||||
|
|
||||||
thrAlice = \
|
|
||||||
threadWithTrace(target=createServerAlice, \
|
|
||||||
args=(aliceDir,aliceDomain,alicePort,bobAddress, \
|
|
||||||
federationList,False,False, \
|
|
||||||
ocapAlways,aliceSendThreads),daemon=True)
|
|
||||||
|
|
||||||
global thrBob
|
|
||||||
if thrBob:
|
|
||||||
while thrBob.isAlive():
|
|
||||||
thrBob.stop()
|
|
||||||
time.sleep(1)
|
|
||||||
thrBob.kill()
|
|
||||||
|
|
||||||
thrBob = \
|
|
||||||
threadWithTrace(target=createServerBob, \
|
|
||||||
args=(bobDir,bobDomain,bobPort,aliceAddress, \
|
|
||||||
federationList,False,False, \
|
|
||||||
ocapAlways,bobSendThreads),daemon=True)
|
|
||||||
|
|
||||||
eveDir=baseDir+'/.tests/eve'
|
|
||||||
eveDomain='127.0.0.55'
|
|
||||||
evePort=61937
|
|
||||||
eveSendThreads=[]
|
|
||||||
|
|
||||||
global thrEve
|
|
||||||
if thrEve:
|
|
||||||
while thrEve.isAlive():
|
|
||||||
thrEve.stop()
|
|
||||||
time.sleep(1)
|
|
||||||
thrEve.kill()
|
|
||||||
|
|
||||||
thrEve = \
|
|
||||||
threadWithTrace(target=createServerEve, \
|
|
||||||
args=(eveDir,eveDomain,evePort, \
|
|
||||||
federationList,False,False, \
|
|
||||||
False,eveSendThreads),daemon=True)
|
|
||||||
|
|
||||||
thrAlice.start()
|
|
||||||
thrBob.start()
|
|
||||||
thrEve.start()
|
|
||||||
assert thrAlice.isAlive()==True
|
|
||||||
assert thrBob.isAlive()==True
|
|
||||||
assert thrEve.isAlive()==True
|
|
||||||
|
|
||||||
# wait for all servers to be running
|
|
||||||
ctr=0
|
|
||||||
while not (testServerAliceRunning and testServerBobRunning and testServerEveRunning):
|
|
||||||
time.sleep(1)
|
|
||||||
ctr+=1
|
|
||||||
if ctr>60:
|
|
||||||
break
|
|
||||||
print('Alice online: '+str(testServerAliceRunning))
|
|
||||||
print('Bob online: '+str(testServerBobRunning))
|
|
||||||
print('Eve online: '+str(testServerEveRunning))
|
|
||||||
assert ctr<=60
|
|
||||||
time.sleep(1)
|
|
||||||
|
|
||||||
# In the beginning all was calm and there were no follows
|
|
||||||
|
|
||||||
print('*********************************************************')
|
|
||||||
print('Alice sends a follow request to Bob')
|
|
||||||
print('Both are strictly enforcing object capabilities')
|
|
||||||
os.chdir(aliceDir)
|
|
||||||
sessionAlice = createSession(useTor)
|
|
||||||
inReplyTo=None
|
|
||||||
inReplyToAtomUri=None
|
|
||||||
subject=None
|
|
||||||
alicePostLog = []
|
|
||||||
followersOnly=False
|
|
||||||
saveToFile=True
|
|
||||||
clientToServer=False
|
|
||||||
ccUrl=None
|
|
||||||
alicePersonCache={}
|
|
||||||
aliceCachedWebfingers={}
|
|
||||||
alicePostLog=[]
|
|
||||||
sendResult = \
|
|
||||||
sendFollowRequest(sessionAlice,aliceDir, \
|
|
||||||
'alice',aliceDomain,alicePort,httpPrefix, \
|
|
||||||
'bob',bobDomain,bobPort,httpPrefix, \
|
|
||||||
clientToServer,federationList, \
|
|
||||||
aliceSendThreads,alicePostLog, \
|
|
||||||
aliceCachedWebfingers,alicePersonCache, \
|
|
||||||
True,__version__)
|
|
||||||
print('sendResult: '+str(sendResult))
|
|
||||||
|
|
||||||
bobCapsFilename=bobDir+'/accounts/bob@'+bobDomain+'/ocap/accept/'+httpPrefix+':##'+aliceDomain+':'+str(alicePort)+'#users#alice.json'
|
|
||||||
aliceCapsFilename=aliceDir+'/accounts/alice@'+aliceDomain+'/ocap/granted/'+httpPrefix+':##'+bobDomain+':'+str(bobPort)+'#users#bob.json'
|
|
||||||
|
|
||||||
for t in range(10):
|
|
||||||
if os.path.isfile(bobDir+'/accounts/bob@'+bobDomain+'/followers.txt'):
|
|
||||||
if os.path.isfile(aliceDir+'/accounts/alice@'+aliceDomain+'/following.txt'):
|
|
||||||
if os.path.isfile(bobCapsFilename):
|
|
||||||
if os.path.isfile(aliceCapsFilename):
|
|
||||||
break
|
|
||||||
time.sleep(1)
|
|
||||||
|
|
||||||
bobCapsJson=loadJson(bobCapsFilename,0)
|
|
||||||
if bobCapsJson:
|
|
||||||
if not bobCapsJson.get('capability'):
|
|
||||||
print("Unexpected format for Bob's capabilities")
|
|
||||||
pprint(bobCapsJson)
|
|
||||||
assert False
|
|
||||||
assert validInbox(bobDir,'bob',bobDomain)
|
|
||||||
assert validInboxFilenames(bobDir,'bob',bobDomain,aliceDomain,alicePort)
|
|
||||||
|
|
||||||
print('\n\n*********************************************************')
|
|
||||||
print('Eve tries to send to Bob')
|
|
||||||
sessionEve = createSession(useTor)
|
|
||||||
evePostLog = []
|
|
||||||
evePersonCache={}
|
|
||||||
eveCachedWebfingers={}
|
|
||||||
evePostLog=[]
|
|
||||||
useBlurhash=False
|
|
||||||
sendResult = \
|
|
||||||
sendPost(__version__, \
|
|
||||||
sessionEve,eveDir,'eve', eveDomain, evePort, \
|
|
||||||
'bob', bobDomain, bobPort, ccUrl, \
|
|
||||||
httpPrefix, 'Eve message', followersOnly, \
|
|
||||||
saveToFile, clientToServer,None,None,None, \
|
|
||||||
useBlurhash, federationList, eveSendThreads, \
|
|
||||||
evePostLog, eveCachedWebfingers, \
|
|
||||||
evePersonCache,inReplyTo, inReplyToAtomUri, subject)
|
|
||||||
print('sendResult: '+str(sendResult))
|
|
||||||
|
|
||||||
queuePath=bobDir+'/accounts/bob@'+bobDomain+'/queue'
|
|
||||||
inboxPath=bobDir+'/accounts/bob@'+bobDomain+'/inbox'
|
|
||||||
eveMessageArrived=False
|
|
||||||
for i in range(10):
|
|
||||||
time.sleep(1)
|
|
||||||
if os.path.isdir(inboxPath):
|
|
||||||
if len([name for name in os.listdir(inboxPath) if os.path.isfile(os.path.join(inboxPath, name))])>1:
|
|
||||||
eveMessageArrived=True
|
|
||||||
print('Eve message sent to Bob!')
|
|
||||||
break
|
|
||||||
|
|
||||||
# capabilities should have prevented delivery
|
|
||||||
assert eveMessageArrived==False
|
|
||||||
print('Message from Eve to Bob was correctly rejected by object capabilities')
|
|
||||||
|
|
||||||
print('\n\n*********************************************************')
|
|
||||||
print('Alice sends a message to Bob')
|
|
||||||
alicePostLog = []
|
|
||||||
alicePersonCache={}
|
|
||||||
aliceCachedWebfingers={}
|
|
||||||
alicePostLog=[]
|
|
||||||
useBlurhash=False
|
|
||||||
sendResult = \
|
|
||||||
sendPost(__version__, \
|
|
||||||
sessionAlice,aliceDir,'alice', aliceDomain, alicePort, \
|
|
||||||
'bob', bobDomain, bobPort, ccUrl, \
|
|
||||||
httpPrefix, 'Alice message', followersOnly, saveToFile, \
|
|
||||||
clientToServer,None,None,None,useBlurhash, federationList, \
|
|
||||||
aliceSendThreads, alicePostLog, aliceCachedWebfingers, \
|
|
||||||
alicePersonCache,inReplyTo, inReplyToAtomUri, subject)
|
|
||||||
print('sendResult: '+str(sendResult))
|
|
||||||
|
|
||||||
queuePath=bobDir+'/accounts/bob@'+bobDomain+'/queue'
|
|
||||||
inboxPath=bobDir+'/accounts/bob@'+bobDomain+'/inbox'
|
|
||||||
aliceMessageArrived=False
|
|
||||||
for i in range(20):
|
|
||||||
time.sleep(1)
|
|
||||||
if os.path.isdir(inboxPath):
|
|
||||||
if len([name for name in os.listdir(inboxPath) if os.path.isfile(os.path.join(inboxPath, name))])>0:
|
|
||||||
aliceMessageArrived=True
|
|
||||||
print('Alice message sent to Bob!')
|
|
||||||
break
|
|
||||||
|
|
||||||
assert aliceMessageArrived==True
|
|
||||||
print('Message from Alice to Bob succeeded, since it was granted capabilities')
|
|
||||||
|
|
||||||
print('\n\n*********************************************************')
|
|
||||||
print("\nBob changes Alice's capabilities so that she can't reply on his posts")
|
|
||||||
bobCapsFilename= \
|
|
||||||
bobDir+'/accounts/bob@'+bobDomain+'/ocap/accept/'+ \
|
|
||||||
httpPrefix+':##'+aliceDomain+':'+str(alicePort)+'#users#alice.json'
|
|
||||||
aliceCapsFilename= \
|
|
||||||
aliceDir+'/accounts/alice@'+aliceDomain+'/ocap/granted/'+ \
|
|
||||||
httpPrefix+':##'+bobDomain+':'+str(bobPort)+'#users#bob.json'
|
|
||||||
sessionBob = createSession(useTor)
|
|
||||||
bobPostLog = []
|
|
||||||
bobPersonCache={}
|
|
||||||
bobCachedWebfingers={}
|
|
||||||
print("Bob's capabilities for Alice:")
|
|
||||||
bobCapsJson=loadJson(bobCapsFilename,0)
|
|
||||||
if bobCapsJson:
|
|
||||||
pprint(bobCapsJson)
|
|
||||||
assert bobCapsJson.get('capability')
|
|
||||||
assert "inbox:noreply" not in bobCapsJson['capability']
|
|
||||||
print("Alice's capabilities granted by Bob")
|
|
||||||
aliceCapsJson=loadJson(aliceCapsFilename,0)
|
|
||||||
if aliceCapsJson:
|
|
||||||
pprint(aliceCapsJson)
|
|
||||||
assert aliceCapsJson.get('capability')
|
|
||||||
assert "inbox:noreply" not in aliceCapsJson['capability']
|
|
||||||
newCapabilities=["inbox:write","objects:read","inbox:noreply"]
|
|
||||||
sendCapabilitiesUpdate(sessionBob,bobDir,httpPrefix, \
|
|
||||||
'bob',bobDomain,bobPort, \
|
|
||||||
httpPrefix+'://'+aliceDomain+':'+\
|
|
||||||
str(alicePort)+'/users/alice',
|
|
||||||
newCapabilities, \
|
|
||||||
bobSendThreads, bobPostLog, \
|
|
||||||
bobCachedWebfingers,bobPersonCache, \
|
|
||||||
federationList,True,__version__)
|
|
||||||
|
|
||||||
bobChanged=False
|
|
||||||
bobNewCapsJson=None
|
|
||||||
for i in range(20):
|
|
||||||
time.sleep(1)
|
|
||||||
bobNewCapsJson=loadJson(bobCapsFilename,0)
|
|
||||||
if bobNewCapsJson:
|
|
||||||
assert bobNewCapsJson.get('capability')
|
|
||||||
if "inbox:noreply" in bobNewCapsJson['capability']:
|
|
||||||
print("Bob's capabilities were changed")
|
|
||||||
pprint(bobNewCapsJson)
|
|
||||||
bobChanged=True
|
|
||||||
break
|
|
||||||
|
|
||||||
assert bobChanged
|
|
||||||
|
|
||||||
aliceChanged=False
|
|
||||||
aliceNewCapsJson=None
|
|
||||||
for i in range(20):
|
|
||||||
time.sleep(1)
|
|
||||||
aliceNewCapsJson=loadJson(aliceCapsFilename,0)
|
|
||||||
if aliceNewCapsJson:
|
|
||||||
assert aliceNewCapsJson.get('capability')
|
|
||||||
if "inbox:noreply" in aliceNewCapsJson['capability']:
|
|
||||||
print("Alice's granted capabilities were changed")
|
|
||||||
pprint(aliceNewCapsJson)
|
|
||||||
aliceChanged=True
|
|
||||||
break
|
|
||||||
|
|
||||||
assert aliceChanged
|
|
||||||
|
|
||||||
# check that the capabilities id has changed
|
|
||||||
assert bobNewCapsJson['id']!=bobCapsJson['id']
|
|
||||||
assert aliceNewCapsJson['id']!=aliceCapsJson['id']
|
|
||||||
|
|
||||||
# stop the servers
|
|
||||||
thrAlice.kill()
|
|
||||||
thrAlice.join()
|
|
||||||
assert thrAlice.isAlive()==False
|
|
||||||
|
|
||||||
thrBob.kill()
|
|
||||||
thrBob.join()
|
|
||||||
assert thrBob.isAlive()==False
|
|
||||||
|
|
||||||
thrEve.kill()
|
|
||||||
thrEve.join()
|
|
||||||
assert thrEve.isAlive()==False
|
|
||||||
|
|
||||||
assert os.path.isfile(bobDir+'/accounts/bob@'+bobDomain+ \
|
|
||||||
'/ocap/accept/'+httpPrefix+':##'+ \
|
|
||||||
aliceDomain+':'+str(alicePort)+ \
|
|
||||||
'#users#alice.json')
|
|
||||||
assert os.path.isfile(aliceDir+'/accounts/alice@'+ \
|
|
||||||
aliceDomain+'/ocap/granted/'+ \
|
|
||||||
httpPrefix+':##'+bobDomain+':'+ \
|
|
||||||
str(bobPort)+'#users#bob.json')
|
|
||||||
|
|
||||||
assert 'alice@'+aliceDomain in open(bobDir+'/accounts/bob@'+bobDomain+'/followers.txt').read()
|
|
||||||
assert 'bob@'+bobDomain in open(aliceDir+'/accounts/alice@'+aliceDomain+'/following.txt').read()
|
|
||||||
|
|
||||||
# queue item removed
|
|
||||||
assert len([name for name in os.listdir(queuePath) if os.path.isfile(os.path.join(queuePath, name))])==0
|
|
||||||
|
|
||||||
os.chdir(baseDir)
|
|
||||||
shutil.rmtree(baseDir+'/.tests')
|
|
||||||
|
|
||||||
def testFollowBetweenServers():
|
def testFollowBetweenServers():
|
||||||
print('Testing sending a follow request from one server to another')
|
print('Testing sending a follow request from one server to another')
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue