[svn] commit: r2846 - in /branches/trac191-rebased/src/bin/stats: stats.py.in stats_stub.py.in tests/b10-stats_stub_test.py tests/b10-stats_test.py tests/stats_test.in tests/testdata/ tests/testdata/stats_test.spec
BIND 10 source code commits
bind10-changes at lists.isc.org
Mon Aug 30 03:20:52 UTC 2010
Author: naokikambe
Date: Mon Aug 30 03:20:52 2010
New Revision: 2846
Log:
- improve python testing coverage, stats.py: 92%, stats_stub.py: 81%
in my environment (#191, [comment:ticket:191:4])
- set all verbose flags to true in testing scripts for better testing
coverage
- call just main functions of target scripts from testing scripts
- add a test case when environment variable B10_FROM_SOURCE isn't set
- add a new testing spec file under tests/testdata directory and use it
in the testing script
- fix bugs in handling list-type variables in stats module, which were
found while improving the coverage
- add some test cases of handling list-type variables
- remove some unnecessary or wrong codes
- remove codes of setting STATS_PATH environment variable in stats_test.in
- some other minor changes in testing scripts
Added:
branches/trac191-rebased/src/bin/stats/tests/testdata/
branches/trac191-rebased/src/bin/stats/tests/testdata/stats_test.spec
Modified:
branches/trac191-rebased/src/bin/stats/stats.py.in
branches/trac191-rebased/src/bin/stats/stats_stub.py.in
branches/trac191-rebased/src/bin/stats/tests/b10-stats_stub_test.py
branches/trac191-rebased/src/bin/stats/tests/b10-stats_test.py
branches/trac191-rebased/src/bin/stats/tests/stats_test.in
Modified: branches/trac191-rebased/src/bin/stats/stats.py.in
==============================================================================
--- branches/trac191-rebased/src/bin/stats/stats.py.in (original)
+++ branches/trac191-rebased/src/bin/stats/stats.py.in Mon Aug 30 03:20:52 2010
@@ -264,10 +264,10 @@
def __increase_data(data, args):
if type(data) == list:
mx = max(len(data), len(args))
- for i in mx:
- if i in data and i in args:
+ for i in range(0, mx):
+ if i < len(data):
data[i] = __increase_data(data[i], args[i])
- elif i in args:
+ elif i < len(args):
data.extend(args[i:])
break
elif type(data) == dict:
@@ -358,6 +358,7 @@
sys.stdout.write("[b10-stats] Unknown command received: '"
+ str(command) + "'\n")
return create_answer(1, "Unknown command: '"+str(command)+"'")
+
def initialize_data(self, spec):
"""
@@ -376,13 +377,10 @@
return float(spec.get('item_default', 0.0))
elif spec['item_type'] in set(['list', 'array']):
return spec.get('item_default',
- [ __get_init_val(spec['list_item_spec']) ])
+ [ __get_init_val(s) for s in spec['list_item_spec'] ])
elif spec['item_type'] in set(['map', 'object']):
return spec.get('item_default',
- dict([
- (s['item_name'], __get_init_val(s))
- for s in spec['map_item_spec']
- ]) )
+ dict([ (s['item_name'], __get_init_val(s)) for s in spec['map_item_spec'] ]) )
else:
return spec.get('item_default')
return dict([ (s['item_name'], __get_init_val(s)) for s in spec ])
@@ -411,6 +409,7 @@
while subject.running:
subject.check()
subject.stop()
+
except OptionValueError:
sys.stderr.write("[b10-stats] Error parsing options\n")
except SessionError as se:
Modified: branches/trac191-rebased/src/bin/stats/stats_stub.py.in
==============================================================================
--- branches/trac191-rebased/src/bin/stats/stats_stub.py.in (original)
+++ branches/trac191-rebased/src/bin/stats/stats_stub.py.in Mon Aug 30 03:20:52 2010
@@ -147,8 +147,6 @@
+ "is the command channel daemon running?\n")
except KeyboardInterrupt as kie:
sys.stderr.write("[b10-stats_stub] Interrupted, exiting\n")
- finally:
- stub.cc_session.close()
if __name__ == "__main__":
main()
Modified: branches/trac191-rebased/src/bin/stats/tests/b10-stats_stub_test.py
==============================================================================
--- branches/trac191-rebased/src/bin/stats/tests/b10-stats_stub_test.py (original)
+++ branches/trac191-rebased/src/bin/stats/tests/b10-stats_stub_test.py Mon Aug 30 03:20:52 2010
@@ -21,16 +21,19 @@
#
import unittest
import time
+import os
+import imp
from unittest_fakesession import FakeModuleCCSession
+import stats_stub
from stats_stub import CCSessionStub, BossModuleStub, AuthModuleStub
class TestStats(unittest.TestCase):
def setUp(self):
self.session = FakeModuleCCSession()
- self.stub = CCSessionStub(self.session, verbose=False)
- self.boss = BossModuleStub(self.session, verbose=False)
- self.auth = AuthModuleStub(self.session, verbose=False)
+ self.stub = CCSessionStub(self.session, verbose=True)
+ self.boss = BossModuleStub(self.session, verbose=True)
+ self.auth = AuthModuleStub(self.session, verbose=True)
self.env = {'from': None, 'group': 'Stats'}
self.result_ok = {'result': [0]}
@@ -90,6 +93,20 @@
self.auth.send_command_tcp(cmd='increase', cnt=99))
self.assertEqual(result_ok, self.session.get_message("Stats", None))
+ def test_func_main(self):
+ stats_stub.main()
+
+ def test_osenv(self):
+ """
+ test for not having environ "B10_FROM_SOURCE"
+ """
+ if "B10_FROM_SOURCE" in os.environ:
+ path = os.environ["B10_FROM_SOURCE"]
+ os.environ.pop("B10_FROM_SOURCE")
+ imp.reload(stats_stub)
+ os.environ["B10_FROM_SOURCE"] = path
+ imp.reload(stats_stub)
+
def get_datetime():
"""
get current datetime
Modified: branches/trac191-rebased/src/bin/stats/tests/b10-stats_test.py
==============================================================================
--- branches/trac191-rebased/src/bin/stats/tests/b10-stats_test.py (original)
+++ branches/trac191-rebased/src/bin/stats/tests/b10-stats_test.py Mon Aug 30 03:20:52 2010
@@ -20,19 +20,28 @@
# Tests for the stats module
#
import os
+import sys
import time
import unittest
+import imp
from isc.cc.session import SessionError
from isc.config.ccsession import ModuleCCSessionError
from unittest_fakesession import FakeModuleCCSession
+import stats
from stats import SessionSubject, CCSessionListener
+
+# setting Constant
+if sys.path[0] == '':
+ TEST_SPECFILE_LOCATION = "./testdata/stats_test.spec"
+else:
+ TEST_SPECFILE_LOCATION = sys.path[0] + "/testdata/stats_test.spec"
class TestStats(unittest.TestCase):
def setUp(self):
self.session = FakeModuleCCSession()
- self.subject = SessionSubject(session=self.session, verbose=False)
- self.listener = CCSessionListener(self.subject, verbose=False)
+ self.subject = SessionSubject(session=self.session, verbose=True)
+ self.listener = CCSessionListener(self.subject, verbose=True)
self.stats_spec = self.listener.cc_session.get_module_spec().get_config_spec()
self.stats_data = {
'report_time' : get_datetime(),
@@ -111,6 +120,7 @@
self.assertEqual(len(session.message_queue), 0)
subject.check()
self.assertTrue(subject.running)
+ subject.detach(listener) # detatch test
def test_stop(self):
"""
@@ -516,6 +526,239 @@
self.assertEqual(result_ok(0, self.stats_data), result_data)
self.assertEqual(len(self.session.message_queue), 0)
+ def test_some_commands2(self):
+ """
+ Test for some commands in a row using list-type value
+
+ """
+ self.stats_data['listtype'] = [1, 2, 3]
+ self.assertEqual(self.stats_data['listtype'], [1, 2, 3])
+ self.session.group_sendmsg({ "command": [
+ "set", {'stats_data': {'listtype': [1, 2, 3] }}
+ ]}, "Stats")
+ self.assertEqual(len(self.session.message_queue), 1)
+ self.subject.check()
+ self.assertEqual(result_ok(),
+ self.session.get_message("Stats", None))
+ self.assertEqual(len(self.session.message_queue), 0)
+
+ # check its value
+ self.session.group_sendmsg({ "command": [
+ "show", { 'stats_item_name': 'listtype'}
+ ]}, "Stats")
+ self.assertEqual(len(self.session.message_queue), 1)
+ self.subject.check()
+ result_data = self.session.get_message("Stats", None)
+ self.assertEqual(result_ok(0, {'listtype': [1, 2, 3]}),
+ result_data)
+ self.assertEqual(result_ok(0, {'listtype': self.stats_data['listtype']}),
+ result_data)
+ self.assertEqual(len(self.session.message_queue), 0)
+
+ # test increase list-type value
+ self.assertEqual(self.stats_data['listtype'], [1, 2, 3])
+ self.session.group_sendmsg({"command": [
+ "increase", {'stats_data': {'listtype': [3, 2, 1, 0] }}
+ ]}, "Stats")
+ self.assertEqual(len(self.session.message_queue), 1)
+ self.subject.check()
+ self.assertEqual(result_ok(),
+ self.session.get_message("Stats", None))
+ self.assertEqual(len(self.session.message_queue), 0)
+
+ # check its value
+ self.session.group_sendmsg({ "command": [
+ "show", {
+ 'stats_item_name': 'listtype'
+ }
+ ]
+ }, "Stats")
+ self.assertEqual(len(self.session.message_queue), 1)
+ self.subject.check()
+ result_data = self.session.get_message("Stats", None)
+ self.assertEqual(result_ok(0, {'listtype': [4, 4, 4, 0]}),
+ result_data)
+ self.assertEqual(len(self.session.message_queue), 0)
+
+ def test_some_commands3(self):
+ """
+ Test for some commands in a row using dictionary-type value
+
+ """
+ self.stats_data['dicttype'] = {"a": 1, "b": 2, "c": 3}
+ self.assertEqual(self.stats_data['dicttype'], {"a": 1, "b": 2, "c": 3})
+ self.session.group_sendmsg({ "command": [
+ "set", {
+ 'stats_data': {'dicttype': {"a": 1, "b": 2, "c": 3} }
+ }]},
+ "Stats")
+ self.assertEqual(len(self.session.message_queue), 1)
+ self.subject.check()
+ self.assertEqual(result_ok(),
+ self.session.get_message("Stats", None))
+ self.assertEqual(len(self.session.message_queue), 0)
+
+ # check its value
+ self.session.group_sendmsg({ "command": [ "show", { 'stats_item_name': 'dicttype' } ]}, "Stats")
+ self.assertEqual(len(self.session.message_queue), 1)
+ self.subject.check()
+ result_data = self.session.get_message("Stats", None)
+ self.assertEqual(result_ok(0, {'dicttype': {"a": 1, "b": 2, "c": 3}}),
+ result_data)
+ self.assertEqual(result_ok(0, {'dicttype': self.stats_data['dicttype']}),
+ result_data)
+ self.assertEqual(len(self.session.message_queue), 0)
+
+ # test increase list-type value
+ self.assertEqual(self.stats_data['dicttype'], {"a": 1, "b": 2, "c": 3})
+ self.session.group_sendmsg({"command": [
+ "increase", {'stats_data': {'dicttype': {"a": 3, "b": 2, "c": 1, "d": 0} }} ]},
+ "Stats")
+ self.assertEqual(len(self.session.message_queue), 1)
+ self.subject.check()
+ self.assertEqual(result_ok(),
+ self.session.get_message("Stats", None))
+ self.assertEqual(len(self.session.message_queue), 0)
+
+ # check its value
+ self.session.group_sendmsg({ "command": [ "show", { 'stats_item_name': 'dicttype' }]}, "Stats")
+ self.assertEqual(len(self.session.message_queue), 1)
+ self.subject.check()
+ result_data = self.session.get_message("Stats", None)
+ self.assertEqual(result_ok(0, {'dicttype': {"a": 4, "b": 4, "c": 4, "d": 0} }),
+ result_data)
+ self.assertEqual(len(self.session.message_queue), 0)
+
+ def test_config_update(self):
+ """
+ Test for config update
+
+ """
+ # test show command without arg
+ self.session.group_sendmsg({"command": [ "config_update", {"x-version":999} ]}, "Stats")
+ self.assertEqual(len(self.session.message_queue), 1)
+ self.subject.check()
+ self.assertEqual(result_ok(),
+ self.session.get_message("Stats", None))
+
+class TestStats2(unittest.TestCase):
+
+ def setUp(self):
+ self.session = FakeModuleCCSession()
+ self.subject = SessionSubject(session=self.session, verbose=True)
+ self.listener = CCSessionListener(self.subject, verbose=True)
+
+ def tearDown(self):
+ self.session.close()
+
+ def test_specfile(self):
+ """
+ Test for specfile
+
+ """
+ if "B10_FROM_SOURCE" in os.environ:
+ self.assertEqual(stats.SPECFILE_LOCATION,
+ os.environ["B10_FROM_SOURCE"] + "/src/bin/stats/stats.spec")
+ imp.reload(stats)
+ # change path of SPECFILE_LOCATION
+ stats.SPECFILE_LOCATION = TEST_SPECFILE_LOCATION
+ self.assertEqual(stats.SPECFILE_LOCATION, TEST_SPECFILE_LOCATION)
+ self.session = FakeModuleCCSession()
+ self.subject = stats.SessionSubject(session=self.session, verbose=True)
+ self.listener = stats.CCSessionListener(self.subject, verbose=True)
+
+ self.assertEqual(self.listener.stats_spec, [])
+ self.assertEqual(self.listener.stats_data, {})
+
+ self.assertEqual(self.listener.commands_spec, [
+ {
+ "command_name": "status",
+ "command_description": "identify whether stats module is alive or not",
+ "command_args": []
+ },
+ {
+ "command_name": "the_dummy",
+ "command_description": "this is for testing",
+ "command_args": []
+ }])
+
+ def test_func_initialize_data(self):
+ """
+ Test for initialize_data function
+
+ """
+ # prepare for sample data set
+ stats_spec = [
+ {
+ "item_name": "none_sample",
+ "item_type": "null",
+ "item_default": "None"
+ },
+ {
+ "item_name": "boolean_sample",
+ "item_type": "boolean",
+ "item_default": True
+ },
+ {
+ "item_name": "string_sample",
+ "item_type": "string",
+ "item_default": "A something"
+ },
+ {
+ "item_name": "int_sample",
+ "item_type": "integer",
+ "item_default": 9999999
+ },
+ {
+ "item_name": "real_sample",
+ "item_type": "real",
+ "item_default": 0.0009
+ },
+ {
+ "item_name": "list_sample",
+ "item_type": "list",
+ "item_default": [0, 1, 2, 3, 4],
+ "list_item_spec": []
+ },
+ {
+ "item_name": "map_sample",
+ "item_type": "map",
+ "item_default": {'name':'value'},
+ "map_item_spec": []
+ },
+ {
+ "item_name": "other_sample",
+ "item_type": "__unknown__",
+ "item_default": "__unknown__"
+ }
+ ]
+ # data for comparison
+ stats_data = {
+ 'none_sample': None,
+ 'boolean_sample': True,
+ 'string_sample': 'A something',
+ 'int_sample': 9999999,
+ 'real_sample': 0.0009,
+ 'list_sample': [0, 1, 2, 3, 4],
+ 'map_sample': {'name':'value'},
+ 'other_sample': '__unknown__'
+ }
+ self.assertEqual(self.listener.initialize_data(stats_spec), stats_data)
+
+ def test_func_main(self):
+ stats.main()
+
+ def test_osenv(self):
+ """
+ test for not having environ "B10_FROM_SOURCE"
+ """
+ if "B10_FROM_SOURCE" in os.environ:
+ path = os.environ["B10_FROM_SOURCE"]
+ os.environ.pop("B10_FROM_SOURCE")
+ imp.reload(stats)
+ os.environ["B10_FROM_SOURCE"] = path
+ imp.reload(stats)
+
def result_ok(*args):
if args:
return { 'result': list(args) }
Modified: branches/trac191-rebased/src/bin/stats/tests/stats_test.in
==============================================================================
--- branches/trac191-rebased/src/bin/stats/tests/stats_test.in (original)
+++ branches/trac191-rebased/src/bin/stats/tests/stats_test.in Mon Aug 30 03:20:52 2010
@@ -18,8 +18,6 @@
PYTHON_EXEC=${PYTHON_EXEC:- at PYTHON@}
export PYTHON_EXEC
-STATS_PATH=@abs_top_srcdir@/src/bin/stats/tests
-
PYTHONPATH=@abs_top_srcdir@/src/lib/python:@abs_top_srcdir@/src/bin/stats
export PYTHONPATH
More information about the bind10-changes
mailing list