def test_send_message_from_domain_client_to_vm() -> None: # Register a 🍰 with a 📱 # Register a 📱 with a 🏰 # Send ✉️ from 🏰 ➡️ 🍰 bob_vm = sy.VirtualMachine(name="Bob") bob_vm_client = bob_vm.get_client() bob_vm.root_verify_key = bob_vm_client.verify_key # inject 📡🔑 as 📍🗝 bob_phone = sy.Device(name="Bob's iPhone") bob_phone_client = bob_phone.get_client() bob_phone.root_verify_key = bob_phone_client.verify_key # inject 📡🔑 as 📍🗝 bob_phone_client.register(client=bob_vm_client) assert bob_vm.device is not None assert bob_vm_client.device is not None bob_domain = sy.Domain(name="Bob's Domain") bob_domain_client = bob_domain.get_client() bob_domain.root_verify_key = bob_domain_client.verify_key # inject 📡🔑 as 📍🗝 # switch keys bob_vm.root_verify_key = bob_domain_client.verify_key # inject 📡🔑 as 📍🗝 bob_domain_client.register(client=bob_phone_client) assert bob_phone.domain is not None assert bob_phone_client.domain is not None bob_domain_client.send_immediate_msg_without_reply(msg=sy.ReprMessage( address=bob_vm.address))
def test_send_message_from_device_client_to_device() -> None: bob_phone = sy.Device(name="Bob's iPhone") bob_phone_client = bob_phone.get_client() with pytest.raises(AuthorizationException): bob_phone_client.send_immediate_msg_without_reply(msg=sy.ReprMessage( address=bob_phone_client.address))
def test_service_auth_admin_success_as_root() -> None: node = sy.Device() msg = sy.ReprMessage(address=node.address) # Administrator only @service_auth(admin_only=True) def process(node: sy.Device, msg: sy.ReprMessage, verify_key: VerifyKey) -> None: pass process(node=node, msg=msg, verify_key=node.root_verify_key)
def test_service_auth_cpl_ofcr_success_as_root() -> None: node = sy.Device() msg = sy.ReprMessage(address=node.address) # Compliance Officer only @service_auth(cpl_ofcr_only=True) def process(node: sy.Device, msg: sy.ReprMessage, verify_key: VerifyKey) -> None: pass process(node=node, msg=msg, verify_key=node.root_verify_key)
def test_register_vm_on_device_fails(node: sy.VirtualMachine, client: sy.VirtualMachineClient) -> None: bob_phone = sy.Device(name="Bob's iPhone") bob_phone_client = bob_phone.get_client() with pytest.raises(AuthorizationException): bob_phone_client.register(client=client) assert node.device is None # TODO: prevent device being set when Authorization fails assert client.device is not None
def test_service_auth_guests_succeeds() -> None: node = sy.Device() msg = sy.ReprMessage(address=node.address) new_signing_key = SigningKey.generate() new_verify_key = new_signing_key.verify_key # register_new_guests @service_auth(guests_welcome=True, register_new_guests=True) def process(node: sy.Device, msg: sy.ReprMessage, verify_key: VerifyKey) -> None: pass process(node=node, msg=msg, verify_key=new_verify_key) assert new_verify_key in node.guest_verify_key_registry
def test_register_vm_on_device_succeeds() -> None: # Register a 🍰 with a 📱 bob_vm = sy.VirtualMachine(name="Bob") bob_vm_client = bob_vm.get_client() bob_vm.root_verify_key = bob_vm_client.verify_key # inject 📡🔑 as 📍🗝 bob_phone = sy.Device(name="Bob's iPhone") bob_phone_client = bob_phone.get_client() bob_phone.root_verify_key = bob_phone_client.verify_key # inject 📡🔑 as 📍🗝 bob_phone_client.register(client=bob_vm_client) assert bob_vm.device is not None assert bob_vm_client.device is not None
def test_service_auth_admin_fails() -> None: node = sy.Device() msg = sy.ReprMessage(address=node.address) random_signing_key = SigningKey.generate() random_verify_key = random_signing_key.verify_key # Administrator only @service_auth(admin_only=True) def process(node: sy.Device, msg: sy.ReprMessage, verify_key: VerifyKey) -> None: pass with pytest.raises(AuthorizationException, match="User lacks Administrator credentials."): process(node=node, msg=msg, verify_key=random_verify_key)
def test_service_auth_cpl_ofcr_success() -> None: node = sy.Device() msg = sy.ReprMessage(address=node.address) random_signing_key = SigningKey.generate() random_verify_key = random_signing_key.verify_key # Compliance Officer only @service_auth(cpl_ofcr_only=True) def process(node: sy.Device, msg: sy.ReprMessage, verify_key: VerifyKey) -> None: pass # NOTE didn't find a method to add a key to cpl_ofcr_verify_key_registry node.cpl_ofcr_verify_key_registry.add(random_verify_key) process(node=node, msg=msg, verify_key=random_verify_key)
def test_service_auth_existing_user() -> None: node = sy.Device() msg = sy.ReprMessage(address=node.address) random_signing_key = SigningKey.generate() random_verify_key = random_signing_key.verify_key # existing_users_only @service_auth(existing_users_only=True) def process(node: sy.Device, msg: sy.ReprMessage, verify_key: VerifyKey) -> None: pass with pytest.raises(AuthorizationException, match="User not known."): process(node=node, msg=msg, verify_key=random_verify_key) # NOTE didn't find a method to add a key to guest_verify_key_registry node.guest_verify_key_registry.add(random_verify_key) process(node=node, msg=msg, verify_key=random_verify_key)
def test_service_auth_root_fails() -> None: node = sy.Device() msg = sy.ReprMessage(address=node.address) random_signing_key = SigningKey.generate() random_verify_key = random_signing_key.verify_key # root_only @service_auth(root_only=True) def process(node: sy.Device, msg: sy.ReprMessage, verify_key: VerifyKey) -> None: pass process(node=node, msg=msg, verify_key=node.root_verify_key) with pytest.raises(AuthorizationException, match="You are not Authorized to access this service"): process(node=node, msg=msg, verify_key=random_verify_key)
def test_object_search_permissons_update_execute_add() -> None: bob_phone = sy.Device(name="Bob's iPhone") bob_phone_client = bob_phone.get_client() ptr = th.tensor([1, 2, 3]).send(bob_phone_client) msg = ObjectSearchPermissionUpdateMessage( add_instead_of_remove=True, target_verify_key=bob_phone_client.verify_key, target_object_id=ptr.id_at_location, address=bob_phone_client.address, ) ImmediateObjectSearchPermissionUpdateService.process( node=bob_phone, msg=msg, verify_key=bob_phone.verify_key) assert (bob_phone.store[ptr.id_at_location].search_permissions[ bob_phone_client.verify_key] == msg.id)
def test_object_search_permissons_update_message_serde() -> None: bob_phone = sy.Device(name="Bob's iPhone") bob_phone_client = bob_phone.get_client() ptr = th.tensor([1, 2, 3]).send(bob_phone_client) msg = ObjectSearchPermissionUpdateMessage( add_instead_of_remove=True, target_verify_key=bob_phone_client.verify_key, target_object_id=ptr.id_at_location, address=bob_phone_client.address, ) blob = sy.serialize(msg) msg2 = sy.deserialize(blob=blob) assert msg.id == msg2.id assert msg.address == msg2.address assert msg.add_instead_of_remove == msg2.add_instead_of_remove assert msg.target_verify_key == msg2.target_verify_key assert msg.target_object_id == msg2.target_object_id
def test_known_child_nodes() -> None: bob_vm = sy.VirtualMachine(name="Bob VM") bob_vm_client = bob_vm.get_client() bob_vm.root_verify_key = bob_vm_client.verify_key # inject 📡🔑 as 📍🗝 bob_vm_2 = sy.VirtualMachine(name="Bob VM 2") bob_vm_client_2 = bob_vm_2.get_client() bob_vm_2.root_verify_key = bob_vm_client_2.verify_key # inject 📡🔑 as 📍🗝 bob_phone = sy.Device(name="Bob's iPhone") bob_phone_client = bob_phone.get_client() bob_phone.root_verify_key = bob_phone_client.verify_key # inject 📡🔑 as 📍🗝 bob_phone_client.register(client=bob_vm_client) assert len(bob_phone.known_child_nodes) == 1 assert bob_vm in bob_phone.known_child_nodes bob_phone_client.register(client=bob_vm_client_2) assert len(bob_phone.known_child_nodes) == 2 assert bob_vm_2 in bob_phone.known_child_nodes
def test_child_node_lifecycle_message_serde() -> None: bob_vm = sy.VirtualMachine(name="Bob") bob_vm_client = bob_vm.get_client() bob_phone = sy.Device(name="Bob's iPhone") bob_phone_client = bob_phone.get_client() # bob_phone_client.register(client=bob_vm_client) # generates this message msg = RegisterChildNodeMessage( lookup_id=bob_vm_client.id, # TODO: not sure if this is needed anymore child_node_client_address=bob_vm_client.address, address=bob_phone_client.address, ) blob = msg.serialize() msg2 = sy.deserialize(blob=blob) assert msg.id == msg2.id assert msg.address == msg2.address assert msg.child_node_client_address == msg2.child_node_client_address assert msg == msg2