b10-stats_test.py 27 KB

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