From d9ee65e374924d0f1cde75f4aa9c242218d1ad85 Mon Sep 17 00:00:00 2001 From: Naoki Kambe Date: Wed, 19 Sep 2012 16:58:55 +0900 Subject: [PATCH 1/7] [2300] define new statistics counters in Xfrin spec open openfail close connfail conn senderr recverr --- src/bin/xfrin/xfrin.spec | 221 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 221 insertions(+) diff --git a/src/bin/xfrin/xfrin.spec b/src/bin/xfrin/xfrin.spec index d09685b882..87bb91e018 100644 --- a/src/bin/xfrin/xfrin.spec +++ b/src/bin/xfrin/xfrin.spec @@ -250,6 +250,227 @@ ] } } + }, + { + "item_name": "socket", + "item_type": "map", + "item_optional": false, + "item_default": { + "ipv4": { + "tcp": { + "open": 0, + "openfail": 0, + "close": 0, + "connfail": 0, + "conn": 0, + "senderr": 0, + "recverr": 0 + } + }, + "ipv6": { + "tcp": { + "open": 0, + "openfail": 0, + "close": 0, + "connfail": 0, + "conn": 0, + "senderr": 0, + "recverr": 0 + } + } + }, + "item_title": "Socket", + "item_description": "A directory name of socket statistics", + "map_item_spec": [ + { + "item_name": "ipv4", + "item_type": "map", + "item_optional": false, + "item_default": { + "tcp": { + "open": 0, + "openfail": 0, + "close": 0, + "connfail": 0, + "conn": 0, + "senderr": 0, + "recverr": 0 + } + }, + "item_title": "IPv4", + "item_description": "A directory name of IPv4", + "map_item_spec": [ + { + "item_name": "tcp", + "item_type": "map", + "item_optional": false, + "item_default": { + "open": 0, + "openfail": 0, + "close": 0, + "connfail": 0, + "conn": 0, + "senderr": 0, + "recverr": 0 + }, + "item_title": "TCP", + "item_description": "A directory name of TCP statistics", + "map_item_spec": [ + { + "item_name": "open", + "item_type": "integer", + "item_optional": false, + "item_default": 0, + "item_title": "Open", + "item_description": "IPv4 TCP sockets opened successfully" + }, + { + "item_name": "openfail", + "item_type": "integer", + "item_optional": false, + "item_default": 0, + "item_title": "Open failures", + "item_description": "IPv4 TCP sockets open failures" + }, + { + "item_name": "close", + "item_type": "integer", + "item_optional": false, + "item_default": 0, + "item_title": "Close", + "item_description": "IPv4 TCP sockets closed" + }, + { + "item_name": "connfail", + "item_type": "integer", + "item_optional": false, + "item_default": 0, + "item_title": "Connect failures", + "item_description": "IPv4 TCP sockets connection failures" + }, + { + "item_name": "conn", + "item_type": "integer", + "item_optional": false, + "item_default": 0, + "item_title": "Connect", + "item_description": "IPv4 TCP connections established successfully" + }, + { + "item_name": "senderr", + "item_type": "integer", + "item_optional": false, + "item_default": 0, + "item_title": "Send errors", + "item_description": "IPv4 TCP sockets send errors" + }, + { + "item_name": "recverr", + "item_type": "integer", + "item_optional": false, + "item_default": 0, + "item_title": "Receive errors", + "item_description": "IPv4 TCP sockets receive errors" + } + ] + } + ] + }, + { + "item_name": "ipv6", + "item_type": "map", + "item_optional": false, + "item_default": { + "tcp": { + "open": 0, + "openfail": 0, + "close": 0, + "connfail": 0, + "conn": 0, + "senderr": 0, + "recverr": 0 + } + }, + "item_title": "IPv6", + "item_description": "A directory name of IPv6", + "map_item_spec": [ + { + "item_name": "tcp", + "item_type": "map", + "item_optional": false, + "item_default": { + "open": 0, + "openfail": 0, + "close": 0, + "connfail": 0, + "conn": 0, + "senderr": 0, + "recverr": 0 + }, + "item_title": "TCP", + "item_description": "A directory name of TCP statistics", + "map_item_spec": [ + { + "item_name": "open", + "item_type": "integer", + "item_optional": false, + "item_default": 0, + "item_title": "Open", + "item_description": "IPv6 TCP sockets opened successfully" + }, + { + "item_name": "openfail", + "item_type": "integer", + "item_optional": false, + "item_default": 0, + "item_title": "Open failures", + "item_description": "IPv6 TCP sockets open failures" + }, + { + "item_name": "close", + "item_type": "integer", + "item_optional": false, + "item_default": 0, + "item_title": "Close", + "item_description": "IPv6 TCP sockets closed" + }, + { + "item_name": "connfail", + "item_type": "integer", + "item_optional": false, + "item_default": 0, + "item_title": "Connect failures", + "item_description": "IPv6 TCP sockets connection failures" + }, + { + "item_name": "conn", + "item_type": "integer", + "item_optional": false, + "item_default": 0, + "item_title": "Connect", + "item_description": "IPv6 TCP connections established successfully" + }, + { + "item_name": "senderr", + "item_type": "integer", + "item_optional": false, + "item_default": 0, + "item_title": "Send errors", + "item_description": "IPv6 TCP sockets send errors" + }, + { + "item_name": "recverr", + "item_type": "integer", + "item_optional": false, + "item_default": 0, + "item_title": "Receive errors", + "item_description": "IPv6 TCP sockets receive errors" + } + ] + } + ] + } + ] } ] } From f7a34944f319ebffaced2e1ea8a7dd1c420a4c99 Mon Sep 17 00:00:00 2001 From: Naoki Kambe Date: Fri, 28 Sep 2012 15:58:58 +0900 Subject: [PATCH 2/7] [2300] use _master_addrinfo[0] for address family in _get_ipver_str() Because _get_ipver_str() is referring to an attribute of NoneType when it is invoked earlier than init_socket() and when the socket object is None. --- src/bin/xfrin/tests/xfrin_test.py | 2 -- src/bin/xfrin/xfrin.py.in | 4 ++-- 2 files changed, 2 insertions(+), 4 deletions(-) diff --git a/src/bin/xfrin/tests/xfrin_test.py b/src/bin/xfrin/tests/xfrin_test.py index 5d6149f3a0..264d1da3fa 100644 --- a/src/bin/xfrin/tests/xfrin_test.py +++ b/src/bin/xfrin/tests/xfrin_test.py @@ -1105,12 +1105,10 @@ class TestAXFR(TestXfrinConnection): for (info, ver) in addrs: c = MockXfrinConnection({}, TEST_ZONE_NAME, RRClass.CH, None, threading.Event(), info) - c.init_socket() if ver is not None: self.assertEqual(ver, c._get_ipver_str()) else: self.assertRaises(ValueError, c._get_ipver_str) - c.close() def test_soacheck(self): # we need to defer the creation until we know the QID, which is diff --git a/src/bin/xfrin/xfrin.py.in b/src/bin/xfrin/xfrin.py.in index 1af0d1db4f..0c6a866aac 100755 --- a/src/bin/xfrin/xfrin.py.in +++ b/src/bin/xfrin/xfrin.py.in @@ -860,9 +860,9 @@ class XfrinConnection(asyncore.dispatcher): It raises a ValueError exception on other address families. """ - if self.socket.family == socket.AF_INET: + if self._master_addrinfo[0] == socket.AF_INET: return 'v4' - elif self.socket.family == socket.AF_INET6: + elif self._master_addrinfo[0] == socket.AF_INET6: return 'v6' raise ValueError("Invalid address family. " "This is supported only for IP sockets") From 90b12d797d33c23ec96cc877ecf4c84a42f6214a Mon Sep 17 00:00:00 2001 From: Naoki Kambe Date: Wed, 19 Sep 2012 16:59:47 +0900 Subject: [PATCH 3/7] [2300] override some methods of asyncore.dispatcher in XfrinConnection This is for implementation of statistics socket counters for Xfrin --- src/bin/xfrin/xfrin.py.in | 68 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 68 insertions(+) diff --git a/src/bin/xfrin/xfrin.py.in b/src/bin/xfrin/xfrin.py.in index 0c6a866aac..077c07fd1c 100755 --- a/src/bin/xfrin/xfrin.py.in +++ b/src/bin/xfrin/xfrin.py.in @@ -620,6 +620,74 @@ class XfrinConnection(asyncore.dispatcher): self._transfer_stats = XfrinTransferStats() self._counters = counters + def create_socket(self, family, type): + """create_socket() overridden from the super class for + statistics counter open and openfail""" + try: + ret = super().create_socket(family, type) + # count open + self._counters.inc('socket', + 'ip' + self._get_ipver_str(), + 'tcp', 'open') + return ret + except: + # count openfail + self._counters.inc('socket', + 'ip' + self._get_ipver_str(), + 'tcp', 'openfail') + raise + + def close(self): + """close() overridden from the super class for + statistics counter close""" + ret = super().close() + # count close + self._counters.inc('socket', + 'ip' + self._get_ipver_str(), + 'tcp', 'close') + return ret + + def connect(self, address): + """connect() overridden from the super class for + statistics counter conn and connfail""" + try: + ret = super().connect(address) + # count conn + self._counters.inc('socket', + 'ip' + self._get_ipver_str(), + 'tcp', 'conn') + return ret + except: + # count connfail + self._counters.inc('socket', + 'ip' + self._get_ipver_str(), + 'tcp', 'connfail') + raise + + def send(self, data): + """send() overridden from the super class for + statistics counter senderr""" + try: + return super().send(data) + except: + # count senderr + self._counters.inc('socket', + 'ip' + self._get_ipver_str(), + 'tcp', 'senderr') + raise + + def recv(self, buffer_size): + """recv() overridden from the super class for + statistics counter senderr""" + try: + return super().recv(buffer_size) + except: + # count recverr + self._counters.inc('socket', + 'ip' + self._get_ipver_str(), + 'tcp', 'recverr') + raise + def init_socket(self): '''Initialize the underlyig socket. From dc10e21d3ace93577e654885981ace4cae92ee09 Mon Sep 17 00:00:00 2001 From: Naoki Kambe Date: Tue, 27 Aug 2013 19:39:52 +0900 Subject: [PATCH 4/7] [2300] add unit tests for statistics socket counters introduced in Xfrin --- src/bin/xfrin/tests/xfrin_test.py | 118 ++++++++++++++++++++++++++++++ 1 file changed, 118 insertions(+) diff --git a/src/bin/xfrin/tests/xfrin_test.py b/src/bin/xfrin/tests/xfrin_test.py index 264d1da3fa..d4819536a7 100644 --- a/src/bin/xfrin/tests/xfrin_test.py +++ b/src/bin/xfrin/tests/xfrin_test.py @@ -3408,6 +3408,124 @@ class TestXfrinTransferStats(unittest.TestCase): zbps = self.stats.get_bytes_per_second() self.assertEqual(0, zbps) +class TestXfrinConnectionSocketCounter(unittest.TestCase): + + @property + def _master_addrinfo(self): + return TEST_MASTER_IPV4_ADDRINFO + @property + def _ipver(self): + return 'ipv4' + + def setUp(self): + self.conn = XfrinConnection( + None, TEST_ZONE_NAME, None, MockDataSourceClient(), None, + self._master_addrinfo, None, + xfrin.Counters(xfrin.SPECFILE_LOCATION)) + self.expception = socket.error + + def raise_expception(self, *args): + raise self.expception + + def test_open(self): + self.assertRaises(isc.cc.data.DataNotFoundError, + self.conn._counters.get, + 'socket', self._ipver, 'tcp', 'open') + self.conn.create_socket(self._master_addrinfo[0], + self._master_addrinfo[1]) + self.assertEqual(1, self.conn._counters.get( + 'socket', self._ipver, 'tcp', 'open')) + + def test_openfail(self): + self.assertRaises(isc.cc.data.DataNotFoundError, + self.conn._counters.get, + 'socket', self._ipver, 'tcp', 'openfail') + orig_create_socket = xfrin.asyncore.dispatcher.create_socket + xfrin.asyncore.dispatcher.create_socket = self.raise_expception + try: + self.assertRaises(self.expception, self.conn.create_socket, + self._master_addrinfo[0], + self._master_addrinfo[1]) + self.assertEqual(1, self.conn._counters.get( + 'socket', self._ipver, 'tcp', 'openfail')) + finally: + xfrin.asyncore.dispatcher.create_socket = orig_create_socket + + def test_close(self): + self.assertRaises(isc.cc.data.DataNotFoundError, + self.conn._counters.get, + 'socket', self._ipver, 'tcp', 'close') + orig_socket_close = xfrin.asyncore.dispatcher.close + xfrin.asyncore.dispatcher.close = lambda x: None + try: + self.conn.close() + self.assertEqual(1, self.conn._counters.get( + 'socket', self._ipver, 'tcp', 'close')) + finally: + xfrin.asyncore.dispatcher.close = orig_socket_close + + def test_conn(self): + self.assertRaises(isc.cc.data.DataNotFoundError, + self.conn._counters.get, + 'socket', self._ipver, 'tcp', 'conn') + orig_socket_connect = xfrin.asyncore.dispatcher.connect + xfrin.asyncore.dispatcher.connect = lambda *a: None + try: + self.conn.connect(self._master_addrinfo[2]) + self.assertEqual(1, self.conn._counters.get( + 'socket', self._ipver, 'tcp', 'conn')) + finally: + xfrin.asyncore.dispatcher.connect = orig_socket_connect + + def test_connfail(self): + self.assertRaises(isc.cc.data.DataNotFoundError, + self.conn._counters.get, + 'socket', self._ipver, 'tcp', 'connfail') + orig_socket_connect = xfrin.asyncore.dispatcher.connect + xfrin.asyncore.dispatcher.connect = self.raise_expception + try: + self.assertRaises(self.expception, self.conn.connect, + self._master_addrinfo[2]) + self.assertEqual(1, self.conn._counters.get( + 'socket', self._ipver, 'tcp', 'connfail')) + finally: + xfrin.asyncore.dispatcher.connect = orig_socket_connect + + def test_senderr(self): + self.assertRaises(isc.cc.data.DataNotFoundError, + self.conn._counters.get, + 'socket', self._ipver, 'tcp', 'senderr') + orig_socket_send = xfrin.asyncore.dispatcher.send + xfrin.asyncore.dispatcher.send = self.raise_expception + try: + self.assertRaises(self.expception, self.conn.send, None) + self.assertEqual(1, self.conn._counters.get( + 'socket', self._ipver, 'tcp', 'senderr')) + finally: + xfrin.asyncore.dispatcher.send = orig_socket_send + + def test_recverr(self): + self.assertRaises(isc.cc.data.DataNotFoundError, + self.conn._counters.get, + 'socket', self._ipver, 'tcp', 'recverr') + orig_socket_recv = xfrin.asyncore.dispatcher.recv + xfrin.asyncore.dispatcher.recv = self.raise_expception + try: + self.assertRaises(self.expception, self.conn.recv, None) + self.assertEqual(1, self.conn._counters.get( + 'socket', self._ipver, 'tcp', 'recverr')) + finally: + xfrin.asyncore.dispatcher.recv = orig_socket_recv + +class TestXfrinConnectionSocketCounterV6(TestXfrinConnectionSocketCounter): + + @property + def _master_addrinfo(self): + return TEST_MASTER_IPV6_ADDRINFO + @property + def _ipver(self): + return 'ipv6' + if __name__== "__main__": try: isc.log.resetUnitTestRootLogger() From 499e6f2e3f5bd141459ba46f90359d9dbc72c125 Mon Sep 17 00:00:00 2001 From: Naoki Kambe Date: Thu, 29 Aug 2013 17:31:07 +0900 Subject: [PATCH 5/7] [2300] set self.tsig_key_name in XfrinConnection.__init__() Because this is used for outputting an error message when failing to connect to master. (This is not a related change.) --- src/bin/xfrin/tests/xfrin_test.py | 3 ++- src/bin/xfrin/xfrin.py.in | 5 +++++ 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/src/bin/xfrin/tests/xfrin_test.py b/src/bin/xfrin/tests/xfrin_test.py index d4819536a7..4dcbb69837 100644 --- a/src/bin/xfrin/tests/xfrin_test.py +++ b/src/bin/xfrin/tests/xfrin_test.py @@ -3486,7 +3486,8 @@ class TestXfrinConnectionSocketCounter(unittest.TestCase): try: self.assertRaises(self.expception, self.conn.connect, self._master_addrinfo[2]) - self.assertEqual(1, self.conn._counters.get( + self.assertFalse(self.conn.connect_to_master()) + self.assertEqual(2, self.conn._counters.get( 'socket', self._ipver, 'tcp', 'connfail')) finally: xfrin.asyncore.dispatcher.connect = orig_socket_connect diff --git a/src/bin/xfrin/xfrin.py.in b/src/bin/xfrin/xfrin.py.in index 077c07fd1c..2ce6b88ed7 100755 --- a/src/bin/xfrin/xfrin.py.in +++ b/src/bin/xfrin/xfrin.py.in @@ -610,6 +610,11 @@ class XfrinConnection(asyncore.dispatcher): self._shutdown_event = shutdown_event self._master_addrinfo = master_addrinfo self._tsig_key = tsig_key + # self.tsig_key_name is used for outputting an error massage in + # connect_to_master(). + self.tsig_key_name = None + if tsig_key: + self.tsig_key_name = self._tsig_key.get_key_name() self._tsig_ctx = None # tsig_ctx_creator is introduced to allow tests to use a mock class for # easier tests (in normal case we always use the default) From 5b63f9693efd47c600139b8522c37ea2f01666a0 Mon Sep 17 00:00:00 2001 From: Naoki Kambe Date: Fri, 28 Sep 2012 14:35:39 +0900 Subject: [PATCH 6/7] [2300] check statistics socket counters for Xfrin in lettuce test --- .../features/xfrin_notify_handling.feature | 139 +++++++++++++----- 1 file changed, 99 insertions(+), 40 deletions(-) diff --git a/tests/lettuce/features/xfrin_notify_handling.feature b/tests/lettuce/features/xfrin_notify_handling.feature index 4f9d44e837..387fd731d5 100644 --- a/tests/lettuce/features/xfrin_notify_handling.feature +++ b/tests/lettuce/features/xfrin_notify_handling.feature @@ -99,17 +99,21 @@ Feature: Xfrin incoming notify handling wait for new bind10 stderr message XFRIN_RECEIVED_COMMAND last bindctl output should not contain "error" - When I query statistics zones of bind10 module Xfrin with cmdctl - The statistics counters are 0 in category .Xfrin.zones.IN except for the following items - | item_name | item_value | min_value | - | _SERVER_.soaoutv6 | 1 | | - | _SERVER_.axfrreqv6 | 1 | | - | _SERVER_.xfrsuccess | 1 | | - | _SERVER_.last_axfr_duration | | 0.0 | - | example.org..soaoutv6 | 1 | | - | example.org..axfrreqv6 | 1 | | - | example.org..xfrsuccess | 1 | | - | example.org..last_axfr_duration | | 0.0 | + When I query statistics of bind10 module Xfrin with cmdctl + The statistics counters are 0 in category .Xfrin except for the following items + | item_name | item_value | min_value | + | zones.IN._SERVER_.soaoutv6 | 1 | | + | zones.IN._SERVER_.axfrreqv6 | 1 | | + | zones.IN._SERVER_.xfrsuccess | 1 | | + | zones.IN._SERVER_.last_axfr_duration | | 0.0 | + | zones.IN.example.org..soaoutv6 | 1 | | + | zones.IN.example.org..axfrreqv6 | 1 | | + | zones.IN.example.org..xfrsuccess | 1 | | + | zones.IN.example.org..last_axfr_duration | | 0.0 | + | socket.ipv6.tcp.open | | 1 | + | socket.ipv6.tcp.close | | 1 | + | socket.ipv6.tcp.conn | | 1 | + | socket.ipv6.tcp.connfail | 0 | | # # Test for handling incoming notify only in IPv4 @@ -201,17 +205,21 @@ Feature: Xfrin incoming notify handling wait for new bind10 stderr message XFRIN_RECEIVED_COMMAND last bindctl output should not contain "error" - When I query statistics zones of bind10 module Xfrin with cmdctl - The statistics counters are 0 in category .Xfrin.zones.IN except for the following items - | item_name | item_value | min_value | - | _SERVER_.soaoutv4 | 1 | | - | _SERVER_.axfrreqv4 | 1 | | - | _SERVER_.xfrsuccess | 1 | | - | _SERVER_.last_axfr_duration | | 0.0 | - | example.org..soaoutv4 | 1 | | - | example.org..axfrreqv4 | 1 | | - | example.org..xfrsuccess | 1 | | - | example.org..last_axfr_duration | | 0.0 | + When I query statistics of bind10 module Xfrin with cmdctl + The statistics counters are 0 in category .Xfrin except for the following items + | item_name | item_value | min_value | + | zones.IN._SERVER_.soaoutv4 | 1 | | + | zones.IN._SERVER_.axfrreqv4 | 1 | | + | zones.IN._SERVER_.xfrsuccess | 1 | | + | zones.IN._SERVER_.last_axfr_duration | | 0.0 | + | zones.IN.example.org..soaoutv4 | 1 | | + | zones.IN.example.org..axfrreqv4 | 1 | | + | zones.IN.example.org..xfrsuccess | 1 | | + | zones.IN.example.org..last_axfr_duration | | 0.0 | + | socket.ipv4.tcp.open | | 1 | + | socket.ipv4.tcp.close | | 1 | + | socket.ipv4.tcp.conn | | 1 | + | socket.ipv4.tcp.connfail | 0 | | # # Test for Xfr request rejected @@ -309,15 +317,19 @@ Feature: Xfrin incoming notify handling wait for new bind10 stderr message XFRIN_RECEIVED_COMMAND last bindctl output should not contain "error" - When I query statistics zones of bind10 module Xfrin with cmdctl - The statistics counters are 0 in category .Xfrin.zones.IN except for the following items - | item_name | item_value | - | _SERVER_.soaoutv6 | 1 | - | _SERVER_.axfrreqv6 | 1 | - | _SERVER_.xfrfail | 1 | - | example.org..soaoutv6 | 1 | - | example.org..axfrreqv6 | 1 | - | example.org..xfrfail | 1 | + When I query statistics of bind10 module Xfrin with cmdctl + The statistics counters are 0 in category .Xfrin except for the following items + | item_name | item_value | min_value | + | zones.IN._SERVER_.soaoutv6 | 1 | | + | zones.IN._SERVER_.axfrreqv6 | 1 | | + | zones.IN._SERVER_.xfrfail | 1 | | + | zones.IN.example.org..soaoutv6 | 1 | | + | zones.IN.example.org..axfrreqv6 | 1 | | + | zones.IN.example.org..xfrfail | 1 | | + | socket.ipv6.tcp.open | | 1 | + | socket.ipv6.tcp.close | | 1 | + | socket.ipv6.tcp.conn | | 1 | + | socket.ipv6.tcp.connfail | 0 | | # # Test for Xfr request rejected in IPv4 @@ -415,15 +427,19 @@ Feature: Xfrin incoming notify handling wait for new bind10 stderr message XFRIN_RECEIVED_COMMAND last bindctl output should not contain "error" - When I query statistics zones of bind10 module Xfrin with cmdctl - The statistics counters are 0 in category .Xfrin.zones.IN except for the following items - | item_name | item_value | - | _SERVER_.soaoutv4 | 1 | - | _SERVER_.axfrreqv4 | 1 | - | _SERVER_.xfrfail | 1 | - | example.org..soaoutv4 | 1 | - | example.org..axfrreqv4 | 1 | - | example.org..xfrfail | 1 | + When I query statistics of bind10 module Xfrin with cmdctl + The statistics counters are 0 in category .Xfrin except for the following items + | item_name | item_value | min_value | + | zones.IN._SERVER_.soaoutv4 | 1 | | + | zones.IN._SERVER_.axfrreqv4 | 1 | | + | zones.IN._SERVER_.xfrfail | 1 | | + | zones.IN.example.org..soaoutv4 | 1 | | + | zones.IN.example.org..axfrreqv4 | 1 | | + | zones.IN.example.org..xfrfail | 1 | | + | socket.ipv4.tcp.open | | 1 | + | socket.ipv4.tcp.close | | 1 | + | socket.ipv4.tcp.conn | | 1 | + | socket.ipv4.tcp.connfail | 0 | | # # Test for unreachable slave @@ -587,3 +603,46 @@ Feature: Xfrin incoming notify handling Then wait for master stderr message NOTIFY_OUT_TIMEOUT not NOTIFY_OUT_REPLY_RECEIVED A query for www.example.org to [::1]:47806 should have rcode NXDOMAIN + + # + # Test for unreachable master + # + Scenario: Handle incoming notify (unreachable master) + + And I have bind10 running with configuration xfrin/retransfer_slave_notify.conf + And wait for bind10 stderr message BIND10_STARTED_CC + And wait for bind10 stderr message CMDCTL_STARTED + And wait for bind10 stderr message AUTH_SERVER_STARTED + And wait for bind10 stderr message XFRIN_STARTED + And wait for bind10 stderr message ZONEMGR_STARTED + + A query for www.example.org to [::1]:47806 should have rcode NXDOMAIN + + # + # Test1 for Xfrin statistics + # + check initial statistics not containing example.org for Xfrin + + # + # execute reftransfer for Xfrin + # + When I send bind10 the command Xfrin retransfer example.org IN + Then wait for new bind10 stderr message XFRIN_CONNECT_MASTER + Then wait for new bind10 stderr message ZONEMGR_RECEIVE_XFRIN_FAILED + + # + # Test2 for Xfrin statistics + # + # check initial statistics + # + + # wait until the last stats requesting is finished + wait for new bind10 stderr message STATS_SEND_STATISTICS_REQUEST + wait for new bind10 stderr message XFRIN_RECEIVED_COMMAND + + When I query statistics socket of bind10 module Xfrin with cmdctl + The statistics counters are 0 in category .Xfrin.socket.ipv6.tcp except for the following items + | item_name | min_value | + | open | 1 | + | close | 1 | + | connfail | 1 | From 46b7d9d9e329ea3ed9a338924e0cec4e3c83ee04 Mon Sep 17 00:00:00 2001 From: Naoki Kambe Date: Wed, 19 Sep 2012 17:46:06 +0900 Subject: [PATCH 7/7] [2300] document in the man page about statistics socket counters introduced in Xfrin open openfail close connfail conn senderr recverr --- src/bin/xfrin/b10-xfrin.xml | 82 +++++++++++++++++++++++++++++++++++++ 1 file changed, 82 insertions(+) diff --git a/src/bin/xfrin/b10-xfrin.xml b/src/bin/xfrin/b10-xfrin.xml index 903a3a0afa..49b05ed786 100644 --- a/src/bin/xfrin/b10-xfrin.xml +++ b/src/bin/xfrin/b10-xfrin.xml @@ -337,6 +337,88 @@ operation + + socket + + A directory name of socket statistics + + + + + ipversion + + A directory name of an IP version as ipv4 or ipv6 + + + + + tcp + + A directory name of TCP statistics + + + + + open + + IPv4 or IPv6 TCP sockets opened successfully + + + + + openfail + + IPv4 or IPv6 TCP sockets open failures + + + + + close + + IPv4 or IPv6 TCP sockets closed + + + + + connfail + + IPv4 or IPv6 TCP sockets connection failures + + + + + conn + + IPv4 or IPv6 TCP connections established successfully + + + + + senderr + + IPv4 or IPv6 TCP sockets send errors + + + + + recverr + + IPv4 or IPv6 TCP sockets receive errors + + + + + + + + + + + + + + +