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
ftest_ResourcesManager.py
Go to the documentation of this file.
1 '''
2 Created on Mar 17, 2014
3 
4 @package: dtm
5 @author: scorp
6 @link: http://hierarchical-cluster-engine.com/
7 @copyright: Copyright © 2013-2014 IOIX Ukraine
8 @license: http://hierarchical-cluster-engine.com/license/
9 @since: 0.1
10 '''
11 from transport.Event import Event
12 from transport.Event import EventBuilder
13 from dtm.ResourcesManager import ResourcesManager
14 from transport.ConnectionBuilderLight import ConnectionBuilderLight
15 from dtm.Constants import EVENT_TYPES as EVENT
16 from app.BaseServerManager import BaseServerManager
17 import unittest
18 import ConfigParser
19 import dtm.EventObjects
20 import transport.Consts
21 import logging
22 import time
23 
24 
25 logging.basicConfig()
26 logger = logging.getLogger(__name__)
27 testResources = [{"id":1010, "cpu":10, "io":10, "ramR":10, "ramV":10, "swap":10, "disk":10, "uDate":55,
28  "state":dtm.EventObjects.Resource.STATE_ACTIVE, "cpuCores":4, "threads":77, "processes":88},
29  {"id":1020, "cpu":20, "io":20, "ramR":20, "ramV":20, "swap":20, "disk":20, "uDate":55,
30  "state":dtm.EventObjects.Resource.STATE_ACTIVE, "cpuCores":16, "threads":77, "processes":88},
31  {"id":1030, "cpu":30, "io":30, "ramR":30, "ramV":30, "swap":30, "disk":30, "uDate":95,
32  "state":dtm.EventObjects.Resource.STATE_ACTIVE, "cpuCores":12, "threads":77, "processes":88},
33  {"id":1050, "cpu":50, "io":50, "ramR":50, "ramV":50, "swap":50, "disk":50, "uDate":145,
34  "state":dtm.EventObjects.Resource.STATE_UNDEFINED, "cpuCores":4, "threads":77, "processes":88},
35  {"id":1010, "cpu":40, "io":40, "ramR":40, "ramV":40, "swap":40, "disk":40, "uDate":15,
36  "state":dtm.EventObjects.Resource.STATE_ACTIVE, "cpuCores":6, "threads":77, "processes":88}]
37 
38 
39 class TestResoursesManager(unittest.TestCase):
40 
41 
42  def setUp(self):
43  self.config = ConfigParser.ConfigParser()
44  self.servIndex = 1
45  self.config.read("./dtmd.ini")
47  self.adminServerConnection = self.connectionBuilder.build(transport.Consts.SERVER_CONNECT,
48  BaseServerManager.ADMIN_CONNECT_ENDPOINT)
50  self.moduleName = self.taskResourcesManager.__class__.__name__
52  self.event = None
53  self.reply_event = None
55  self.connectionInit()
56  self.recvEvent = None
57 
58 
59  def fillLocalResources(self, localTestResources, idx):
60  ret = dtm.EventObjects.Resource(localTestResources[idx]["id"])
61  ret.cpu = localTestResources[idx]["cpu"]
62  ret.io = localTestResources[idx]["io"]
63  ret.ramR = localTestResources[idx]["ramR"]
64  ret.ramV = localTestResources[idx]["ramV"]
65  ret.swap = localTestResources[idx]["swap"]
66  ret.disk = localTestResources[idx]["disk"]
67  ret.uDate = localTestResources[idx]["uDate"]
68  ret.state = localTestResources[idx]["state"]
69  ret.cpuCores = localTestResources[idx]["cpuCores"]
70  ret.threads = localTestResources[idx]["threads"]
71  ret.processes = localTestResources[idx]["processes"]
72 
73 
74  def connectionInit(self):
76  try:
77  self.localConnection = self.taskResourcesManager.connectionBuilder.build(transport.Consts.CLIENT_CONNECT, \
78  self.config.get(self.moduleName, ResourcesManager.RESOURCE_MANAGER_SERV_CONFIG_NAME))
79  self.servIndex = self.servIndex + 1
80  except ConfigParser.NoSectionError:
81  logger.error(">>> TasksDataManager can't read config - Section Error")
82  except ConfigParser.NoOptionError:
83  logger.error(">>> TasksDataManager can't read config - Option Error")
84 
85 
86  def tearDown(self):
87  self.taskResourcesManager.exit_flag = True
89  for connection in self.taskResourcesManager.connections.values():
90  connection.close()
91  self.adminServerConnection.close()
92  time.sleep(1)
93 
94 
95  def testFunctional1(self):
96  localResourcesList = []
97  localResources = self.fillLocalResources(testResources, 0)
98  localResourcesList.append(localResources)
99  event = self.eventBuilder.build(EVENT.UPDATE_RESOURCES_DATA, localResourcesList)
100  self.localConnection.send(event)
101  self.recvEvent = self.localConnection.recv()
102  self.assertTrue(self.recvEvent != None, ">>> ret reply_event is None")
103  self.assertTrue(self.recvEvent.eventObj != None, ">>> ret reply_event_obj is None")
104  self.assertTrue(len(self.recvEvent.eventObj.statuses) == 1, ">>> ret reply_event_obj size is wrong")
105  self.assertTrue(self.recvEvent.eventType == EVENT.UPDATE_RESOURCES_DATA_RESPONSE,
106  ">>> reply_event event.eventType is wrong")
107 
108  localResourcesList = []
109  localResources = self.fillLocalResources(testResources, 1)
110  localResourcesList.append(localResources)
111  localResources = self.fillLocalResources(testResources, 2)
112  localResourcesList.append(localResources)
113  localResources = self.fillLocalResources(testResources, 3)
114  localResourcesList.append(localResources)
115  event = self.eventBuilder.build(EVENT.UPDATE_RESOURCES_DATA, localResourcesList)
116  self.localConnection.send(event)
117  self.recvEvent = self.localConnection.recv()
118  self.assertTrue(self.recvEvent != None, ">>> ret reply_event is None")
119  self.assertTrue(self.recvEvent.eventObj != None, ">>> ret reply_event_obj is None")
120  self.assertTrue(len(self.recvEvent.eventObj.statuses) == 3, ">>> ret reply_event_obj size is wrong")
121  self.assertTrue(self.recvEvent.eventType == EVENT.UPDATE_RESOURCES_DATA_RESPONSE,
122  ">>> reply_event event.eventType is wrong")
123 
124  localResourcesList = []
125  localResources = self.fillLocalResources(testResources, 4)
126  localResourcesList.append(localResources)
127  event = self.eventBuilder.build(EVENT.UPDATE_RESOURCES_DATA, localResourcesList)
128  self.localConnection.send(event)
129  self.recvEvent = self.localConnection.recv()
130  self.assertTrue(self.recvEvent != None, ">>> ret reply_event is None")
131  self.assertTrue(self.recvEvent.eventObj != None, ">>> ret reply_event_obj is None")
132  self.assertTrue(len(self.recvEvent.eventObj.statuses) == 1, ">>> ret reply_event_obj size is wrong")
133  self.assertTrue(self.recvEvent.eventType == EVENT.UPDATE_RESOURCES_DATA_RESPONSE,
134  ">>> reply_event event.eventType is wrong")
135 
136  event = self.eventBuilder.build(EVENT.GET_AVG_RESOURCES, None)
137  self.localConnection.send(event)
138  self.recvEvent = self.localConnection.recv()
139  self.assertTrue(self.recvEvent != None, ">>> ret reply_event is None")
140  self.assertTrue(self.recvEvent.eventObj != None, ">>> ret reply_event_obj is None")
141  self.assertTrue(self.recvEvent.eventType == EVENT.GET_AVG_RESOURCES_RESPONSE,
142  ">>> reply_event event.eventType is wrong")
143  # only 1th, 2th and 4th elements are present and active on ResourceManager now
144  compareVal = (testResources[1]["cpu"] + testResources[2]["cpu"] + testResources[4]["cpu"]) / 3
145  self.assertTrue(self.recvEvent.eventObj.cpu == compareVal, ">>> cpuAVG wrong")
146  compareVal = (testResources[1]["io"] + testResources[2]["io"] + testResources[4]["io"]) / 3
147  self.assertTrue(self.recvEvent.eventObj.io == compareVal, ">>> ioAVG wrong")
148  compareVal = (testResources[1]["ramR"] + testResources[2]["ramR"] + testResources[4]["ramR"]) / 3
149  self.assertTrue(self.recvEvent.eventObj.ramR == compareVal, ">>> ramRAVG wrong")
150  compareVal = (testResources[1]["ramV"] + testResources[2]["ramV"] + testResources[4]["ramV"]) / 3
151  self.assertTrue(self.recvEvent.eventObj.ramV == compareVal, ">>> ramVAVG wrong")
152  compareVal = (testResources[1]["swap"] + testResources[2]["swap"] + testResources[4]["swap"]) / 3
153  self.assertTrue(self.recvEvent.eventObj.swap == compareVal, ">>> swapAVG wrong")
154  compareVal = (testResources[1]["disk"] + testResources[2]["disk"] + testResources[4]["disk"]) / 3
155  self.assertTrue(self.recvEvent.eventObj.disk == compareVal, ">>> diskAVG wrong")
156  compareVal = (testResources[1]["cpuCores"] + testResources[2]["cpuCores"] + testResources[4]["cpuCores"]) / 3
157  self.assertTrue(self.recvEvent.eventObj.cpuCores == compareVal, ">>> cpuCores wrong")
158  compareVal = (testResources[1]["threads"] + testResources[2]["threads"] + testResources[4]["threads"]) / 3
159  self.assertTrue(self.recvEvent.eventObj.threads == compareVal, ">>> threads wrong")
160  compareVal = (testResources[1]["processes"] + testResources[2]["processes"] + testResources[4]["processes"]) / 3
161  self.assertTrue(self.recvEvent.eventObj.processes == compareVal, ">>> processes wrong")
162  self.assertTrue(self.recvEvent.eventObj.uDate == testResources[4]["uDate"] , ">>> diskAVG wrong")
163 
164 
165 if __name__ == "__main__":
166  #import sys;sys.argv = ['', 'Test.testName']
167  unittest.main()
Class contents ResourcesManager module implementation.
def fillLocalResources(self, localTestResources, idx)
Resource event object, represents resource's data fields .
Class hides routines of bulding connection objects.
Definition: join.py:1