コード例 #1
0
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")
コード例 #2
0
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")
コード例 #3
0
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")
コード例 #4
0
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")
コード例 #5
0
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")
コード例 #6
0
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")
コード例 #7
0
ファイル: test_exampling.py プロジェクト: reputage/bluepea
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")