Exemple #1
0
    def _addAttribToNym(self, nym, raw, enc, hsh):
        assert int(bool(raw)) + int(bool(enc)) + int(bool(hsh)) == 1
        if raw:
            l = LedgerStore.RAW
            data = raw
        elif enc:
            l = LedgerStore.ENC
            data = enc
        elif hsh:
            l = LedgerStore.HASH
            data = hsh
        else:
            raise RuntimeError('One of raw, enc, or hash are required.')

        attrib = Attribute(randomString(5),
                           data,
                           self.activeWallet.defaultId,
                           ledgerStore=LedgerStore.RAW)
        if nym != self.activeWallet.defaultId:
            attrib.dest = nym
        self.activeWallet.addAttribute(attrib)
        reqs = self.activeWallet.preparePending()
        req, = self.activeClient.submitReqs(*reqs)
        self.print("Adding attributes {} for {}".format(data, nym))

        def chk(reply, error, *args, **kwargs):
            assert self.activeWallet.getAttribute(attrib).seqNo is not None
            self.print("Attribute added for nym {}".format(reply[TARGET_NYM]),
                       Token.BoldBlue)

        self.looper.loop.call_later(.2, self._ensureReqCompleted, req.key,
                                    self.activeClient, chk)
Exemple #2
0
def testLatestAttrIsReceived(nodeSet, addedSponsor, sponsorWallet, looper,
                             sponsor, userIdA):

    attr1 = json.dumps({'name': 'Mario'})
    attrib = Attribute(name='name',
                       origin=sponsorWallet.defaultId,
                       value=attr1,
                       dest=userIdA,
                       ledgerStore=LedgerStore.RAW)
    addAttributeAndCheck(looper, sponsor, sponsorWallet, attrib)
    assert attr1 in [
        a.value for a in sponsorWallet.getAttributesForNym(userIdA)
    ]

    attr2 = json.dumps({'name': 'Luigi'})
    attrib = Attribute(name='name',
                       origin=sponsorWallet.defaultId,
                       value=attr2,
                       dest=userIdA,
                       ledgerStore=LedgerStore.RAW)
    addAttributeAndCheck(looper, sponsor, sponsorWallet, attrib)
    logger.debug([a.value for a in sponsorWallet.getAttributesForNym(userIdA)])
    assert attr2 in [
        a.value for a in sponsorWallet.getAttributesForNym(userIdA)
    ]
Exemple #3
0
 def requestAttribute(self, attrib: Attribute, sender):
     """
     :param attrib: attribute to add
     :return: number of pending txns
     """
     self._attributes[attrib.key()] = attrib
     req = attrib.getRequest(sender)
     if req:
         return self.prepReq(req, key=attrib.key())
Exemple #4
0
 def addAttribute(self, attrib: Attribute):
     """
     :param attrib: attribute to add
     :return: number of pending txns
     """
     self._attributes[attrib.key()] = attrib
     req = attrib.ledgerRequest()
     if req:
         self.pendRequest(req, attrib.key())
     return len(self._pending)
Exemple #5
0
def addedRawAttribute(userWalletA: Wallet, sponsor: Client,
                      sponsorWallet: Wallet, attributeData, looper):
    attrib = Attribute(name='test attribute',
                       origin=sponsorWallet.defaultId,
                       value=attributeData,
                       dest=userWalletA.defaultId,
                       ledgerStore=LedgerStore.RAW)
    addAttributeAndCheck(looper, sponsor, sponsorWallet, attrib)
    return attrib
Exemple #6
0
def testUserAddAttrsForHerSelf(nodeSet, looper, userClientA, userWalletA,
                               userIdA, attributeData):
    attr1 = json.dumps({'age': 25})
    attrib = Attribute(name='test4 attribute',
                       origin=userIdA,
                       value=attr1,
                       dest=userIdA,
                       ledgerStore=LedgerStore.RAW)
    addAttributeAndCheck(looper, userClientA, userWalletA, attrib)
Exemple #7
0
def testStewardCannotAddUsersAttribute(genned, looper, steward, stewardWallet,
                                       userIdA, attributeData):
    attrib = Attribute(name='test3 attribute',
                       origin=stewardWallet.defaultId,
                       value=attributeData,
                       dest=userIdA,
                       ledgerStore=LedgerStore.RAW)
    reqs = makeAttribRequest(steward, stewardWallet, attrib)
    looper.run(
        eventually(checkNacks, steward, reqs[0].reqId, retryWait=1,
                   timeout=15))
Exemple #8
0
def addRawAttribute(looper, client, wallet, name, value, dest=None,
                    localName=None):
    if not localName:
        localName = name
    attrData = json.dumps({name: value})
    attrib = Attribute(name=localName,
                       origin=wallet.defaultId,
                       value=attrData,
                       dest=dest,
                       ledgerStore=LedgerStore.RAW)
    addAttributeAndCheck(looper, client, wallet, attrib)
Exemple #9
0
def getAttribute(looper, sponsor, sponsorWallet, userIdA, attributeName,
                 attributeValue):
    attrib = Attribute(name=attributeName,
                       value=None,
                       dest=userIdA,
                       ledgerStore=LedgerStore.RAW)
    req = sponsorWallet.requestAttribute(attrib,
                                         sender=sponsorWallet.defaultId)
    sponsor.submitReqs(req)
    looper.run(eventually(checkGetAttr, req.key, sponsor,
                          attributeName, attributeValue, retryWait=1,
                          timeout=20))
Exemple #10
0
def testOnlyUsersSponsorCanAddAttribute(genned, looper, steward, stewardWallet,
                                        attributeData, anotherSponsor,
                                        userIdA):
    client, wallet = anotherSponsor
    attrib = Attribute(name='test2 attribute',
                       origin=wallet.defaultId,
                       value=attributeData,
                       dest=userIdA,
                       ledgerStore=LedgerStore.RAW)
    reqs = makeAttribRequest(client, wallet, attrib)
    looper.run(
        eventually(checkNacks, client, reqs[0].reqId, retryWait=1, timeout=15))
Exemple #11
0
def testNonSponsorCannotAddAttributeForUser(nodeSet, nonSponsor, userIdA,
                                            looper, attributeData):
    with whitelistextras("UnknownIdentifier"):
        client, wallet = nonSponsor
        attrib = Attribute(name='test1 attribute',
                           origin=wallet.defaultId,
                           value=attributeData,
                           dest=userIdA,
                           ledgerStore=LedgerStore.RAW)
        reqs = makeAttribRequest(client, wallet, attrib)
        looper.run(eventually(checkNacks,
                              client,
                              reqs[0].reqId,
                              "UnknownIdentifier", retryWait=1, timeout=15))
Exemple #12
0
def testClientGetsResponseWithoutConsensusForUsedReqId(nodeSet, looper, steward,
                                                       addedSponsor, sponsor,
                                                       userWalletA,
                                                       attributeName,
                                                       attributeData,
                                                       addedRawAttribute):
    lastReqId = None
    replies = {}
    for msg, sender in reversed(sponsor.inBox):
        if msg[OP_FIELD_NAME] == REPLY:
            if not lastReqId:
                lastReqId = msg[f.RESULT.nm][f.REQ_ID.nm]
            if msg.get(f.RESULT.nm, {}).get(f.REQ_ID.nm) == lastReqId:
                replies[sender] = msg
            if len(replies) == len(nodeSet):
                break

    sponsorWallet = addedSponsor
    attrib = Attribute(name=attributeName,
                       origin=sponsorWallet.defaultId,
                       value=attributeData,
                       dest=userWalletA.defaultId,
                       ledgerStore=LedgerStore.RAW)
    sponsorWallet.addAttribute(attrib)
    req = sponsorWallet.preparePending()[0]
    _, key = sponsorWallet._prepared.pop((req.identifier, req.reqId))
    req.reqId = lastReqId
    req.signature = sponsorWallet.signMsg(msg=req.getSigningState(),
                                          identifier=req.identifier)
    sponsorWallet._prepared[req.identifier, req.reqId] = req, key
    sponsor.submitReqs(req)

    def chk():
        nonlocal sponsor, lastReqId, replies
        for node in nodeSet:
            last = node.spylog.getLast(TestNode.getReplyFor.__name__)
            assert last
            result = last.result
            assert result is not None

            # TODO: Time is not equal as some precision is lost while storing
            # in oientdb, using seconds may be an option, need to think of a
            # use cases where time in milliseconds is required
            replies[node.clientstack.name][f.RESULT.nm].pop(TXN_TIME, None)
            result.result.pop(TXN_TIME, None)

            assert replies[node.clientstack.name][f.RESULT.nm] == result.result

    looper.run(eventually(chk, retryWait=1, timeout=5))
Exemple #13
0
    def sync(self, linkName, doneCallback=None):
        if not self.client.isReady():
            raise NotConnectedToNetwork
        link = self.wallet.getLink(linkName, required=True)
        nym = getCryptonym(link.remoteIdentifier)
        attrib = Attribute(name=ENDPOINT,
                           value=None,
                           dest=nym,
                           ledgerStore=LedgerStore.RAW)
        req = self.wallet.requestAttribute(attrib,
                                           sender=self.wallet.defaultId)
        self.client.submitReqs(req)

        if doneCallback:
            self.loop.call_later(.2, ensureReqCompleted, self.loop, req.key,
                                 self.client,
                                 self._handleSyncResp(link, doneCallback))
Exemple #14
0
def getAttribute(looper, sponsor, sponsorWallet, userIdA, attributeData):
    attrName = list(json.loads(attributeData).keys())[0]
    attrValue = list(json.loads(attributeData).values())[0]
    attrib = Attribute(name=attrName,
                       value=None,
                       dest=userIdA,
                       ledgerStore=LedgerStore.RAW)
    req = sponsorWallet.requestAttribute(attrib,
                                         sender=sponsorWallet.defaultId)
    sponsor.submitReqs(req)
    looper.run(
        eventually(checkGetAttr,
                   req.reqId,
                   sponsor,
                   attrName,
                   attrValue,
                   retryWait=1,
                   timeout=20))
Exemple #15
0
def createAgentAndAddEndpoint(looper, agentNym, agentVerkey, agentPort,
                              steward, stewardWallet):
    createNym(looper,
              agentNym,
              steward,
              stewardWallet,
              role=SPONSOR,
              verkey=agentVerkey)
    ep = '127.0.0.1:{}'.format(agentPort)
    attributeData = json.dumps({ENDPOINT: ep})

    # TODO Faber Agent should be doing this!
    attrib = Attribute(name='{}_endpoint'.format(agentNym),
                       origin=stewardWallet.defaultId,
                       value=attributeData,
                       dest=agentNym,
                       ledgerStore=LedgerStore.RAW)
    addAttributeAndCheck(looper, steward, stewardWallet, attrib)
    return attrib