BIND 10 trac547, updated. e6fdd3e3e8b3d0a87987a2d7fbfa00ef4eeafbf3 [trac547] add make of spec files for testing
BIND 10 source code commits
bind10-changes at lists.isc.org
Fri Feb 25 13:48:55 UTC 2011
The branch, trac547 has been updated
via e6fdd3e3e8b3d0a87987a2d7fbfa00ef4eeafbf3 (commit)
via 717b65bcf2f316744f8286bf4ce00f868cb759ea (commit)
via 75f1ea8f6976567bea3380edb5346daec2028462 (commit)
via c6c1987ebcb891abb80fa12727f0c777e03100a1 (commit)
via c3a0421ea9f36d12c2e5dc10321eaabff2ded01d (commit)
via 9ea5ca1a0c1de5300a0866e460b0003ec5816069 (commit)
via 611e2d1e8ee4e35f2532d1825e5c3114fab1c68d (commit)
via 9c52945eeb0303e4ee48c21e14b2cdb79a8540e1 (commit)
via dce7c388a238821d375bc14b5a7fef2d8bbe00e9 (commit)
via 088594fbcbffae7103e0111ec51e14f5e013dd13 (commit)
via d45bbaae489c96037af440d54682dae42e427112 (commit)
via 94dd1f0734e3334f46f40deee18691b6794a8761 (commit)
via cc9e836e7f2ceffeabcdf758ab17e6816f5c6f74 (commit)
via 6fe1776d6627610d3a6029486c24f276a26f6843 (commit)
via 5589cee763995237682ab450d2335d98b4b84655 (commit)
via c974ea480a3e36e613401d30e97d0cbdd287c136 (commit)
via 7a318c93a384a8b287acfb5deb892f4b0252eb6a (commit)
via 5cd45d718c430b57e67ddd9b39ed04234ff6d49b (commit)
via 0cba8576c31c7dd2a1af5e1476a3027688e734f4 (commit)
via fba83e32680db4a9bada2c1c2bf71b551c3af407 (commit)
via ceaca3d6b584ac787d201f4af6b1c816a727df9f (commit)
via 3ba7ca9bcd750ea76b7d92b9bf9548ef91001439 (commit)
via 548f41ac07ad9b510b293bc275cd57765b425ac9 (commit)
via 483177a0cf86e1371185b3c8a48c323c17552366 (commit)
via 873cc1760c20ccd9d0aaa4543508a498beb03a8d (commit)
via f250f5a9ad8e0340620dc7557666a9c1061ae7dd (commit)
via 684c1f13fd36abfcae7ed940e65eec17f8f61fe1 (commit)
via 9a78b302bdfe3a022c13169bd9e1e4b6d95a45e5 (commit)
via fb80cfd2d9f0bbd8ad51d750191234ab00047e57 (commit)
via c9d972d03cb7df6895597c0f7d1f8b852dbf7dfd (commit)
via 558e07d6592192fa7c8010c3949b451a53e405f1 (commit)
via 38823b01bc6fda647476bbba26b508570627ea7d (commit)
via ec6b9cec0acb44368f6c85206e894063f906ebf3 (commit)
via 6b2fe393067e7bf74a50026f03cc257c187e408c (commit)
via de497179fb1d44e2f5a60334977d70445fd04640 (commit)
from 982bf48eb2831feaf2a8ed6ea25e100e8077af27 (commit)
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 e6fdd3e3e8b3d0a87987a2d7fbfa00ef4eeafbf3
Author: Naoki Kambe <kambe at jprs.co.jp>
Date: Fri Feb 25 22:48:41 2011 +0900
[trac547] add make of spec files for testing
commit 717b65bcf2f316744f8286bf4ce00f868cb759ea
Author: Naoki Kambe <kambe at jprs.co.jp>
Date: Fri Feb 25 22:48:02 2011 +0900
[trac547] move position of B10_FROM_BUILD
commit 75f1ea8f6976567bea3380edb5346daec2028462
Author: Naoki Kambe <kambe at jprs.co.jp>
Date: Fri Feb 25 22:47:42 2011 +0900
[trac547]
- add this year of copyright
- remove __version__
- change SPECFILE_LOCATION
commit c6c1987ebcb891abb80fa12727f0c777e03100a1
Author: Naoki Kambe <kambe at jprs.co.jp>
Date: Fri Feb 25 22:47:25 2011 +0900
[trac547] add imp.reload in order to avoid to B10_FROM_BUILD be changeed in other test case
commit c3a0421ea9f36d12c2e5dc10321eaabff2ded01d
Author: Naoki Kambe <kambe at jprs.co.jp>
Date: Fri Feb 25 22:45:06 2011 +0900
[trac547] fix environment variable B10_FROM_BUILD
commit 9ea5ca1a0c1de5300a0866e460b0003ec5816069
Author: Naoki Kambe <kambe at jprs.co.jp>
Date: Fri Feb 25 22:44:31 2011 +0900
[trac547] fix typo
commit 611e2d1e8ee4e35f2532d1825e5c3114fab1c68d
Author: Naoki Kambe <kambe at jprs.co.jp>
Date: Fri Feb 25 22:44:18 2011 +0900
[trac547]
- change SPECFILE_LOCATION
- remove unnecessary debug print
commit 9c52945eeb0303e4ee48c21e14b2cdb79a8540e1
Author: Naoki Kambe <kambe at jprs.co.jp>
Date: Fri Feb 25 22:43:47 2011 +0900
[trac547]
- add this year of copyright
- remove __version__
- change SPECFILE_LOCATION
commit dce7c388a238821d375bc14b5a7fef2d8bbe00e9
Author: Naoki Kambe <kambe at jprs.co.jp>
Date: Fri Feb 25 22:42:45 2011 +0900
[trac547] move position of B10_FROM_BUILD
commit 088594fbcbffae7103e0111ec51e14f5e013dd13
Author: Naoki Kambe <kambe at jprs.co.jp>
Date: Fri Feb 25 22:42:39 2011 +0900
[trac547] move position of B10_FROM_BUILD
commit d45bbaae489c96037af440d54682dae42e427112
Author: Naoki Kambe <kambe at jprs.co.jp>
Date: Fri Feb 25 22:41:59 2011 +0900
[trac547]
- remove xml filenames
- refactor Makefile.am
commit 94dd1f0734e3334f46f40deee18691b6794a8761
Author: Naoki Kambe <kambe at jprs.co.jp>
Date: Fri Feb 25 21:22:54 2011 +0900
[trac547] implement function get_value in dummy ConfigData class
commit cc9e836e7f2ceffeabcdf758ab17e6816f5c6f74
Author: Naoki Kambe <kambe at jprs.co.jp>
Date: Fri Feb 25 21:22:08 2011 +0900
[trac547] change name of member variable in dummuy socket class
commit 6fe1776d6627610d3a6029486c24f276a26f6843
Author: Naoki Kambe <kambe at jprs.co.jp>
Date: Fri Feb 25 21:21:33 2011 +0900
[trac547] fix wrong variable name of dummuy socket
commit 5589cee763995237682ab450d2335d98b4b84655
Author: Naoki Kambe <kambe at jprs.co.jp>
Date: Fri Feb 25 21:20:39 2011 +0900
[trac547] add configuration of spec filename and xml filenames
commit c974ea480a3e36e613401d30e97d0cbdd287c136
Author: Naoki Kambe <kambe at jprs.co.jp>
Date: Fri Feb 25 21:20:10 2011 +0900
[trac547] improve obtaining spec filename and xml filenames from configures in the specfile instead of global variables in this script
commit 7a318c93a384a8b287acfb5deb892f4b0252eb6a
Author: Naoki Kambe <kambe at jprs.co.jp>
Date: Fri Feb 25 11:57:38 2011 +0900
[trac547] make closed parameter hidden because original socket class doesn't have it
commit 5cd45d718c430b57e67ddd9b39ed04234ff6d49b
Author: Naoki Kambe <kambe at jprs.co.jp>
Date: Fri Feb 25 11:48:15 2011 +0900
[trac547] remove function get_socket() because original module doesn't have it
commit 0cba8576c31c7dd2a1af5e1476a3027688e734f4
Author: Naoki Kambe <kambe at jprs.co.jp>
Date: Fri Feb 25 09:57:47 2011 +0900
[trac547]
- improve overall unittest according to change of the target module stats_httpd.py
- improve coverage percent
commit fba83e32680db4a9bada2c1c2bf71b551c3af407
Author: Naoki Kambe <kambe at jprs.co.jp>
Date: Fri Feb 25 09:56:11 2011 +0900
[trac547]
- fix line feed code
- add variable of template
commit ceaca3d6b584ac787d201f4af6b1c816a727df9f
Author: Naoki Kambe <kambe at jprs.co.jp>
Date: Fri Feb 25 09:55:53 2011 +0900
[trac547]
- remove $Id$
- add variable of template
commit 3ba7ca9bcd750ea76b7d92b9bf9548ef91001439
Author: Naoki Kambe <kambe at jprs.co.jp>
Date: Fri Feb 25 09:55:09 2011 +0900
[trac547] fix line feed code
commit 548f41ac07ad9b510b293bc275cd57765b425ac9
Author: Naoki Kambe <kambe at jprs.co.jp>
Date: Fri Feb 25 09:54:13 2011 +0900
[trac547]
- improve overall structure about classes and functions
- add paths of xml templates
- change http handler according to its requests
- change having verbose variable
- add including external xml file as template with its maximum size
commit 483177a0cf86e1371185b3c8a48c323c17552366
Author: Naoki Kambe <kambe at jprs.co.jp>
Date: Fri Feb 25 09:45:44 2011 +0900
[trac547]
- rename dummy socket
- add dummy modules select and string
commit 873cc1760c20ccd9d0aaa4543508a498beb03a8d
Author: Naoki Kambe <kambe at jprs.co.jp>
Date: Fri Feb 25 09:44:47 2011 +0900
[trac547]
- rename dummy socket
- change condition that the session is open/closed
- add functions group_{subscribe,unsubscribe}
commit f250f5a9ad8e0340620dc7557666a9c1061ae7dd
Author: Naoki Kambe <kambe at jprs.co.jp>
Date: Fri Feb 25 09:40:03 2011 +0900
[trac547]
- rename dummy socket
- add handler instance as a member variable
- add some dummy function
commit 684c1f13fd36abfcae7ed940e65eec17f8f61fe1
Author: Naoki Kambe <kambe at jprs.co.jp>
Date: Fri Feb 25 08:54:14 2011 +0900
[trac547] rename from dummy_socket to sockect
commit 9a78b302bdfe3a022c13169bd9e1e4b6d95a45e5
Author: Naoki Kambe <kambe at jprs.co.jp>
Date: Fri Feb 25 08:53:37 2011 +0900
[trac547] add new dummy standard modules
commit fb80cfd2d9f0bbd8ad51d750191234ab00047e57
Author: Naoki Kambe <kambe at jprs.co.jp>
Date: Fri Feb 25 08:48:26 2011 +0900
[trac547]
- add called counter variable of dummy socket instance for unittest
- change type of return value of function fileno()
commit c9d972d03cb7df6895597c0f7d1f8b852dbf7dfd
Author: Naoki Kambe <kambe at jprs.co.jp>
Date: Wed Feb 23 15:41:40 2011 +0900
[trac547] add send_error for dummy
commit 558e07d6592192fa7c8010c3949b451a53e405f1
Author: Naoki Kambe <kambe at jprs.co.jp>
Date: Wed Feb 23 15:41:00 2011 +0900
[trac547]
- fix content-type name
- fix string encoding
- fix minor problem
commit 38823b01bc6fda647476bbba26b508570627ea7d
Author: Naoki Kambe <kambe at jprs.co.jp>
Date: Wed Feb 23 15:39:29 2011 +0900
[trac547] add xml templates
commit ec6b9cec0acb44368f6c85206e894063f906ebf3
Author: Naoki Kambe <kambe at jprs.co.jp>
Date: Wed Feb 23 09:49:46 2011 +0900
[trac547] add importing shutil
commit 6b2fe393067e7bf74a50026f03cc257c187e408c
Author: Naoki Kambe <kambe at jprs.co.jp>
Date: Wed Feb 23 09:23:29 2011 +0900
[trac547]
- add template files of xml, xsd and xsl
- add more implements for do_GET, do_HEAD
- add implement to gathering statistics data from remote stats module
- add minor changes
commit de497179fb1d44e2f5a60334977d70445fd04640
Author: Naoki Kambe <kambe at jprs.co.jp>
Date: Wed Feb 23 09:20:13 2011 +0900
[trac547] add template files of xml, xsd and xsl
-----------------------------------------------------------------------
Summary of changes:
src/bin/stats/Makefile.am | 9 +-
src/bin/stats/run_b10-stats-httpd.sh.in | 6 +-
src/bin/stats/run_b10-stats.sh.in | 6 +-
src/bin/stats/stats-httpd-xml.tpl | 66 +++---
src/bin/stats/stats-httpd-xsd.tpl | 2 +-
src/bin/stats/stats-httpd-xsl.tpl | 228 ++++++++--------
src/bin/stats/stats.py.in | 6 +-
src/bin/stats/stats_httpd.py.in | 300 ++++++++++++--------
src/bin/stats/stats_httpd.spec.pre.in | 51 ++++-
src/bin/stats/tests/Makefile.am | 6 +-
src/bin/stats/tests/b10-stats-httpd_test.py | 126 ++++++--
src/bin/stats/tests/b10-stats_test.py | 6 +-
src/bin/stats/tests/http/server.py | 20 +-
src/bin/stats/tests/isc/cc/session.py | 19 +-
src/bin/stats/tests/isc/config/ccsession.py | 37 +++
.../{run_b10-stats-httpd.sh.in => tests/select.py} | 37 ++-
src/bin/stats/tests/{dummy_socket.py => socket.py} | 7 +-
src/bin/stats/tests/stats_test.in | 6 +-
src/bin/stats/tests/{dummy_socket.py => string.py} | 16 +-
src/bin/stats/tests/testdata/Makefile.am | 11 +
20 files changed, 606 insertions(+), 359 deletions(-)
copy src/bin/stats/{run_b10-stats-httpd.sh.in => tests/select.py} (52%)
copy src/bin/stats/tests/{dummy_socket.py => socket.py} (89%)
rename src/bin/stats/tests/{dummy_socket.py => string.py} (80%)
-----------------------------------------------------------------------
diff --git a/src/bin/stats/Makefile.am b/src/bin/stats/Makefile.am
index 98bec0f..d0451b2 100644
--- a/src/bin/stats/Makefile.am
+++ b/src/bin/stats/Makefile.am
@@ -7,7 +7,8 @@ pkglibexec_SCRIPTS = b10-stats b10-stats-httpd
b10_statsdir = $(DESTDIR)$(pkgdatadir)
b10_stats_DATA = stats.spec stats_httpd.spec
-CLEANFILES = stats.spec b10-stats stats.pyc stats.spec b10-stats-httpd stats_httpd.pyc stats_httpd.spec
+CLEANFILES = b10-stats stats.pyc stats.spec
+CLEANFILES += b10-stats-httpd stats_httpd.pyc stats_httpd.spec
man_MANS = b10-stats.8 b10-stats-httpd.8
EXTRA_DIST = $(man_MANS) b10-stats.xml b10-stats-httpd.xml
@@ -26,17 +27,15 @@ stats.spec: stats.spec.pre
$(SED) -e "s|@@LOCALSTATEDIR@@|$(localstatedir)|" stats.spec.pre >$@
stats_httpd.spec: stats_httpd.spec.pre
- $(SED) -e "s|@@LOCALSTATEDIR@@|$(localstatedir)|" stats_httpd.spec.pre >$@
+ $(SED) -e "s|@@DATAROOTDIR@@|@datarootdir@|" stats_httpd.spec.pre >$@
# TODO: does this need $$(DESTDIR) also?
# this is done here since configure.ac AC_OUTPUT doesn't expand exec_prefix
b10-stats: stats.py
$(SED) -e "s|@@PYTHONPATH@@|@pyexecdir@|" \
- -e "s|@@LOCALSTATEDIR@@|$(localstatedir)|" \
-e "s|.*#@@REMOVED@@$$||" stats.py >$@
chmod a+x $@
b10-stats-httpd: stats_httpd.py
- $(SED) -e "s|@@PYTHONPATH@@|@pyexecdir@|" \
- -e "s|@@LOCALSTATEDIR@@|$(localstatedir)|" stats_httpd.py >$@
+ $(SED) -e "s|@@PYTHONPATH@@|@pyexecdir@|" stats_httpd.py >$@
chmod a+x $@
diff --git a/src/bin/stats/run_b10-stats-httpd.sh.in b/src/bin/stats/run_b10-stats-httpd.sh.in
index 273a96b..0c42dc8 100644
--- a/src/bin/stats/run_b10-stats-httpd.sh.in
+++ b/src/bin/stats/run_b10-stats-httpd.sh.in
@@ -24,10 +24,10 @@ export PYTHONPATH
BIND10_MSGQ_SOCKET_FILE=@abs_top_builddir@/msgq_socket
export BIND10_MSGQ_SOCKET_FILE
-B10_FROM_BUILD=@abs_top_builddir@
-export B10_FROM_BUILD
-
STATS_PATH=@abs_top_builddir@/src/bin/stats
+B10_FROM_BUILD=${STATS_PATH}
+export B10_FROM_BUILD
+
cd ${STATS_PATH}
exec ${PYTHON_EXEC} -O b10-stats-httpd "$@"
diff --git a/src/bin/stats/run_b10-stats.sh.in b/src/bin/stats/run_b10-stats.sh.in
index 65b9737..d41e8f0 100644
--- a/src/bin/stats/run_b10-stats.sh.in
+++ b/src/bin/stats/run_b10-stats.sh.in
@@ -24,10 +24,10 @@ export PYTHONPATH
BIND10_MSGQ_SOCKET_FILE=@abs_top_builddir@/msgq_socket
export BIND10_MSGQ_SOCKET_FILE
-B10_FROM_BUILD=@abs_top_builddir@
-export B10_FROM_BUILD
-
STATS_PATH=@abs_top_builddir@/src/bin/stats
+B10_FROM_BUILD=${STATS_PATH}
+export B10_FROM_BUILD
+
cd ${STATS_PATH}
exec ${PYTHON_EXEC} -O b10-stats "$@"
diff --git a/src/bin/stats/stats-httpd-xml.tpl b/src/bin/stats/stats-httpd-xml.tpl
index f9e6572..0826812 100644
--- a/src/bin/stats/stats-httpd-xml.tpl
+++ b/src/bin/stats/stats-httpd-xml.tpl
@@ -1,33 +1,33 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<?xml-stylesheet type="text/xsl" href="bind10-statistics.xsl"?>
-<!--
- - Copyright (C) 2011 Internet Systems Consortium, Inc. ("ISC")
- -
- - Permission to use, copy, modify, and/or distribute this software for any
- - purpose with or without fee is hereby granted, provided that the above
- - copyright notice and this permission notice appear in all copies.
- -
- - THE SOFTWARE IS PROVIDED "AS IS" AND ISC DISCLAIMS ALL WARRANTIES WITH
- - REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
- - AND FITNESS. IN NO EVENT SHALL ISC BE LIABLE FOR ANY SPECIAL, DIRECT,
- - INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
- - LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE
- - OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
- - PERFORMANCE OF THIS SOFTWARE.
--->
-
-<!-- $Id$ -->
-<stats:stats_data version="1.0"
- xmlns:stats="http://bind10.isc.org/xsd/bind10-statistics"
- xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xsi:schemaLocation="http://bind10.isc.org/xsd/bind10-statistics bind10-statistics.xsd">
- <report_time>2011-01-25T11:47:56Z</report_time>
- <bind10.boot_time>2011-01-25T11:47:45Z</bind10.boot_time>
- <stats.boot_time>2011-01-25T11:47:45Z</stats.boot_time>
- <stats.start_time>2011-01-25T11:47:47Z</stats.start_time>
- <stats.last_update_time>2011-01-25T11:47:56Z</stats.last_update_time>
- <stats.timestamp>1295956076.705266</stats.timestamp>
- <stats.lname>4d3eb863_d at covm</stats.lname>
- <auth.queries.tcp>123</auth.queries.tcp>
- <auth.queries.ucp>456</auth.queries.ucp>
-</stats:stats_data>
+<?xml version="1.0" encoding="UTF-8"?>
+<?xml-stylesheet type="text/xsl" href="bind10-statistics.xsl"?>
+<!--
+ - Copyright (C) 2011 Internet Systems Consortium, Inc. ("ISC")
+ -
+ - Permission to use, copy, modify, and/or distribute this software for any
+ - purpose with or without fee is hereby granted, provided that the above
+ - copyright notice and this permission notice appear in all copies.
+ -
+ - THE SOFTWARE IS PROVIDED "AS IS" AND ISC DISCLAIMS ALL WARRANTIES WITH
+ - REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
+ - AND FITNESS. IN NO EVENT SHALL ISC BE LIABLE FOR ANY SPECIAL, DIRECT,
+ - INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
+ - LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE
+ - OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+ - PERFORMANCE OF THIS SOFTWARE.
+-->
+
+<stats:stats_data version="1.0"
+ xmlns:stats="http://bind10.isc.org/xsd/bind10-statistics"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://bind10.isc.org/xsd/bind10-statistics bind10-statistics.xsd">
+ <report_time>2011-01-25T11:47:56Z</report_time>
+ <bind10.boot_time>2011-01-25T11:47:45Z</bind10.boot_time>
+ <stats.boot_time>2011-01-25T11:47:45Z</stats.boot_time>
+ <stats.start_time>2011-01-25T11:47:47Z</stats.start_time>
+ <stats.last_update_time>2011-01-25T11:47:56Z</stats.last_update_time>
+ <stats.timestamp>1295956076.705266</stats.timestamp>
+ <stats.lname>4d3eb863_d at covm</stats.lname>
+ <auth.queries.tcp>123</auth.queries.tcp>
+ <auth.queries.ucp>456</auth.queries.ucp>
+</stats:stats_data>
+$xml_contents
\ No newline at end of file
diff --git a/src/bin/stats/stats-httpd-xsd.tpl b/src/bin/stats/stats-httpd-xsd.tpl
index 774785e..baaaa5f 100644
--- a/src/bin/stats/stats-httpd-xsd.tpl
+++ b/src/bin/stats/stats-httpd-xsd.tpl
@@ -15,7 +15,6 @@
- PERFORMANCE OF THIS SOFTWARE.
-->
-<!-- $Id$ -->
<schema targetNamespace="http://bind10.isc.org/xsd/bind10-statistics"
xmlns="http://www.w3.org/2001/XMLSchema"
xmlns:stats="http://bind10.isc.org/xsd/bind10-statistics">
@@ -114,3 +113,4 @@
</complexType>
</element>
</schema>
+$xsd_contents
\ No newline at end of file
diff --git a/src/bin/stats/stats-httpd-xsl.tpl b/src/bin/stats/stats-httpd-xsl.tpl
index 1e4f9af..54e01ae 100644
--- a/src/bin/stats/stats-httpd-xsl.tpl
+++ b/src/bin/stats/stats-httpd-xsl.tpl
@@ -1,114 +1,114 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
- - Copyright (C) 2011 Internet Systems Consortium, Inc. ("ISC")
- -
- - Permission to use, copy, modify, and/or distribute this software for any
- - purpose with or without fee is hereby granted, provided that the above
- - copyright notice and this permission notice appear in all copies.
- -
- - THE SOFTWARE IS PROVIDED "AS IS" AND ISC DISCLAIMS ALL WARRANTIES WITH
- - REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
- - AND FITNESS. IN NO EVENT SHALL ISC BE LIABLE FOR ANY SPECIAL, DIRECT,
- - INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
- - LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE
- - OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
- - PERFORMANCE OF THIS SOFTWARE.
--->
-
-<!-- $Id$ -->
-<xsl:stylesheet version="1.0"
- xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns="http://www.w3.org/1999/xhtml"
- xmlns:stats="http://bind10.isc.org/xsd/bind10-statistics">
- <xsl:output method="html" encoding="UTF-8"
- doctype-public="-//W3C//DTD HTML 4.01 Transitional//EN"
- doctype-system=" http://www.w3.org/TR/html4/loose.dtd " />
- <xsl:template match="/">
- <html lang="en">
- <head>
- <title>BIND 10 Statistics</title>
- <style type="text/css"><![CDATA[
-table {
- border: 1px #000000 solid;
- border-collapse: collapse;
-}
-td, th {
- padding: 3px 20px;
- border: 1px #000000 solid;
-}
-]]>
- </style>
- </head>
- <body>
- <h1>BIND 10 Statistics</h1>
- <table>
- <tr>
- <th>Title</th>
- <th>Value</th>
- </tr>
- <xsl:apply-templates />
- </table>
- </body>
- </html>
- </xsl:template>
- <xsl:template match="*">
- <tr>
- <td title="A date time when stats module reports">Report time</td>
- <td>
- <xsl:value-of select="report_time" />
- </td>
- </tr>
- <tr>
- <td title="A date time when bind10 process starts initially">stats.BootTime</td>
- <td>
- <xsl:value-of select="bind10.boot_time" />
- </td>
- </tr>
- <tr>
- <td
- title="A date time when the stats module starts initially or when the stats module restarts">stats.BootTime</td>
- <td>
- <xsl:value-of select="stats.boot_time" />
- </td>
- </tr>
- <tr>
- <td
- title="A date time when the stats module starts collecting data or resetting values last time">stats.StartTime</td>
- <td>
- <xsl:value-of select="stats.start_time" />
- </td>
- </tr>
- <tr>
- <td
- title="The latest date time when the stats module receives from other modules like auth server or boss process and so on">stats.LastUpdateTime</td>
- <td>
- <xsl:value-of select="stats.last_update_time" />
- </td>
- </tr>
- <tr>
- <td title="A current time stamp since epoch time (1970-01-01T00:00:00Z)">stats.Timestamp</td>
- <td>
- <xsl:value-of select="stats.timestamp" />
- </td>
- </tr>
- <tr>
- <td title="A localname of stats module given via CC protocol">stats.LocalName</td>
- <td>
- <xsl:value-of select="stats.lname" />
- </td>
- </tr>
- <tr>
- <td
- title="A number of total query counts which all auth servers receive over TCP since they started initially">auth.queries.tcp</td>
- <td>
- <xsl:value-of select="auth.queries.tcp" />
- </td>
- </tr>
- <tr>
- <td
- title="A number of total query counts which all auth servers receive over UDP since they started initially">auth.queries.udp</td>
- <td>
- <xsl:value-of select="auth.queries.ucp" />
- </td>
- </tr>
- </xsl:template>
-</xsl:stylesheet>
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ - Copyright (C) 2011 Internet Systems Consortium, Inc. ("ISC")
+ -
+ - Permission to use, copy, modify, and/or distribute this software for any
+ - purpose with or without fee is hereby granted, provided that the above
+ - copyright notice and this permission notice appear in all copies.
+ -
+ - THE SOFTWARE IS PROVIDED "AS IS" AND ISC DISCLAIMS ALL WARRANTIES WITH
+ - REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
+ - AND FITNESS. IN NO EVENT SHALL ISC BE LIABLE FOR ANY SPECIAL, DIRECT,
+ - INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
+ - LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE
+ - OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+ - PERFORMANCE OF THIS SOFTWARE.
+-->
+
+<xsl:stylesheet version="1.0"
+ xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns="http://www.w3.org/1999/xhtml"
+ xmlns:stats="http://bind10.isc.org/xsd/bind10-statistics">
+ <xsl:output method="html" encoding="UTF-8"
+ doctype-public="-//W3C//DTD HTML 4.01 Transitional//EN"
+ doctype-system=" http://www.w3.org/TR/html4/loose.dtd " />
+ <xsl:template match="/">
+ <html lang="en">
+ <head>
+ <title>BIND 10 Statistics</title>
+ <style type="text/css"><![CDATA[
+table {
+ border: 1px #000000 solid;
+ border-collapse: collapse;
+}
+td, th {
+ padding: 3px 20px;
+ border: 1px #000000 solid;
+}
+]]>
+ </style>
+ </head>
+ <body>
+ <h1>BIND 10 Statistics</h1>
+ <table>
+ <tr>
+ <th>Title</th>
+ <th>Value</th>
+ </tr>
+ <xsl:apply-templates />
+ </table>
+ </body>
+ </html>
+ </xsl:template>
+ <xsl:template match="*">
+ <tr>
+ <td title="A date time when stats module reports">Report time</td>
+ <td>
+ <xsl:value-of select="report_time" />
+ </td>
+ </tr>
+ <tr>
+ <td title="A date time when bind10 process starts initially">stats.BootTime</td>
+ <td>
+ <xsl:value-of select="bind10.boot_time" />
+ </td>
+ </tr>
+ <tr>
+ <td
+ title="A date time when the stats module starts initially or when the stats module restarts">stats.BootTime</td>
+ <td>
+ <xsl:value-of select="stats.boot_time" />
+ </td>
+ </tr>
+ <tr>
+ <td
+ title="A date time when the stats module starts collecting data or resetting values last time">stats.StartTime</td>
+ <td>
+ <xsl:value-of select="stats.start_time" />
+ </td>
+ </tr>
+ <tr>
+ <td
+ title="The latest date time when the stats module receives from other modules like auth server or boss process and so on">stats.LastUpdateTime</td>
+ <td>
+ <xsl:value-of select="stats.last_update_time" />
+ </td>
+ </tr>
+ <tr>
+ <td title="A current time stamp since epoch time (1970-01-01T00:00:00Z)">stats.Timestamp</td>
+ <td>
+ <xsl:value-of select="stats.timestamp" />
+ </td>
+ </tr>
+ <tr>
+ <td title="A localname of stats module given via CC protocol">stats.LocalName</td>
+ <td>
+ <xsl:value-of select="stats.lname" />
+ </td>
+ </tr>
+ <tr>
+ <td
+ title="A number of total query counts which all auth servers receive over TCP since they started initially">auth.queries.tcp</td>
+ <td>
+ <xsl:value-of select="auth.queries.tcp" />
+ </td>
+ </tr>
+ <tr>
+ <td
+ title="A number of total query counts which all auth servers receive over UDP since they started initially">auth.queries.udp</td>
+ <td>
+ <xsl:value-of select="auth.queries.ucp" />
+ </td>
+ </tr>
+ </xsl:template>
+</xsl:stylesheet>
+$xsl_contents
\ No newline at end of file
diff --git a/src/bin/stats/stats.py.in b/src/bin/stats/stats.py.in
index 15e2980..5362796 100755
--- a/src/bin/stats/stats.py.in
+++ b/src/bin/stats/stats.py.in
@@ -1,6 +1,6 @@
#!@PYTHON@
-# Copyright (C) 2010 Internet Systems Consortium.
+# Copyright (C) 2010, 2011 Internet Systems Consortium.
#
# Permission to use, copy, modify, and distribute this software for any
# purpose with or without fee is hereby granted, provided that the above
@@ -15,8 +15,6 @@
# NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION
# WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
-__version__ = "$Revision$"
-
import sys; sys.path.append ('@@PYTHONPATH@@')
import os
import signal
@@ -41,7 +39,7 @@ isc.util.process.rename()
# from a directory relative to that, otherwise we use the ones
# installed on the system
if "B10_FROM_BUILD" in os.environ:
- SPECFILE_LOCATION = os.environ["B10_FROM_BUILD"] + "/src/bin/stats/stats.spec"
+ SPECFILE_LOCATION = os.environ["B10_FROM_BUILD"] + "/stats.spec"
else:
PREFIX = "@prefix@"
DATAROOTDIR = "@datarootdir@"
diff --git a/src/bin/stats/stats_httpd.py.in b/src/bin/stats/stats_httpd.py.in
index fce41ae..12ebfe4 100644
--- a/src/bin/stats/stats_httpd.py.in
+++ b/src/bin/stats/stats_httpd.py.in
@@ -22,36 +22,151 @@ import errno
import select
from optparse import OptionParser, OptionValueError
import http.server
+import string
import isc.cc
import isc.config
import isc.util.process
-# If B10_FROM_SOURCE is set in the environment, we use data files
+# If B10_FROM_BUILD is set in the environment, we use data files
# from a directory relative to that, otherwise we use the ones
# installed on the system
if "B10_FROM_BUILD" in os.environ:
- SPECFILE_LOCATION = os.environ["B10_FROM_BUILD"] + "/src/bin/stats/stats_httpd.spec"
+ SPECFILE_LOCATION = os.environ["B10_FROM_BUILD"] + "/stats_httpd.spec"
else:
PREFIX = "@prefix@"
DATAROOTDIR = "@datarootdir@"
- SPECFILE_LOCATION = "@datadir@/@PACKAGE@/stats_httpd.spec".replace(
- "${datarootdir}", DATAROOTDIR).replace("${prefix}", PREFIX)
+ SPECFILE_LOCATION = "@datadir@/@PACKAGE@/stats_httpd.spec".replace("${datarootdir}", DATAROOTDIR).replace("${prefix}", PREFIX)
+
+MAX_SIZE_OF_TEMPLATE = 102400 # under 100k
# Assign this process name
isc.util.process.rename()
-IS_VERBOSE = True
+class HttpHandler(http.server.BaseHTTPRequestHandler):
+ """
+ HTTP handler class
+ """
+ def do_GET(self):
+ self.wfile.write(self.send_head().encode())
+
+ def do_HEAD(self):
+ self.send_head()
+
+ def send_head(self):
+ contents = ''
+ if self.path == '/':
+ contents = self.server.stats_httpd.get_stats_xml()
+ elif self.path == '/bind10-statistics.xsd':
+ contents = self.server.stats_httpd.get_stats_xsd()
+ elif self.path == '/bind10-statistics.xsl':
+ contents = self.server.stats_httpd.get_stats_xsl()
+ else:
+ contents = str(self.server.stats_httpd.get_stats_spec())
+ contents = contents + str(self.server.stats_httpd.get_stats_data())
+
+ if contents is None:
+ self.send_error(500, 'Internal Server Error')
+ return ""
+
+ self.send_response(200)
+ self.send_header("Content-type", "text/plain")
+ self.send_header("Content-Length", len(contents))
+ self.end_headers()
+ return contents
+
+ def log_message(self, format, *args):
+ """
+ Change default log format
+ """
+ if self.server.verbose:
+ sys.stderr.write("[b10-stats-httpd] %s - - [%s] %s\n" %
+ (self.address_string(),
+ self.log_date_time_string(),
+ format%args))
-class CCSessionListener():
+class HttpServer(http.server.HTTPServer):
"""
+ HTTP Server class
"""
- def __init__(self):
- # start ccsession
- self.ccs = isc.config.ModuleCCSession(SPECFILE_LOCATION,
- self.config_handler, self.command_handler)
- self.ccs.start()
+ def __init__(self, handler, stats_httpd, verbose=False):
+ self.verbose = verbose
+ self.stats_httpd = stats_httpd
+ http.server.HTTPServer.__init__(
+ self,
+ (self.stats_httpd.http_addr, self.stats_httpd.http_port),
+ handler)
+
+class StatsHttpd:
+ """
+ """
+ def __init__(self, verbose=False):
+ self.verbose = verbose
+ self.running = False
+ # create ccsession
+ self.load_config()
+ self.open_httpd()
+ self.poll_intval = 0.5
+
+ def load_config(self):
+ self.ccs = isc.config.ModuleCCSession(
+ SPECFILE_LOCATION, self.config_handler, self.command_handler)
+ self.ccs_fd = self.ccs.get_socket()
+ self.cc_session = self.ccs._session
+ self.http_addr = self.ccs.get_value('listen_on_address')[0]
+ self.http_port = self.ccs.get_value('listen_on_port')[0]
+ self.xml_template = self.read_template(self.ccs.get_value('xml_template')[0])
+ self.xsd_template = self.read_template(self.ccs.get_value('xsd_template')[0])
+ self.xsl_template = self.read_template(self.ccs.get_value('xsl_template')[0])
+ self.stats_module_spec = isc.config.module_spec_from_file(
+ self.ccs.get_value('stats_spec_file')[0])
+ self.stats_config_spec = self.stats_module_spec.get_config_spec()
+ self.stats_module_name = self.stats_module_spec.get_module_name()
+
+ def open_httpd(self):
+ self.httpd = HttpServer(HttpHandler, self, self.verbose)
+ self.http_fd = self.httpd.socket
+
+ def close_httpd(self):
+ self.http_fd.close()
+
+ def start(self):
+ if self.verbose:
+ sys.stderr.write(
+ "[b10-stats-httpd] Started on address "
+ + str(self.http_addr)
+ + ", port " + str(self.http_port) + "\n")
self.running = True
+ self.ccs.start()
+ self.cc_session.group_subscribe(self.stats_module_name, "*")
+ while self.running:
+ try:
+ (rfd, wfd, xfd) = select.select(
+ [self.ccs_fd, self.http_fd], [], [], self.poll_intval)
+ except select.error as err:
+ if err.args[0] == errno.EINTR:
+ (rfd, wfd, xfd) = ([], [], [])
+ else:
+ sys.stderr.write(
+ "[b10-stats-httpd] Unexpected error with select(); %s\n" % err)
+ break
+ for fd in rfd + xfd:
+ if fd == self.ccs_fd:
+ self.ccs.check_command(nonblock=False)
+ elif fd == self.http_fd:
+ self.httpd.handle_request()
+ self.stop()
+
+ def stop(self):
+ if self.verbose:
+ sys.stdout.write("[b10-stats-httpd] shutting down\n")
+ self.running = False
+ self.cc_session.group_unsubscribe(self.stats_module_name, "*")
+ self.close_httpd()
+ self.cc_session.close()
+
+ def __del__(self):
+ self.stop()
def config_handler(self, new_config):
"""
@@ -63,129 +178,88 @@ class CCSessionListener():
"""
command handler
"""
- global IS_VERBOSE
if command == "status":
- if IS_VERBOSE:
+ if self.verbose:
sys.stdout.write("[b10-stats-httpd] Received 'status' command\n")
return isc.config.ccsession.create_answer(
- 0, "Stats Httpd is alive. (PID: " + str(os.getpid()) + ")")
+ 0, "Stats Httpd is up. (PID " + str(os.getpid()) + ")")
elif command == "shutdown":
- if IS_VERBOSE:
+ if self.verbose:
sys.stdout.write("[b10-stats-httpd] Received 'shutdown' command\n")
self.running = False
return isc.config.ccsession.create_answer(0)
else:
- if IS_VERBOSE:
+ if self.verbose:
sys.stdout.write("[b10-stats-httpd] Received unknown command\n")
- return isc.config.ccsession.create_answer(1, "Unknown command: " + str(command))
-
- def get_spec(self):
- """
- return spec data
- """
- pass
-
- def get_socket(self):
- """
- return socket object
- """
- return self.ccs.get_socket()
+ return isc.config.ccsession.create_answer(
+ 1, "Unknown command: " + str(command))
- def check_command(self):
- """
- return socket object
- """
- return self.ccs.check_command()
+ def get_stats_data(self):
+ seq = self.cc_session.group_sendmsg(
+ isc.config.ccsession.create_command('show'),
+ self.stats_module_name)
+ try:
+ answer, env = self.cc_session.group_recvmsg(False, seq)
+ except isc.cc.SessionTimeout:
+ sys.stderr.write("[b10-stats] Error Session timed out\n")
+ return
+ if answer:
+ (rcode, value) = isc.config.ccsession.parse_answer(answer)
+ self.cc_session.group_reply(
+ env, isc.config.ccsession.create_answer(0))
+ return (rcode, value)
- def close(self):
+ def get_stats_spec(self):
"""
- close cc session
+ return spec data
"""
- self.ccs.close()
- self.running = False
-
-class HttpHandler(http.server.BaseHTTPRequestHandler):
- """
- HTTP handler class
- """
- def do_GET(self):
- if self.path:
- self.send_response(code=200)
- self.send_header("Content-type", "text/html")
- self.end_headers()
- self.wfile.write(b"<html>This is an example.\n</html>")
-
-class HttpListener:
- """
- HTTP Listener class
- """
-
- def __init__(self, httpd_spec=None, handler=None):
- self.address = ''
- self.port = 8000
- self.httpd = http.server.HTTPServer((self.address, self.port), handler)
-
- def get_address(self):
- return (self.address, self.port)
-
- def get_socket(self):
- return self.httpd.socket
+ return self.stats_config_spec
- def handle_request(self):
- return self.httpd.handle_request()
+ def get_stats_xml(self):
+ xml_contents = ''
+ if self.xml_template is None:
+ return None
+ return self.xml_template.substitute(
+ xml_contents=xml_contents)
- def close(self):
- return self.get_socket().close()
-
-def main():
- global IS_VERBOSE
- try:
- parser = OptionParser()
- parser.add_option("-v", "--verbose", dest="verbose", action="store_true", help="display more about what is going on")
- (options, args) = parser.parse_args()
- if options.verbose != IS_VERBOSE:
- IS_VERBOSE = options.verbose
- except OptionValueError:
- sys.stderr.write("[b10-stats] Error parsing options\n")
- sys.exit(1)
+ def get_stats_xsd(self):
+ xsd_contents = ''
+ if self.xsd_template is None:
+ return None
+ return self.xsd_template.substitute(
+ xsd_contents=xsd_contents)
- ccs_lsnr = CCSessionListener()
- http_lsnr = HttpListener(httpd_spec=ccs_lsnr.get_spec(), handler=HttpHandler)
- css_fd = ccs_lsnr.get_socket()
- ht_fd = http_lsnr.get_socket()
+ def get_stats_xsl(self):
+ xsl_contents = ''
+ if self.xsl_template is None:
+ return None
+ return self.xsl_template.substitute(
+ xsl_contents=xsl_contents)
- running = True
- poll_intval = 0.5
- while running:
+ def read_template(self, file_name):
try:
- (rfd, wfd, xfd) = select.select([css_fd,ht_fd], [], [], poll_intval)
- if (rfd, wfd, xfd) == ([], [], []):
- continue
- except select.error as err:
- if err.args[0] == errno.EINTR:
- (rfd, wfd, xfd) = ([], [], [])
- else:
- sys.stderr.write("[b10-stats-httpd] Error with select(); %s\n" % err)
- break
- for fd in rfd + xfd:
- if fd == css_fd:
- ccs_lsnr.check_command()
- running = ccs_lsnr.running
- elif fd == ht_fd:
- http_lsnr.handle_request()
- else:
- sys.stderr.write("[b10-stats-httpd] Unexpected Error with select();\n")
- running = False
-
- running = False
- ccs_lsnr.stop()
- http_lsnr.stop()
+ contents = "".join(
+ open(file_name, 'r').readlines(MAX_SIZE_OF_TEMPLATE))
+ except IOError as err:
+ sys.stderr.write(
+ "[b10-stats-httpd] Unexpected Error with opening file; %s\n" % err)
+ return None
+ return string.Template(contents)
if __name__ == "__main__":
try:
- main()
+ parser = OptionParser()
+ parser.add_option(
+ "-v", "--verbose", dest="verbose", action="store_true",
+ help="display more about what is going on")
+ (options, args) = parser.parse_args()
+ stats_httpd = StatsHttpd(verbose=options.verbose)
+ stats_httpd.start()
+ except KeyboardInterrupt as kie:
+ sys.stderr.write("[b10-stats-httpd] Interrupted, exiting\n")
+ stats_httpd.close()
except isc.cc.session.SessionError as se:
sys.stderr.write("[b10-stats-httpd] Error creating module, "
+ "is the command channel daemon running?\n")
- except KeyboardInterrupt as kie:
- sys.stderr.write("[b10-stats-httpd] Interrupted, exiting\n")
+ except OptionValueError:
+ sys.stderr.write("[b10-stats-httpd] Error parsing options\n")
diff --git a/src/bin/stats/stats_httpd.spec.pre.in b/src/bin/stats/stats_httpd.spec.pre.in
index edefb70..25eb7c1 100644
--- a/src/bin/stats/stats_httpd.spec.pre.in
+++ b/src/bin/stats/stats_httpd.spec.pre.in
@@ -2,7 +2,56 @@
"module_spec": {
"module_name": "StatsHttpd",
"module_description": "Stats HTTP daemon",
- "config_data": [],
+ "config_data": [
+ {
+ "item_name": "stats_spec_file",
+ "item_type": "string",
+ "item_optional": false,
+ "item_default": "@@DATAROOTDIR@@/@PACKAGE@/stats.spec",
+ "item_description": "the location of stats.spec",
+ "item_format": "filename"
+ },
+ {
+ "item_name": "xml_template",
+ "item_type": "string",
+ "item_optional": false,
+ "item_default": "@@DATAROOTDIR@@/@PACKAGE@/stats-httpd-xml.tpl",
+ "item_description": "the location of xml template",
+ "item_format": "filename"
+ },
+ {
+ "item_name": "xsd_template",
+ "item_type": "string",
+ "item_optional": false,
+ "item_default": "@@DATAROOTDIR@@/@PACKAGE@/stats-httpd-xsd.tpl",
+ "item_description": "the location of xsd template",
+ "item_format": "filename"
+ },
+ {
+ "item_name": "xsl_template",
+ "item_type": "string",
+ "item_optional": false,
+ "item_default": "@@DATAROOTDIR@@/@PACKAGE@/stats-httpd-xsl.tpl",
+ "item_description": "the location of xsl template",
+ "item_format": "filename"
+ },
+ {
+ "item_name": "listen_on_address",
+ "item_type": "string",
+ "item_optional": true,
+ "item_default": "127.0.0.1",
+ "item_description": "http listen-on address",
+ "item_format": "address"
+ },
+ {
+ "item_name": "listen_on_port",
+ "item_type": "integer",
+ "item_optional": false,
+ "item_default": 8000,
+ "item_description": "http listen-on port",
+ "item_format": "port"
+ }
+ ],
"commands": [
{
"command_name": "status",
diff --git a/src/bin/stats/tests/Makefile.am b/src/bin/stats/tests/Makefile.am
index 0bcc653..070ba45 100644
--- a/src/bin/stats/tests/Makefile.am
+++ b/src/bin/stats/tests/Makefile.am
@@ -1,8 +1,8 @@
SUBDIRS = isc http testdata
PYCOVERAGE_RUN = @PYCOVERAGE_RUN@
PYTESTS = b10-stats_test.py b10-stats-httpd_test.py
-EXTRA_DIST = $(PYTESTS) fake_time.py dummy_socket.py
-CLEANFILES = fake_time.pyc dummy_socket.pyc
+EXTRA_DIST = $(PYTESTS) fake_time.py socket.py select.py string.py
+CLEANFILES = fake_time.pyc socket.pyc select.pyc string.pyc
# test using command-line arguments, so use check-local target instead of TESTS
check-local:
@@ -14,6 +14,6 @@ endif
for pytest in $(PYTESTS) ; do \
echo Running test: $$pytest ; \
env PYTHONPATH=$(abs_top_srcdir)/src/lib/python:$(abs_top_builddir)/src/lib/python:$(abs_top_builddir)/src/bin/stats:$(abs_top_builddir)/src/bin/stats/tests \
- B10_FROM_BUILD=$(abs_top_builddir) \
+ B10_FROM_BUILD=$(abs_builddir)/testdata \
$(PYCOVERAGE_RUN) $(abs_srcdir)/$$pytest || exit ; \
done
diff --git a/src/bin/stats/tests/b10-stats-httpd_test.py b/src/bin/stats/tests/b10-stats-httpd_test.py
index 952366f..357e416 100644
--- a/src/bin/stats/tests/b10-stats-httpd_test.py
+++ b/src/bin/stats/tests/b10-stats-httpd_test.py
@@ -15,57 +15,121 @@
import unittest
import os
+import http.server
+import string
+import select
+import imp
import isc.cc
import stats_httpd
-class TestStats(unittest.TestCase):
+class TestStatsHttpd(unittest.TestCase):
def setUp(self):
- self.ccs_lsnr = stats_httpd.CCSessionListener()
- self.http_lsnr = stats_httpd.HttpListener(httpd_spec=self.ccs_lsnr.get_spec())
- self.http_handler = stats_httpd.HttpHandler()
- self.assertFalse(self.ccs_lsnr.get_socket().closed)
- self.assertTrue(self.ccs_lsnr.running)
- self.assertFalse(self.http_lsnr.get_socket().closed)
+ self.verbose = True
+ self.stats_httpd = stats_httpd.StatsHttpd(self.verbose)
+ self.http_server = self.stats_httpd.httpd
+ self.assertTrue(self.stats_httpd.verbose)
+ self.assertFalse(self.stats_httpd.running)
+ self.assertEqual(self.stats_httpd.stats_module_name, "Stats")
+ self.assertEqual(type(self.stats_httpd.httpd), stats_httpd.HttpServer)
+ self.assertFalse(self.stats_httpd.ccs_fd._closed)
+ self.assertFalse(self.stats_httpd.http_fd._closed)
+ self.assertEqual(self.stats_httpd.ccs_fd.fileno(), id(self.stats_httpd.ccs_fd))
+ self.assertEqual(self.stats_httpd.http_fd.fileno(), id(self.stats_httpd.http_fd))
+ self.assertEqual(type(self.stats_httpd.xml_template), string.Template)
+ self.assertEqual(type(self.stats_httpd.xsd_template), string.Template)
+ self.assertEqual(type(self.stats_httpd.xsl_template), string.Template)
def tearDown(self):
- self.ccs_lsnr.close()
- self.http_lsnr.close()
- self.assertTrue(self.ccs_lsnr.get_socket().closed)
- self.assertFalse(self.ccs_lsnr.running)
- self.assertTrue(self.http_lsnr.get_socket().closed)
+ self.stats_httpd.stop()
+ self.assertTrue(self.stats_httpd.ccs_fd._closed)
+ self.assertTrue(self.stats_httpd.http_fd._closed)
- def test_sockets(self):
- self.assertEqual(self.ccs_lsnr.get_socket().fileno(), 'dummy')
- self.assertEqual(self.http_lsnr.get_socket().fileno(), 'dummy')
+ def test_statshttpd_start(self):
+ self.assertFalse(self.stats_httpd.running)
+ self.stats_httpd.start()
+ self.assertFalse(self.stats_httpd.running)
- def test_ccs_listener(self):
- self.assertIsNone(self.ccs_lsnr.get_spec())
- self.assertIsNone(self.ccs_lsnr.check_command())
- self.assertEqual(self.ccs_lsnr.command_handler("status", None),
+ def test_statshttpd_read_template(self):
+ self.assertIsNone(self.stats_httpd.read_template('/path/to/foo/bar'))
+
+ def test_statshttpd_commands(self):
+ self.assertEqual(
+ self.stats_httpd.config_handler(None),
+ isc.config.ccsession.create_answer(0))
+ self.assertEqual(self.stats_httpd.command_handler("status", None),
isc.config.ccsession.create_answer(
- 0, "Stats Httpd is alive. (PID: " + str(os.getpid()) + ")"))
- self.assertTrue(self.ccs_lsnr.running)
- self.assertEqual(self.ccs_lsnr.command_handler("shutdown", None),
+ 0, "Stats Httpd is up. (PID " + str(os.getpid()) + ")"))
+ self.assertFalse(self.stats_httpd.running)
+ self.stats_httpd.running = True
+ self.assertEqual(self.stats_httpd.command_handler("shutdown", None),
isc.config.ccsession.create_answer(0))
- self.assertFalse(self.ccs_lsnr.running)
+ self.assertFalse(self.stats_httpd.running)
self.assertEqual(
- self.ccs_lsnr.command_handler("__UNKNOWN_COMMAND__", None),
+ self.stats_httpd.command_handler("__UNKNOWN_COMMAND__", None),
isc.config.ccsession.create_answer(
1, "Unknown command: __UNKNOWN_COMMAND__"))
- def test_http_listener(self):
- self.assertEqual(self.http_lsnr.get_address(), ('', 8000))
- self.assertIsNone(self.http_lsnr.handle_request())
+ def test_stats_spec(self):
+ self.stats_httpd.cc_session.group_sendmsg(
+ { 'result':
+ [ 0, { "auth.queries.tcp": 0,
+ "auth.queries.udp": 0,
+ "bind10.boot_time": "1970-01-01T00:00:00Z",
+ "report_time": "2011-02-24T09:08:32Z",
+ "stats.boot_time": "2011-02-24T09:08:21Z",
+ "stats.last_update_time": "2011-02-24T09:08:21Z",
+ "stats.lname": "4d662005_a at fdvm",
+ "stats.start_time": "2011-02-24T09:08:21Z",
+ "stats.timestamp": 1298538512.87378 }
+ ]
+ }, "Stats" )
+ self.assertEqual(len(self.stats_httpd.get_stats_data()), 2)
+ self.assertEqual(type(self.stats_httpd.get_stats_spec()), list)
+
+ def test_stats_xml(self):
+ self.assertEqual(type(self.stats_httpd.get_stats_xml()), str)
+ self.assertEqual(type(self.stats_httpd.get_stats_xsd()), str)
+ self.assertEqual(type(self.stats_httpd.get_stats_xsl()), str)
def test_http_handler(self):
- self.assertIsNone(self.http_handler.do_GET())
+ self.assertTrue(self.stats_httpd.httpd.verbose)
+ self.stats_httpd.httpd.handler.path = '/'
+ self.stats_httpd.httpd.handler.do_GET()
+ self.stats_httpd.httpd.handler.do_HEAD()
+ self.stats_httpd.httpd.handler.path = '/bind10-statistics.xsd'
+ self.stats_httpd.httpd.handler.do_GET()
+ self.stats_httpd.httpd.handler.path = '/bind10-statistics.xsl'
+ self.stats_httpd.httpd.handler.do_GET()
+ self.stats_httpd.cc_session.group_sendmsg(
+ { 'result':
+ [ 0, { "auth.queries.tcp": 0,
+ "auth.queries.udp": 0,
+ "bind10.boot_time": "1970-01-01T00:00:00Z",
+ "report_time": "2011-02-24T09:08:32Z",
+ "stats.boot_time": "2011-02-24T09:08:21Z",
+ "stats.last_update_time": "2011-02-24T09:08:21Z",
+ "stats.lname": "4d662005_a at fdvm",
+ "stats.start_time": "2011-02-24T09:08:21Z",
+ "stats.timestamp": 1298538512.87378 }
+ ]
+ }, "Stats" )
+ self.stats_httpd.httpd.handler.path = '/path/to'
+ self.stats_httpd.httpd.handler.do_GET()
+ self.stats_httpd.httpd.handler.log_message('%s', 'dummyrequest')
- def test_main(self):
- self.assertEqual(stats_httpd.IS_VERBOSE, True)
- self.assertRaises(TypeError, stats_httpd.main)
+ def test_no_buildpath(self):
+ """
+ test for not having environment variable "B10_FROM_BUILD"
+ """
+ if "B10_FROM_BUILD" in os.environ:
+ tmppath = os.environ["B10_FROM_BUILD"]
+ os.environ.pop("B10_FROM_BUILD")
+ imp.reload(stats_httpd)
+ os.environ["B10_FROM_BUILD"] = tmppath
+ imp.reload(stats_httpd)
if __name__ == "__main__":
unittest.main()
diff --git a/src/bin/stats/tests/b10-stats_test.py b/src/bin/stats/tests/b10-stats_test.py
index e4e1a1e..6f5b066 100644
--- a/src/bin/stats/tests/b10-stats_test.py
+++ b/src/bin/stats/tests/b10-stats_test.py
@@ -1,4 +1,4 @@
-# Copyright (C) 2010 Internet Systems Consortium.
+# Copyright (C) 2010, 2011 Internet Systems Consortium.
#
# Permission to use, copy, modify, and distribute this software for any
# purpose with or without fee is hereby granted, provided that the above
@@ -13,8 +13,6 @@
# NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION
# WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
-__version__ = "$Revision$"
-
#
# Tests for the stats module
#
@@ -532,7 +530,7 @@ class TestStats2(unittest.TestCase):
"""
if "B10_FROM_BUILD" in os.environ:
self.assertEqual(stats.SPECFILE_LOCATION,
- os.environ["B10_FROM_BUILD"] + "/src/bin/stats/stats.spec")
+ os.environ["B10_FROM_BUILD"] + "/stats.spec")
imp.reload(stats)
# change path of SPECFILE_LOCATION
stats.SPECFILE_LOCATION = TEST_SPECFILE_LOCATION
diff --git a/src/bin/stats/tests/dummy_socket.py b/src/bin/stats/tests/dummy_socket.py
deleted file mode 100644
index 53b9496..0000000
--- a/src/bin/stats/tests/dummy_socket.py
+++ /dev/null
@@ -1,27 +0,0 @@
-# Copyright (C) 2011 Internet Systems Consortium.
-#
-# Permission to use, copy, modify, and distribute this software for any
-# purpose with or without fee is hereby granted, provided that the above
-# copyright notice and this permission notice appear in all copies.
-#
-# THE SOFTWARE IS PROVIDED "AS IS" AND INTERNET SYSTEMS CONSORTIUM
-# DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL
-# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL
-# INTERNET SYSTEMS CONSORTIUM BE LIABLE FOR ANY SPECIAL, DIRECT,
-# INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING
-# FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT,
-# NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION
-# WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
-
-class socket:
- """
- This module is a mock-up class of socket
- """
- def __init__(self):
- self.closed = False
-
- def close(self):
- self.closed = True
-
- def fileno(self):
- return 'dummy'
diff --git a/src/bin/stats/tests/http/server.py b/src/bin/stats/tests/http/server.py
index 5604ad5..98e8016 100644
--- a/src/bin/stats/tests/http/server.py
+++ b/src/bin/stats/tests/http/server.py
@@ -13,7 +13,7 @@
# NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION
# WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
-import dummy_socket
+import socket
class StreamWriter:
"""
@@ -30,10 +30,8 @@ class HTTPServer:
This module is a mock-up class of http.server.HTTPServer
"""
def __init__(self, server_class, handler_class):
- self.socket = dummy_socket.socket()
-
- def get_socket(self):
- return self.socket
+ self.socket = socket.socket()
+ self.handler = handler_class(None, None, self)
def handle_request(self):
pass
@@ -46,8 +44,9 @@ class BaseHTTPRequestHandler:
This module is a mock-up class of http.server.BaseHTTPRequestHandler
"""
- def __init__(self):
+ def __init__(self, request, client_address, server):
self.path = "/"
+ self.server = server
self.wfile = StreamWriter()
def send_response(self, code=0):
@@ -58,3 +57,12 @@ class BaseHTTPRequestHandler:
def end_headers(self):
pass
+
+ def send_error(self, code, message=None):
+ pass
+
+ def address_string(self):
+ return 'dummyhost'
+
+ def log_date_time_string(self):
+ return '[DD/MM/YYYY HH:MI:SS]'
diff --git a/src/bin/stats/tests/isc/cc/session.py b/src/bin/stats/tests/isc/cc/session.py
index 9a50558..6ba44d9 100644
--- a/src/bin/stats/tests/isc/cc/session.py
+++ b/src/bin/stats/tests/isc/cc/session.py
@@ -16,7 +16,7 @@
# This module is a mock-up class of isc.cc.session
import sys
-import dummy_socket
+import socket
# set a dummy lname
_TEST_LNAME = '123abc at xxxx'
@@ -37,7 +37,7 @@ class Session:
self._lname = _TEST_LNAME
self.message_queue = []
self.old_message_queue = []
- self._socket = dummy_socket.socket()
+ self._socket = socket.socket()
self.verbose = verbose
@property
@@ -51,7 +51,7 @@ class Session:
return len(self.message_queue)
def enqueue(self, msg=None, env={}):
- if not self._socket:
+ if self._socket._closed:
raise SessionError("Session has been closed.")
seq = self._next_sequence()
env.update({"seq": 0}) # fixed here
@@ -62,11 +62,11 @@ class Session:
return seq
def dequeue(self, seq=0):
- if self._socket.closed:
+ if self._socket._closed:
raise SessionError("Session has been closed.")
que = None
try:
- que = self.message_queue.pop(seq)
+ que = self.message_queue.pop(0) # always pop at index 0
self.old_message_queue.append(que)
except IndexError:
que = Queue()
@@ -75,7 +75,7 @@ class Session:
return que
def get_queue(self, seq=None):
- if self._socket.closed:
+ if self._socket._closed:
raise SessionError("Session has been closed.")
if seq is None:
seq = len(self.message_queue) - 1
@@ -111,7 +111,7 @@ class Session:
"reply": routing["seq"] })
def get_message(self, group, to='*'):
- if self._socket.closed:
+ if self._socket._closed:
raise SessionError("Session has been closed.")
que = Queue()
for q in self.message_queue:
@@ -123,3 +123,8 @@ class Session:
sys.stdout.write("[Session] get_message: " + str(que.dump()) + "\n")
return q.msg
+ def group_subscribe(self, group, instance = "*"):
+ pass
+
+ def group_unsubscribe(self, group, instance = "*"):
+ pass
diff --git a/src/bin/stats/tests/isc/config/ccsession.py b/src/bin/stats/tests/isc/config/ccsession.py
index 93824c7..54c50fc 100644
--- a/src/bin/stats/tests/isc/config/ccsession.py
+++ b/src/bin/stats/tests/isc/config/ccsession.py
@@ -16,6 +16,7 @@
# This module is a mock-up class of isc.cc.session
import json
+import os
from isc.cc.session import Session
COMMAND_CONFIG_UPDATE = "config_update"
@@ -65,10 +66,46 @@ class ModuleSpec:
class ModuleCCSessionError(Exception):
pass
+class DataNotFoundError(Exception):
+ pass
+
class ConfigData:
def __init__(self, specification):
self.specification = specification
+ def get_value(self, identifier):
+ """Returns a tuple where the first item is the value at the
+ given identifier, and the second item is a bool which is
+ true if the value is an unset default. Raises an
+ DataNotFoundError if the identifier is bad"""
+ def _get_value(config_map):
+ if 'item_default' in config_map:
+ return config_map['item_default'], False
+ elif 'item_type' in config_map:
+ if config_map['item_type'] == 'boolean':
+ return bool(), True
+ elif config_map['item_type'] == 'string':
+ return str(), True
+ elif config_map['item_type'] in set(['number', 'integer']):
+ return int(), True
+ elif config_map['item_type'] in set(['float', 'double', 'real']):
+ return float(), True
+ elif config_map['item_type'] in set(['list', 'array']):
+ return [ _get_value(conf)
+ for conf in spec['list_item_spec'] ], True
+ elif config_map['item_type'] in set(['map', 'object']):
+ return dict(
+ [ (conf['item_name'], _get_value(conf))
+ for conf in config_map['map_item_spec'] ]), True
+ return None, True
+ for config_map in self.get_module_spec().get_config_spec():
+ if config_map['item_name'] == identifier:
+ return _get_value(config_map)
+ raise DataNotFoundError("item_name %s is not found in the specfile" % identifier)
+
+ def get_module_spec(self):
+ return self.specification
+
class ModuleCCSession(ConfigData):
def __init__(self, spec_file_name, config_handler, command_handler, cc_session = None):
module_spec = module_spec_from_file(spec_file_name)
diff --git a/src/bin/stats/tests/select.py b/src/bin/stats/tests/select.py
new file mode 100644
index 0000000..3578473
--- /dev/null
+++ b/src/bin/stats/tests/select.py
@@ -0,0 +1,38 @@
+# Copyright (C) 2011 Internet Systems Consortium.
+#
+# Permission to use, copy, modify, and distribute this software for any
+# purpose with or without fee is hereby granted, provided that the above
+# copyright notice and this permission notice appear in all copies.
+#
+# THE SOFTWARE IS PROVIDED "AS IS" AND INTERNET SYSTEMS CONSORTIUM
+# DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL
+# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL
+# INTERNET SYSTEMS CONSORTIUM BE LIABLE FOR ANY SPECIAL, DIRECT,
+# INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING
+# FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT,
+# NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION
+# WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+
+import socket
+import errno
+
+class error(Exception):
+ pass
+
+def select(rlst, wlst, xlst, timeout):
+ """
+ This module is a mock-up function of select.select
+ """
+ if type(timeout) != int and type(timeout) != float:
+ raise TypeError("Error: %s must be integer or float"
+ % timeout.__class__.__name__)
+ for s in rlst + wlst + xlst:
+ if type(s) != socket.socket:
+ raise TypeError("Error: %s must be a dummy socket"
+ % s.__class__.__name__)
+ if s._called > 2:
+ raise error(errno.EINTR)
+ elif s._called > 1:
+ raise error("Something is happened!")
+ s._called = s._called + 1
+ return (rlst, wlst, xlst)
diff --git a/src/bin/stats/tests/socket.py b/src/bin/stats/tests/socket.py
new file mode 100644
index 0000000..260098f
--- /dev/null
+++ b/src/bin/stats/tests/socket.py
@@ -0,0 +1,28 @@
+# Copyright (C) 2011 Internet Systems Consortium.
+#
+# Permission to use, copy, modify, and distribute this software for any
+# purpose with or without fee is hereby granted, provided that the above
+# copyright notice and this permission notice appear in all copies.
+#
+# THE SOFTWARE IS PROVIDED "AS IS" AND INTERNET SYSTEMS CONSORTIUM
+# DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL
+# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL
+# INTERNET SYSTEMS CONSORTIUM BE LIABLE FOR ANY SPECIAL, DIRECT,
+# INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING
+# FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT,
+# NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION
+# WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+
+class socket:
+ """
+ This module is a mock-up class of socket
+ """
+ def __init__(self):
+ self._closed = False
+ self._called = 0
+
+ def close(self):
+ self._closed = True
+
+ def fileno(self):
+ return id(self)
diff --git a/src/bin/stats/tests/stats_test.in b/src/bin/stats/tests/stats_test.in
index 579ab57..8686bfa 100644
--- a/src/bin/stats/tests/stats_test.in
+++ b/src/bin/stats/tests/stats_test.in
@@ -21,11 +21,11 @@ export PYTHON_EXEC
PYTHONPATH=@abs_top_builddir@/src/lib/python:@abs_top_srcdir@/src/bin/stats:@abs_top_srcdir@/src/bin/stats/tests
export PYTHONPATH
-B10_FROM_BUILD=@abs_top_builddir@
-export B10_FROM_BUILD
-
TEST_PATH=@abs_top_srcdir@/src/bin/stats/tests
+B10_FROM_BUILD=${TEST_PATH}/testdata
+export B10_FROM_BUILD
+
cd ${TEST_PATH}
${PYTHON_EXEC} -O b10-stats_test.py $*
${PYTHON_EXEC} -O b10-stats-httpd_test.py $*
diff --git a/src/bin/stats/tests/string.py b/src/bin/stats/tests/string.py
new file mode 100644
index 0000000..5ab7f68
--- /dev/null
+++ b/src/bin/stats/tests/string.py
@@ -0,0 +1,25 @@
+# Copyright (C) 2011 Internet Systems Consortium.
+#
+# Permission to use, copy, modify, and distribute this software for any
+# purpose with or without fee is hereby granted, provided that the above
+# copyright notice and this permission notice appear in all copies.
+#
+# THE SOFTWARE IS PROVIDED "AS IS" AND INTERNET SYSTEMS CONSORTIUM
+# DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL
+# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL
+# INTERNET SYSTEMS CONSORTIUM BE LIABLE FOR ANY SPECIAL, DIRECT,
+# INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING
+# FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT,
+# NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION
+# WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+
+class Template:
+ """
+ This module is a mock-up class of Template
+ """
+ def __init__(self, template):
+ self.template = template
+
+ def substitute(self, **map):
+ return str(self.template)
+
diff --git a/src/bin/stats/tests/testdata/Makefile.am b/src/bin/stats/tests/testdata/Makefile.am
index 1b8df6d..a46e0bb 100644
--- a/src/bin/stats/tests/testdata/Makefile.am
+++ b/src/bin/stats/tests/testdata/Makefile.am
@@ -1 +1,12 @@
EXTRA_DIST = stats_test.spec
+
+noinst_DATA = stats.spec stats_httpd.spec
+
+CLEANFILES = stats.spec stats_httpd.spec
+
+stats.spec: ../../stats.spec.pre.in
+ $(SED) -e "s|@@DATAROOTDIR@@/\@PACKAGE\@|$(abs_srcdir)/../..|" ../../stats.spec.pre.in >$@
+
+stats_httpd.spec: ../../stats_httpd.spec.pre.in
+ $(SED) -e "s|@@DATAROOTDIR@@/\@PACKAGE\@|$(abs_srcdir)/../..|" ../../stats_httpd.spec.pre.in >$@
+
More information about the bind10-changes
mailing list