HCE Project Python language Distributed Tasks Manager Application, Distributed Crawler Application and client API bindings.  2.0.0-chaika
Hierarchical Cluster Engine Python language binding
test_drce_DRCEManager.py
Go to the documentation of this file.
1 '''
2 Created on Feb 14, 2014
3 
4 @author: igor
5 '''
6 import unittest
7 from mock import MagicMock, call, ANY
8 
9 from drce.DRCEManager import DRCEManager, HostParams
10 from drce.ConnectionManager import ConnectionManager
11 from drce.CommandExecutor import CommandExecutor, CommandExecutorErr
12 from drce.Commands import TaskCheckRequest
13 from transport.Connection import ConnectionParams, Connection
14 from transport.Connection import ConnectionTimeout, TransportInternalErr
15 from transport.Response import Response
16 import drce.Consts as consts
17 
18 
19 class TestDRCEManager(unittest.TestCase):
20 
21 
22  def setUp(self):
24  self.response = Response([
25  "1",
26  """
27  {
28  "error_code":0,
29  "error_message" :"msg",
30  "time":10,
31  "state":1,
32  "pid":101,
33  "data":[
34  {"files":[{"name":"f1", "data":"data1", "action":12}],
35  "stdout":"out",
36  "stderror":"error",
37  "exit_status":5,
38  "node":"n1",
39  "time":100
40  }
41  ]
42  }
43  """ ])
44  self.connect_mock = MagicMock(spec=Connection)
45  self.task_request = TaskCheckRequest("task_id", consts.EXTEND_STATUS_INFO)
46 
47 
49  host = HostParams("ibm.com", 125)
50  connect_params = ConnectionParams(host.host, host.port)
51  connect_manager_mock = MagicMock(spec=ConnectionManager)
52  mock_cfg = {"create_connection.return_value": None}
53  connect_manager_mock.configure_mock(**mock_cfg)
54  expect_calls = [call.create_connection(connect_params)]
55 
56  self.drce_manager.connect_manager = connect_manager_mock
57  self.drce_manager.activate_host(host)
58 
59  self.assertEquals(expect_calls, connect_manager_mock.mock_calls, "")
60 
61 
62  def test_clear_host(self):
63  connect_manager_mock = MagicMock(spec=ConnectionManager)
64  manager_expect_calls = [call.destroy_connection(ANY)]
65 
66  cmd_executor_mock = MagicMock(spec = CommandExecutor)
67  executor_expect_calls = [call.replace_connection(ANY)]
68 
69  self.drce_manager.cmd_executor = cmd_executor_mock
70  self.drce_manager.connect_manager = connect_manager_mock
71  self.drce_manager.clear_host()
72 
73  self.assertEquals(manager_expect_calls, connect_manager_mock.mock_calls, "")
74  self.assertEquals(executor_expect_calls, cmd_executor_mock.mock_calls, "")
75 
76 
78  connect_cfg = {"send.return_value": None,
79  "recv.return_value": self.response}
80  self.connect_mock.configure_mock(**connect_cfg)
81  self.drce_manager.cmd_executor.replace_connection(self.connect_mock)
82 
83  task_response = self.drce_manager.process(self.task_request)
84 
85  test_err_str = "processing is failed"
86  self.assertEqual(task_response.error_code, 0, test_err_str)
87  self.assertEqual(task_response.error_msg, "msg", test_err_str )
88  self.assertEqual(task_response.state, 1, test_err_str)
89  self.assertEqual(len(task_response.data), 1, test_err_str)
90  self.assertEqual(task_response.pid, 101, test_err_str)
91 
92 
93 
95  self.connect_mock.send.return_value = None
96  self.connect_mock.recv.side_effect = ConnectionTimeout("Boom")
97  self.drce_manager.cmd_executor.replace_connection(self.connect_mock)
98 
99  with self.assertRaises(ConnectionTimeout):
100  list(self.drce_manager.process(self.task_request))
101 
102 
104  self.connect_mock.send.return_value = None
105  self.connect_mock.recv.side_effect = TransportInternalErr("Boom")
106  self.drce_manager.cmd_executor.replace_connection(self.connect_mock)
107 
108  with self.assertRaises(TransportInternalErr):
109  list(self.drce_manager.process(self.task_request))
110 
111 
113  self.connect_mock.send.return_value = None
114  self.connect_mock.recv.side_effect = CommandExecutorErr("Boom")
115  self.drce_manager.cmd_executor.replace_connection(self.connect_mock)
116 
117  with self.assertRaises(CommandExecutorErr):
118  list(self.drce_manager.process(self.task_request))
Check task request.
Definition: Commands.py:169
It's a wrapper similar to zmsg.hpp in sense of encapsulation of hce response message structure...
Definition: Response.py:20