def test_env_object(self): class S(Node): class Hosts: role1 = LocalHost role2 = LocalHost2 def my_action(self): return 'result' def return_name_of_self(self): return self.__class__.__name__ def echo_on_all(self): return self.hosts.run('/bin/echo echo', interactive=False) def echo_on_role1(self): return self.hosts.filter('role1').run('/bin/echo echo', interactive=False) def echo_on_role2(self): return self.hosts.get('role2').run('/bin/echo echo', interactive=False) s = S() env = Env(s) self.assertEqual(env.my_action(), 'result') self.assertEqual(env.return_name_of_self(), 'Env') self.assertEqual(env.echo_on_all(), [ 'echo\r\n', 'echo\r\n' ]) self.assertEqual(env.echo_on_role1(), [ 'echo\r\n' ]) self.assertEqual(env.echo_on_role2(), 'echo\r\n') # Isinstance hooks self.assertIsInstance(s, S) self.assertIsInstance(env, S)
def test_env_object(self): class S(Node): class Hosts: role1 = LocalHost role2 = LocalHost2 def my_action(self): return 'result' def return_name_of_self(self): return self.__class__.__name__ def echo_on_all(self): return self.hosts.run('/bin/echo echo', interactive=False) def echo_on_role1(self): return self.hosts.filter('role1').run('/bin/echo echo', interactive=False) def echo_on_role2(self): return self.hosts.filter('role2')[0].run('/bin/echo echo', interactive=False) s = S() env = Env(s) self.assertEqual(env.my_action(), 'result') self.assertEqual(env.return_name_of_self(), 'Env') self.assertEqual(env.echo_on_all(), ['echo\r\n', 'echo\r\n']) self.assertEqual(env.echo_on_role1(), ['echo\r\n']) self.assertEqual(env.echo_on_role2(), 'echo\r\n') # Isinstance hooks self.assertIsInstance(s, S) self.assertIsInstance(env, S)
def test_q_navigation(self): this = self class DummyException(Exception): pass class MyNode(Node): class Hosts: host = LocalHost # 1. Normal query from node. attr = 'value' query = Q.attr query2 = Q.attr + Q.attr def my_action(self): return self.query # 2. Exception in query from node. @property def this_raises(self): raise DummyException query3 = Q.this_raises + Q.attr def my_action2(self): # Calling query3 raises a QueryException # The inner exception that one is the DummyException try: return self.query3 except Exception as e: this.assertIsInstance(e, ActionException) this.assertIsInstance(e.inner_exception, QueryException) this.assertIsInstance(e.inner_exception.node, MyNode) this.assertIsInstance(e.inner_exception.query, Query) this.assertIsInstance(e.inner_exception.inner_exception, DummyException) # Raising the exception again at this point, will turn it # into an action exception. raise s = MyNode() env = Env(s) # 1. self.assertEqual(env.my_action(), 'value') self.assertEqual(env.query2, 'valuevalue') # 2. self.assertRaises(ActionException, env.my_action2) try: env.my_action2() except Exception as e: self.assertIsInstance(e, ActionException)
def test_q_navigation(self): this = self class DummyException(Exception): pass class MyNode(Node): class Hosts: host = LocalHost # 1. Normal query from node. attr = 'value' query = Q.attr query2 = Q.attr + Q.attr def my_action(self): return self.query # 2. Exception in query from node. @property def this_raises(self): raise DummyException query3 = Q.this_raises + Q.attr def my_action2(self): # Calling query3 raises a QueryException # The inner exception that one is the DummyException try: return self.query3 except Exception as e: this.assertIsInstance(e, ActionException) this.assertIsInstance(e.inner_exception, QueryException) this.assertIsInstance(e.inner_exception.node, MyNode) this.assertIsInstance(e.inner_exception.query, Query) this.assertIsInstance(e.inner_exception.inner_exception, DummyException) # Raising the exception again at this point, will turn it # into an action exception. raise s = MyNode() env = Env(s) # 1. self.assertEqual(env.my_action(), 'value') self.assertEqual(env.query2, 'valuevalue') # 2. self.assertRaises(ActionException, env.my_action2) try: env.my_action2() except Exception as e: self.assertIsInstance(e, ActionException)
def test_action_with_params(self): class MyNode(Node): class Hosts: host = LocalHost def my_action(self, param1, *a, **kw): return (param1, a, kw) s = MyNode() env = Env(s) result = env.my_action('param1', 1, 2, k=3, v=4) self.assertEqual(result, ('param1', (1, 2), { 'k': 3, 'v': 4 }) )
def test_action_with_params(self): class MyNode(Node): class Hosts: host = LocalHost def my_action(self, param1, *a, **kw): return (param1, a, kw) s = MyNode() env = Env(s) result = env.my_action('param1', 1, 2, k=3, v=4) self.assertEqual(result, ('param1', (1, 2), {'k': 3, 'v': 4}))
def test_property(self): class MyNode(Node): class Hosts: host = LocalHost @property def p(self): return 'value' def my_action(self): return self.p s = MyNode() env = Env(s) self.assertEqual(env.my_action(), 'value')
def test_property(self): class MyNode(Node): class Hosts: host = LocalHost @property def p(self): return 'value' def my_action(self): return self.p s = MyNode() env = Env(s) self.assertEqual(env.my_action(), 'value')
def test_q_navigation(self): class MyNode(Node): class Hosts: host = LocalHost attr = 'value' query = Q.attr query2 = Q.attr + Q.attr def my_action(self): return self.query s = MyNode() env = Env(s) self.assertEqual(env.my_action(), 'value') self.assertEqual(env.query2, 'valuevalue')