class ActorManagerTests(unittest.TestCase): def setUp(self): n = DummyNode() self.am = ActorManager(node=n) self.am.connection_handler = ConnectionHandler() n.am = self.am def tearDown(self): pass def _new_actor(self, a_type, a_args, app_id=None, **kwargs): a_id = self.am.new(a_type, a_args, app_id=app_id, **kwargs) a = self.am.actors.get(a_id, None) self.assertTrue(a) return a, a_id def testNewActor(self): # Test basic actor creation a_type = 'std.Constant' data = 42 a, _ = self._new_actor(a_type, {'data':data}) self.assertEqual(a.data, data) def testActorStateGet(self): # Test basic actor state retrieval a_type = 'std.Constant' data = 42 a, a_id = self._new_actor(a_type, {'data':data}) s = a.state() self.assertEqual(s['data'], data) self.assertEqual(s['id'], a_id) self.assertEqual(s['n'], 1) def testNewActorFromState(self): # Test basic actor state manipulation a_type = 'std.Constant' data = 42 a, a_id = self._new_actor(a_type, {'data': data}) a.data = 43 a.n = 2 s = a.state() self.am.delete_actor(a_id) self.assertEqual(len(self.am.actors), 0) b, b_id = self._new_actor(a_type, None, state=s) self.assertEqual(a.data, 43) self.assertEqual(a.n, 2) # Assert id is preserved self.assertEqual(a.id, a_id) # Assert actor database is consistent self.assertTrue(self.am.actors[a_id]) self.assertEqual(len(self.am.actors), 1) def testNewReplicaWithState(self): a_type = 'io.StandardOut' a, a_id = self._new_actor(a_type, {'name': 'a_name', 'store_tokens': 1}) a.tokens = [1, 2, 3] state = a.state() prev_connections = a.connections(self.am.node.id) prev_connections['port_names'] = a.port_names() args = a.replication_args() args['name'] = 'new_name' self.am.new_replica(a_type, args, state, dict(prev_connections), None, None) self.assertEqual(len(self.am.actors), 2) ids = set(self.am.actors.keys()) b_id = (ids | set([a.id])).pop() b = self.am.actors[b_id] self.assertEqual(a.tokens, [1, 2, 3]) self.assertEqual(a.store_tokens, 1) self.assertEqual(b.tokens, [1, 2, 3]) self.assertEqual(b.store_tokens, 1) # Assert new id is assigned self.assertNotEqual(b.id, a.id) # Assert new name is assigned self.assertNotEqual(b.name, a.name) # Assert actor database is consistent self.assertTrue(self.am.actors[a_id]) self.assertTrue(self.am.actors[b.id]) self.assertEqual(len(self.am.actors), 2)