[svn] commit: r2659 - in /branches/trac191/src/bin/stats: stats.py.in stats.spec.pre.in stats_stub.py.in tests/b10-stats_stub_test.py tests/b10-stats_test.py tests/unittest_fakesession.py
BIND 10 source code commits
bind10-changes at lists.isc.org
Mon Aug 9 12:49:07 UTC 2010
Author: naokikambe
Date: Mon Aug 9 12:49:07 2010
New Revision: 2659
Log:
- add select process in socket-close function in unittest_fakesession.py
- changes for more strict test scripts (b10-stats_test.py, b10-stats_stub_test.py)
- changes of behavior of stand-alone stub program (stats_stub.py.in), which isn't installed actually
- changes depend upon natural language (stats.spec.pre.in)
- add detailed comments (stats.py.in)
- some minor changes
Modified:
branches/trac191/src/bin/stats/stats.py.in
branches/trac191/src/bin/stats/stats.spec.pre.in
branches/trac191/src/bin/stats/stats_stub.py.in
branches/trac191/src/bin/stats/tests/b10-stats_stub_test.py
branches/trac191/src/bin/stats/tests/b10-stats_test.py
branches/trac191/src/bin/stats/tests/unittest_fakesession.py
Modified: branches/trac191/src/bin/stats/stats.py.in
==============================================================================
--- branches/trac191/src/bin/stats/stats.py.in (original)
+++ branches/trac191/src/bin/stats/stats.py.in Mon Aug 9 12:49:07 2010
@@ -73,8 +73,7 @@
"""
A abstract subject class of observer pattern
"""
- def __init__(self, verbose=False):
- self.verbose=verbose
+ def __init__(self):
self._listeners = []
def attach(self, listener):
@@ -158,12 +157,11 @@
self.stats_data = self.initialize_data(self.stats_spec)
# add event handler invoked via SessionSubject object
-
- # don't add 'command_' suffix to the special commands in
- # order to prevent executing internal command via bindctl
self.add_event(Callback('start', self.start))
self.add_event(Callback('stop', self.stop))
self.add_event(Callback('check', self.check))
+ # don't add 'command_' suffix to the special commands in
+ # order to prevent executing internal command via bindctl
# get commands spec
self.commands_spec = self.cc_session.get_module_spec().get_commands_spec()
@@ -218,9 +216,8 @@
"""
handle commands from the cc channel
"""
- cmd = None
# add 'command_' suffix in order to executing command via bindctl
- name = 'command_'+command
+ name = 'command_' + command
if name in self.events:
event = self.events[name]
@@ -245,8 +242,7 @@
sys.stdout.write("[b10-stats] 'set' command received, args: "+str(args)+"\n")
# 'args' must be dictionary type
- stats_data.update(args['stats_data'])
- self.stats_data.update(stats_data)
+ self.stats_data.update(args['stats_data'])
# overwrite "stats.LastUpdateTime"
self.stats_data['stats.last_update_time'] = get_datetime()
@@ -267,8 +263,8 @@
# is called recursively
def __increase_data(data, args):
if type(data) == list:
- max = max(len(data), len(args))
- for i in max:
+ mx = max(len(data), len(args))
+ for i in mx:
if i in data and i in args:
data[i] = __increase_data(data[i], args[i])
elif i in args:
@@ -305,6 +301,7 @@
# just remove one item
self.stats_data.pop(stats_item_name)
+
return create_answer(0)
def command_show(self, args, stats_item_name=''):
@@ -314,7 +311,8 @@
if self.verbose:
sys.stdout.write("[b10-stats] 'show' command received, args: "+str(args)+"\n")
- # always overwrite 'report_time' and 'stats.timestamp' if "show" command invoked
+ # always overwrite 'report_time' and 'stats.timestamp'
+ # if "show" command invoked
self.stats_data['report_time'] = get_datetime()
self.stats_data['stats.timestamp'] = get_timestamp()
@@ -349,6 +347,7 @@
"""
if self.verbose:
sys.stdout.write("[b10-stats] 'status' command received\n")
+ # just return "I'm alive."
return create_answer(0, "I'm alive.")
def command_unknown(self, command, args):
@@ -376,10 +375,14 @@
elif spec['item_type'] in set(['float', 'double', 'real']):
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']) ])
+ return spec.get('item_default',
+ [ __get_init_val(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 ])
@@ -415,9 +418,6 @@
+ "is the command channel daemon running?\n")
except KeyboardInterrupt as kie:
sys.stderr.write("[b10-stats] Interrupted, exiting\n")
- finally:
- if subject:
- subject.stop()
if __name__ == "__main__":
main()
Modified: branches/trac191/src/bin/stats/stats.spec.pre.in
==============================================================================
--- branches/trac191/src/bin/stats/stats.spec.pre.in (original)
+++ branches/trac191/src/bin/stats/stats.spec.pre.in Mon Aug 9 12:49:07 2010
@@ -18,7 +18,7 @@
"item_optional": false,
"item_default": "1970-01-01T00:00:00Z",
"item_title": "stats.BootTime",
- "item_description": "A date time when b10-stats process starts",
+ "item_description": "A date time when bind10 process starts initially",
"item_format": "date-time"
},
{
@@ -27,7 +27,7 @@
"item_optional": false,
"item_default": "1970-01-01T00:00:00Z",
"item_title": "stats.BootTime",
- "item_description": "A date time when the stats module starts initially or a time when the stats module restarts",
+ "item_description": "A date time when the stats module starts initially or when the stats module restarts",
"item_format": "date-time"
},
{
@@ -36,7 +36,7 @@
"item_optional": false,
"item_default": "1970-01-01T00:00:00Z",
"item_title": "stats.StartTime",
- "item_description": "A date time when the stats module starts collecting data and aggregating values, or resetting data at last time",
+ "item_description": "A date time when the stats module starts collecting data or resetting values last time",
"item_format": "date-time"
},
{
@@ -45,7 +45,7 @@
"item_optional": false,
"item_default": "1970-01-01T00:00:00Z",
"item_title": "stats.LastUpdateTime",
- "item_description": "The latest date time when the stats module accepts from another modules like auth server or boss process and so on",
+ "item_description": "The latest date time when the stats module receives from other modules like auth server or boss process and so on",
"item_format": "date-time"
},
{
@@ -54,7 +54,7 @@
"item_optional": false,
"item_default": 0.0,
"item_title": "stats.Timestamp",
- "item_description": "Current timestamp since epoch time (1970-01-01T00:00:00Z)",
+ "item_description": "A current time stamp since epoch time (1970-01-01T00:00:00Z)",
"item_format": "second"
},
{
@@ -85,12 +85,12 @@
"commands": [
{
"command_name": "status",
- "command_description": "status command",
+ "command_description": "identify whether stats module is alive or not",
"command_args": []
},
{
"command_name": "show",
- "command_description": "show specified/all statistics data",
+ "command_description": "show the specified/all statistics data",
"command_args": [
{
"item_name": "stats_item_name",
@@ -101,8 +101,8 @@
]
},
{
+ "command_name": "set",
"command_description": "set the value of specified name in statistics data",
- "command_name": "set",
"command_args": [
{
"item_name": "stats_data",
@@ -115,7 +115,7 @@
},
{
"command_name": "increase",
- "command_description": "increase the existent value of specified name in statistics data",
+ "command_description": "increase the current value of specified name up to specified value in statistics data",
"command_args": [
{
"item_name": "stats_data",
@@ -128,7 +128,7 @@
},
{
"command_name": "remove",
- "command_description": "remove the specified name in statistics data",
+ "command_description": "remove the specified name from statistics data",
"command_args": [
{
"item_name": "stats_item_name",
@@ -140,12 +140,12 @@
},
{
"command_name": "reset",
- "command_description": "reset all statistics data",
+ "command_description": "reset all statistics data to default values except for several constant names",
"command_args": []
},
{
"command_name": "shutdown",
- "command_description": "Shut down stats module",
+ "command_description": "Shut down the stats module",
"command_args": []
}
]
Modified: branches/trac191/src/bin/stats/stats_stub.py.in
==============================================================================
--- branches/trac191/src/bin/stats/stats_stub.py.in (original)
+++ branches/trac191/src/bin/stats/stats_stub.py.in Mon Aug 9 12:49:07 2010
@@ -52,6 +52,9 @@
pass
def send_command(self, command, args):
+ """
+ send command to stats module with args
+ """
cmd = create_command(command, args)
if self.verbose:
sys.stdout.write("[b10-stats_stub] send command : " + str(cmd) + "\n")
@@ -68,10 +71,10 @@
self.session.group_reply(env, create_answer(0))
return ret, arg, env
-class BossStub:
+class BossModuleStub:
"""
- This class is customized CCSessionStub and is intended to behaves
- as a virtual Boss process to send to Stats Module.
+ This class is customized from CCSessionStub and is intended to behaves
+ as a virtual Boss module to send to Stats Module.
"""
def __init__(self, session=None, verbose=False):
self.stub = CCSessionStub(session=session, verbose=verbose)
@@ -79,30 +82,40 @@
def send_command(self):
return self.stub.send_command("set", {"stats_data": {"bind10.boot_time": get_datetime()}})
-class AuthStub:
+class AuthModuleStub:
"""
This class is customized CCSessionStub and is intended to behaves
- as a virtual Auth process to send to Stats Module.
+ as a virtual Auth module to send to Stats Module.
"""
def __init__(self, session=None, verbose=False):
self.stub = CCSessionStub(session=session, verbose=verbose)
self.count = { "udp": 0, "tcp": 0 }
- def send_command_udp(self):
- p = "udp"
- self.count[p] = 1
- return self.stub.send_command("increase", {"stats_data": {"auth.queries."+p: self.count[p]}})
+ def send_command_udp(self, cmd="increase", cnt=0):
+ """
+ count up udp query count
+ """
+ prt = "udp"
+ self.count[prt] = 1
+ if cnt > 0:
+ self.count[prt] = cnt
+ return self.stub.send_command(cmd,
+ {"stats_data":
+ {"auth.queries."+prt: self.count[prt]}
+ })
- def send_command_tcp(self):
- p = "tcp"
- self.count[p] = self.count[p] + 1
- return self.stub.send_command("set", {"stats_data": {"auth.queries."+p: self.count[p]}})
-
-def get_timestamp():
- """
- get current timestamp
- """
- return time.time()
+ def send_command_tcp(self, cmd="set", cnt=0):
+ """
+ set udp query count
+ """
+ prt = "tcp"
+ self.count[prt] = self.count[prt] + 1
+ if cnt > 0:
+ self.count[prt] = cnt
+ return self.stub.send_command(cmd,
+ {"stats_data":
+ {"auth.queries."+prt: self.count[prt]}
+ })
def get_datetime():
"""
@@ -117,10 +130,11 @@
help="display more about what is going on")
(options, args) = parser.parse_args()
stub = CCSessionStub(verbose=options.verbose)
- boss = BossStub(session=stub.session, verbose=options.verbose)
- auth = AuthStub(session=stub.session, verbose=options.verbose)
+ boss = BossModuleStub(session=stub.session, verbose=options.verbose)
+ auth = AuthModuleStub(session=stub.session, verbose=options.verbose)
stub.send_command("status", None)
boss.send_command()
+ auth.send_command_udp(cmd="set", cnt=81120) # This is an example.
while True:
auth.send_command_udp()
auth.send_command_tcp()
@@ -132,10 +146,9 @@
sys.stderr.write("[b10-stats_stub] Error creating Stats module, "
+ "is the command channel daemon running?\n")
except KeyboardInterrupt as kie:
- sys.stderr.write("[stats_stub] Interrupted, exiting\n")
+ sys.stderr.write("[b10-stats_stub] Interrupted, exiting\n")
finally:
stub.cc_session.close()
if __name__ == "__main__":
main()
-
Modified: branches/trac191/src/bin/stats/tests/b10-stats_stub_test.py
==============================================================================
--- branches/trac191/src/bin/stats/tests/b10-stats_stub_test.py (original)
+++ branches/trac191/src/bin/stats/tests/b10-stats_stub_test.py Mon Aug 9 12:49:07 2010
@@ -22,72 +22,73 @@
import unittest
import time
from unittest_fakesession import FakeModuleCCSession
-from stats_stub import CCSessionStub, BossStub, AuthStub
+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 = BossStub(self.session, verbose=False)
- self.auth = AuthStub(self.session, verbose=False)
+ self.boss = BossModuleStub(self.session, verbose=False)
+ self.auth = AuthModuleStub(self.session, verbose=False)
+ self.env = {'from': None, 'group': 'Stats'}
+ self.result_ok = {'result': [0]}
def test_stub(self):
- env = {'from': None, 'group': 'Stats'}
- result_ok = {'result': [0]}
+ """
+ Test for send_command of CCSessionStub object
+ """
+ env = self.env
+ result_ok = self.result_ok
self.assertEqual(('status', None, env),
self.stub.send_command('status', None))
self.assertEqual(result_ok, self.session.get_message("Stats", None))
self.assertEqual(('shutdown', None, env),
self.stub.send_command('shutdown', None))
self.assertEqual(result_ok, self.session.get_message("Stats", None))
+ self.assertEqual(('show', None, env),
+ self.stub.send_command('show', None))
+ self.assertEqual(result_ok, self.session.get_message("Stats", None))
self.assertEqual(('set', {'atest': 100.0}, env),
self.stub.send_command('set', {'atest': 100.0}))
- self.assertEqual(result_ok, self.session.get_message("Stats", None))
-
- def test_boss_stub(self):
- env = {'from': None, 'group': 'Stats'}
- result_ok = {'result': [0]}
- self.assertEqual(('set', {"stats_data": {"bind10.boot_time": get_datetime()}}, env),
- self.boss.send_command())
- self.assertEqual(result_ok, self.session.get_message("Stats", None))
-
- def test_auth_stub(self):
- env = {'from': None, 'group': 'Stats'}
- result_ok = {'result': [0]}
-
- # check command name
- self.assertTrue( self.auth.send_command_udp()[0] == "increase" )
- self.assertEqual(result_ok, self.session.get_message("Stats", None))
- self.assertTrue( self.auth.send_command_tcp()[0] == "set" )
- self.assertEqual(result_ok, self.session.get_message("Stats", None))
-
- # check env
- self.assertTrue( self.auth.send_command_udp()[2] == env )
- self.assertEqual(result_ok, self.session.get_message("Stats", None))
- self.assertTrue( self.auth.send_command_tcp()[2] == env )
- self.assertEqual(result_ok, self.session.get_message("Stats", None))
-
- # check type
- self.assertTrue( type(self.auth.send_command_udp()[1]["stats_data"]["auth.queries.udp"]) == type(int()) )
- self.assertEqual(result_ok, self.session.get_message("Stats", None))
- self.assertTrue( type(self.auth.send_command_tcp()[1]["stats_data"]["auth.queries.tcp"]) == type(int()) )
- self.assertEqual(result_ok, self.session.get_message("Stats", None))
-
- # check counter value
- self.assertTrue(self.auth.send_command_udp()[1]["stats_data"]["auth.queries.udp"] == 1) # keeps 1
- self.assertEqual(result_ok, self.session.get_message("Stats", None))
- self.assertTrue(self.auth.send_command_tcp()[1]["stats_data"]["auth.queries.tcp"] == 4)
self.assertEqual(result_ok, self.session.get_message("Stats", None))
def tearDown(self):
self.session.close()
-def get_timestamp():
- """
- get current timestamp
- """
- return time.time()
+ def test_boss_stub(self):
+ """
+ Test for send_command of BossModuleStub object
+ """
+ env = self.env
+ result_ok = self.result_ok
+ self.assertEqual(('set', {"stats_data":
+ {"bind10.boot_time": get_datetime()}
+ }, env), self.boss.send_command())
+ self.assertEqual(result_ok, self.session.get_message("Stats", None))
+
+ def test_auth_stub(self):
+ """
+ Test for send_command of AuthModuleStub object
+ """
+ env = self.env
+ result_ok = self.result_ok
+ self.assertEqual(
+ ('increase', {"stats_data": {"auth.queries.udp": 1}}, env),
+ self.auth.send_command_udp())
+ self.assertEqual(result_ok, self.session.get_message("Stats", None))
+ self.assertEqual(
+ ('set', {"stats_data": {"auth.queries.tcp": 1}}, env),
+ self.auth.send_command_tcp())
+ self.assertEqual(result_ok, self.session.get_message("Stats", None))
+ self.assertEqual(
+ ('set', {"stats_data": {"auth.queries.udp": 100}}, env),
+ self.auth.send_command_udp(cmd='set', cnt=100))
+ self.assertEqual(result_ok, self.session.get_message("Stats", None))
+ self.assertEqual(
+ ('increase', {"stats_data": {"auth.queries.tcp": 99}}, env),
+ self.auth.send_command_tcp(cmd='increase', cnt=99))
+ self.assertEqual(result_ok, self.session.get_message("Stats", None))
def get_datetime():
"""
Modified: branches/trac191/src/bin/stats/tests/b10-stats_test.py
==============================================================================
--- branches/trac191/src/bin/stats/tests/b10-stats_test.py (original)
+++ branches/trac191/src/bin/stats/tests/b10-stats_test.py Mon Aug 9 12:49:07 2010
@@ -22,6 +22,7 @@
import os
import time
import unittest
+from isc.cc.session import SessionError
from isc.config.ccsession import ModuleCCSessionError
from unittest_fakesession import FakeModuleCCSession
from stats import SessionSubject, CCSessionListener
@@ -45,200 +46,475 @@
"stats.last_update_time": get_datetime()
}
+ try:
+ self.subject.start()
+ except ModuleCCSessionError:
+ pass
+ for i in (0, 1):
+ self.session.get_message("ConfigManager", None)
+
+ def tearDown(self):
+ self.session.close()
+
+ def test_local_func(self):
+ """
+ Test for local function
+
+ """
+ # test for result_ok
+ self.assertEqual(type(result_ok()), dict)
+ self.assertEqual(result_ok(), {'result': [0]})
+ self.assertEqual(result_ok(1), {'result': [1]})
+ self.assertEqual(result_ok(0,'OK'), {'result': [0, 'OK']})
+ self.assertEqual(result_ok(1,'Not good'), {'result': [1, 'Not good']})
+ self.assertEqual(result_ok(None,"It's None"), {'result': [None, "It's None"]})
+ self.assertNotEqual(result_ok(), {'RESULT': [0]})
+
+ # test for get_timestamp
+ self.assertEqual(type(get_timestamp()), float)
+ self.assertTrue(abs(get_timestamp() - time.time()) < 1.0)
+
+ # test for get_datetime
+ self.assertNotEqual(type(get_timestamp()), str)
+ self.assertEqual(get_datetime(), time.strftime("%Y-%m-%dT%H:%M:%SZ", time.gmtime()))
+
def test_start(self):
"""
- Test for stats
-
- """
- session = self.session
- subject = self.subject
- listener = self.listener
+ Test for start stats module
+
+ """
+ session = FakeModuleCCSession()
+ subject = SessionSubject(session=session, verbose=False)
+ listener = CCSessionListener(subject, verbose=False)
self.assertEqual(len(subject.session.message_queue), 0)
self.assertFalse(subject.running)
self.assertRaises(ModuleCCSessionError, subject.start)
self.assertTrue(subject.running)
- self.assertEqual(len(subject.session.message_queue), 2)
+ self.assertEqual(len(session.message_queue), 2)
self.assertEqual({"command": ["module_spec", listener.cc_session.specification._module_spec]},
- subject.session.get_message("ConfigManager", None))
+ session.get_message("ConfigManager", None))
self.assertEqual({"command": ["get_config", {"module_name": "Stats"}]},
- subject.session.get_message("ConfigManager", None))
- self.assertEqual(len(subject.session.message_queue), 0)
- session.group_sendmsg({'result': [ 0 ]}, "Stats")
- session.group_sendmsg({'result': [ 1, "just an error" ]}, "Stats")
- self.assertEqual(len(subject.session.message_queue), 2)
+ session.get_message("ConfigManager", None))
+ self.assertEqual(len(session.message_queue), 0)
+ session.group_sendmsg(result_ok(), "Stats")
+ session.group_sendmsg(result_ok(1, "just an error"), "Stats")
+ self.assertEqual(len(session.message_queue), 2)
self.assertTrue(subject.running)
subject.start()
self.assertTrue(subject.running)
- self.assertEqual(len(subject.session.message_queue), 2)
+ self.assertEqual(len(session.message_queue), 2)
self.assertEqual({"command": ["module_spec", listener.cc_session.specification._module_spec]},
- subject.session.get_message("ConfigManager", None))
+ session.get_message("ConfigManager", None))
self.assertEqual({"command": ["get_config", {"module_name": "Stats"}]},
- subject.session.get_message("ConfigManager", None))
- self.assertEqual(len(subject.session.message_queue), 0)
+ session.get_message("ConfigManager", None))
+ self.assertEqual(len(session.message_queue), 0)
subject.check()
self.assertTrue(subject.running)
- def test_commands(self):
- """
- Test for stats commands
-
- """
- session = self.session
- subject = self.subject
- stats_spec = self.stats_spec[:]
- stats_data = self.stats_data.copy()
-
- self.assertFalse(subject.running)
- self.assertRaises(ModuleCCSessionError, subject.start)
- self.assertTrue(subject.running)
- for i in (0, 1):
- subject.session.get_message("ConfigManager", None)
+ def test_stop(self):
+ """
+ Test for stop stats module
+
+ """
+ self.assertEqual(len(self.session.message_queue), 0)
+ self.assertTrue(self.subject.running)
+ self.subject.stop()
+ self.assertFalse(self.subject.running)
+ self.assertRaises(SessionError, self.subject.check)
+ self.assertRaises(SessionError, self.subject.start)
+
+ def test_show_command(self):
+ """
+ Test for show command
+
+ """
+ # test show command without arg
+ self.session.group_sendmsg({"command": [ "show", None ]}, "Stats")
+ self.assertEqual(len(self.session.message_queue), 1)
+ self.subject.check()
+ result_data = self.session.get_message("Stats", None)
+ # ignore under 0.9 seconds
+ result_data['result'][1]['stats.timestamp'] = float(int(result_data['result'][1]['stats.timestamp']))
+ self.assertEqual(result_ok(0, self.stats_data), result_data)
+ self.assertEqual(len(self.session.message_queue), 0)
+
+ # test show command with arg
+ self.session.group_sendmsg({"command": [ "show", {"stats_item_name": "stats.lname"}]}, "Stats")
+ self.assertEqual(len(self.subject.session.message_queue), 1)
+ self.subject.check()
+ result_data = self.subject.session.get_message("Stats", None)
+ self.assertEqual(result_ok(0, {'stats.lname': self.stats_data['stats.lname']}),
+ result_data)
+ self.assertEqual(len(self.subject.session.message_queue), 0)
+
+ # test show command with arg which has wrong name
+ self.session.group_sendmsg({"command": [ "show", {"stats_item_name": "stats.dummy"}]}, "Stats")
+ self.assertEqual(len(self.session.message_queue), 1)
+ self.subject.check()
+ result_data = self.session.get_message("Stats", None)
+ # ignore under 0.9 seconds
+ result_data['result'][1]['stats.timestamp'] = float(int(result_data['result'][1]['stats.timestamp']))
+ self.assertEqual(result_ok(0, self.stats_data), result_data)
+ self.assertEqual(len(self.session.message_queue), 0)
+
+ def test_set_command(self):
+ """
+ Test for set command
+
+ """
+ # test set command
+ self.stats_data['auth.queries.udp'] = 54321
+ self.session.group_sendmsg({ "command": [
+ "set", {
+ 'stats_data': {'auth.queries.udp': 54321 }
+ } ] },
+ "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)
# test show command
- session.group_sendmsg({"command": [ "show", None ]}, "Stats")
- self.assertEqual(len(subject.session.message_queue), 1)
- subject.check()
- result_data = subject.session.get_message("Stats", None)
- result_data['result'][1]['stats.timestamp'] = float(int(result_data['result'][1]['stats.timestamp']))
- self.assertEqual({ "result": [ 0, stats_data ]}, result_data)
- self.assertEqual(len(subject.session.message_queue), 0)
-
- # test show command with args
- session.group_sendmsg({"command": [ "show", {"stats_item_name": "stats.lname"}]}, "Stats")
- self.assertEqual(len(subject.session.message_queue), 1)
- subject.check()
- result_data = subject.session.get_message("Stats", None)
- self.assertEqual({ "result": [ 0, {'stats.lname': stats_data['stats.lname']} ]}, result_data)
- self.assertEqual(len(subject.session.message_queue), 0)
-
- # test show command with args which has no valid key name
- session.group_sendmsg({"command": [ "show", {"stats_item_name": "stats.dummy"}]}, "Stats")
- self.assertEqual(len(subject.session.message_queue), 1)
- subject.check()
- result_data = subject.session.get_message("Stats", None)
- result_data['result'][1]['stats.timestamp'] = float(int(result_data['result'][1]['stats.timestamp']))
- self.assertEqual({ "result": [ 0, stats_data ]}, result_data)
- self.assertEqual(len(subject.session.message_queue), 0)
-
+ self.session.group_sendmsg({"command": [ "show", None ]}, "Stats")
+ self.assertEqual(len(self.session.message_queue), 1)
+ self.subject.check()
+ result_data = self.session.get_message("Stats", None)
+ # ignore under 0.9 seconds
+ result_data['result'][1]['stats.timestamp'] = float(int(result_data['result'][1]['stats.timestamp']))
+ self.stats_data['report_time'] = get_datetime()
+ self.stats_data['stats.last_update_time'] = get_datetime()
+ self.stats_data['stats.timestamp'] = float(int(get_timestamp()))
+ self.assertEqual(result_ok(0, self.stats_data), result_data)
+ self.assertEqual(len(self.session.message_queue), 0)
+
+ # test set command 2
+ self.stats_data['auth.queries.udp'] = 0
+ self.session.group_sendmsg({ "command": [ "set", {'stats_data': {'auth.queries.udp': 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)
+
+ # test show command 2
+ self.session.group_sendmsg({"command": [ "show", None ]}, "Stats")
+ self.assertEqual(len(self.session.message_queue), 1)
+ self.subject.check()
+ result_data = self.session.get_message("Stats", None)
+ # ignore under 0.9 seconds
+ result_data['result'][1]['stats.timestamp'] = float(int(result_data['result'][1]['stats.timestamp']))
+ self.stats_data['report_time'] = get_datetime()
+ self.stats_data['stats.last_update_time'] = get_datetime()
+ self.stats_data['stats.timestamp'] = float(int(get_timestamp()))
+ self.assertEqual(result_ok(0, self.stats_data), result_data)
+ self.assertEqual(len(self.session.message_queue), 0)
+
+ def test_increase_command(self):
+ """
+ Test for increase command
+
+ """
+ # test increase command
+ self.stats_data['auth.queries.udp'] = self.stats_data['auth.queries.udp'] + int(1)
+ self.session.group_sendmsg({"command": [
+ "increase", {'stats_data': {'auth.queries.udp': int(1) }} ]},
+ "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)
+
+ # test show command
+ self.session.group_sendmsg({"command": [ "show", None ]}, "Stats")
+ self.assertEqual(len(self.session.message_queue), 1)
+ self.subject.check()
+ result_data = self.session.get_message("Stats", None)
+ result_data['result'][1]['stats.timestamp'] = float(int(result_data['result'][1]['stats.timestamp']))
+ self.stats_data['report_time'] = get_datetime()
+ self.stats_data['stats.last_update_time'] = get_datetime()
+ self.stats_data['stats.timestamp'] = float(int(get_timestamp()))
+ self.assertEqual(result_ok(0, self.stats_data), result_data)
+ self.assertEqual(len(self.session.message_queue), 0)
+
+ def test_remove_command(self):
+ """
+ Test for remove command
+
+ """
+ self.session.group_sendmsg({"command":
+ [ "remove", {"stats_item_name": 'bind10.boot_time' }]},
+ "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)
+ self.assertEqual(self.stats_data.pop('bind10.boot_time'), "1970-01-01T00:00:00Z")
+ self.assertFalse('bind10.boot_time' in self.stats_data)
+
+ # test show command with arg
+ self.session.group_sendmsg({"command":
+ [ "show", {"stats_item_name": 'bind10.boot_time'}]},
+ "Stats")
+ self.assertEqual(len(self.session.message_queue), 1)
+ self.subject.check()
+ result_data = self.session.get_message("Stats", None)
+ self.assertFalse('bind10.boot_time' in result_data['result'][1])
+ # ignore under 0.9 seconds
+ result_data['result'][1]['stats.timestamp'] = float(int(result_data['result'][1]['stats.timestamp']))
+ self.assertEqual(result_ok(0, self.stats_data), result_data)
+ self.assertEqual(len(self.session.message_queue), 0)
+
+ def test_reset_command(self):
+ """
+ Test for reset command
+
+ """
+ self.session.group_sendmsg({"command": [ "reset" ] }, "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)
+
+ # test show command
+ self.session.group_sendmsg({"command": [ "show" ]}, "Stats")
+ self.assertEqual(len(self.session.message_queue), 1)
+ self.subject.check()
+ result_data = self.session.get_message("Stats", None)
+ # ignore under 0.9 seconds
+ result_data['result'][1]['stats.timestamp'] = float(int(result_data['result'][1]['stats.timestamp']))
+ self.assertEqual(result_ok(0, self.stats_data), result_data)
+ self.assertEqual(len(self.session.message_queue), 0)
+
+ def test_status_command(self):
+ """
+ Test for status command
+
+ """
+ self.session.group_sendmsg({"command": [ "status" ] }, "Stats")
+ self.assertEqual(len(self.session.message_queue), 1)
+ self.subject.check()
+ self.assertEqual(result_ok(0, "I'm alive."),
+ self.session.get_message("Stats", None))
+ self.assertEqual(len(self.session.message_queue), 0)
+
+ def test_unknown_command(self):
+ """
+ Test for unknown command
+
+ """
+ self.session.group_sendmsg({"command": [ "hoge", None ]}, "Stats")
+ self.assertEqual(len(self.session.message_queue), 1)
+ self.subject.check()
+ self.assertEqual(result_ok(1, "Unknown command: 'hoge'"),
+ self.session.get_message("Stats", None))
+ self.assertEqual(len(self.session.message_queue), 0)
+
+ def test_shutdown_command(self):
+ """
+ Test for shutdown command
+
+ """
+ self.session.group_sendmsg({"command": [ "shutdown", None ]}, "Stats")
+ self.assertEqual(len(self.session.message_queue), 1)
+ self.assertTrue(self.subject.running)
+ self.subject.check()
+ self.assertFalse(self.subject.running)
+ self.assertEqual(result_ok(),
+ self.session.get_message("Stats", None))
+ self.assertEqual(len(self.session.message_queue), 0)
+
+
+ def test_some_commands(self):
+ """
+ Test for some commands in a row
+
+ """
# test set command
- stats_data['atest'] = float(1.0)
- session.group_sendmsg({"command": [ "set", {'stats_data': {'atest': stats_data['atest']}}]}, "Stats")
- self.assertEqual(len(subject.session.message_queue), 1)
- subject.check()
- self.assertEqual(result_ok(),
- subject.session.get_message("Stats", None))
- self.assertEqual(len(subject.session.message_queue), 0)
-
- # test show command
- session.group_sendmsg({"command": [ "show", None ]}, "Stats")
- self.assertEqual(len(subject.session.message_queue), 1)
- subject.check()
- result_data = subject.session.get_message("Stats", None)
- result_data['result'][1]['stats.timestamp'] = float(int(result_data['result'][1]['stats.timestamp']))
- stats_data['report_time'] = get_datetime()
- stats_data['stats.last_update_time'] = get_datetime()
- stats_data['stats.timestamp'] = float(int(get_timestamp()))
- self.assertEqual(result_ok(0, stats_data), result_data)
- self.assertEqual(len(subject.session.message_queue), 0)
+ self.stats_data['bind10.boot_time'] = '2010-08-02T14:47:56Z'
+ self.assertEqual(self.stats_data['bind10.boot_time'], '2010-08-02T14:47:56Z')
+ self.session.group_sendmsg({ "command": [
+ "set", {
+ 'stats_data': {'bind10.boot_time': '2010-08-02T14:47:56Z' }
+ }]},
+ "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': 'bind10.boot_time'
+ }
+ ]
+ }, "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, {'bind10.boot_time': '2010-08-02T14:47:56Z'}),
+ result_data)
+ self.assertEqual(result_ok(0, {'bind10.boot_time': self.stats_data['bind10.boot_time']}),
+ result_data)
+ self.assertEqual(len(self.session.message_queue), 0)
+
+ # test set command 2nd
+ self.stats_data['auth.queries.udp'] = 98765
+ self.assertEqual(self.stats_data['auth.queries.udp'], 98765)
+ self.session.group_sendmsg({ "command": [
+ "set", {
+ 'stats_data': {
+ 'auth.queries.udp':
+ self.stats_data['auth.queries.udp']
+ }
+ }
+ ]
+ }, "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': 'auth.queries.udp'}
+ ] }, "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, {'auth.queries.udp': 98765}),
+ result_data)
+ self.assertEqual(result_ok(0, {'auth.queries.udp': self.stats_data['auth.queries.udp']}),
+ result_data)
+ self.assertEqual(len(self.session.message_queue), 0)
# test increase command
- stats_data['atest'] = stats_data['atest'] + float(0.1)
- session.group_sendmsg({"command": [ "increase", {'stats_data': {'atest': float(0.1) }} ]}, "Stats")
- self.assertEqual(len(subject.session.message_queue), 1)
- subject.check()
- self.assertEqual(result_ok(),
- subject.session.get_message("Stats", None))
- self.assertEqual(len(subject.session.message_queue), 0)
-
- # test show command
- session.group_sendmsg({"command": [ "show", None ]}, "Stats")
- self.assertEqual(len(subject.session.message_queue), 1)
- subject.check()
- result_data = subject.session.get_message("Stats", None)
- result_data['result'][1]['stats.timestamp'] = float(int(result_data['result'][1]['stats.timestamp']))
- stats_data['report_time'] = get_datetime()
- stats_data['stats.last_update_time'] = get_datetime()
- stats_data['stats.timestamp'] = float(int(get_timestamp()))
- self.assertEqual({ "result": [ 0, stats_data ]}, result_data)
- self.assertEqual(len(subject.session.message_queue), 0)
-
- # test remove command with args
- stats_data.pop('atest')
- session.group_sendmsg({"command": [ "remove", {"stats_item_name": 'atest' }]}, "Stats")
- self.assertEqual(len(subject.session.message_queue), 1)
- subject.check()
- self.assertEqual(result_ok(),
- subject.session.get_message("Stats", None))
- self.assertEqual(len(subject.session.message_queue), 0)
-
- # test remove command with args which has no valid key name
- session.group_sendmsg({"command": [ "remove", {"stats_item_name": "stats.dummy"}]}, "Stats")
- self.assertEqual(len(subject.session.message_queue), 1)
- subject.check()
- self.assertEqual(result_ok(1,"''"),
- subject.session.get_message("Stats", None))
- self.assertEqual(len(subject.session.message_queue), 0)
-
- # test show command
- session.group_sendmsg({"command": [ "show", None ]}, "Stats")
- self.assertEqual(len(subject.session.message_queue), 1)
- subject.check()
- result_data = subject.session.get_message("Stats", None)
- result_data['result'][1]['stats.timestamp'] = float(int(result_data['result'][1]['stats.timestamp']))
- self.assertEqual({ "result": [ 0, stats_data ]}, result_data)
- self.assertEqual(len(subject.session.message_queue), 0)
-
- # test reset command
- stats_data = self.stats_data.copy()
- session.group_sendmsg({"command": [ "reset", None ]}, "Stats")
- self.assertEqual(len(subject.session.message_queue), 1)
- subject.check()
- self.assertEqual(result_ok(),
- subject.session.get_message("Stats", None))
- self.assertEqual(len(subject.session.message_queue), 0)
-
- # test show command
- session.group_sendmsg({"command": [ "show", None ]}, "Stats")
- self.assertEqual(len(subject.session.message_queue), 1)
- subject.check()
- result_data = subject.session.get_message("Stats", None)
- result_data['result'][1]['stats.timestamp'] = float(int(result_data['result'][1]['stats.timestamp']))
- stats_data['report_time'] = get_datetime()
- stats_data['stats.last_update_time'] = get_datetime()
- stats_data['stats.timestamp'] = float(int(get_timestamp()))
- stats_data['stats.start_time'] = get_datetime()
- self.assertEqual({ "result": [ 0, stats_data ]}, result_data)
- self.assertEqual(len(subject.session.message_queue), 0)
-
- # test status command
- session.group_sendmsg({"command": [ "status", None ]}, "Stats")
- self.assertEqual(len(subject.session.message_queue), 1)
- subject.check()
- self.assertEqual(result_ok(0, "I'm alive."),
- subject.session.get_message("Stats", None))
- self.assertEqual(len(subject.session.message_queue), 0)
-
- # test unknown command
- session.group_sendmsg({"command": [ "hoge", None ]}, "Stats")
- self.assertEqual(len(subject.session.message_queue), 1)
- subject.check()
- self.assertEqual(result_ok(1, "Unknown command: 'hoge'"),
- subject.session.get_message("Stats", None))
- self.assertEqual(len(subject.session.message_queue), 0)
-
- # test shutdown command
- session.group_sendmsg({"command": [ "shutdown", None ]}, "Stats")
- self.assertEqual(len(subject.session.message_queue), 1)
- self.assertTrue(subject.running)
- subject.check()
- self.assertFalse(subject.running)
- self.assertEqual(result_ok(),
- subject.session.get_message("Stats", None))
- self.assertEqual(len(subject.session.message_queue), 0)
-
- def tearDown(self):
- self.session.close()
+ self.assertEqual(self.stats_data['auth.queries.udp'], 98765)
+ self.stats_data['auth.queries.udp'] = 98766
+ self.assertEqual(self.stats_data['auth.queries.udp'], 98766)
+ self.session.group_sendmsg({"command": [
+ "increase",
+ {'stats_data': {'auth.queries.udp': 1 }} ]},
+ "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' : 'auth.queries.udp'} ]},
+ "Stats")
+ self.assertEqual(len(self.session.message_queue), 1)
+ self.subject.check()
+ result_data = self.session.get_message("Stats", None)
+ result_data = result_data['result'][1]
+ self.assertEqual(result_data['auth.queries.udp'], 98766)
+ self.assertEqual(self.stats_data['auth.queries.udp'], result_data['auth.queries.udp'])
+ self.assertEqual(len(self.session.message_queue), 0)
+ self.session.group_sendmsg({"command": [ "show", {'stats_item_name': 'auth.queries.udp'} ]},
+ "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, {'auth.queries.udp': 98766}),
+ result_data)
+ self.assertEqual(result_ok(0,
+ {'auth.queries.udp': self.stats_data['auth.queries.udp']}),
+ result_data)
+ self.assertEqual(len(self.session.message_queue), 0)
+
+ # test set command 3
+ self.stats_data['auth.queries.tcp'] = 4321
+ self.session.group_sendmsg({"command": [
+ "set",
+ {'stats_data': {'auth.queries.tcp': 4321 }} ]},
+ "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 value
+ self.session.group_sendmsg({"command": [ "show", {'stats_item_name': 'auth.queries.tcp'} ]},
+ "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, {'auth.queries.tcp': 4321}),
+ result_data)
+ self.assertEqual(result_ok(0, {'auth.queries.tcp': self.stats_data['auth.queries.tcp']}),
+ result_data)
+ self.assertEqual(len(self.session.message_queue), 0)
+
+ self.session.group_sendmsg({"command": [ "show", {'stats_item_name': 'auth.queries.udp'} ]},
+ "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, {'auth.queries.udp': 98766}),
+ result_data)
+ self.assertEqual(result_ok(0, {'auth.queries.udp': self.stats_data['auth.queries.udp']}),
+ result_data)
+ self.assertEqual(len(self.session.message_queue), 0)
+
+ # test increase command 2
+ self.assertEqual(self.stats_data['auth.queries.udp'], 98766)
+ self.stats_data['auth.queries.udp'] = 98776
+ self.assertEqual(self.stats_data['auth.queries.udp'], 98776)
+ self.session.group_sendmsg({"command": [
+ "increase", {'stats_data': {'auth.queries.udp': 10 }} ]},
+ "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 value
+ self.session.group_sendmsg({"command": [ "show", {'stats_item_name': 'auth.queries.udp'} ]},
+ "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, {'auth.queries.udp': 98776}),
+ result_data)
+ self.assertEqual(result_ok(0, {'auth.queries.udp': self.stats_data['auth.queries.udp']}),
+ result_data)
+ self.assertEqual(len(self.session.message_queue), 0)
+
+ # test set command 4
+ self.stats_data['auth.queries.tcp'] = 67890
+ self.session.group_sendmsg({"command": [
+ "set", {'stats_data': {'auth.queries.tcp': 67890 }} ]},
+ "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)
+
+ # test show command for all values
+ self.session.group_sendmsg({"command": [ "show", None ]}, "Stats")
+ self.assertEqual(len(self.session.message_queue), 1)
+ self.subject.check()
+ result_data = self.session.get_message("Stats", None)
+ # ignore under 0.9 seconds
+ result_data['result'][1]['stats.timestamp'] = float(int(result_data['result'][1]['stats.timestamp']))
+ self.stats_data['report_time'] = get_datetime()
+ self.stats_data['stats.last_update_time'] = get_datetime()
+ self.stats_data['stats.timestamp'] = float(int(get_timestamp()))
+ self.assertEqual(result_ok(0, self.stats_data), result_data)
+ self.assertEqual(len(self.session.message_queue), 0)
def result_ok(*args):
if args:
Modified: branches/trac191/src/bin/stats/tests/unittest_fakesession.py
==============================================================================
--- branches/trac191/src/bin/stats/tests/unittest_fakesession.py (original)
+++ branches/trac191/src/bin/stats/tests/unittest_fakesession.py Mon Aug 9 12:49:07 2010
@@ -2,6 +2,7 @@
__version__ = "$Revision$"
import os
+import select
from isc.cc.session import SessionError
#
@@ -13,7 +14,7 @@
# each entry is of the form [ channel, instance, message ]
self.message_queue = []
# set socket dummy data
- cmd = 'for i in 0 1 2 3 4 5 6 7 8 9; do echo testing...; sleep 0; done'
+ cmd = 'for i in 0 1 2 3 4 5 6 7 8 9; do echo testing...; done'
self._socket = os.popen(cmd, 'r')
# set lname
self.lname='123abc at xxxx'
@@ -64,5 +65,12 @@
def close(self):
# need to pass along somehow that this function has been called,
if not self._socket.closed:
- buf = self._socket.readlines()
- self._socket.close()
+ while True:
+ r, w, e = select.select([self._socket], [], [], None)
+ if (r, w, e) == ([self._socket], [], []):
+ line = self._socket.readline()
+ if not line:
+ break
+ continue
+ raise Exception('Unexpected return values from select():', r, w, e)
+ self._socket.close()
More information about the bind10-changes
mailing list