[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