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_admin_NodeManagerRequest.py
Go to the documentation of this file.
1 '''
2 Created on Feb 17, 2014
3 
4 @author: scorp
5 '''
6 
7 
8 import unittest
9 import Constants as CONSTANTS
10 import AdminExceptions
11 from NodeManagerRequest import NodeManagerRequest
12 from transport.Connection import ConnectionTimeout
13 from transport.IDGenerator import IDGenerator
14 from transport.Response import Response
15 from transport.Connection import Connection
16 from mock import MagicMock
17 from transport.ConnectionBuilder import ConnectionBuilder
18 from Node import Node
19 from time import sleep
20 
21 
22 def recvMockFunc(timeout):
23  raise ConnectionTimeout(">>> recv timeout")
24 
25 
26 def sendMockFunc(request):
27  sleep(2)
28 
29 
30 class TestNodeManagerRequest(unittest.TestCase):
31 
32 
33  def setUp(self):
34  self.nodeManagerRequest = NodeManagerRequest()
35 
36 
37  def tearDown(self):
38  pass
39 
40 
42  self.assertTrue(self.nodeManagerRequest.connectionBuilder != None,
43  ">>> connectionBuilder field is None, after default consturctor")
44  iDGenerator = IDGenerator()
45  self.nodeManagerRequest = NodeManagerRequest(connectionIdGenerator=iDGenerator)
46  self.assertTrue(self.nodeManagerRequest.connectionBuilder != None,
47  ">>> connectionBuilder field is None, after consturctor with IDGenerator")
48 
49 
51  testData = [123, "Body String"]
52  response = Response(testData)
53  message = {CONSTANTS.STRING_MSGID_NAME : 123, CONSTANTS.STRING_BODY_NAME : "Body String"}
54  nodeManagerResponse = self.nodeManagerRequest.createNodeManagerResponse(response, message)
55  self.assertEqual(nodeManagerResponse.getErrorCode(), CONSTANTS.ERROR_NO,
56  ">>> [1] id request and id response not equal")
57 
58  message = {CONSTANTS.STRING_MSGID_NAME : 124, CONSTANTS.STRING_BODY_NAME : "Body String"}
59  nodeManagerResponse = self.nodeManagerRequest.createNodeManagerResponse(response, message)
60  self.assertEqual(nodeManagerResponse.getErrorCode(), CONSTANTS.ERROR_BAD_MSG_ID,
61  ">>> [2] id request and id response are equal")
62 
63 
65  exceptionString = None
66  self.nodeManagerRequest.raiseAdminExceptions(exceptionString)
67  exceptionString = CONSTANTS.STRING_EXCEPTION_WRONG_CONNECTION_KEY
68  with self.assertRaises(AdminExceptions.AdminWrongConnectionKey):
69  list(self.nodeManagerRequest.raiseAdminExceptions(exceptionString))
70 
71  exceptionString = CONSTANTS.STRING_EXCEPTION_ADMIN_TIMEOUT
72  with self.assertRaises(AdminExceptions.AdminTimeoutException):
73  list(self.nodeManagerRequest.raiseAdminExceptions(exceptionString))
74 
75  exceptionString = "---> Some String <---"
76  with self.assertRaises(AdminExceptions.AdminTimeoutException):
77  list(self.nodeManagerRequest.raiseAdminExceptions(exceptionString))
78 
79 
80  def testMakeRequest1(self):
81  mock = MagicMock(spec=ConnectionBuilder)
82  mock.build.side_effect = KeyError("Wrong Key")
83  self.nodeManagerRequest.connectionBuilder = mock
84  localNode = Node()
85  testMsg = {CONSTANTS.STRING_MSGID_NAME : 123, CONSTANTS.STRING_BODY_NAME : "Body String"}
86  with self.assertRaises(AdminExceptions.AdminWrongConnectionKey):
87  list(self.nodeManagerRequest.makeRequest(localNode, testMsg))
88 
89 
90  def testMakeRequest2(self):
91  mock = MagicMock(spec=ConnectionBuilder)
92  self.nodeManagerRequest.connectionBuilder = mock
93  localNode = Node()
94  testMsg = {CONSTANTS.STRING_MSGID_NAME : 123, CONSTANTS.STRING_BODY_NAME : "Body String"}
95  connectionMock = MagicMock(spec=Connection)
96  mock_cfg = {"build.return_value":connectionMock}
97  mock.configure_mock(**mock_cfg)
98  self.nodeManagerRequest.connectionBuilder = mock
99  self.nodeManagerRequest.makeRequest(localNode, testMsg)
100  self.assertTrue(connectionMock.send.called, ">>> transport.Connection.send not call")
101  self.assertTrue(connectionMock.recv.called, ">>> transport.Connection.recv not call")
102  self.assertTrue(connectionMock.close.called, ">>> transport.Connection.close not call")
103 
104 
105  def testMakeRequest3(self):
106  mock = MagicMock(spec=ConnectionBuilder)
107  localNode = Node()
108  testMsg = {CONSTANTS.STRING_MSGID_NAME : 123, CONSTANTS.STRING_BODY_NAME : "Body String"}
109  connectionMock = MagicMock(spec=Connection)
110  mock_cfg = {"build.return_value":connectionMock}
111  mock.configure_mock(**mock_cfg)
112  connectionMock.recv.side_effect = recvMockFunc
113  createNodeManagerResponseMock = MagicMock()
114  self.nodeManagerRequest.connectionBuilder = mock
115  self.nodeManagerRequest.createNodeManagerResponse = createNodeManagerResponseMock
116  with self.assertRaises(AdminExceptions.AdminTimeoutException):
117  list(self.nodeManagerRequest.makeRequest(localNode, testMsg))
118  self.assertTrue(createNodeManagerResponseMock.called == False,
119  ">>> transport.Connection.close not call")
120 
121 
122  def testMakeRequest4(self):
123  mock = MagicMock(spec=ConnectionBuilder)
124  self.nodeManagerRequest.connectionBuilder = mock
125  localNode = Node()
126  testMsg = {CONSTANTS.STRING_MSGID_NAME : 123, CONSTANTS.STRING_BODY_NAME : "Body String"}
127  connectionMock = MagicMock(spec=Connection)
128  connectionMock.send.side_effect = sendMockFunc
129  mock_cfg = {"build.return_value":connectionMock}
130  mock.configure_mock(**mock_cfg)
131  self.nodeManagerRequest.connectionBuilder = mock
132  with self.assertRaises(AdminExceptions.AdminTimeoutException):
133  list(self.nodeManagerRequest.makeRequest(localNode, testMsg))
134  self.assertTrue(connectionMock.send.called, ">>> transport.Connection.send wasn't call")
135  self.assertTrue(connectionMock.recv.called == False, ">>> transport.Connection.recv was call")
136  self.assertTrue(connectionMock.close.called, ">>> transport.Connection.close wasn't call")
137 
138 
139 if __name__ == "__main__":
140  # import sys;sys.argv = ['', 'Test.testName']
141  unittest.main()
def makeRequest(self, node, message, commandTimeout=None)
makeRequest main class method, it gets node and message params, interact with transport layer...
It&#39;s a wrapper similar to zmsg.hpp in sense of encapsulation of hce response message structure...
Definition: Response.py:20
def raiseAdminExceptions(self, exceptionString)
raiseAdminExceptions method generates exceptions based on analyze of exceptionString param&#39;s data ...