b10-stats_test.py 28 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661
  1. # Copyright (C) 2010, 2011 Internet Systems Consortium.
  2. #
  3. # Permission to use, copy, modify, and distribute this software for any
  4. # purpose with or without fee is hereby granted, provided that the above
  5. # copyright notice and this permission notice appear in all copies.
  6. #
  7. # THE SOFTWARE IS PROVIDED "AS IS" AND INTERNET SYSTEMS CONSORTIUM
  8. # DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL
  9. # IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL
  10. # INTERNET SYSTEMS CONSORTIUM BE LIABLE FOR ANY SPECIAL, DIRECT,
  11. # INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING
  12. # FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT,
  13. # NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION
  14. # WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
  15. #
  16. # Tests for the stats module
  17. #
  18. import os
  19. import sys
  20. import time
  21. import unittest
  22. import imp
  23. from isc.cc.session import Session, SessionError
  24. from isc.config.ccsession import ModuleCCSession, ModuleCCSessionError
  25. from fake_time import time, strftime, gmtime
  26. import stats
  27. stats.time = time
  28. stats.strftime = strftime
  29. stats.gmtime = gmtime
  30. from stats import SessionSubject, CCSessionListener, get_timestamp, get_datetime
  31. from fake_time import _TEST_TIME_SECS, _TEST_TIME_STRF
  32. # setting Constant
  33. if sys.path[0] == '':
  34. TEST_SPECFILE_LOCATION = "./testdata/stats_test.spec"
  35. else:
  36. TEST_SPECFILE_LOCATION = sys.path[0] + "/testdata/stats_test.spec"
  37. class TestStats(unittest.TestCase):
  38. def setUp(self):
  39. self.session = Session()
  40. self.subject = SessionSubject(session=self.session, verbose=True)
  41. self.listener = CCSessionListener(self.subject, verbose=True)
  42. self.stats_spec = self.listener.cc_session.get_module_spec().get_config_spec()
  43. self.module_name = self.listener.cc_session.get_module_spec().get_module_name()
  44. self.stats_data = {
  45. 'report_time' : get_datetime(),
  46. 'bind10.boot_time' : "1970-01-01T00:00:00Z",
  47. 'stats.timestamp' : get_timestamp(),
  48. 'stats.lname' : self.session.lname,
  49. 'auth.queries.tcp': 0,
  50. 'auth.queries.udp': 0,
  51. "stats.boot_time": get_datetime(),
  52. "stats.start_time": get_datetime(),
  53. "stats.last_update_time": get_datetime()
  54. }
  55. # check starting
  56. self.assertFalse(self.subject.running)
  57. self.subject.start()
  58. self.assertTrue(self.subject.running)
  59. self.assertEqual(len(self.session.message_queue), 0)
  60. self.assertEqual(self.module_name, 'Stats')
  61. def tearDown(self):
  62. # check closing
  63. self.subject.stop()
  64. self.assertFalse(self.subject.running)
  65. self.subject.detach(self.listener)
  66. self.listener.stop()
  67. self.session.close()
  68. def test_local_func(self):
  69. """
  70. Test for local function
  71. """
  72. # test for result_ok
  73. self.assertEqual(type(result_ok()), dict)
  74. self.assertEqual(result_ok(), {'result': [0]})
  75. self.assertEqual(result_ok(1), {'result': [1]})
  76. self.assertEqual(result_ok(0,'OK'), {'result': [0, 'OK']})
  77. self.assertEqual(result_ok(1,'Not good'), {'result': [1, 'Not good']})
  78. self.assertEqual(result_ok(None,"It's None"), {'result': [None, "It's None"]})
  79. self.assertNotEqual(result_ok(), {'RESULT': [0]})
  80. # test for get_timestamp
  81. self.assertEqual(get_timestamp(), _TEST_TIME_SECS)
  82. # test for get_datetime
  83. self.assertEqual(get_datetime(), _TEST_TIME_STRF)
  84. def test_show_command(self):
  85. """
  86. Test for show command
  87. """
  88. # test show command without arg
  89. self.session.group_sendmsg({"command": [ "show", None ]}, "Stats")
  90. self.assertEqual(len(self.session.message_queue), 1)
  91. self.subject.check()
  92. result_data = self.session.get_message("Stats", None)
  93. # ignore under 0.9 seconds
  94. self.assertEqual(result_ok(0, self.stats_data), result_data)
  95. self.assertEqual(len(self.session.message_queue), 0)
  96. # test show command with arg
  97. self.session.group_sendmsg({"command": [ "show", {"stats_item_name": "stats.lname"}]}, "Stats")
  98. self.assertEqual(len(self.subject.session.message_queue), 1)
  99. self.subject.check()
  100. result_data = self.subject.session.get_message("Stats", None)
  101. self.assertEqual(result_ok(0, {'stats.lname': self.stats_data['stats.lname']}),
  102. result_data)
  103. self.assertEqual(len(self.subject.session.message_queue), 0)
  104. # test show command with arg which has wrong name
  105. self.session.group_sendmsg({"command": [ "show", {"stats_item_name": "stats.dummy"}]}, "Stats")
  106. self.assertEqual(len(self.session.message_queue), 1)
  107. self.subject.check()
  108. result_data = self.session.get_message("Stats", None)
  109. # ignore under 0.9 seconds
  110. self.assertEqual(result_ok(0, self.stats_data), result_data)
  111. self.assertEqual(len(self.session.message_queue), 0)
  112. def test_set_command(self):
  113. """
  114. Test for set command
  115. """
  116. # test set command
  117. self.stats_data['auth.queries.udp'] = 54321
  118. self.assertEqual(self.stats_data['auth.queries.udp'], 54321)
  119. self.assertEqual(self.stats_data['auth.queries.tcp'], 0)
  120. self.session.group_sendmsg({ "command": [
  121. "set", {
  122. 'stats_data': {'auth.queries.udp': 54321 }
  123. } ] },
  124. "Stats")
  125. self.assertEqual(len(self.session.message_queue), 1)
  126. self.subject.check()
  127. self.assertEqual(result_ok(),
  128. self.session.get_message("Stats", None))
  129. self.assertEqual(len(self.session.message_queue), 0)
  130. # test show command
  131. self.session.group_sendmsg({"command": [ "show", None ]}, "Stats")
  132. self.assertEqual(len(self.session.message_queue), 1)
  133. self.subject.check()
  134. result_data = self.session.get_message("Stats", None)
  135. self.assertEqual(result_ok(0, self.stats_data), result_data)
  136. self.assertEqual(len(self.session.message_queue), 0)
  137. # test set command 2
  138. self.stats_data['auth.queries.udp'] = 0
  139. self.assertEqual(self.stats_data['auth.queries.udp'], 0)
  140. self.assertEqual(self.stats_data['auth.queries.tcp'], 0)
  141. self.session.group_sendmsg({ "command": [ "set", {'stats_data': {'auth.queries.udp': 0}} ]},
  142. "Stats")
  143. self.assertEqual(len(self.session.message_queue), 1)
  144. self.subject.check()
  145. self.assertEqual(result_ok(),
  146. self.session.get_message("Stats", None))
  147. self.assertEqual(len(self.session.message_queue), 0)
  148. # test show command 2
  149. self.session.group_sendmsg({"command": [ "show", None ]}, "Stats")
  150. self.assertEqual(len(self.session.message_queue), 1)
  151. self.subject.check()
  152. result_data = self.session.get_message("Stats", None)
  153. self.assertEqual(result_ok(0, self.stats_data), result_data)
  154. self.assertEqual(len(self.session.message_queue), 0)
  155. # test set command 3
  156. self.stats_data['auth.queries.tcp'] = 54322
  157. self.assertEqual(self.stats_data['auth.queries.udp'], 0)
  158. self.assertEqual(self.stats_data['auth.queries.tcp'], 54322)
  159. self.session.group_sendmsg({ "command": [
  160. "set", {
  161. 'stats_data': {'auth.queries.tcp': 54322 }
  162. } ] },
  163. "Stats")
  164. self.assertEqual(len(self.session.message_queue), 1)
  165. self.subject.check()
  166. self.assertEqual(result_ok(),
  167. self.session.get_message("Stats", None))
  168. self.assertEqual(len(self.session.message_queue), 0)
  169. # test show command 3
  170. self.session.group_sendmsg({"command": [ "show", None ]}, "Stats")
  171. self.assertEqual(len(self.session.message_queue), 1)
  172. self.subject.check()
  173. result_data = self.session.get_message("Stats", None)
  174. self.assertEqual(result_ok(0, self.stats_data), result_data)
  175. self.assertEqual(len(self.session.message_queue), 0)
  176. def test_remove_command(self):
  177. """
  178. Test for remove command
  179. """
  180. self.session.group_sendmsg({"command":
  181. [ "remove", {"stats_item_name": 'bind10.boot_time' }]},
  182. "Stats")
  183. self.assertEqual(len(self.session.message_queue), 1)
  184. self.subject.check()
  185. self.assertEqual(result_ok(),
  186. self.session.get_message("Stats", None))
  187. self.assertEqual(len(self.session.message_queue), 0)
  188. self.assertEqual(self.stats_data.pop('bind10.boot_time'), "1970-01-01T00:00:00Z")
  189. self.assertFalse('bind10.boot_time' in self.stats_data)
  190. # test show command with arg
  191. self.session.group_sendmsg({"command":
  192. [ "show", {"stats_item_name": 'bind10.boot_time'}]},
  193. "Stats")
  194. self.assertEqual(len(self.session.message_queue), 1)
  195. self.subject.check()
  196. result_data = self.session.get_message("Stats", None)
  197. self.assertFalse('bind10.boot_time' in result_data['result'][1])
  198. self.assertEqual(result_ok(0, self.stats_data), result_data)
  199. self.assertEqual(len(self.session.message_queue), 0)
  200. def test_reset_command(self):
  201. """
  202. Test for reset command
  203. """
  204. self.session.group_sendmsg({"command": [ "reset" ] }, "Stats")
  205. self.assertEqual(len(self.session.message_queue), 1)
  206. self.subject.check()
  207. self.assertEqual(result_ok(),
  208. self.session.get_message("Stats", None))
  209. self.assertEqual(len(self.session.message_queue), 0)
  210. # test show command
  211. self.session.group_sendmsg({"command": [ "show" ]}, "Stats")
  212. self.assertEqual(len(self.session.message_queue), 1)
  213. self.subject.check()
  214. result_data = self.session.get_message("Stats", None)
  215. self.assertEqual(result_ok(0, self.stats_data), result_data)
  216. self.assertEqual(len(self.session.message_queue), 0)
  217. def test_status_command(self):
  218. """
  219. Test for status command
  220. """
  221. self.session.group_sendmsg({"command": [ "status" ] }, "Stats")
  222. self.assertEqual(len(self.session.message_queue), 1)
  223. self.subject.check()
  224. self.assertEqual(result_ok(0, "I'm alive."),
  225. self.session.get_message("Stats", None))
  226. self.assertEqual(len(self.session.message_queue), 0)
  227. def test_unknown_command(self):
  228. """
  229. Test for unknown command
  230. """
  231. self.session.group_sendmsg({"command": [ "hoge", None ]}, "Stats")
  232. self.assertEqual(len(self.session.message_queue), 1)
  233. self.subject.check()
  234. self.assertEqual(result_ok(1, "Unknown command: 'hoge'"),
  235. self.session.get_message("Stats", None))
  236. self.assertEqual(len(self.session.message_queue), 0)
  237. def test_shutdown_command(self):
  238. """
  239. Test for shutdown command
  240. """
  241. self.session.group_sendmsg({"command": [ "shutdown", None ]}, "Stats")
  242. self.assertEqual(len(self.session.message_queue), 1)
  243. self.assertTrue(self.subject.running)
  244. self.subject.check()
  245. self.assertFalse(self.subject.running)
  246. self.assertEqual(result_ok(),
  247. self.session.get_message("Stats", None))
  248. self.assertEqual(len(self.session.message_queue), 0)
  249. def test_some_commands(self):
  250. """
  251. Test for some commands in a row
  252. """
  253. # test set command
  254. self.stats_data['bind10.boot_time'] = '2010-08-02T14:47:56Z'
  255. self.assertEqual(self.stats_data['bind10.boot_time'], '2010-08-02T14:47:56Z')
  256. self.session.group_sendmsg({ "command": [
  257. "set", {
  258. 'stats_data': {'bind10.boot_time': '2010-08-02T14:47:56Z' }
  259. }]},
  260. "Stats")
  261. self.assertEqual(len(self.session.message_queue), 1)
  262. self.subject.check()
  263. self.assertEqual(result_ok(),
  264. self.session.get_message("Stats", None))
  265. self.assertEqual(len(self.session.message_queue), 0)
  266. # check its value
  267. self.session.group_sendmsg({ "command": [
  268. "show", { 'stats_item_name': 'bind10.boot_time' }
  269. ] }, "Stats")
  270. self.assertEqual(len(self.session.message_queue), 1)
  271. self.subject.check()
  272. result_data = self.session.get_message("Stats", None)
  273. self.assertEqual(result_ok(0, {'bind10.boot_time': '2010-08-02T14:47:56Z'}),
  274. result_data)
  275. self.assertEqual(result_ok(0, {'bind10.boot_time': self.stats_data['bind10.boot_time']}),
  276. result_data)
  277. self.assertEqual(len(self.session.message_queue), 0)
  278. # test set command 2nd
  279. self.stats_data['auth.queries.udp'] = 98765
  280. self.assertEqual(self.stats_data['auth.queries.udp'], 98765)
  281. self.session.group_sendmsg({ "command": [
  282. "set", { 'stats_data': {
  283. 'auth.queries.udp':
  284. self.stats_data['auth.queries.udp']
  285. } }
  286. ] }, "Stats")
  287. self.assertEqual(len(self.session.message_queue), 1)
  288. self.subject.check()
  289. self.assertEqual(result_ok(),
  290. self.session.get_message("Stats", None))
  291. self.assertEqual(len(self.session.message_queue), 0)
  292. # check its value
  293. self.session.group_sendmsg({"command": [
  294. "show", {'stats_item_name': 'auth.queries.udp'}
  295. ] }, "Stats")
  296. self.assertEqual(len(self.session.message_queue), 1)
  297. self.subject.check()
  298. result_data = self.session.get_message("Stats", None)
  299. self.assertEqual(result_ok(0, {'auth.queries.udp': 98765}),
  300. result_data)
  301. self.assertEqual(result_ok(0, {'auth.queries.udp': self.stats_data['auth.queries.udp']}),
  302. result_data)
  303. self.assertEqual(len(self.session.message_queue), 0)
  304. # test set command 3
  305. self.stats_data['auth.queries.tcp'] = 4321
  306. self.session.group_sendmsg({"command": [
  307. "set",
  308. {'stats_data': {'auth.queries.tcp': 4321 }} ]},
  309. "Stats")
  310. self.assertEqual(len(self.session.message_queue), 1)
  311. self.subject.check()
  312. self.assertEqual(result_ok(),
  313. self.session.get_message("Stats", None))
  314. self.assertEqual(len(self.session.message_queue), 0)
  315. # check value
  316. self.session.group_sendmsg({"command": [ "show", {'stats_item_name': 'auth.queries.tcp'} ]},
  317. "Stats")
  318. self.assertEqual(len(self.session.message_queue), 1)
  319. self.subject.check()
  320. result_data = self.session.get_message("Stats", None)
  321. self.assertEqual(result_ok(0, {'auth.queries.tcp': 4321}),
  322. result_data)
  323. self.assertEqual(result_ok(0, {'auth.queries.tcp': self.stats_data['auth.queries.tcp']}),
  324. result_data)
  325. self.assertEqual(len(self.session.message_queue), 0)
  326. self.session.group_sendmsg({"command": [ "show", {'stats_item_name': 'auth.queries.udp'} ]},
  327. "Stats")
  328. self.assertEqual(len(self.session.message_queue), 1)
  329. self.subject.check()
  330. result_data = self.session.get_message("Stats", None)
  331. self.assertEqual(result_ok(0, {'auth.queries.udp': 98765}),
  332. result_data)
  333. self.assertEqual(result_ok(0, {'auth.queries.udp': self.stats_data['auth.queries.udp']}),
  334. result_data)
  335. self.assertEqual(len(self.session.message_queue), 0)
  336. # test set command 4
  337. self.stats_data['auth.queries.tcp'] = 67890
  338. self.session.group_sendmsg({"command": [
  339. "set", {'stats_data': {'auth.queries.tcp': 67890 }} ]},
  340. "Stats")
  341. self.assertEqual(len(self.session.message_queue), 1)
  342. self.subject.check()
  343. self.assertEqual(result_ok(),
  344. self.session.get_message("Stats", None))
  345. self.assertEqual(len(self.session.message_queue), 0)
  346. # test show command for all values
  347. self.session.group_sendmsg({"command": [ "show", None ]}, "Stats")
  348. self.assertEqual(len(self.session.message_queue), 1)
  349. self.subject.check()
  350. result_data = self.session.get_message("Stats", None)
  351. self.assertEqual(result_ok(0, self.stats_data), result_data)
  352. self.assertEqual(len(self.session.message_queue), 0)
  353. def test_some_commands2(self):
  354. """
  355. Test for some commands in a row using list-type value
  356. """
  357. self.stats_data['listtype'] = [1, 2, 3]
  358. self.assertEqual(self.stats_data['listtype'], [1, 2, 3])
  359. self.session.group_sendmsg({ "command": [
  360. "set", {'stats_data': {'listtype': [1, 2, 3] }}
  361. ]}, "Stats")
  362. self.assertEqual(len(self.session.message_queue), 1)
  363. self.subject.check()
  364. self.assertEqual(result_ok(),
  365. self.session.get_message("Stats", None))
  366. self.assertEqual(len(self.session.message_queue), 0)
  367. # check its value
  368. self.session.group_sendmsg({ "command": [
  369. "show", { 'stats_item_name': 'listtype'}
  370. ]}, "Stats")
  371. self.assertEqual(len(self.session.message_queue), 1)
  372. self.subject.check()
  373. result_data = self.session.get_message("Stats", None)
  374. self.assertEqual(result_ok(0, {'listtype': [1, 2, 3]}),
  375. result_data)
  376. self.assertEqual(result_ok(0, {'listtype': self.stats_data['listtype']}),
  377. result_data)
  378. self.assertEqual(len(self.session.message_queue), 0)
  379. # test set list-type value
  380. self.assertEqual(self.stats_data['listtype'], [1, 2, 3])
  381. self.session.group_sendmsg({"command": [
  382. "set", {'stats_data': {'listtype': [3, 2, 1, 0] }}
  383. ]}, "Stats")
  384. self.assertEqual(len(self.session.message_queue), 1)
  385. self.subject.check()
  386. self.assertEqual(result_ok(),
  387. self.session.get_message("Stats", None))
  388. self.assertEqual(len(self.session.message_queue), 0)
  389. # check its value
  390. self.session.group_sendmsg({ "command": [
  391. "show", { 'stats_item_name': 'listtype' }
  392. ] }, "Stats")
  393. self.assertEqual(len(self.session.message_queue), 1)
  394. self.subject.check()
  395. result_data = self.session.get_message("Stats", None)
  396. self.assertEqual(result_ok(0, {'listtype': [3, 2, 1, 0]}),
  397. result_data)
  398. self.assertEqual(len(self.session.message_queue), 0)
  399. def test_some_commands3(self):
  400. """
  401. Test for some commands in a row using dictionary-type value
  402. """
  403. self.stats_data['dicttype'] = {"a": 1, "b": 2, "c": 3}
  404. self.assertEqual(self.stats_data['dicttype'], {"a": 1, "b": 2, "c": 3})
  405. self.session.group_sendmsg({ "command": [
  406. "set", {
  407. 'stats_data': {'dicttype': {"a": 1, "b": 2, "c": 3} }
  408. }]},
  409. "Stats")
  410. self.assertEqual(len(self.session.message_queue), 1)
  411. self.subject.check()
  412. self.assertEqual(result_ok(),
  413. self.session.get_message("Stats", None))
  414. self.assertEqual(len(self.session.message_queue), 0)
  415. # check its value
  416. self.session.group_sendmsg({ "command": [ "show", { 'stats_item_name': 'dicttype' } ]}, "Stats")
  417. self.assertEqual(len(self.session.message_queue), 1)
  418. self.subject.check()
  419. result_data = self.session.get_message("Stats", None)
  420. self.assertEqual(result_ok(0, {'dicttype': {"a": 1, "b": 2, "c": 3}}),
  421. result_data)
  422. self.assertEqual(result_ok(0, {'dicttype': self.stats_data['dicttype']}),
  423. result_data)
  424. self.assertEqual(len(self.session.message_queue), 0)
  425. # test set list-type value
  426. self.assertEqual(self.stats_data['dicttype'], {"a": 1, "b": 2, "c": 3})
  427. self.session.group_sendmsg({"command": [
  428. "set", {'stats_data': {'dicttype': {"a": 3, "b": 2, "c": 1, "d": 0} }} ]},
  429. "Stats")
  430. self.assertEqual(len(self.session.message_queue), 1)
  431. self.subject.check()
  432. self.assertEqual(result_ok(),
  433. self.session.get_message("Stats", None))
  434. self.assertEqual(len(self.session.message_queue), 0)
  435. # check its value
  436. self.session.group_sendmsg({ "command": [ "show", { 'stats_item_name': 'dicttype' }]}, "Stats")
  437. self.assertEqual(len(self.session.message_queue), 1)
  438. self.subject.check()
  439. result_data = self.session.get_message("Stats", None)
  440. self.assertEqual(result_ok(0, {'dicttype': {"a": 3, "b": 2, "c": 1, "d": 0} }),
  441. result_data)
  442. self.assertEqual(len(self.session.message_queue), 0)
  443. def test_config_update(self):
  444. """
  445. Test for config update
  446. """
  447. # test show command without arg
  448. self.session.group_sendmsg({"command": [ "config_update", {"x-version":999} ]}, "Stats")
  449. self.assertEqual(len(self.session.message_queue), 1)
  450. self.subject.check()
  451. self.assertEqual(result_ok(),
  452. self.session.get_message("Stats", None))
  453. def test_for_boss(self):
  454. last_queue = self.session.old_message_queue.pop()
  455. self.assertEqual(
  456. last_queue.msg, {'command': ['sendstats']})
  457. self.assertEqual(
  458. last_queue.env['group'], 'Boss')
  459. class TestStats2(unittest.TestCase):
  460. def setUp(self):
  461. self.session = Session(verbose=True)
  462. self.subject = SessionSubject(session=self.session, verbose=True)
  463. self.listener = CCSessionListener(self.subject, verbose=True)
  464. self.module_name = self.listener.cc_session.get_module_spec().get_module_name()
  465. # check starting
  466. self.assertFalse(self.subject.running)
  467. self.subject.start()
  468. self.assertTrue(self.subject.running)
  469. self.assertEqual(len(self.session.message_queue), 0)
  470. self.assertEqual(self.module_name, 'Stats')
  471. def tearDown(self):
  472. # check closing
  473. self.subject.stop()
  474. self.assertFalse(self.subject.running)
  475. self.subject.detach(self.listener)
  476. self.listener.stop()
  477. def test_specfile(self):
  478. """
  479. Test for specfile
  480. """
  481. if "B10_FROM_SOURCE" in os.environ:
  482. self.assertEqual(stats.SPECFILE_LOCATION,
  483. os.environ["B10_FROM_SOURCE"] + os.sep + \
  484. "src" + os.sep + "bin" + os.sep + "stats" + \
  485. os.sep + "stats.spec")
  486. self.assertEqual(stats.SCHEMA_SPECFILE_LOCATION,
  487. os.environ["B10_FROM_SOURCE"] + os.sep + \
  488. "src" + os.sep + "bin" + os.sep + "stats" + \
  489. os.sep + "stats-schema.spec")
  490. imp.reload(stats)
  491. # change path of SPECFILE_LOCATION
  492. stats.SPECFILE_LOCATION = TEST_SPECFILE_LOCATION
  493. stats.SCHEMA_SPECFILE_LOCATION = TEST_SPECFILE_LOCATION
  494. self.assertEqual(stats.SPECFILE_LOCATION, TEST_SPECFILE_LOCATION)
  495. self.subject = stats.SessionSubject(session=self.session, verbose=True)
  496. self.session = self.subject.session
  497. self.listener = stats.CCSessionListener(self.subject, verbose=True)
  498. self.assertEqual(self.listener.stats_spec, [])
  499. self.assertEqual(self.listener.stats_data, {})
  500. self.assertEqual(self.listener.commands_spec, [
  501. {
  502. "command_name": "status",
  503. "command_description": "identify whether stats module is alive or not",
  504. "command_args": []
  505. },
  506. {
  507. "command_name": "the_dummy",
  508. "command_description": "this is for testing",
  509. "command_args": []
  510. }])
  511. def test_func_initialize_data(self):
  512. """
  513. Test for initialize_data function
  514. """
  515. # prepare for sample data set
  516. stats_spec = [
  517. {
  518. "item_name": "none_sample",
  519. "item_type": "null",
  520. "item_default": "None"
  521. },
  522. {
  523. "item_name": "boolean_sample",
  524. "item_type": "boolean",
  525. "item_default": True
  526. },
  527. {
  528. "item_name": "string_sample",
  529. "item_type": "string",
  530. "item_default": "A something"
  531. },
  532. {
  533. "item_name": "int_sample",
  534. "item_type": "integer",
  535. "item_default": 9999999
  536. },
  537. {
  538. "item_name": "real_sample",
  539. "item_type": "real",
  540. "item_default": 0.0009
  541. },
  542. {
  543. "item_name": "list_sample",
  544. "item_type": "list",
  545. "item_default": [0, 1, 2, 3, 4],
  546. "list_item_spec": []
  547. },
  548. {
  549. "item_name": "map_sample",
  550. "item_type": "map",
  551. "item_default": {'name':'value'},
  552. "map_item_spec": []
  553. },
  554. {
  555. "item_name": "other_sample",
  556. "item_type": "__unknown__",
  557. "item_default": "__unknown__"
  558. }
  559. ]
  560. # data for comparison
  561. stats_data = {
  562. 'none_sample': None,
  563. 'boolean_sample': True,
  564. 'string_sample': 'A something',
  565. 'int_sample': 9999999,
  566. 'real_sample': 0.0009,
  567. 'list_sample': [0, 1, 2, 3, 4],
  568. 'map_sample': {'name':'value'},
  569. 'other_sample': '__unknown__'
  570. }
  571. self.assertEqual(self.listener.initialize_data(stats_spec), stats_data)
  572. def test_func_main(self):
  573. # explicitly make failed
  574. self.session.close()
  575. stats.main(session=self.session)
  576. def test_osenv(self):
  577. """
  578. test for not having environ "B10_FROM_SOURCE"
  579. """
  580. if "B10_FROM_SOURCE" in os.environ:
  581. path = os.environ["B10_FROM_SOURCE"]
  582. os.environ.pop("B10_FROM_SOURCE")
  583. imp.reload(stats)
  584. os.environ["B10_FROM_SOURCE"] = path
  585. imp.reload(stats)
  586. def result_ok(*args):
  587. if args:
  588. return { 'result': list(args) }
  589. else:
  590. return { 'result': [ 0 ] }
  591. if __name__ == "__main__":
  592. unittest.main()