def test_key_exchange(self): """ Tests the auth function before the client has paired. This triggers key exchanging. Verifies: * remote command "exchange_keys" is sent * Avatar response is received and decoded * response triggers client save_key to be called * server key is received * response triggers server save_key to be called * client key is received """ client = RSAClient(self.priv_key, self.pub_key_values) remote = RemoteProxy() save_key_server = CallProxy(None, False) save_key_client = CallProxy(None, False) client.auth(remote, save_key=save_key_client) args, kwargs, deferred = remote.assertCalled(self, 'exchange_keys') avatar = RSAAvatar(self.priv_key, self.pub_key_values, self.pub_key, save_key=save_key_server, key_size=KEY_SIZE) deferred.callback(avatar.perspective_exchange_keys(*args[1:])) args, kwargs = save_key_server.assertCalled(self) key = simplejson.loads(''.join(args[0])) self.assert_(key==self.pub_key_values, 'keys do not match') args, kwargs = save_key_client.assertCalled(self) key = simplejson.loads(''.join(args[0])) self.assert_(key==self.pub_key_values, 'keys do not match')