BIND 10 trac2062, updated. 7e93a92e0d3f54263bd0d72cbdcb06c30229ac1f [2062] Add tests for isc.sysinfo.SysInfo

BIND 10 source code commits bind10-changes at lists.isc.org
Fri Jun 29 01:10:42 UTC 2012


The branch, trac2062 has been updated
       via  7e93a92e0d3f54263bd0d72cbdcb06c30229ac1f (commit)
       via  9dfb07c8ce80f1082f1d493705d95ece544dd1ca (commit)
       via  f4e22ffd7bfb3ffbc024d801f3c6dbb7312261ec (commit)
      from  04fd11bf0539ea3ace1c103cf4488cb965aec659 (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 7e93a92e0d3f54263bd0d72cbdcb06c30229ac1f
Author: Mukund Sivaraman <muks at isc.org>
Date:   Fri Jun 29 06:40:26 2012 +0530

    [2062] Add tests for isc.sysinfo.SysInfo

commit 9dfb07c8ce80f1082f1d493705d95ece544dd1ca
Author: Mukund Sivaraman <muks at isc.org>
Date:   Fri Jun 29 06:27:33 2012 +0530

    [2062] Add a factory to create system-specific SysInfo instances

commit f4e22ffd7bfb3ffbc024d801f3c6dbb7312261ec
Author: Mukund Sivaraman <muks at isc.org>
Date:   Fri Jun 29 05:49:27 2012 +0530

    [2062] Fix class description

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

Summary of changes:
 configure.ac                                     |    1 +
 src/bin/showtech/showtech.py.in                  |    2 +-
 src/lib/python/isc/sysinfo/Makefile.am           |    2 +
 src/lib/python/isc/sysinfo/sysinfo.py            |  182 ++++++++++++++--------
 src/lib/python/isc/sysinfo/tests/Makefile.am     |   16 ++
 src/lib/python/isc/sysinfo/tests/sysinfo_test.py |   46 ++++++
 6 files changed, 182 insertions(+), 67 deletions(-)
 create mode 100644 src/lib/python/isc/sysinfo/tests/Makefile.am
 create mode 100644 src/lib/python/isc/sysinfo/tests/sysinfo_test.py

-----------------------------------------------------------------------
diff --git a/configure.ac b/configure.ac
index 0ff7982..3fdb6fb 100644
--- a/configure.ac
+++ b/configure.ac
@@ -1084,6 +1084,7 @@ AC_CONFIG_FILES([Makefile
                  src/lib/python/isc/server_common/Makefile
                  src/lib/python/isc/server_common/tests/Makefile
                  src/lib/python/isc/sysinfo/Makefile
+                 src/lib/python/isc/sysinfo/tests/Makefile
                  src/lib/config/Makefile
                  src/lib/config/tests/Makefile
                  src/lib/config/tests/testdata/Makefile
diff --git a/src/bin/showtech/showtech.py.in b/src/bin/showtech/showtech.py.in
index 752a331..cacd163 100755
--- a/src/bin/showtech/showtech.py.in
+++ b/src/bin/showtech/showtech.py.in
@@ -24,7 +24,7 @@ import sys; sys.path.append ('@@PYTHONPATH@@')
 from isc.sysinfo import *
 
 def main():
-    s = SysInfo()
+    s = SysInfoFromFactory()
 
     print('BIND 10 ShowTech tool')
     print('=====================')
diff --git a/src/lib/python/isc/sysinfo/Makefile.am b/src/lib/python/isc/sysinfo/Makefile.am
index 970fbed..aebbc2e 100644
--- a/src/lib/python/isc/sysinfo/Makefile.am
+++ b/src/lib/python/isc/sysinfo/Makefile.am
@@ -1,3 +1,5 @@
+SUBDIRS = . tests
+
 python_PYTHON = __init__.py
 python_PYTHON += sysinfo.py
 
diff --git a/src/lib/python/isc/sysinfo/sysinfo.py b/src/lib/python/isc/sysinfo/sysinfo.py
index ae01fe8..8567070 100644
--- a/src/lib/python/isc/sysinfo/sysinfo.py
+++ b/src/lib/python/isc/sysinfo/sysinfo.py
@@ -13,16 +13,125 @@
 # NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION
 # WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
 
-'''This module returns CPU information.'''
+'''This module returns system information.'''
 
 import os
 import sys
 import re
 import subprocess
 import os.path
+import platform
 
 class SysInfo:
     def __init__(self):
+        self._num_processors = -1
+        self._endianness = 'Unknown'
+        self._hostname = ''
+        self._platform_name = 'Unknown'
+        self._platform_version = 'Unknown'
+        self._platform_machine = 'Unknown'
+        self._platform_is_smp = False
+        self._uptime = -1
+        self._loadavg = [-1.0, -1.0, -1.0]
+        self._mem_total = -1
+        self._mem_free = -1
+        self._mem_cached = -1
+        self._mem_buffers = -1
+        self._mem_swap_total = -1
+        self._mem_swap_free = -1
+        self._platform_distro = 'Unknown'
+        self._net_interfaces = 'Unknown'
+        self._net_routing_table = 'Unknown'
+        self._net_stats = 'Unknown'
+        self._net_connections = 'Unknown'
+
+    def get_num_processors(self):
+        """Returns the number of processors. This is the number of
+        hyperthreads when hyper-threading is enabled.
+        """
+        return self._num_processors
+
+    def get_endianness(self):
+        """Returns 'big' or 'little'."""
+        return self._endianness
+
+    def get_platform_hostname(self):
+        """Returns the hostname of the system."""
+        return self._hostname
+
+    def get_platform_name(self):
+        """Returns the platform name (uname -s)."""
+        return self._platform_name
+
+    def get_platform_version(self):
+        """Returns the platform version (uname -v)."""
+        return self._platform_version
+
+    def get_platform_machine(self):
+        """Returns the platform machine architecture."""
+        return self._platform_machine
+
+    def get_platform_is_smp(self):
+        """Returns True if an SMP kernel is being used, False otherwise."""
+        return self._platform_is_smp
+
+    def get_platform_distro(self):
+        """Returns the name of the OS distribution in use."""
+        return self._platform_distro
+
+    def get_uptime(self):
+        """Returns the uptime in seconds."""
+        return self._uptime
+
+    def get_loadavg(self):
+        """Returns the load average as 3 floating point values in an array."""
+        return self._loadavg
+
+    def get_mem_total(self):
+        """Returns the total amount of memory in bytes."""
+        return self._mem_total
+
+    def get_mem_free(self):
+        """Returns the amount of free memory in bytes."""
+        return self._mem_free
+
+    def get_mem_cached(self):
+        """Returns the amount of cached memory in bytes."""
+        return self._mem_cached
+
+    def get_mem_buffers(self):
+        """Returns the amount of buffer in bytes."""
+        return self._mem_buffers
+
+    def get_mem_swap_total(self):
+        """Returns the total amount of swap in bytes."""
+        return self._mem_swap_total
+
+    def get_mem_swap_free(self):
+        """Returns the amount of free swap in bytes."""
+        return self._mem_swap_free
+
+    def get_net_interfaces(self):
+        """Returns information about network interfaces (as a multi-line string)."""
+        return self._net_interfaces
+
+    def get_net_routing_table(self):
+        """Returns information about network routing table (as a multi-line string)."""
+        return self._net_routing_table
+
+    def get_net_stats(self):
+        """Returns network statistics (as a multi-line string)."""
+        return self._net_stats
+
+    def get_net_connections(self):
+        """Returns network connection information (as a multi-line string)."""
+        return self._net_connections
+
+class SysInfoLinux(SysInfo):
+    """Linux implementation of the SysInfo class.
+    See the base class documentation for more information.
+    """
+    def __init__(self):
         self._num_processors = os.sysconf('SC_NPROCESSORS_CONF')
         self._endianness = sys.byteorder
 
@@ -156,68 +265,9 @@ class SysInfo:
         if self._net_connections is None:
             self._net_connections = 'Unknown'
 
-    def get_num_processors(self):
-        # This is the number of hyperthreads when hyper-threading is
-        # used. This is not entirely portable, so we'll have to handle
-        # the case when it's not available.
-        return self._num_processors
-
-    def get_endianness(self):
-        return self._endianness
-
-    def get_platform_hostname(self):
-        return self._hostname
-
-    def get_platform_name(self):
-        return self._platform_name
-
-    def get_platform_version(self):
-        return self._platform_version
-
-    def get_platform_machine(self):
-        return self._platform_machine
-
-    def get_platform_is_smp(self):
-        return self._platform_is_smp
-
-    def get_platform_distro(self):
-        return self._platform_distro
-
-    def get_uptime(self):
-        return self._uptime
-
-    def get_loadavg(self):
-        return self._loadavg
-
-    def get_mem_total(self):
-        return self._mem_total
-
-    def get_mem_free(self):
-        return self._mem_free
-
-    def get_mem_cached(self):
-        return self._mem_cached
-
-    def get_mem_buffers(self):
-        return self._mem_buffers
-
-    def get_mem_swap_total(self):
-        return self._mem_swap_total
-
-    def get_mem_swap_free(self):
-        return self._mem_swap_free
-
-    def get_mem_swap_free(self):
-        return self._mem_swap_free
-
-    def get_net_interfaces(self):
-        return self._net_interfaces
-
-    def get_net_routing_table(self):
-        return self._net_routing_table
-
-    def get_net_stats(self):
-        return self._net_stats
-
-    def get_net_connections(self):
-        return self._net_connections
+def SysInfoFromFactory():
+    osname = platform.system()
+    if osname == 'Linux':
+        return SysInfoLinux()
+    else:
+        return SysInfo()
diff --git a/src/lib/python/isc/sysinfo/tests/Makefile.am b/src/lib/python/isc/sysinfo/tests/Makefile.am
new file mode 100644
index 0000000..209c71f
--- /dev/null
+++ b/src/lib/python/isc/sysinfo/tests/Makefile.am
@@ -0,0 +1,16 @@
+PYCOVERAGE_RUN = @PYCOVERAGE_RUN@
+PYTESTS = sysinfo_test.py
+EXTRA_DIST = $(PYTESTS)
+
+# test using command-line arguments, so use check-local target instead of TESTS
+check-local:
+if ENABLE_PYTHON_COVERAGE
+	touch $(abs_top_srcdir)/.coverage
+	rm -f .coverage
+	${LN_S} $(abs_top_srcdir)/.coverage .coverage
+endif
+	for pytest in $(PYTESTS) ; do \
+	echo Running test: $$pytest ; \
+	PYTHONPATH=$(COMMON_PYTHON_PATH) \
+	$(PYCOVERAGE_RUN) $(abs_srcdir)/$$pytest || exit ; \
+	done
diff --git a/src/lib/python/isc/sysinfo/tests/sysinfo_test.py b/src/lib/python/isc/sysinfo/tests/sysinfo_test.py
new file mode 100644
index 0000000..239ebd3
--- /dev/null
+++ b/src/lib/python/isc/sysinfo/tests/sysinfo_test.py
@@ -0,0 +1,46 @@
+# Copyright (C) 2012  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.
+
+from isc.sysinfo import *
+import unittest
+
+class SysInfoTest(unittest.TestCase):
+    def test_sysinfo(self):
+        """Test that the various methods on SysInfo exist and return data."""
+
+        s = SysInfo()
+        self.assertEqual(-1, s.get_num_processors())
+        self.assertEqual('Unknown', s.get_endianness())
+        self.assertEqual('', s.get_platform_hostname())
+        self.assertEqual('Unknown', s.get_platform_name())
+        self.assertEqual('Unknown', s.get_platform_version())
+        self.assertEqual('Unknown', s.get_platform_machine())
+        self.assertFalse(s.get_platform_is_smp())
+        self.assertEqual(-1, s.get_uptime())
+        self.assertEqual([-1.0, -1.0, -1.0], s.get_loadavg())
+        self.assertEqual(-1, s.get_mem_total())
+        self.assertEqual(-1, s.get_mem_free())
+        self.assertEqual(-1, s.get_mem_cached())
+        self.assertEqual(-1, s.get_mem_buffers())
+        self.assertEqual(-1, s.get_mem_swap_total())
+        self.assertEqual(-1, s.get_mem_swap_free())
+        self.assertEqual('Unknown', s.get_platform_distro())
+        self.assertEqual('Unknown', s.get_net_interfaces())
+        self.assertEqual('Unknown', s.get_net_routing_table())
+        self.assertEqual('Unknown', s.get_net_stats())
+        self.assertEqual('Unknown', s.get_net_connections())
+
+if __name__ == "__main__":
+    unittest.main()



More information about the bind10-changes mailing list