From fe74b05049f4c76a92f43d2cd08b860a7aba978a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marek=20Marczykowski-G=C3=B3recki?= Date: Wed, 8 Mar 2017 16:21:37 +0100 Subject: [PATCH] tests: migrate basic tools tests --- qubesmgmt/tests/tools/__init__.py | 37 ++++++++ qubesmgmt/tests/tools/init.py | 140 ++++++++++++++++++++++++++++++ 2 files changed, 177 insertions(+) create mode 100644 qubesmgmt/tests/tools/__init__.py create mode 100644 qubesmgmt/tests/tools/init.py diff --git a/qubesmgmt/tests/tools/__init__.py b/qubesmgmt/tests/tools/__init__.py new file mode 100644 index 0000000..933875c --- /dev/null +++ b/qubesmgmt/tests/tools/__init__.py @@ -0,0 +1,37 @@ +# encoding=utf-8 +# +# The Qubes OS Project, https://www.qubes-os.org/ +# +# Copyright (C) 2015 Marek Marczykowski-Górecki +# +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program 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 General Public License for more details. +# +# You should have received a copy of the GNU General Public License along +# with this program; if not, write to the Free Software Foundation, Inc., +# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. +# + + +import io +import sys + +class StdoutBuffer(object): + def __init__(self): + self.stdout = io.StringIO() + + def __enter__(self): + sys.stdout = self.stdout + return self.stdout + + def __exit__(self, exc_type, exc_val, exc_tb): + sys.stdout = sys.__stdout__ + return False diff --git a/qubesmgmt/tests/tools/init.py b/qubesmgmt/tests/tools/init.py new file mode 100644 index 0000000..0559188 --- /dev/null +++ b/qubesmgmt/tests/tools/init.py @@ -0,0 +1,140 @@ +# +# The Qubes OS Project, https://www.qubes-os.org/ +# +# Copyright (C) 2015 Joanna Rutkowska +# Copyright (C) 2015 Wojtek Porczyk +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program 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 General Public License for more details. +# +# You should have received a copy of the GNU General Public License along +# with this program; if not, write to the Free Software Foundation, Inc., +# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. +# + +import argparse + +import qubesmgmt +import qubesmgmt.tools + +import qubesmgmt.tests + +class TC_00_PropertyAction(qubesmgmt.tests.QubesTestCase): + def test_000_default(self): + parser = argparse.ArgumentParser() + parser.add_argument('--property', '-p', + action=qubesmgmt.tools.PropertyAction) + parser.set_defaults(properties={'defaultprop': 'defaultvalue'}) + + args = parser.parse_args([]) + self.assertDictContainsSubset( + {'defaultprop': 'defaultvalue'}, args.properties) + + def test_001_set_prop(self): + parser = argparse.ArgumentParser() + parser.add_argument('--property', '-p', + action=qubesmgmt.tools.PropertyAction) + + args = parser.parse_args(['-p', 'testprop=testvalue']) + self.assertDictContainsSubset( + {'testprop': 'testvalue'}, args.properties) + + def test_002_set_prop_2(self): + parser = argparse.ArgumentParser() + parser.add_argument('--property', '-p', + action=qubesmgmt.tools.PropertyAction) + parser.set_defaults(properties={'defaultprop': 'defaultvalue'}) + + args = parser.parse_args( + ['-p', 'testprop=testvalue', '-p', 'testprop2=testvalue2']) + self.assertDictContainsSubset( + {'testprop': 'testvalue', 'testprop2': 'testvalue2'}, + args.properties) + + def test_003_set_prop_with_default(self): + parser = argparse.ArgumentParser() + parser.add_argument('--property', '-p', + action=qubesmgmt.tools.PropertyAction) + parser.set_defaults(properties={'defaultprop': 'defaultvalue'}) + + args = parser.parse_args(['-p', 'testprop=testvalue']) + self.assertDictContainsSubset( + {'testprop': 'testvalue', 'defaultprop': 'defaultvalue'}, + args.properties) + + def test_003_set_prop_override_default(self): + # pylint: disable=invalid-name + parser = argparse.ArgumentParser() + parser.add_argument('--property', '-p', + action=qubesmgmt.tools.PropertyAction) + parser.set_defaults(properties={'testprop': 'defaultvalue'}) + + args = parser.parse_args(['-p', 'testprop=testvalue']) + self.assertDictContainsSubset( + {'testprop': 'testvalue'}, + args.properties) + + +class TC_01_SinglePropertyAction(qubesmgmt.tests.QubesTestCase): + def test_000_help(self): + parser = argparse.ArgumentParser() + action = parser.add_argument('--testprop', '-T', + action=qubesmgmt.tools.SinglePropertyAction) + self.assertIn('testprop', action.help) + + def test_001_help_const(self): + parser = argparse.ArgumentParser() + action = parser.add_argument('--testprop', '-T', + action=qubesmgmt.tools.SinglePropertyAction, + const='testvalue') + self.assertIn('testvalue', action.help) + + def test_100_default(self): + parser = argparse.ArgumentParser() + parser.add_argument('--testprop', '-T', + action=qubesmgmt.tools.SinglePropertyAction) + parser.set_defaults(properties={'testprop': 'defaultvalue'}) + + args = parser.parse_args([]) + self.assertDictContainsSubset( + {'testprop': 'defaultvalue'}, args.properties) + + def test_101_set_prop(self): + parser = argparse.ArgumentParser() + parser.add_argument('--testprop', '-T', + action=qubesmgmt.tools.SinglePropertyAction) + args = parser.parse_args(['-T', 'testvalue']) + self.assertDictContainsSubset( + {'testprop': 'testvalue'}, args.properties) + + def test_102_set_prop_dest(self): + parser = argparse.ArgumentParser() + parser.add_argument('--testprop', '-T', dest='otherprop', + action=qubesmgmt.tools.SinglePropertyAction) + args = parser.parse_args(['-T', 'testvalue']) + self.assertDictContainsSubset( + {'otherprop': 'testvalue'}, args.properties) + + def test_103_set_prop_const(self): + parser = argparse.ArgumentParser() + parser.add_argument('--testprop', '-T', + action=qubesmgmt.tools.SinglePropertyAction, + const='testvalue') + args = parser.parse_args(['-T']) + self.assertDictContainsSubset( + {'testprop': 'testvalue'}, args.properties) + + def test_104_set_prop_positional(self): + parser = argparse.ArgumentParser() + parser.add_argument('testprop', + action=qubesmgmt.tools.SinglePropertyAction) + args = parser.parse_args(['testvalue']) + self.assertDictContainsSubset( + {'testprop': 'testvalue'}, args.properties)