def test_simple_node(self): class N(SimpleNode): class Hosts: host = {LocalHost1, LocalHost2} def func(self): return 'result' # SimpleNode executes for each host separately. env = Env(N()) self.assertEqual(list(env.func()), ['result', 'result']) # Test return value of SimpleNode result = env.func() self.assertIsInstance(result, ParallelActionResult) # (The key is the Env, containing the isolation) self.assertIsInstance(result.keys()[0], Env) self.assertIsInstance(result.keys()[1], Env) self.assertIn(result.keys()[0]._node.Hosts.host, {LocalHost1, LocalHost2}) self.assertIn(result.keys()[1]._node.Hosts.host, {LocalHost1, LocalHost2}) self.assertEqual(result.values()[0], 'result') self.assertEqual(result.values()[1], 'result')
def test_simple_nodes_in_normal_node(self): class N(Node): class Hosts: role1 = LocalHost1, LocalHost role2 = LocalHost3 @map_roles('role1') class M(SimpleNode.Array): def func(self): return 'func-m' class X(SimpleNode): def func(self): return 'func-x' def func(self): return 'func-n' # `M` should behave as an array. env = Env(N()) self.assertEqual(env.func(), 'func-n') self.assertEqual(env.M.func(), ['func-m', 'func-m' ]) self.assertEqual(env.M[0].func(), 'func-m') self.assertEqual(env.M.X.func(), ['func-x', 'func-x']) self.assertEqual(env.M[0].X.func(), 'func-x') self.assertEqual(env.M.X[0].func(), 'func-x')
def test_simple_node_getitem(self): class N(SimpleNode): class Hosts: host = LocalHost1, LocalHost2 def func(self): return 'result' n = N() self.assertIsInstance(n[0], SimpleNode) self.assertIsInstance(n[1], SimpleNode) self.assertIsInstance(n[LocalHost1], SimpleNode) self.assertIsInstance(n[LocalHost2], SimpleNode) self.assertEqual(n[0]._node_is_isolated, True) self.assertEqual(n[1]._node_is_isolated, True) self.assertEqual(n[LocalHost1]._node_is_isolated, True) self.assertEqual(n[LocalHost2]._node_is_isolated, True) self.assertRaises(KeyError, lambda: n[2]) self.assertRaises(KeyError, lambda: n[LocalHost3]) # Calling the isolated item should not return an array env = Env(N()) self.assertEqual(env.func(), ['result', 'result' ]) self.assertEqual(env[0].func(), 'result') self.assertEqual(env[1].func(), 'result') self.assertRaises(KeyError, lambda: env[2]) self.assertRaises(KeyError, lambda: env[LocalHost3])
def test_simple_nodes_in_normal_node(self): class N(Node): class Hosts: role1 = {LocalHost1, LocalHost} role2 = LocalHost3 @map_roles('role1') class M(SimpleNode.Array): def func(self): return 'func-m' class X(SimpleNode): def func(self): return 'func-x' def func(self): return 'func-n' # `M` should behave as an array. env = Env(N()) self.assertEqual(env.func(), 'func-n') self.assertEqual(list(env.M.func()), ['func-m', 'func-m']) self.assertIsInstance(env.M.func(), ParallelActionResult) self.assertEqual(env.M[0].func(), 'func-m') self.assertEqual(list(env.M.X.func()), ['func-x', 'func-x']) self.assertIsInstance(env.M.X.func(), ParallelActionResult) self.assertEqual(env.M[0].X.func(), 'func-x') self.assertEqual(env.M.X[0].func(), 'func-x')
def test_simple_node_getitem(self): class N(SimpleNode): class Hosts: host = {LocalHost1, LocalHost2} def func(self): return 'result' n = N() self.assertIsInstance(n[0], SimpleNode) self.assertIsInstance(n[1], SimpleNode) self.assertIsInstance(n[LocalHost1], SimpleNode) self.assertIsInstance(n[LocalHost2], SimpleNode) self.assertEqual(n[0]._node_is_isolated, True) self.assertEqual(n[1]._node_is_isolated, True) self.assertEqual(n[LocalHost1]._node_is_isolated, True) self.assertEqual(n[LocalHost2]._node_is_isolated, True) self.assertRaises(KeyError, lambda: n[2]) self.assertRaises(KeyError, lambda: n[LocalHost3]) # Calling the isolated item should not return an array env = Env(N()) self.assertEqual(list(env.func()), ['result', 'result']) self.assertIsInstance(env.func(), ParallelActionResult) self.assertEqual(env[0].func(), 'result') self.assertEqual(env[1].func(), 'result') self.assertRaises(KeyError, lambda: env[2]) self.assertRaises(KeyError, lambda: env[LocalHost3])
def test_simple_node(self): class N(SimpleNode): class Hosts: host = LocalHost1, LocalHost2 def func(self): return 'result' # SimpleNode executes for each host separately. env = Env(N()) self.assertEqual(env.func(), ['result', 'result' ])
def test_simple_node(self): class N(SimpleNode): class Hosts: host = { LocalHost1, LocalHost2 } def func(self): return 'result' # SimpleNode executes for each host separately. env = Env(N()) self.assertEqual(list(env.func()), ['result', 'result' ]) # Test return value of SimpleNode result = env.func() self.assertIsInstance(result, ParallelActionResult) # (The key is the Env, containing the isolation) self.assertIsInstance(result.keys()[0], Env) self.assertIsInstance(result.keys()[1], Env) self.assertIn(result.keys()[0]._node.Hosts.host, { LocalHost1, LocalHost2 }) self.assertIn(result.keys()[1]._node.Hosts.host, { LocalHost1, LocalHost2 }) self.assertEqual(result.values()[0], 'result') self.assertEqual(result.values()[1], 'result')