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_dtm_ClientInterfaceService.py
Go to the documentation of this file.
1 '''
2 Created on Mar 5, 2014
3 
4 @author: igor
5 '''
6 import unittest
7 from mock import MagicMock, call, ANY
8 import ConfigParser
9 from transport.ConnectionBuilderLight import ConnectionBuilderLight
10 from app.BaseServerManager import BaseServerManager
11 from dtm.ClientInterfaceService import ClientInterfaceService, CONFIG_SECTION
12 import transport.Consts as tr_const
13 from dtm.Constants import EVENT_TYPES
14 from transport.Event import EventBuilder
15 
16 import logging
17 logging.basicConfig() #basic logging configuration
18 
19 
20 class TestClientInterfaceService(unittest.TestCase):
21 
22 
23  def setUp(self):
24  self.config = ConfigParser.RawConfigParser()
26  addr = "127.0.0.1"
27  port = 8899
28  self.tcpAddr = "127.0.0.1:8899"
29  self.config.add_section(CONFIG_SECTION)
30  self.config.set(CONFIG_SECTION, "serverHost", addr)
31  self.config.set(CONFIG_SECTION, "serverPort", port)
32  self.config.set(CONFIG_SECTION, "clientTaskManager", "TaskManager")
33  self.config.set(CONFIG_SECTION, "clientExecutionEnvironmentManager", "ExecutionEnvironmentManager")
34 
36  self.taskFakeServer = self.connectionBuilderLight.build(tr_const.SERVER_CONNECT, "TaskManager")
37  self.eeFakeServer = self.connectionBuilderLight.build(tr_const.SERVER_CONNECT, "ExecutionEnvironmentManager")
38  self.adminServerFake = self.connectionBuilderLight.build(tr_const.SERVER_CONNECT, BaseServerManager.ADMIN_CONNECT_ENDPOINT)
39 
41 
42 
43  def tearDown(self):
44  self.taskFakeServer.close()
45  self.eeFakeServer.close()
46  self.adminServerFake.close()
47  self.clientInterfaceService.connections[self.clientInterfaceService.server].close()
48 
49 
51  connectBuilder_mock = MagicMock(spec = ConnectionBuilderLight)
52 
53  self.clientInterfaceService = ClientInterfaceService(self.config, connectBuilder_mock)
54  expect_connect_calls = [call.build(tr_const.SERVER_CONNECT, self.tcpAddr, tr_const.TCP_TYPE),
55  call.build(tr_const.CLIENT_CONNECT, 'TaskManager'),
56  call.build(tr_const.CLIENT_CONNECT, 'ExecutionEnvironmentManager')]
57 
58  self.assertEqual(expect_connect_calls, connectBuilder_mock.mock_calls, "config parsing is failed")
59 
60 
62  taskManager_mock = MagicMock()
63 
64  transport_events = [EVENT_TYPES.NEW_TASK, EVENT_TYPES.UPDATE_TASK, EVENT_TYPES.GET_TASK_STATUS,
65  EVENT_TYPES.FETCH_RESULTS_CACHE, EVENT_TYPES.DELETE_TASK]
66 
68 
69  #change handler
70  for evntHandler in self.clientInterfaceService.event_handlers:
71  if self.clientInterfaceService.event_handlers[evntHandler] == self.clientInterfaceService.onTaskManagerRoute:
72  self.clientInterfaceService.event_handlers[evntHandler] = taskManager_mock
73 
74  for eventType in transport_events:
75  event = self.eventBuilder.build(eventType, "data obj")
77 
78  self.assertEqual(len(transport_events), taskManager_mock.call_count, "")
79 
80 
81 
83  taskManager_mock = MagicMock()
84 
85  transport_events = [EVENT_TYPES.CHECK_TASK_STATE, EVENT_TYPES.FETCH_TASK_RESULTS]
86 
88 
89  #change handler
90  for evntHandler in self.clientInterfaceService.event_handlers:
91  if self.clientInterfaceService.event_handlers[evntHandler] == self.clientInterfaceService.onEEManagerRoute:
92  self.clientInterfaceService.event_handlers[evntHandler] = taskManager_mock
93 
94  for eventType in transport_events:
95  event = self.eventBuilder.build(eventType, "data obj")
97 
98  self.assertEqual(len(transport_events), taskManager_mock.call_count, "")
99 
100 
101 
103  taskManager_mock = MagicMock()
104 
105  transport_events = [EVENT_TYPES.NEW_TASK_RESPONSE, EVENT_TYPES.UPDATE_TASK_RESPONSE,
106  EVENT_TYPES.CHECK_TASK_STATE_RESPONSE, EVENT_TYPES.GET_TASK_STATUS_RESPONSE,
107  EVENT_TYPES.FETCH_TASK_RESULTS_RESPONSE, EVENT_TYPES.DELETE_TASK_RESPONSE]
108 
110 
111  #change handler
112  for evntHandler in self.clientInterfaceService.event_handlers:
113  if self.clientInterfaceService.event_handlers[evntHandler] == self.clientInterfaceService.onDTMClientRoute:
114  self.clientInterfaceService.event_handlers[evntHandler] = taskManager_mock
115 
116  for eventType in transport_events:
117  event = self.eventBuilder.build(eventType, "data obj")
118  self.clientInterfaceService.process(event)
119 
120  self.assertEqual(len(transport_events), taskManager_mock.call_count, "")
121 
122 
123 
126 
127  event = self.eventBuilder.build(EVENT_TYPES.NEW_TASK, "data obj")
128  event.connect_identity = "1234"
129  event.connect_name = "testName"
130 
131  self.clientInterfaceService.process(event)
132 
133  self.assertEqual(len(self.clientInterfaceService.processEvents), 1, "")
134  process_event = self.clientInterfaceService.processEvents[event.uid]
135  self.assertEqual(process_event.connect_identity, "1234", "")
136  self.assertEqual(process_event.connect_name, "testName", "")
137  self.assertEqual(process_event.eventObj, None, "")
138 
139 
140 
143 
144  event = self.eventBuilder.build(EVENT_TYPES.NEW_TASK, "data obj")
145  self.clientInterfaceService.process(event)
146  self.clientInterfaceService.unregisteEvent(event)
147 
148  self.assertEqual(len(self.clientInterfaceService.processEvents), 0, "")
149 
150 
153  event = self.eventBuilder.build(EVENT_TYPES.NEW_TASK, "data obj")
154 
155  self.clientInterfaceService.onDTMClientRoute(event)
Class hides routines of bulding connection objects.
The gateway for dmt client communications.