BIND 10 trac930, updated. 3e3f4cad1dd4068070cac2e322d070df563565eb [trac930] - revise header comments in each test script - replace some hard-coded time strings with the constants defined in the setUp function - merged several checks about B10_FROM_SOURCE into the TestOSEnv class

BIND 10 source code commits bind10-changes at lists.isc.org
Fri Aug 5 07:47:02 UTC 2011


The branch, trac930 has been updated
  discards  458c7e33edc2c25bc5176bbfb38faad963f0c456 (commit)
  discards  d416c7129eaa198d9eaae83e450cd9ea1512a993 (commit)
  discards  f01a238e53d6605ab61b211efce353e56849f2db (commit)
  discards  218398279cac1fa76369dfdf653e6377dca71115 (commit)
  discards  20936bf7906b7ab874c3e2cf467cc6e8dd9f5d8d (commit)
  discards  9d9f09b9787913e6825722f70891b9c530fd35ed (commit)
  discards  180ac439ed61b5b85dc711758f67aa5c72cf526a (commit)
  discards  69cc9cd34877eae68b8880a9f021eb1deed8f5ad (commit)
  discards  529ac4f93066672de1c8078cfc1601fad085a5d5 (commit)
  discards  6a429f7c60ea91a925e9493fbbd1fcda875c8404 (commit)
  discards  353c45fdbbccaf789c26a73e4c1df17c48beb0fe (commit)
  discards  651bba3f8c44fb22e758e1cf222dac0db18e22f8 (commit)
  discards  9b218d066781a7626811a3be7b913d75cb72f163 (commit)
  discards  f5b31a317a6d3666919504d73e8330f4700cbfb8 (commit)
  discards  7da48e07c415dbb3669cc1a51c9e37d0db2db8c6 (commit)
  discards  eb872d369c4bab1daaf144551024c7d9166b0126 (commit)
  discards  1758b4db4d39ae2f36d4d3d57cb0240d856470e2 (commit)
  discards  64fa2483853deba0612c15bdc3ccb7409f56d15f (commit)
  discards  aa1483525e8a3e8ec9e05a159934f95121920c14 (commit)
  discards  7187899e2a96be92c4fd4ff91f952aef62848cd9 (commit)
  discards  1da03c959043324519f36e247482224918570e9d (commit)
  discards  7be2a078498cd44c9a79a0616663aead1586d6e6 (commit)
  discards  ff6c4caf3462376ebe2cc6da8994a2d86b809b11 (commit)
  discards  6b110c3f38c2d06d7363515fb3fb425bedebcd12 (commit)
  discards  ac4c49866a6756eae3c330b4b3b078093c0ee1db (commit)
  discards  3437a1e428a85f657e4928ab5a8494616a97920b (commit)
  discards  cac7b10eb4cb97bdece6c98d4db7ce2233212b52 (commit)
  discards  b8aeb85fc359f288f7dca2e418cedc87955c42ec (commit)
  discards  09b10f389d2d96288b8c0844bc43b8daa969379a (commit)
  discards  043db26a1e0201c112219e5e5484b5785ac84c21 (commit)
  discards  564ec91746b2d369f36a1c890023b0ce9e6df6a8 (commit)
  discards  4e60c0d75d6ecf9d2b251003fb85c12ab43a77bf (commit)
  discards  a1c2a94e9b1031c6d9472082f383841e5ca9e847 (commit)
  discards  60672150ae4964384627d78bfbd29671080cf922 (commit)
  discards  7b55ca06618d2c880f9b007542d6291ea8cee524 (commit)
  discards  86999b955594c55fff6409007264cbe1f2eaf018 (commit)
  discards  b5a87a6327eb2a4cac8d94c65062d7c00285c5c6 (commit)
       via  3e3f4cad1dd4068070cac2e322d070df563565eb (commit)
       via  81724ff9d7b84fffbef12d5fe29110ac648cc27f (commit)
       via  8d00801d054d1dcdfab031fcdff895a245299946 (commit)
       via  b5f7d2f658eea96de478fdd93bf8829a3796e4e4 (commit)
       via  3e3b4e83da31e95a6b62361b79a7de8a4cec4825 (commit)
       via  41597849af52581a55896a1adec8e9730e1660fb (commit)
       via  7152b60e61796d94afc882b1b21c1d43a16971ce (commit)
       via  099b2f55652f9d930b7c130632bd4ef9368dc27b (commit)
       via  eb1d8842771b797936e423a517ec6a23f6f46c1d (commit)
       via  8b973f544001cc9ae440f776bfb8bb86976a7410 (commit)
       via  7e05d2ecca76c9c0ff37d9e75c8d799834abede7 (commit)
       via  e8bfaefe7e1a89c38fcfa07389795707542e30a7 (commit)
       via  3e5f7b8db4d92dd81ca8078380f13300ac4e2dad (commit)
       via  5a6e52a43b511c50444d57b2a39e882d6045f284 (commit)
       via  08d6bee9e8a64d9034d1526339fa7058cc47ec0e (commit)
       via  fd00a47b22e779e8aab897ea2c347746493fd856 (commit)
       via  841ce466f7da2e69f64db2df000757d13390bd92 (commit)
       via  f899d2da84eb0794e1871743a6ab0c47709e8abb (commit)
       via  afbb0539629d9b8a6d056d9f507df47126339c65 (commit)
       via  beb81dfe817b6e37d5861e3dfc56ca5cba61e03d (commit)
       via  cf0dd1deccf98fbf891770237ab10001ceea0d5d (commit)
       via  5599adceb9df14b884f2f9fbf8495c514522862a (commit)
       via  02fd716235598062a85f5390696dbba38ef9ed09 (commit)
       via  fc0dfceb6eacd6294ac7175b288354e89e1fd0ca (commit)
       via  e2fb32f9a1445039e53fb25f8da55e0a66fcd969 (commit)
       via  13626af26c9827aa4ea01b9a02e7e46c19b10742 (commit)
       via  01aad4ccc702a40ce6dc87f9e3d3057346a4d2bf (commit)
       via  5386e91c0ad84e890176ac27466cc77cb4cfb07b (commit)
       via  c84b1c33cbcfe13903c7b118f25199ec12263ecf (commit)
       via  5a06a689308cf93bab0376d14cd75ea2da98e70e (commit)
       via  49856af0435720158af25e8dbc27ad879a404ad9 (commit)
       via  ffe7cc13b12bce0a36865c448222325720d84c0a (commit)
       via  01a624c91b204920ad0a562c947f8bc5f89ad28a (commit)
       via  4aaac79296588b0395ce0e9b77c5f2d5f31370b2 (commit)
       via  639d6e72a50bf429da4588d89c57a20a227da2c7 (commit)
       via  82dfd1f88136caad942d79ac0e45fdc7eef03b73 (commit)
       via  478b35c644a486fdc58708c85b318bbc86d59491 (commit)
       via  f7c4cfed198d0d8b06bc05f43c9df8b39b5a6e16 (commit)
       via  e657471f75d60643b5f608724313338081074b02 (commit)
       via  e9620e0d9dd3d967bcfb99562f13848c70538a44 (commit)

This update added new revisions after undoing existing revisions.  That is
to say, the old revision is not a strict subset of the new revision.  This
situation occurs when you --force push a change and generate a repository
containing something like this:

 * -- * -- B -- O -- O -- O (458c7e33edc2c25bc5176bbfb38faad963f0c456)
            \
             N -- N -- N (3e3f4cad1dd4068070cac2e322d070df563565eb)

When this happens we assume that you've already had alert emails for all
of the O revisions, and so we here report only the revisions in the N
branch from the common base, B.

Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.

- Log -----------------------------------------------------------------
commit 3e3f4cad1dd4068070cac2e322d070df563565eb
Author: Naoki Kambe <kambe at jprs.co.jp>
Date:   Fri Aug 5 16:24:03 2011 +0900

    [trac930]
      - revise header comments in each test script
      - replace some hard-coded time strings with the constants defined in the
        setUp function
      - merged several checks about B10_FROM_SOURCE into the TestOSEnv class

commit 81724ff9d7b84fffbef12d5fe29110ac648cc27f
Author: Naoki Kambe <kambe at jprs.co.jp>
Date:   Fri Aug 5 14:48:27 2011 +0900

    [trac930]
      - change address for test to 127.0.0.1 due to platform 127.0.0.2 can't be
        assigned
      - remove unnecessary thread.Event.wait()
      - add thread.Event.clear() after thread.Event.wait()

commit 8d00801d054d1dcdfab031fcdff895a245299946
Author: Naoki Kambe <kambe at jprs.co.jp>
Date:   Wed Aug 3 11:41:05 2011 +0900

    [trac930] refactor unittests
     - remove time.sleep from various unittests and add in the "run" method in
       ThreadingServerManager
     - adjust the sleep time (TIMEOUT_SEC)
     - join some small unittests
       (test_start_with_err, test_command_status, test_command_shutdown)

commit b5f7d2f658eea96de478fdd93bf8829a3796e4e4
Author: Naoki Kambe <kambe at jprs.co.jp>
Date:   Tue Aug 2 22:00:11 2011 +0900

    [trac930] add comments about abstracts of the test scripts in their headers

commit 3e3b4e83da31e95a6b62361b79a7de8a4cec4825
Author: Naoki Kambe <kambe at jprs.co.jp>
Date:   Tue Aug 2 21:44:07 2011 +0900

    [trac930] modify stats.py
     - add more documentations into update_modules, get_statistics_data and
       update_statistics_data methods
     - modify two methods: "update_modules" and "get_statistics_data" methods raise
       StatsError instead of just returning None, when communication between stats
       module and config manager is failed or when it can't find specified
       statistics data.
     - also modify the unittest depending on the changes of these behaviors.

commit 41597849af52581a55896a1adec8e9730e1660fb
Author: Naoki Kambe <kambe at jprs.co.jp>
Date:   Tue Aug 2 20:17:28 2011 +0900

    [trac930] modify b10-stats_test.py
     - set the constant variables in the setUp method in the TestUtilties class,
       and compare values returned from the functions with these constants in
       testing methods.
    
    [trac930] remove the tearDown method which has no test case in the TestCallback
              class

commit 7152b60e61796d94afc882b1b21c1d43a16971ce
Author: Naoki Kambe <kambe at jprs.co.jp>
Date:   Tue Aug 2 19:57:58 2011 +0900

    [trac930] remove tailing whitespaces.

commit 099b2f55652f9d930b7c130632bd4ef9368dc27b
Author: Naoki Kambe <kambe at jprs.co.jp>
Date:   Mon Aug 1 18:38:35 2011 +0900

    [trac930] raise StatsError including errors in the stats spec file

commit eb1d8842771b797936e423a517ec6a23f6f46c1d
Author: Naoki Kambe <kambe at jprs.co.jp>
Date:   Mon Aug 1 18:21:23 2011 +0900

    [trac930] rename the function name
     - rename the name of 'parse_spec' to 'get_spec_defaults' in the result of
       consideration of what it is doing
     - modify the description of the function as docstring
     - fix unitttests for the stats module depending on the function name

commit 8b973f544001cc9ae440f776bfb8bb86976a7410
Author: Naoki Kambe <kambe at jprs.co.jp>
Date:   Fri Jul 29 22:11:38 2011 +0900

    [trac930] remove a unnecessary x bit from stats_httpd.py.in

commit 7e05d2ecca76c9c0ff37d9e75c8d799834abede7
Author: Naoki Kambe <kambe at jprs.co.jp>
Date:   Thu Jul 28 22:07:15 2011 +0900

    [trac930] modify logging
    add loggings and new messages for logging
    remove unused messages from the message file
    add test logging names into unittest scripts

commit e8bfaefe7e1a89c38fcfa07389795707542e30a7
Author: Naoki Kambe <kambe at jprs.co.jp>
Date:   Wed Jul 27 20:45:18 2011 +0900

    [trac930] modify the update_modues function
    There is no part of statistics category in the spec file of a module which has
    no statistics data.

commit 3e5f7b8db4d92dd81ca8078380f13300ac4e2dad
Author: Naoki Kambe <kambe at jprs.co.jp>
Date:   Wed Jul 27 16:49:21 2011 +0900

    [trac930]
     - correct error messages in bindctl
       it prints together with arguments.
     - modify the command_show function
       it reports statistics data of the module even if name is not specified.
     - add/modify unittests depending on the changes of error messages

commit 5a6e52a43b511c50444d57b2a39e882d6045f284
Author: Naoki Kambe <kambe at jprs.co.jp>
Date:   Wed Jul 27 16:42:54 2011 +0900

    [trac930] remove unnecessary a white space

commit 08d6bee9e8a64d9034d1526339fa7058cc47ec0e
Author: Naoki Kambe <kambe at jprs.co.jp>
Date:   Wed Jul 27 10:18:07 2011 +0900

    [trac930] add a test pattern which the set command with a non-existent item
    name is sent

commit fd00a47b22e779e8aab897ea2c347746493fd856
Author: Naoki Kambe <kambe at jprs.co.jp>
Date:   Wed Jul 27 10:14:57 2011 +0900

    [trac930] modify parse_spec function
    returns empty dict if list-type is not specified in the argument

commit 841ce466f7da2e69f64db2df000757d13390bd92
Author: Naoki Kambe <kambe at jprs.co.jp>
Date:   Fri Jul 22 21:40:07 2011 +0900

    [trac930] fix conflicts with trac1021

commit f899d2da84eb0794e1871743a6ab0c47709e8abb
Author: Naoki Kambe <kambe at jprs.co.jp>
Date:   Fri Jul 22 18:50:41 2011 +0900

    [trac930] add changes because query counter names described in the specfile are changed.

commit afbb0539629d9b8a6d056d9f507df47126339c65
Author: Naoki Kambe <kambe at jprs.co.jp>
Date:   Fri Jul 22 18:45:19 2011 +0900

    [trac930] add the logging when the validation of statistics data fails

commit beb81dfe817b6e37d5861e3dfc56ca5cba61e03d
Author: Naoki Kambe <kambe at jprs.co.jp>
Date:   Fri Jul 22 18:43:26 2011 +0900

    [trac930] Add unittests to test sumitStatistics with the validation of statistics data and add mock ModuleSpec class

commit cf0dd1deccf98fbf891770237ab10001ceea0d5d
Author: Naoki Kambe <kambe at jprs.co.jp>
Date:   Fri Jul 22 18:41:34 2011 +0900

    [trac930] Add prototypes of validator_typea and registerStatisticsValidator
     - validator_type -- a type of statistics validation function
     - registerStatisticsValidator -- the function to register the validation function

commit 5599adceb9df14b884f2f9fbf8495c514522862a
Author: Naoki Kambe <kambe at jprs.co.jp>
Date:   Fri Jul 22 18:37:22 2011 +0900

    [trac930]
    - Add implementation to validate statistics data
      -- When validation is success, it sends data to statistics module. But when it fails, it doesn't send and logs the message.
    
    - Add the function to register the validation function into the class

commit 02fd716235598062a85f5390696dbba38ef9ed09
Author: Naoki Kambe <kambe at jprs.co.jp>
Date:   Fri Jul 22 18:32:22 2011 +0900

    [trac930] add the helper functions which are used around the registration of the function to validate the statistics data.

commit fc0dfceb6eacd6294ac7175b288354e89e1fd0ca
Author: Naoki Kambe <kambe at jprs.co.jp>
Date:   Fri Jul 22 18:28:40 2011 +0900

    [trac930] add new messages into the message file of Auth and Boss
    when validation of statistics data to send to statistics module is failed.

commit e2fb32f9a1445039e53fb25f8da55e0a66fcd969
Author: Naoki Kambe <kambe at jprs.co.jp>
Date:   Wed Jul 20 10:00:29 2011 +0900

    [trac930] add statistics validation for bob

commit 13626af26c9827aa4ea01b9a02e7e46c19b10742
Author: Naoki Kambe <kambe at jprs.co.jp>
Date:   Wed Jul 13 20:25:54 2011 +0900

    [trac930]
     - increase seconds in sleep time which is before HTTP client connects to the server
     - delete 'test_log_message' because of the deletion of original function

commit 01aad4ccc702a40ce6dc87f9e3d3057346a4d2bf
Author: Naoki Kambe <kambe at jprs.co.jp>
Date:   Fri Jul 8 21:22:34 2011 +0900

    [trac930] remove unneeded empty TODO comments

commit 5386e91c0ad84e890176ac27466cc77cb4cfb07b
Author: Naoki Kambe <kambe at jprs.co.jp>
Date:   Fri Jul 8 21:09:41 2011 +0900

    [trac930] add new entry for #928-#930

commit c84b1c33cbcfe13903c7b118f25199ec12263ecf
Author: Naoki Kambe <kambe at jprs.co.jp>
Date:   Fri Jul 8 20:08:22 2011 +0900

    [trac930] refurbish the unittests for new stats module, new stats httpd module
    and new mockups and utilities in test_utils.py

commit 5a06a689308cf93bab0376d14cd75ea2da98e70e
Author: Naoki Kambe <kambe at jprs.co.jp>
Date:   Fri Jul 8 19:56:24 2011 +0900

    [trac930] modify Stats
     - remove unneeded subject and listener classes
    
     - add StatsError for handling errors in Stats
    
     - add some new methods (update_modules, update_statistics_data and
       get_statistics_data)
    
     - modify implementations of existent commands(show and set) according changes
       stats.spec
    
     - remove reset and remove command because stats module couldn't manage other
       modules' statistics data schema
    
     - add implementation of strict validation of each statistics data
       (If the validation is failed, it puts out the error.)
    
     - stats module shows its PID when status command invoked
    
     - add new command showschema invokable via bindctl
    
     - set command requires arguments of owner module name and statistics item name
    
     - show and showschema commands accepts arguments of owner module name and
       statistics item name
    
     - exits at exit code 1 if got runtime errors
    
     - has boot time in _BASETIME

commit 49856af0435720158af25e8dbc27ad879a404ad9
Author: Naoki Kambe <kambe at jprs.co.jp>
Date:   Fri Jul 8 19:40:15 2011 +0900

    [trac930]
     - remove "stats-schema.spec" setting and getting statistics data schema via
       this spec file
    
     - add "version" item in DEFAULT_CONFIG
    
     - get the address family by socket.getaddrinfo function with specified
       server_address in advance, and create HttpServer object once, in stead of
       creating double HttpServer objects for IPv6 and IPv4 in the prior code
       (It is aimed for avoiding to fail to close the once opened sockets.)
    
     - open HTTP port in start method
    
     - avoid calling config_handler recursively in the except statement
    
     - create XML, XSD, XSL documents after getting statistics data and schema from
       remote stats module via CC session
    
     - definitely close once opened template file object

commit ffe7cc13b12bce0a36865c448222325720d84c0a
Author: Naoki Kambe <kambe at jprs.co.jp>
Date:   Fri Jul 8 16:33:59 2011 +0900

    [trac930] update spec file of stats module
    - update description of status command, shutdown command and show command
    - change argument of show command (Owner module name of statistics data can be
    specified)
    - change argument of set command (Owner module name of statistics data is
    always required)
    - add showschema command which shows statistics data schema of each module
    specified)
    - disabled reset command and remove command

commit 01a624c91b204920ad0a562c947f8bc5f89ad28a
Author: Naoki Kambe <kambe at jprs.co.jp>
Date:   Fri Jul 8 16:21:49 2011 +0900

    [trac930] update argument name and argument format of set command in auth module and boss module
    and also update related unittests of their modules

commit 4aaac79296588b0395ce0e9b77c5f2d5f31370b2
Author: Naoki Kambe <kambe at jprs.co.jp>
Date:   Fri Jul 8 16:18:38 2011 +0900

    [trac930] remove description about removing statistics data by stats module
    update example format in bindctl when show command of stats module is invoked

commit 639d6e72a50bf429da4588d89c57a20a227da2c7
Author: Naoki Kambe <kambe at jprs.co.jp>
Date:   Fri Jul 8 16:13:17 2011 +0900

    [trac930] add a column "Owner" in the table tag

commit 82dfd1f88136caad942d79ac0e45fdc7eef03b73
Author: Naoki Kambe <kambe at jprs.co.jp>
Date:   Fri Jul 8 16:12:09 2011 +0900

    [trac930] remove descriptions about "stats-schema.spec" and add description about new
    features because stats module can be requested to show statistics data schema.

commit 478b35c644a486fdc58708c85b318bbc86d59491
Author: Naoki Kambe <kambe at jprs.co.jp>
Date:   Fri Jul 8 16:00:30 2011 +0900

    [trac930] add utilities and mock-up modules for unittests of
    statistics modules and change some environ variables (PYTHONPATH,
    CONFIG_TESTDATA_PATH) in Makefile
    
    test_utilies.py internally calls msgq, cfgmgr and some mock modules
    with threads for as real situation as possible.

commit f7c4cfed198d0d8b06bc05f43c9df8b39b5a6e16
Author: Naoki Kambe <kambe at jprs.co.jp>
Date:   Fri Jul 8 15:57:41 2011 +0900

    [trac930] remove unneeded mockups, fake modules and dummy data

commit e657471f75d60643b5f608724313338081074b02
Author: Naoki Kambe <kambe at jprs.co.jp>
Date:   Fri Jul 8 15:55:55 2011 +0900

    [trac930] remove unneeded specfile "stats-schema.spec"

-----------------------------------------------------------------------

Summary of changes:
 src/bin/stats/tests/b10-stats-httpd_test.py   |   13 ++--
 src/bin/stats/tests/b10-stats_test.py         |   91 ++++++++++++++-----------
 src/bin/stats/tests/test_utils.py             |    1 +
 src/lib/config/module_spec.cc                 |    9 ++-
 src/lib/config/tests/module_spec_unittests.cc |    2 +-
 src/lib/python/isc/config/module_spec.py      |    6 +-
 6 files changed, 71 insertions(+), 51 deletions(-)

-----------------------------------------------------------------------
diff --git a/src/bin/stats/tests/b10-stats-httpd_test.py b/src/bin/stats/tests/b10-stats-httpd_test.py
index 870e6b9..8c84277 100644
--- a/src/bin/stats/tests/b10-stats-httpd_test.py
+++ b/src/bin/stats/tests/b10-stats-httpd_test.py
@@ -14,10 +14,11 @@
 # WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
 
 """
-This unittests run Msgq, Cfgmgr, Auth, Boss and Stats as mock in
-background. Because the stats httpd communicates various other modules
-in runtime. However this aim is not to actually simulate a whole
-system running.
+In each of these tests we start several virtual components. They are
+not the real components, no external processes are started. They are
+just simple mock objects running each in its own thread and pretending
+to be bind10 modules. This helps testing the stats http server in a
+close to real environment.
 """
 
 import unittest
@@ -512,13 +513,13 @@ class TestStatsHttpd(unittest.TestCase):
 
         self.assertEqual(
             self.stats_httpd.config_handler(
-                dict(listen_on=[dict(address="127.0.0.2",port=8000)])),
+                dict(listen_on=[dict(address="127.0.0.1",port=8000)])),
             isc.config.ccsession.create_answer(0))
         self.assertTrue("listen_on" in self.stats_httpd.config)
         for addr in self.stats_httpd.config["listen_on"]:
             self.assertTrue("address" in addr)
             self.assertTrue("port" in addr)
-            self.assertTrue(addr["address"] == "127.0.0.2")
+            self.assertTrue(addr["address"] == "127.0.0.1")
             self.assertTrue(addr["port"] == 8000)
 
         if self.ipv6_enabled:
diff --git a/src/bin/stats/tests/b10-stats_test.py b/src/bin/stats/tests/b10-stats_test.py
index b2c1b7f..7cf4f7e 100644
--- a/src/bin/stats/tests/b10-stats_test.py
+++ b/src/bin/stats/tests/b10-stats_test.py
@@ -14,10 +14,11 @@
 # WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
 
 """
-This unittests run Msgq, Cfgmgr, Auth and Boss as mock in
-background. Because the stats module communicates various other
-modules in runtime. However this aim is not to actually simulate a
-whole system running.
+In each of these tests we start several virtual components. They are
+not the real components, no external processes are started. They are
+just simple mock objects running each in its own thread and pretending
+to be bind10 modules. This helps testing the stats module in a close
+to real environment.
 """
 
 import unittest
@@ -146,11 +147,9 @@ class TestStats(unittest.TestCase):
     def setUp(self):
         self.base = BaseModules()
         self.stats = stats.Stats()
-        self.assertTrue("B10_FROM_SOURCE" in os.environ)
-        self.assertEqual(stats.SPECFILE_LOCATION, \
-                             os.environ["B10_FROM_SOURCE"] + os.sep + \
-                             "src" + os.sep + "bin" + os.sep + "stats" + \
-                             os.sep + "stats.spec")
+        self.const_timestamp = 1308730448.965706
+        self.const_datetime = '2011-06-22T08:14:08Z'
+        self.const_default_datetime = '1970-01-01T00:00:00Z'
 
     def tearDown(self):
         self.base.shutdown()
@@ -211,25 +210,24 @@ class TestStats(unittest.TestCase):
         # command_handler
         statsserver = ThreadingServerManager(MyStats)
         statsserver.run()
-        self.base.boss.server._started.wait()
         self.assertEqual(
             send_command(
                 'show', 'Stats',
                 params={ 'owner' : 'Boss',
                   'name'  : 'boot_time' }),
-            (0, '2011-06-22T08:14:08Z'))
+            (0, self.const_datetime))
         self.assertEqual(
             send_command(
                 'set', 'Stats',
                 params={ 'owner' : 'Boss',
-                  'data'  : { 'boot_time' : '2012-06-22T18:24:08Z' } }),
+                  'data'  : { 'boot_time' : self.const_datetime } }),
             (0, None))
         self.assertEqual(
             send_command(
                 'show', 'Stats',
                 params={ 'owner' : 'Boss',
                   'name'  : 'boot_time' }),
-            (0, '2012-06-22T18:24:08Z'))
+            (0, self.const_datetime))
         self.assertEqual(
             send_command('status', 'Stats'),
             (0, "Stats is up. (PID " + str(os.getpid()) + ")"))
@@ -243,7 +241,7 @@ class TestStats(unittest.TestCase):
         self.assertEqual(len(value['Stats']), 5)
         self.assertEqual(len(value['Boss']), 1)
         self.assertTrue('boot_time' in value['Boss'])
-        self.assertEqual(value['Boss']['boot_time'], '2012-06-22T18:24:08Z')
+        self.assertEqual(value['Boss']['boot_time'], self.const_datetime)
         self.assertTrue('report_time' in value['Stats'])
         self.assertTrue('boot_time' in value['Stats'])
         self.assertTrue('last_update_time' in value['Stats'])
@@ -295,14 +293,14 @@ class TestStats(unittest.TestCase):
         self.assertTrue('last_update_time' in my_statistics_data)
         self.assertTrue('timestamp' in my_statistics_data)
         self.assertTrue('lname' in my_statistics_data)
-        self.assertEqual(my_statistics_data['report_time'], "1970-01-01T00:00:00Z")
-        self.assertEqual(my_statistics_data['boot_time'], "1970-01-01T00:00:00Z")
-        self.assertEqual(my_statistics_data['last_update_time'], "1970-01-01T00:00:00Z")
+        self.assertEqual(my_statistics_data['report_time'], self.const_default_datetime)
+        self.assertEqual(my_statistics_data['boot_time'], self.const_default_datetime)
+        self.assertEqual(my_statistics_data['last_update_time'], self.const_default_datetime)
         self.assertEqual(my_statistics_data['timestamp'], 0.0)
         self.assertEqual(my_statistics_data['lname'], "")
         my_statistics_data = stats.get_spec_defaults(self.stats.modules['Boss'].get_statistics_spec())
         self.assertTrue('boot_time' in my_statistics_data)
-        self.assertEqual(my_statistics_data['boot_time'], "1970-01-01T00:00:00Z")
+        self.assertEqual(my_statistics_data['boot_time'], self.const_default_datetime)
         orig_parse_answer = stats.isc.config.ccsession.parse_answer
         stats.isc.config.ccsession.parse_answer = lambda x: (99, 'error')
         self.assertRaises(stats.StatsError, self.stats.update_modules)
@@ -322,11 +320,11 @@ class TestStats(unittest.TestCase):
         my_statistics_data = self.stats.get_statistics_data(owner='Stats')
         self.assertTrue('boot_time' in my_statistics_data)
         my_statistics_data = self.stats.get_statistics_data(owner='Stats', name='report_time')
-        self.assertEqual(my_statistics_data, "1970-01-01T00:00:00Z")
+        self.assertEqual(my_statistics_data, self.const_default_datetime)
         my_statistics_data = self.stats.get_statistics_data(owner='Stats', name='boot_time')
-        self.assertEqual(my_statistics_data, "1970-01-01T00:00:00Z")
+        self.assertEqual(my_statistics_data, self.const_default_datetime)
         my_statistics_data = self.stats.get_statistics_data(owner='Stats', name='last_update_time')
-        self.assertEqual(my_statistics_data, "1970-01-01T00:00:00Z")
+        self.assertEqual(my_statistics_data, self.const_default_datetime)
         my_statistics_data = self.stats.get_statistics_data(owner='Stats', name='timestamp')
         self.assertEqual(my_statistics_data, 0.0)
         my_statistics_data = self.stats.get_statistics_data(owner='Stats', name='lname')
@@ -343,10 +341,10 @@ class TestStats(unittest.TestCase):
         self.assertTrue('Stats' in self.stats.statistics_data)
         my_statistics_data = self.stats.statistics_data['Stats']
         self.assertEqual(my_statistics_data['lname'], 'foo at bar')
-        self.stats.update_statistics_data(owner='Stats', last_update_time='2000-01-01T10:10:10Z')
+        self.stats.update_statistics_data(owner='Stats', last_update_time=self.const_datetime)
         self.assertTrue('Stats' in self.stats.statistics_data)
         my_statistics_data = self.stats.statistics_data['Stats']
-        self.assertEqual(my_statistics_data['last_update_time'], '2000-01-01T10:10:10Z')
+        self.assertEqual(my_statistics_data['last_update_time'], self.const_datetime)
         self.assertEqual(self.stats.update_statistics_data(owner='Stats', lname=0.0),
                          ['0.0 should be a string'])
         self.assertEqual(self.stats.update_statistics_data(owner='Dummy', foo='bar'),
@@ -382,14 +380,14 @@ class TestStats(unittest.TestCase):
                 0, 0))
         orig_get_timestamp = stats.get_timestamp
         orig_get_datetime = stats.get_datetime
-        stats.get_timestamp = lambda : 1308730448.965706
-        stats.get_datetime = lambda : '2011-06-22T08:14:08Z'
-        self.assertEqual(stats.get_timestamp(), 1308730448.965706)
-        self.assertEqual(stats.get_datetime(), '2011-06-22T08:14:08Z')
+        stats.get_timestamp = lambda : self.const_timestamp
+        stats.get_datetime = lambda : self.const_datetime
+        self.assertEqual(stats.get_timestamp(), self.const_timestamp)
+        self.assertEqual(stats.get_datetime(), self.const_datetime)
         self.assertEqual(self.stats.command_show(owner='Stats', name='report_time'), \
-                             isc.config.create_answer(0, '2011-06-22T08:14:08Z'))
-        self.assertEqual(self.stats.statistics_data['Stats']['timestamp'], 1308730448.965706)
-        self.assertEqual(self.stats.statistics_data['Stats']['boot_time'], '1970-01-01T00:00:00Z')
+                             isc.config.create_answer(0, self.const_datetime))
+        self.assertEqual(self.stats.statistics_data['Stats']['timestamp'], self.const_timestamp)
+        self.assertEqual(self.stats.statistics_data['Stats']['boot_time'], self.const_default_datetime)
         stats.get_timestamp = orig_get_timestamp
         stats.get_datetime = orig_get_datetime
         self.stats.mccs.specification = isc.config.module_spec.ModuleSpec(
@@ -521,17 +519,17 @@ class TestStats(unittest.TestCase):
 
     def test_command_set(self):
         orig_get_datetime = stats.get_datetime
-        stats.get_datetime = lambda : '2011-06-22T06:12:38Z'
+        stats.get_datetime = lambda : self.const_datetime
         (rcode, value) = isc.config.ccsession.parse_answer(
             self.stats.command_set(owner='Boss',
-                                   data={ 'boot_time' : '2011-06-22T13:15:04Z' }))
+                                   data={ 'boot_time' : self.const_datetime }))
         stats.get_datetime = orig_get_datetime
         self.assertEqual(rcode, 0)
         self.assertTrue(value is None)
         self.assertEqual(self.stats.statistics_data['Boss']['boot_time'],
-                         '2011-06-22T13:15:04Z')
+                         self.const_datetime)
         self.assertEqual(self.stats.statistics_data['Stats']['last_update_time'],
-                         '2011-06-22T06:12:38Z')
+                         self.const_datetime)
         self.assertEqual(self.stats.command_set(owner='Stats',
                                                 data={ 'lname' : 'foo at bar' }),
                          isc.config.create_answer(0, None))
@@ -567,16 +565,27 @@ class TestStats(unittest.TestCase):
         self.assertRaises(stats.StatsError,
                           self.stats.command_set, owner='Stats', data={ 'dummy' : '_xxxx_yyyy_zzz_' })
 
+class TestOSEnv(unittest.TestCase):
     def test_osenv(self):
         """
-        test for not having environ "B10_FROM_SOURCE"
+        test for the environ variable "B10_FROM_SOURCE"
+        "B10_FROM_SOURCE" is set in Makefile
         """
-        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)
+        # test case having B10_FROM_SOURCE
+        self.assertTrue("B10_FROM_SOURCE" in os.environ)
+        self.assertEqual(stats.SPECFILE_LOCATION, \
+                             os.environ["B10_FROM_SOURCE"] + os.sep + \
+                             "src" + os.sep + "bin" + os.sep + "stats" + \
+                             os.sep + "stats.spec")
+        # test case not having B10_FROM_SOURCE
+        path = os.environ["B10_FROM_SOURCE"]
+        os.environ.pop("B10_FROM_SOURCE")
+        self.assertFalse("B10_FROM_SOURCE" in os.environ)
+        # import stats again
+        imp.reload(stats)
+        # revert the changes
+        os.environ["B10_FROM_SOURCE"] = path
+        imp.reload(stats)
 
 def test_main():
     unittest.main()
diff --git a/src/bin/stats/tests/test_utils.py b/src/bin/stats/tests/test_utils.py
index f9ab969..e79db48 100644
--- a/src/bin/stats/tests/test_utils.py
+++ b/src/bin/stats/tests/test_utils.py
@@ -53,6 +53,7 @@ class ThreadingServerManager:
     def run(self):
         self.server._thread.start()
         self.server._started.wait()
+        self.server._started.clear()
         # waiting for the server's being ready for listening
         time.sleep(TIMEOUT_SEC)
 
diff --git a/src/lib/config/module_spec.cc b/src/lib/config/module_spec.cc
index eed6b72..27cf993 100644
--- a/src/lib/config/module_spec.cc
+++ b/src/lib/config/module_spec.cc
@@ -103,8 +103,15 @@ check_format(ConstElementPtr value, ConstElementPtr format_name) {
     BOOST_FOREACH (const format_types::value_type& f, time_formats) {
         if (format_name->stringValue() == f.first) {
             struct tm tm;
+            char buf[255] = "";
+            memset(&tm, 0, sizeof(tm));
+            // reverse check
             return (strptime(value->stringValue().c_str(),
-                             f.second.c_str(), &tm) != NULL);
+                             f.second.c_str(), &tm) != NULL
+                    && strftime(buf, sizeof(buf),
+                                f.second.c_str(), &tm) != 0
+                    && strcmp(value->stringValue().c_str(),
+                              buf) == 0);
         }
     }
     return (false);
diff --git a/src/lib/config/tests/module_spec_unittests.cc b/src/lib/config/tests/module_spec_unittests.cc
index 315a78d..cfd0ff5 100644
--- a/src/lib/config/tests/module_spec_unittests.cc
+++ b/src/lib/config/tests/module_spec_unittests.cc
@@ -287,7 +287,7 @@ TEST(ModuleSpec, CheckFormat) {
     item_default = "\"item_default\": \"2011-05-27\",";
     item_format  = "\"item_format\": \"date\"";
     specs.push_back("," + item_default + item_format);
-    item_default = "\"item_default\": \"19:42:57Z\",";
+    item_default = "\"item_default\": \"19:42:57\",";
     item_format  = "\"item_format\": \"time\"";
     specs.push_back("," + item_default + item_format);
 
diff --git a/src/lib/python/isc/config/module_spec.py b/src/lib/python/isc/config/module_spec.py
index d120080..b79f928 100644
--- a/src/lib/python/isc/config/module_spec.py
+++ b/src/lib/python/isc/config/module_spec.py
@@ -330,8 +330,10 @@ def _check_format(value, format_name):
     for fmt in time_formats:
         if format_name == fmt:
             try:
-                time.strptime(value, time_formats[fmt])
-                return True
+                # reverse check
+                return value == time.strftime(
+                    time_formats[fmt],
+                    time.strptime(value, time_formats[fmt]))
             except (ValueError, TypeError):
                 break
     return False




More information about the bind10-changes mailing list