Exemplo n.º 1
0
def test_with_manager_not_in_state():
    """Test creating a user with manager not in state"""
    user_key = helper.user.key()
    user_id = user_key.public_key
    manager_key = helper.user.key()
    manager_id = manager_key.public_key
    name = helper.user.name()

    message = protobuf.user_transaction_pb2.CreateUser(user_id=user_id,
                                                       name=name,
                                                       metadata=None,
                                                       manager_id=manager_id)
    inputs, outputs = rbac.user.make_addresses(message=message,
                                               signer_user_id=user_id)
    payload = batcher.make_payload(
        message=message,
        message_type=rbac.user.message_type,
        inputs=inputs,
        outputs=outputs,
        signer_user_id=user_id,
        signer_public_key=user_key.public_key,
    )

    status = rbac.user.send(signer_keypair=user_key, payload=payload)

    assert len(status) == 1
    assert status[0]["status"] == "INVALID"
Exemplo n.º 2
0
    def make_payload(self, message, signer_keypair=None):
        """Make a payload for the given message type"""
        self.validate(message=message, signer=signer_keypair)

        message_type = self.message_type
        inputs, outputs = self.make_addresses(
            message=message, signer_keypair=signer_keypair
        )
        inputs = set(inputs)
        outputs = set(outputs)

        if signer_keypair:
            inputs.add(addresser.user.address(object_id=signer_keypair.public_key))

        if not outputs.issubset(inputs):
            raise ValueError(
                "{} output addresses {} not contained in inputs".format(
                    self.message_type_name,
                    addresser.parse_addresses(outputs.difference(inputs)),
                )
            )

        return batcher.make_payload(
            message=message, message_type=message_type, inputs=inputs, outputs=outputs
        )
Exemplo n.º 3
0
def test_with_other_signer():
    """Test with signer is neither user nor manager"""
    user_key = helper.user.key()
    user_id = user_key.public_key
    manager_key = helper.user.key()
    manager_id = manager_key.public_key
    other_id = helper.user.id()
    other_key = helper.user.key()
    name = helper.user.name()

    message = protobuf.user_transaction_pb2.CreateUser(user_id=user_id,
                                                       name=name,
                                                       metadata=None,
                                                       manager_id=manager_id)
    inputs, outputs = rbac.user.make_addresses(message=message,
                                               signer_user_id=other_id)
    payload = batcher.make_payload(
        message=message,
        message_type=rbac.user.message_type,
        inputs=inputs,
        outputs=outputs,
        signer_user_id=other_id,
        signer_public_key=other_key.public_key,
    )

    status = rbac.user.send(signer_keypair=other_key, payload=payload)

    assert len(status) == 1
    assert status[0]["status"] == "INVALID"
Exemplo n.º 4
0
    def make_payload(self, message, signer_keypair=None):
        """Make a payload for the given message type"""
        self.validate(message=message, signer=signer_keypair)

        message_type = self.message_type
        inputs, outputs = self.make_addresses(message=message,
                                              signer_keypair=signer_keypair)
        if has_duplicates(inputs):
            raise ValueError("{} inputs duplicated addresses {}".format(
                self.message_type_name,
                addresser.parse_addresses(duplicates(inputs)),
            ))
        if has_duplicates(outputs):
            raise ValueError("{} outputs duplicated addresses {}".format(
                self.message_type_name,
                addresser.parse_addresses(duplicates(outputs)),
            ))
        if not set(outputs).issubset(set(inputs)):
            raise ValueError(
                "{} output addresses {} not contained in inputs".format(
                    self.message_type_name,
                    addresser.parse_addresses(
                        set(outputs).difference(set(inputs))),
                ))

        return batcher.make_payload(message=message,
                                    message_type=message_type,
                                    inputs=inputs,
                                    outputs=outputs)
Exemplo n.º 5
0
 def test_unmake_payload(self):
     """Test the unmake batch function"""
     message, message_type, inputs, outputs, signer = self.get_test_inputs()
     payload = batcher.make_payload(
         message=message, message_type=message_type, inputs=inputs, outputs=outputs
     )
     messages = batcher.unmake(
         batch_object=payload, signer_public_key=signer.public_key
     )
     self.assertEqual(len(messages), 1)
     self.assertEqualMessage(message, messages[0])
Exemplo n.º 6
0
    def make_payload(self, message, signer_keypair=None):
        """Make a payload for the given message type"""
        self.validate(message=message, signer=signer_keypair)

        message_type = self.message_type
        inputs, outputs = self.make_addresses(message=message,
                                              signer_keypair=signer_keypair)
        return batcher.make_payload(message=message,
                                    message_type=message_type,
                                    inputs=inputs,
                                    outputs=outputs)
Exemplo n.º 7
0
 def get_test_payload(self):
     """Returns a test data payload for testing batcher functions"""
     message, message_type, inputs, outputs, signer = self.get_test_inputs()
     return (
         batcher.make_payload(
             message=message,
             message_type=message_type,
             inputs=inputs,
             outputs=outputs,
         ),
         signer,
     )
Exemplo n.º 8
0
 def test_make_payload(self):
     """Test the make payload batch function"""
     message, message_type, inputs, outputs, signer = self.get_test_inputs()
     payload = batcher.make_payload(
         message=message, message_type=message_type, inputs=inputs, outputs=outputs
     )
     self.assertIsInstance(payload, RBACPayload)
     self.assertEqual(payload.message_type, message_type)
     self.assertEqual(payload.inputs, inputs)
     self.assertEqual(payload.outputs, outputs)
     self.assertIsInstance(signer, Key)
     self.assertValidPayload(
         payload=payload, message=message, message_type=message_type
     )
    def make_payload(self, message, signer_user_id, signer_keypair):
        """Make a payload for the given message type"""
        if not signer_keypair:
            raise ValueError(
                "{} signer_keypair is required".format(self.message_type_name)
            )
        if not signer_user_id:
            raise ValueError(
                "{} signer_user_id is required".format(self.message_type_name)
            )
        self.validate(
            message=message,
            signer=Signer(user_id=signer_user_id, public_key=signer_keypair.public_key),
        )

        message_type = self.message_type
        inputs, outputs = self.make_addresses(
            message=message, signer_user_id=signer_user_id
        )
        inputs = set(inputs)
        outputs = set(outputs)

        inputs.add(addresser.key.address(object_id=signer_keypair.public_key))
        inputs.add(addresser.user.address(object_id=signer_user_id))
        inputs.add(
            addresser.user.key.address(
                object_id=signer_user_id, related_id=signer_keypair.public_key
            )
        )

        if not outputs.issubset(inputs):
            raise ValueError(
                "{} output addresses {} not contained in inputs".format(
                    self.message_type_name,
                    addresser.parse_addresses(outputs.difference(inputs)),
                )
            )

        return batcher.make_payload(
            message=message,
            message_type=message_type,
            inputs=inputs,
            outputs=outputs,
            signer_user_id=signer_user_id,
            signer_public_key=signer_keypair.public_key,
        )
Exemplo n.º 10
0
    def test_unmake(self):
        """Test the unmake batch function with a single message"""
        message, message_type, inputs, outputs, signer_keypair = self.get_test_inputs()
        payload = batcher.make_payload(
            message=message,
            message_type=message_type,
            inputs=inputs,
            outputs=outputs,
            signer_user_id=message.user_id,
            signer_public_key=signer_keypair.public_key,
        )
        transaction, batch, batch_list, batch_request = batcher.make(
            payload=payload, signer_keypair=signer_keypair
        )
        messages = batcher.unmake(
            batch_object=payload, signer_public_key=signer_keypair.public_key
        )
        self.assertEqual(len(messages), 1)
        self.assertEqualMessage(message, messages[0])

        messages = batcher.unmake(
            batch_object=transaction, signer_public_key=signer_keypair.public_key
        )
        self.assertEqual(len(messages), 1)
        self.assertEqualMessage(message, messages[0])

        messages = batcher.unmake(
            batch_object=batch, signer_public_key=signer_keypair.public_key
        )
        self.assertEqual(len(messages), 1)
        self.assertEqualMessage(message, messages[0])

        messages = batcher.unmake(
            batch_object=batch_list, signer_public_key=signer_keypair.public_key
        )
        self.assertEqual(len(messages), 1)
        self.assertEqualMessage(message, messages[0])

        messages = batcher.unmake(
            batch_object=batch_request, signer_public_key=signer_keypair.public_key
        )
        self.assertEqual(len(messages), 1)
        self.assertEqualMessage(message, messages[0])
Exemplo n.º 11
0
    def test_with_self_manager(self):
        """Test creating a user with self as manager"""
        user_key = helper.user.key()
        user_id = user_key.public_key
        name = helper.user.name()

        message = protobuf.user_transaction_pb2.CreateUser(
            user_id=user_id, name=name, metadata=None, manager_id=user_id
        )
        inputs, outputs = rbac.user.make_addresses(
            message=message, signer_keypair=user_key
        )
        payload = batcher.make_payload(
            message=message,
            message_type=rbac.user.message_type,
            inputs=inputs,
            outputs=outputs,
        )
        _, status = rbac.user.send(signer_keypair=user_key, payload=payload)
        self.assertStatusInvalid(status)