Allow the passing of template parameters via the command-line as JSON #15

Closed
wants to merge 1 commit into
from
Jump to file or symbol
Failed to load files and symbols.
+53 −1
Split
View
@@ -19,6 +19,9 @@
import dbusmock.mockobject
import dbusmock.testcase
+import json
+import sys
+
def parse_args():
parser = argparse.ArgumentParser(description='mock D-BUS object')
@@ -36,6 +39,8 @@ def parse_args():
help='main D-BUS interface name for initial object (if not using -t)')
parser.add_argument('-m', '--is-object-manager', action='store_true',
help='automatically implement the org.freedesktop.DBus.ObjectManager interface')
+ parser.add_argument('-p', '--parameters',
+ help='JSON dictionary of parameters to pass to the template')
args = parser.parse_args()
@@ -91,8 +96,20 @@ def parse_args():
args.logfile,
args.is_object_manager)
+ parameters = None
+ if args.parameters:
+ try:
+ parameters = json.loads(args.parameters)
+ except ValueError as detail:
+ print "Malformed JSON given for parameters: %s" % detail
+ sys.exit(2)
+
+ if not isinstance(parameters, dict):
+ print "JSON parameters must be a dict type"
+ sys.exit(2)
+
if args.template:
- main_object.AddTemplate(args.template, None)
+ main_object.AddTemplate(args.template, parameters)
dbusmock.mockobject.objects[args.path] = main_object
main_loop.run()
View
@@ -75,6 +75,41 @@ def test_template_system(self):
self.assertTrue('EnumerateDevices' in mock_out or 'GetAll' in mock_out,
mock_out)
+ def test_template_parameters(self):
+ self.p_mock = subprocess.Popen([sys.executable, '-m', 'dbusmock',
+ '--system', '-t', 'upower',
+ '-p', '{"DaemonVersion": "0.99.0", "OnBattery": true}'],
+ stdout=subprocess.PIPE,
+ universal_newlines=True)
+ self.wait_for_bus_object('org.freedesktop.UPower', '/org/freedesktop/UPower', True)
+
+ # check that it actually ran the template, if we have upower
+ if have_upower:
+ out = subprocess.check_output(['upower', '--dump'],
+ universal_newlines=True)
+ self.assertRegex(out, 'daemon-version:\s+0\\.99\\.0')
+ self.assertRegex(out, 'on-battery:\s+yes')
+
+ def test_template_parameters_malformed_json(self):
+ with self.assertRaises(subprocess.CalledProcessError) as cm:
+ subprocess.check_output([sys.executable, '-m', 'dbusmock',
+ '--system', '-t', 'upower', '-p',
+ '{"DaemonVersion: "0.99.0"}'],
+ universal_newlines=True)
+ err = cm.exception
+ self.assertEqual(err.returncode, 2)
+ self.assertEqual(err.output, 'Malformed JSON given for parameters: Expecting : delimiter: line 1 column 19 (char 18)\n')
+
+ def test_template_parameters_not_dict(self):
+ with self.assertRaises(subprocess.CalledProcessError) as cm:
+ subprocess.check_output([sys.executable, '-m', 'dbusmock',
+ '--system', '-t', 'upower', '-p',
+ '"banana"'],
+ universal_newlines=True)
+ err = cm.exception
+ self.assertEqual(err.returncode, 2)
+ self.assertEqual(err.output, 'JSON parameters must be a dict type\n')
+
def test_object_manager(self):
self.p_mock = subprocess.Popen([sys.executable, '-m', 'dbusmock',
'-m', 'com.example.Test', '/', 'TestIface'],