def test_getThings(): """ Test get all Things in db getEntities(dbn='core', env=None) """ print("Testing getThings in DB Env") priming.setupTest() dbEnv = dbing.gDbEnv keeper = keeping.gKeeper kdid = keeper.did agents, things = dbing.setupTestDbAgentsThings() agents['sam'] = (kdid, keeper.verkey, keeper.sigkey) # sam the server entries = dbing.getThings() assert len(entries) == 1 assert entries == ['did:igo:4JCM8dJWw_O57vM4kAtTt0yWqSgBuwiHpVgd55BioCM='] did = dbing.getHid(key="hid:dns:localhost#02") assert did == entries[0] cleanupTmpBaseDir(dbEnv.path()) print("Done Test")
def test_getEntities(): """ Test get all entities Agents and Things in db getEntities(dbn='core', env=None) """ print("Testing getEntities in DB Env") priming.setupTest() dbEnv = dbing.gDbEnv keeper = keeping.gKeeper kdid = keeper.did agents, things = dbing.setupTestDbAgentsThings() agents['sam'] = (kdid, keeper.verkey, keeper.sigkey) # sam the server entities = dbing.getEntities() assert len(entities) == 6 assert entities == [ ODict([('did', 'did:igo:3syVH2woCpOvPF0SD9Z0bu_OxNe2ZgxKjTQ961LlMnA='), ('kind', 'agent')]), ODict([('did', 'did:igo:4JCM8dJWw_O57vM4kAtTt0yWqSgBuwiHpVgd55BioCM='), ('kind', 'thing')]), ODict([('did', 'did:igo:QBRKvLW1CnVDIgznfet3rpad-wZBL4qGASVpGRsE2uU='), ('kind', 'agent')]), ODict([('did', 'did:igo:Qt27fThWoNZsa88VrTkep6H-4HA8tr54sHON1vWl6FE='), ('kind', 'agent')]), ODict([('did', 'did:igo:Xq5YqaL6L48pf0fu7IUhL0JRaU2_RxFP0AL43wYn148='), ('kind', 'agent')]), ODict([('did', 'did:igo:dZ74MLZXD-1QHoa73w9pQ9GroAvxqFi2RTZWlkC0raY='), ('kind', 'agent')]) ] cleanupTmpBaseDir(dbEnv.path()) print("Done Test")
def test_preloadTestDbs(): """ Test preloadTestDbs """ print("Testing staging dbs") priming.setupTest() dbEnv = dbing.gDbEnv dbing.preloadTestDbs() agents = dbing.getAgents() assert agents == [ 'did:igo:3syVH2woCpOvPF0SD9Z0bu_OxNe2ZgxKjTQ961LlMnA=', 'did:igo:QBRKvLW1CnVDIgznfet3rpad-wZBL4qGASVpGRsE2uU=', 'did:igo:Qt27fThWoNZsa88VrTkep6H-4HA8tr54sHON1vWl6FE=', 'did:igo:Xq5YqaL6L48pf0fu7IUhL0JRaU2_RxFP0AL43wYn148=', 'did:igo:dZ74MLZXD-1QHoa73w9pQ9GroAvxqFi2RTZWlkC0raY=' ] things = dbing.getThings() assert things == ['did:igo:4JCM8dJWw_O57vM4kAtTt0yWqSgBuwiHpVgd55BioCM='] did = dbing.getHid(key="hid:dns:localhost#02") assert did == things[0] #test get inbox for Ivy messages = dbing.getDrops( "did:igo:dZ74MLZXD-1QHoa73w9pQ9GroAvxqFi2RTZWlkC0raY=") assert len(messages) == 2 assert messages[0][ 'from'] == "did:igo:Qt27fThWoNZsa88VrTkep6H-4HA8tr54sHON1vWl6FE=" #test get inbox for Ann messages = dbing.getDrops( "did:igo:Qt27fThWoNZsa88VrTkep6H-4HA8tr54sHON1vWl6FE=") assert len(messages) == 1 assert messages[0][ 'from'] == "did:igo:dZ74MLZXD-1QHoa73w9pQ9GroAvxqFi2RTZWlkC0raY=" entries = dbing.getOfferExpires( 'did:igo:4JCM8dJWw_O57vM4kAtTt0yWqSgBuwiHpVgd55BioCM=', lastOnly=False) assert len(entries) == 2 dat, ser, sig = dbing.getSigned(entries[0]["offer"]) assert dat["uid"] == 'o_00035d2976e6a000_26ace93' auids = dbing.getAllAnonUids() assert auids == ['AQIDBAoLDA0=', 'BBIDBAoLCCC='] anons = dbing.getAnonMsgs(key=auids[0]) assert len(anons) == 3 anons = dbing.getAnonMsgs(key=auids[1]) assert len(anons) == 1 cleanupTmpBaseDir(dbEnv.path()) print("Done Test")
def test_setupTestPrime(): """ Test prime test setup """ print("Testing setupTest") priming.setupTest() assert os.path.exists(keeping.gKeepDirPath) assert os.path.exists(dbing.gDbDirPath) cleanupTmpBaseDir(dbing.gDbDirPath) assert not os.path.exists(dbing.gDbDirPath) assert not os.path.exists(keeping.gKeepDirPath) print("Done Test")
def test_getAgents(): """ Test get all Agents in db getEntities(dbn='core', env=None) """ print("Testing getAgents in DB Env") priming.setupTest() dbEnv = dbing.gDbEnv keeper = keeping.gKeeper kdid = keeper.did agents, things = dbing.setupTestDbAgentsThings() agents['sam'] = (kdid, keeper.verkey, keeper.sigkey) # sam the server entries = dbing.getAgents() assert len(entries) == 5 assert entries == [ 'did:igo:3syVH2woCpOvPF0SD9Z0bu_OxNe2ZgxKjTQ961LlMnA=', 'did:igo:QBRKvLW1CnVDIgznfet3rpad-wZBL4qGASVpGRsE2uU=', 'did:igo:Qt27fThWoNZsa88VrTkep6H-4HA8tr54sHON1vWl6FE=', 'did:igo:Xq5YqaL6L48pf0fu7IUhL0JRaU2_RxFP0AL43wYn148=', 'did:igo:dZ74MLZXD-1QHoa73w9pQ9GroAvxqFi2RTZWlkC0raY=' ] entries = dbing.getAgents(issuer=True) assert len(entries) == 3 assert entries == [ 'did:igo:3syVH2woCpOvPF0SD9Z0bu_OxNe2ZgxKjTQ961LlMnA=', 'did:igo:Qt27fThWoNZsa88VrTkep6H-4HA8tr54sHON1vWl6FE=', 'did:igo:dZ74MLZXD-1QHoa73w9pQ9GroAvxqFi2RTZWlkC0raY=' ] cleanupTmpBaseDir(dbEnv.path()) print("Done Test")
def test_getDrops(): """ Test get essage drop entries in core database for a given did getDrops(did, dbn='core', env=None) """ print("Testing getDrops in DB Env") priming.setupTest() dbEnv = dbing.gDbEnv keeper = keeping.gKeeper kdid = keeper.did agents, things = dbing.setupTestDbAgentsThings() agents['sam'] = (kdid, keeper.verkey, keeper.sigkey) # sam the server for did, vk, sk in agents.values(): dat, ser, sig = dbing.getSelfSigned(did) assert dat is not None assert dat['did'] == did for did, vk, sk in things.values(): dat, ser, sig = dbing.getSigned(did) assert dat is not None assert dat['did'] == did annDid, annVk, annSk = agents['ann'] ivyDid, ivyVk, ivySk = agents['ivy'] thingDid, thingVk, thingSk = things['cam'] assert annDid == "did:igo:Qt27fThWoNZsa88VrTkep6H-4HA8tr54sHON1vWl6FE=" assert ivyDid == "did:igo:dZ74MLZXD-1QHoa73w9pQ9GroAvxqFi2RTZWlkC0raY=" # test empty inbox for ivy messages = dbing.getDrops(ivyDid) assert not messages # test empty inbox for ann messages = dbing.getDrops(annDid) assert not messages # create message from Ann to Ivy dt = datetime.datetime(2000, 1, 3, tzinfo=datetime.timezone.utc) changed = timing.iso8601(dt, aware=True) assert changed == "2000-01-03T00:00:00+00:00" stamp = dt.timestamp() # make time.time value #muid = timing.tuuid(stamp=stamp, prefix="m") muid = "m_00035d2976e6a000_26ace93" assert muid == "m_00035d2976e6a000_26ace93" signer = "{}#0".format(annDid) assert signer == "did:igo:Qt27fThWoNZsa88VrTkep6H-4HA8tr54sHON1vWl6FE=#0" msg = ODict() msg['uid'] = muid msg['kind'] = "found" msg['signer'] = signer msg['date'] = changed msg['to'] = ivyDid msg['from'] = annDid msg['thing'] = thingDid msg['subject'] = "Lose something?" msg['content'] = "Look what I found" mser = json.dumps(msg, indent=2) msig = keyToKey64u( libnacl.crypto_sign(mser.encode("utf-8"), annSk)[:libnacl.crypto_sign_BYTES]) assert msig == "07u1OcQI8FUeWPqeiga3A9k4MPJGSFmC4vShiJNpv2Rke9ssnW7aLx857HC5ZaJ973WSKkLAwPzkl399d01HBA==" # Build key for message from (to, from, uid) (did, sdid, muid) key = "{}/drop/{}/{}".format(ivyDid, annDid, muid) assert key == ('did:igo:dZ74MLZXD-1QHoa73w9pQ9GroAvxqFi2RTZWlkC0raY=' '/drop' '/did:igo:Qt27fThWoNZsa88VrTkep6H-4HA8tr54sHON1vWl6FE=' '/m_00035d2976e6a000_26ace93') # save message to database error if duplicate dbing.putSigned(key=key, ser=mser, sig=msig, clobber=False) # no clobber so error #test get inbox for Ivy messages = dbing.getDrops(ivyDid) assert messages assert len(messages) == 1 assert messages[0]['uid'] == muid assert messages[0]['from'] == annDid # create another message from Ann to Ivy dt = datetime.datetime(2000, 1, 4, tzinfo=datetime.timezone.utc) changed = timing.iso8601(dt, aware=True) assert changed == "2000-01-04T00:00:00+00:00" stamp = dt.timestamp() # make time.time value #muid = timing.tuuid(stamp=stamp, prefix="m") muid = "m_00035d3d94be0000_15aabb5" assert muid == "m_00035d3d94be0000_15aabb5" signer = "{}#0".format(annDid) assert signer == "did:igo:Qt27fThWoNZsa88VrTkep6H-4HA8tr54sHON1vWl6FE=#0" msg = ODict() msg['uid'] = muid msg['kind'] = "found" msg['signer'] = signer msg['date'] = changed msg['to'] = ivyDid msg['from'] = annDid msg['thing'] = thingDid msg['subject'] = "Lose something?" msg['content'] = "Look what I found again" mser = json.dumps(msg, indent=2) msig = keyToKey64u( libnacl.crypto_sign(mser.encode("utf-8"), annSk)[:libnacl.crypto_sign_BYTES]) assert msig == "HgFcqSGI20okVh3K611XvEAsHHiV9yXDnFvd0djlZyA52K09E4BZbCnJ2Ejd8yFfRFc1GcTblbUYpDVwpumgCQ==" # Build key for message from (to, from, uid) (did, sdid, muid) key = "{}/drop/{}/{}".format(ivyDid, annDid, muid) assert key == ('did:igo:dZ74MLZXD-1QHoa73w9pQ9GroAvxqFi2RTZWlkC0raY=' '/drop' '/did:igo:Qt27fThWoNZsa88VrTkep6H-4HA8tr54sHON1vWl6FE=' '/m_00035d3d94be0000_15aabb5') # save message to database error if duplicate dbing.putSigned(key=key, ser=mser, sig=msig, clobber=False) # no clobber so error #test get inbox for Ivy messages = dbing.getDrops(ivyDid) assert messages assert len(messages) == 2 assert messages[1]['uid'] == muid assert messages[1]['from'] == annDid # create message from Ivy to Ann dt = datetime.datetime(2000, 1, 4, tzinfo=datetime.timezone.utc) changed = timing.iso8601(dt, aware=True) assert changed == "2000-01-04T00:00:00+00:00" stamp = dt.timestamp() # make time.time value #muid = timing.tuuid(stamp=stamp, prefix="m") muid = "m_00035d3d94be0000_15aabb5" # use duplicate muid to test no collision assert muid == "m_00035d3d94be0000_15aabb5" signer = "{}#0".format(ivyDid) assert signer == "did:igo:dZ74MLZXD-1QHoa73w9pQ9GroAvxqFi2RTZWlkC0raY=#0" msg = ODict() msg['uid'] = muid msg['kind'] = "found" msg['signer'] = signer msg['date'] = changed msg['to'] = annDid msg['from'] = ivyDid msg['thing'] = thingDid msg['subject'] = "Lose something?" msg['content'] = "I am so happy your found it." mser = json.dumps(msg, indent=2) msig = keyToKey64u( libnacl.crypto_sign(mser.encode("utf-8"), annSk)[:libnacl.crypto_sign_BYTES]) assert msig == "62ThJr_GUImtTa54RVhbo1bs5X4DCxjmecHONniQp0Os95Pb8bLrzBgCYr3YOhSB8wMPHYL7L6pm5qQjVPYzAA==" # Build key for message from (to, from, uid) (did, sdid, muid) key = "{}/drop/{}/{}".format(annDid, ivyDid, muid) assert key == ('did:igo:Qt27fThWoNZsa88VrTkep6H-4HA8tr54sHON1vWl6FE=' '/drop' '/did:igo:dZ74MLZXD-1QHoa73w9pQ9GroAvxqFi2RTZWlkC0raY=' '/m_00035d3d94be0000_15aabb5') # save message to database error if duplicate dbing.putSigned(key=key, ser=mser, sig=msig, clobber=False) # no clobber so error #test get inbox for Ann messages = dbing.getDrops(annDid) assert messages assert len(messages) == 1 assert messages[0]['uid'] == muid assert messages[0]['from'] == ivyDid #test get inbox for Ivy to make sure still works messages = dbing.getDrops(ivyDid) assert messages assert len(messages) == 2 for message in messages: assert message['from'] == annDid cleanupTmpBaseDir(dbEnv.path()) print("Done Test")
def test_get_backend(): """ """ print("Testing Falcon Example Backend Call") store = Store(stamp=0.0) # create store priming.setupTest() valet = Valet( port=8101, bufsize=131072, store=store, app=exapp, ) result = valet.open() assert result assert valet.servant.ha == ('0.0.0.0', 8101) assert valet.servant.eha == ('127.0.0.1', 8101) path = "http://{}:{}{}".format('localhost', valet.servant.eha[1], "/example/backend") headers = odict([('Accept', 'application/json'), ('Content-Length', 0)]) patron = Patron( bufsize=131072, store=store, method='GET', path=path, headers=headers, reconnectable=True, ) assert patron.connector.reopen() assert patron.connector.accepted == False assert patron.connector.connected == False assert patron.connector.cutoff == False patron.transmit() timer = StoreTimer(store, duration=1.0) while (patron.requests or patron.connector.txes or not patron.responses or not valet.idle()): valet.serviceAll() time.sleep(0.05) patron.serviceAll() time.sleep(0.05) store.advanceStamp(0.1) assert patron.connector.accepted == True assert patron.connector.connected == True assert patron.connector.cutoff == False assert len(valet.servant.ixes) == 1 assert len(valet.reqs) == 1 assert len(valet.reps) == 1 requestant = valet.reqs.values()[0] assert requestant.method == patron.requester.method assert requestant.url == patron.requester.path assert requestant.headers == { 'accept': 'application/json', 'accept-encoding': 'identity', 'content-length': '0', 'host': 'localhost:8101' } assert len(patron.responses) == 1 rep = patron.responses.popleft() assert rep['status'] == 200 assert rep['reason'] == 'OK' assert rep['body'] == bytearray( b'{\n "approved": true,\n "body": "\\nHello World\\n\\n"\n}') assert rep['data'] == odict([('approved', True), ('body', '\nHello World\n\n')]) responder = valet.reps.values()[0] assert responder.status.startswith(str(rep['status'])) assert responder.headers == rep['headers'] # test for error by sending query arg path #request = odict([('method', 'GET'), #('path', '/example/backend'), #('qargs', odict(path='/unknown')), #('fragment', u''), #('headers', odict([('Accept', 'application/json'), #('Content-Length', 0)])), #]) #patron.requests.append(request) headers = odict([('Accept', 'application/json'), ('Content-Length', 0)]) patron.request(method='GET', path='/example/backend', qargs=odict(path='/unknown'), headers=headers) timer = StoreTimer(store, duration=1.0) while (patron.requests or patron.connector.txes or not patron.responses or not valet.idle()): valet.serviceAll() time.sleep(0.05) patron.serviceAll() time.sleep(0.05) store.advanceStamp(0.1) assert len(patron.responses) == 1 rep = patron.responses.popleft() assert rep['status'] == 404 assert rep['reason'] == 'Not Found' assert rep['body'] == bytearray(b'404 Not Found\nBackend Validation' b' Error\nError backend validation.' b' unknown\n') assert not rep['data'] valet.close() patron.close() print("Done Test")