diff --git a/unitest-restful.py b/unitest-restful.py index f5d9469a..6f413c8f 100755 --- a/unitest-restful.py +++ b/unitest-restful.py @@ -113,8 +113,8 @@ class TestGlances(unittest.TestCase): req = requests.get("%s/%s" % (URL, method)) self.assertTrue(req.ok) - self.assertIsInstance(req.json, types.ListType) - self.assertIn('cpu', req.json) + self.assertIsInstance(req.json(), types.ListType) + self.assertIn('cpu', req.json()) def test_003_plugins(self): """Plugins""" @@ -123,18 +123,20 @@ class TestGlances(unittest.TestCase): plist = requests.get("%s/%s" % (URL, method)) - for p in plist.json: + print plist.json() + + for p in plist.json(): print("HTTP RESTFul request: %s/%s" % (URL, p)) req = requests.get("%s/%s" % (URL, p)) self.assertTrue(req.ok) if p in ('uptime', 'now'): - self.assertIsInstance(req.json, types.UnicodeType) + self.assertIsInstance(req.json(), types.UnicodeType) elif p in ('fs', 'monitor', 'percpu', 'sensors', 'alert', 'processlist', 'diskio', 'hddtemp', 'batpercent', 'network'): - self.assertIsInstance(req.json, types.ListType) + self.assertIsInstance(req.json(), types.ListType) elif p in ('psutilversion', 'help'): pass else: - self.assertIsInstance(req.json, types.DictType) + self.assertIsInstance(req.json(), types.DictType) def test_004_items(self): """Items""" @@ -143,12 +145,12 @@ class TestGlances(unittest.TestCase): ilist = requests.get("%s/%s" % (URL, method)) - for i in ilist.json: + for i in ilist.json(): print("HTTP RESTFul request: %s/%s/%s" % (URL, method,i)) req = requests.get("%s/%s/%s" % (URL, method, i)) self.assertTrue(req.ok) - self.assertIsInstance(req.json, types.DictType) - self.assertIsInstance(req.json[i], types.FloatType) + self.assertIsInstance(req.json(), types.DictType) + self.assertIsInstance(req.json()[i], types.FloatType) def test_005_values(self): """Valuess""" @@ -159,7 +161,7 @@ class TestGlances(unittest.TestCase): req = requests.get("%s/%s/pid/0" % (URL, method)) self.assertTrue(req.ok) - self.assertIsInstance(req.json, types.DictType) + self.assertIsInstance(req.json(), types.DictType) def test_999_stop_server(self): """Stop the Glances Web Server""" diff --git a/unitest-xmlrpc.py b/unitest-xmlrpc.py new file mode 100755 index 00000000..d1e56d4f --- /dev/null +++ b/unitest-xmlrpc.py @@ -0,0 +1,206 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- +# +# Glances - An eye on your system +# +# Copyright (C) 2014 Nicolargo +# +# Glances is free software; you can redistribute it and/or modify +# it under the terms of the GNU Lesser General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# Glances is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public License +# along with this program. If not, see . + +"""Glances unitary tests suite for the XML/RPC API.""" + +import gettext +import locale +import sys +import time +import unittest +import shlex +import subprocess +import xmlrpclib +import json +import types + +from glances.core.glances_globals import ( + appname, + is_linux, + version +) + +SERVER_PORT = 61234 +URL = "http://localhost:%s" % SERVER_PORT +pid = None + +# Global variables +# ================= + +# Unitary test is only available from a GNU/Linus machine +if not is_linux: + print('ERROR: XML/RPC API unitaries tests should be ran on GNU/Linux operating system') + sys.exit(2) +else: + print('Unitary tests for {0} {1}'.format(appname, version)) + +# Import local settings +from glances.core.glances_globals import gettext_domain, locale_dir +locale.setlocale(locale.LC_ALL, '') +gettext.install(gettext_domain, locale_dir) + +# Init Glances core +from glances.core.glances_main import GlancesMain +core = GlancesMain() +if not core.is_standalone(): + print('ERROR: Glances core should be ran in standalone mode') + sys.exit(1) + +# Init Glances stats +from glances.core.glances_stats import GlancesStats +stats = GlancesStats() + +# Init the XML/RCP client +client = xmlrpclib.ServerProxy(URL) + +# Unitest class +# ============== + +class TestGlances(unittest.TestCase): + + """Test Glances class.""" + + def setUp(self): + """The function is called *every time* before test_*.""" + print('\n' + '=' * 78) + + def test_000_start_server(self): + """Start the Glances Web Server""" + print('INFO: [TEST_000] Start the Glances Web Server') + + global pid + + cmdline = "/usr/bin/python -m glances -s -p %s" % SERVER_PORT + print("Run the Glances Server on port %s" % SERVER_PORT) + args = shlex.split(cmdline) + pid = subprocess.Popen(args) + print("Please wait...") + time.sleep(1) + + self.assertTrue(pid is not None) + + def test_001_all(self): + """All""" + method = "getAll()" + print('INFO: [TEST_001] Connection test') + + print("XML/RPC request: %s" % method) + req = json.loads(client.getAll()) + + self.assertIsInstance(req, types.DictType) + + def test_002_pluginslist(self): + """Plugins list""" + method = "getAllPlugins()" + print('INFO: [TEST_002] Get plugins list') + + print("XML/RPC request: %s" % method) + req = json.loads(client.getAllPlugins()) + + self.assertIsInstance(req, types.ListType) + + def test_003_system(self): + """System""" + method = "getSystem()" + print('INFO: [TEST_003] Method: %s' % method) + + req = json.loads(client.getSystem()) + + self.assertIsInstance(req, types.DictType) + + def test_004_cpu(self): + """CPU""" + method = "getCpu(), getPerCpu(), getLoad() and getCore()" + print('INFO: [TEST_004] Method: %s' % method) + + req = json.loads(client.getCpu()) + self.assertIsInstance(req, types.DictType) + + req = json.loads(client.getPerCpu()) + self.assertIsInstance(req, types.ListType) + + req = json.loads(client.getLoad()) + self.assertIsInstance(req, types.DictType) + + req = json.loads(client.getCore()) + self.assertIsInstance(req, types.DictType) + + def test_005_mem(self): + """MEM""" + method = "getMem() and getMemSwap()" + print('INFO: [TEST_005] Method: %s' % method) + + req = json.loads(client.getMem()) + self.assertIsInstance(req, types.DictType) + + req = json.loads(client.getMemSwap()) + self.assertIsInstance(req, types.DictType) + + def test_006_net(self): + """NETWORK""" + method = "getNetwork()" + print('INFO: [TEST_006] Method: %s' % method) + + req = json.loads(client.getNetwork()) + self.assertIsInstance(req, types.ListType) + + def test_007_disk(self): + """DISK""" + method = "getFs() and getDiskIO()" + print('INFO: [TEST_007] Method: %s' % method) + + req = json.loads(client.getFs()) + self.assertIsInstance(req, types.ListType) + + req = json.loads(client.getDiskIO()) + self.assertIsInstance(req, types.ListType) + + def test_008_sensors(self): + """SENSORS""" + method = "getSensors()" + print('INFO: [TEST_008] Method: %s' % method) + + req = json.loads(client.getSensors()) + self.assertIsInstance(req, types.ListType) + + def test_009_process(self): + """PROCESS""" + method = "getProcessCount() and getProcessList()" + print('INFO: [TEST_009] Method: %s' % method) + + req = json.loads(client.getProcessCount()) + self.assertIsInstance(req, types.DictType) + + req = json.loads(client.getProcessList()) + self.assertIsInstance(req, types.ListType) + + def test_999_stop_server(self): + """Stop the Glances Web Server""" + print('INFO: [TEST_999] Stop the Glances Server') + + print("Stop the Glances Server") + pid.terminate() + print("Please wait...") + time.sleep(1) + + self.assertTrue(True) + +if __name__ == '__main__': + unittest.main()