Ejemplo n.º 1
0
    def setUp(self):
        MVSTestCaseBase.setUp(self)
        self.group_ABC = [Alice, Bob, Cindy]
        self.group_DEF = [Dale, Eric, Frank]
        self.addr_ABC = common.create_multisig_address(self.group_ABC, 2)
        self.addr_DEF = common.create_multisig_address(self.group_DEF, 2)

        # register did if not registered
        self.did_ABC = "Alice.Bob.Cindy@DIID"
        self.did_DEF = "Dale.Eric.Frank@DIID"

        for roles, addr, attr_name in [
            (self.group_ABC, self.addr_ABC, "did_ABC"),
            (self.group_DEF, self.addr_DEF, "did_DEF")
        ]:
            ec, message = mvs_rpc.list_dids(roles[-1].name, roles[-1].password)
            self.assertEqual(ec, 0, message)
            for did_info in message['dids']:
                if did_info["address"] == addr:
                    setattr(self, attr_name, did_info["symbol"])
                    break
            else:
                # not issued
                Alice.send_etp(addr, 10**8)
                Alice.mining()

                did_symbol = getattr(self, attr_name)

                ec, tx = mvs_rpc.register_did(roles[0].name, roles[0].password,
                                              addr, did_symbol)
                self.assertEqual(ec, 0, tx)
                ec, tx = mvs_rpc.sign_multisigtx(roles[1].name,
                                                 roles[1].password, tx, True)
                self.assertEqual(ec, 0, tx)
                Alice.mining()
Ejemplo n.º 2
0
    def register_did(self,address=None,symbol=None):
        '''
        issue did to the main address.
        '''
        if address == None:
            address = self.mainaddress()
        if symbol == None:
            symbol = self.did_symbol

        return mvs_rpc.register_did(self.name, self.password, address, symbol)
Ejemplo n.º 3
0
    def test_0_boundary(self):
        # account password match error
        ec, message = mvs_rpc.register_did(Zac.name, Zac.password + '1',
                                           Zac.mainaddress(), Zac.did_symbol)
        self.assertEqual(ec, 1000, message)

        #symbol is address
        ec, message = mvs_rpc.register_did(Zac.name, Zac.password,
                                           Zac.mainaddress(),
                                           Zac.addresslist[1])
        self.assertEqual(ec, 4010, message)

        # not enough fee
        ec, message = mvs_rpc.register_did(Zac.name, Zac.password,
                                           Zac.mainaddress(), Zac.did_symbol,
                                           10**8 - 1)
        self.assertEqual(ec, 7005, message)

        # invalid percentage
        ec, message = mvs_rpc.register_did(Zac.name, Zac.password,
                                           Zac.mainaddress(), Zac.did_symbol,
                                           10**8, 19)
        self.assertEqual(ec, 7005, message)

        ec, message = mvs_rpc.register_did(Zac.name, Zac.password,
                                           Zac.mainaddress(), Zac.did_symbol,
                                           10**8, 101)
        self.assertEqual(ec, 7005, message)

        # not enough balance
        ec, message = mvs_rpc.register_did(Zac.name, Zac.password,
                                           Zac.mainaddress(), Zac.did_symbol,
                                           10**8)
        self.assertEqual(ec, 3302, message)

        # did symbol duplicated
        did_exist = [Alice, Bob, Cindy]
        for role in did_exist:
            ec, message = mvs_rpc.register_did(Zac.name, Zac.password,
                                               Zac.mainaddress(),
                                               role.did_symbol, 10**8)
            self.assertEqual(ec, 7002, message)

        Alice.send_etp(Zac.mainaddress(), 10**8)
        Alice.mining()

        blackHoles = [
            'BlackHole', 'BLACKHOLE', 'blackhole', 'blackHole', 'Blackhole'
        ]
        for bh in blackHoles:
            ec, message = mvs_rpc.register_did(Zac.name, Zac.password,
                                               Zac.mainaddress(), bh, 10**8)
            self.assertEqual(ec, 7001, message)
    def test_1_register_did(self):
        '''
        this test case will create did for all roles. If not created before.
        '''

        #address in use
        random_did_symbol = common.get_random_str()
        ec, message = mvs_rpc.register_did(Alice.name, Alice.password,
                                           Alice.mainaddress(),
                                           random_did_symbol)
        self.assertEqual(ec, 7002, message)

        Alice.send_etp(Zac.mainaddress(), 10**8)
        Alice.mining()
        #symbol contain special symbol
        special_symbol = '''~`!#$%^&*()=+|\:;'"?/>'''
        for chr in special_symbol:
            ec, message = mvs_rpc.register_did(
                Zac.name, Zac.password, Zac.mainaddress(),
                "%s%stest" % (Zac.did_symbol, chr))
            self.assertEqual(ec, 7001, "did symol contains:" + chr)
    def test_7_change_did(self):
        '''modify did between Zac's addresses'''
        temp_did = "ZAC.DIID@" + common.get_timestamp()
        Alice.send_etp(Zac.mainaddress(), 10**8)
        Alice.mining()
        ec, message = mvs_rpc.register_did(Zac.name, Zac.password,
                                           Zac.mainaddress(), temp_did)
        self.assertEqual(ec, 0, message)
        Alice.mining()

        # no enough balance, unspent = 0, payment = 10000
        ec, message = mvs_rpc.change_did(Zac.name, Zac.password,
                                         Zac.addresslist[1], temp_did)
        self.assertEqual(ec, 3302, message)

        Alice.send_etp(Zac.addresslist[1], 10**4)
        Alice.mining()

        ec, message = mvs_rpc.change_did(Zac.name, Zac.password,
                                         Zac.addresslist[1], temp_did)
        self.assertEqual(ec, 0, message)
        Alice.mining()

        ec, message = mvs_rpc.list_dids(Zac.name, Zac.password)
        self.assertEqual(ec, 0, message)

        self.assertEqual(message['dids'][0]['symbol'], temp_did, message)
        self.assertEqual(message['dids'][0]['address'], Zac.addresslist[1],
                         message)

        # confirm the modification procedure by list_didaddresses
        ec, message = mvs_rpc.list_didaddresses(temp_did)
        self.assertEqual(ec, 0, message)

        self.assertEqual(message['addresses'][0]["address"],
                         Zac.addresslist[1])
        self.assertEqual(message['addresses'][0]["status"], "current")

        self.assertEqual(message['addresses'][1]["address"],
                         Zac.addresslist[0])
        self.assertEqual(message['addresses'][1]["status"], "history")
    def test_9_change_did_multisig(self):
        did_normal_symbal = "Zac@" + common.get_timestamp()
        Alice.send_etp(Zac.mainaddress(), 10**8)
        Alice.mining()

        ec, message = mvs_rpc.register_did(Zac.name, Zac.password,
                                           Zac.mainaddress(),
                                           did_normal_symbal)
        self.assertEqual(ec, 0, message)
        Alice.mining()

        group = [Alice, Cindy, Dale, Frank, Zac]

        did_symbol = '@'.join(r.name for r in group) + common.get_timestamp()
        for i, role in enumerate(group):
            addr = role.new_multisigaddress(
                "Alice & Cindy & Zac's Multisig-DID",
                group[:i] + group[i + 1:], 3)

        Alice.send_etp(addr, (10**9))
        Alice.mining()

        ec, message = mvs_rpc.register_did(group[0].name, group[0].password,
                                           addr, did_symbol)
        self.assertEqual(ec, 0, message)

        ec, message = mvs_rpc.sign_multisigtx(group[1].name, group[1].password,
                                              message)
        self.assertEqual(ec, 0, message)

        ec, message = mvs_rpc.sign_multisigtx(group[2].name, group[2].password,
                                              message, True)
        self.assertEqual(ec, 0, message)
        Alice.mining()

        # did not find
        ec, message = mvs_rpc.change_did(Zac.name, Zac.password,
                                         Zac.mainaddress(),
                                         common.get_timestamp())
        self.assertEqual(ec, 7006, message)

        #did not owner by account
        ec, message = mvs_rpc.change_did(Bob.name, Bob.password,
                                         Bob.mainaddress(), did_symbol)
        self.assertEqual(ec, 7009, message)

        #did address invalid
        ec, message = mvs_rpc.change_did(Zac.name, Zac.password, "Test" * 20,
                                         did_symbol)
        self.assertEqual(ec, 4012, message)

        #address didn't owned by the account
        ec, message = mvs_rpc.change_did(Zac.name, Zac.password,
                                         Bob.mainaddress(), did_symbol)
        self.assertEqual(ec, 4003, message)

        #address is already binded with did
        ec, message = mvs_rpc.change_did(Zac.name, Zac.password,
                                         Zac.mainaddress(), did_symbol)
        self.assertEqual(ec, 7002, message)

        # no enough balance, unspent = 0, payment = 10000
        ec, message = mvs_rpc.change_did(Zac.name, Zac.password,
                                         Zac.addresslist[1], did_symbol)
        self.assertEqual(ec, 3302, message)

        Alice.send_etp(Zac.addresslist[1], 10**5)
        Alice.mining()

        #signature must be large than 3
        ec, message = mvs_rpc.change_did(Zac.name, Zac.password,
                                         Zac.addresslist[1], did_symbol)
        self.assertEqual(ec, 0, message)

        #cannot transfer to another multi-signature
        ec, message = mvs_rpc.sign_multisigtx(group[0].name, group[0].password,
                                              message, True)
        self.assertEqual(ec, 5304, message)

        group_new = [Bob, Dale, Zac]
        for i, role in enumerate(group_new):
            addr_new = role.new_multisigaddress(
                "Bob & Dale & Zac's Multisig-DID",
                group_new[:i] + group_new[i + 1:], 2)

        Alice.send_etp(addr_new, (10**6))
        Alice.mining()
        ec, message = mvs_rpc.change_did(Zac.name, Zac.password, addr_new,
                                         did_symbol)
        self.assertEqual(ec, 7010, message)

        ec, message = mvs_rpc.change_did(Zac.name, Zac.password,
                                         Zac.addresslist[1], did_symbol)
        self.assertEqual(ec, 0, message)

        ec, message = mvs_rpc.sign_multisigtx(group[0].name, group[0].password,
                                              message)
        self.assertEqual(ec, 0, message)

        ec, message = mvs_rpc.sign_multisigtx(group[1].name, group[1].password,
                                              message, True)
        self.assertEqual(ec, 0, message)
        self.assertNotEqual(
            Zac.get_didaddress(symbol=did_symbol), Zac.addresslist[1],
            "Failed where modify did address from multi_signature to multi_signature address"
        )