Blob Blame History Raw
From 99ecd06f1f6028bcf9bd7d4ece7f3ce8df39077b Mon Sep 17 00:00:00 2001
From: Eric Garver <eric@garver.life>
Date: Tue, 25 Jun 2019 18:19:08 -0400
Subject: [PATCH 17/20] test: dbus: coverage for new service APIs

(cherry picked from commit 335f238481401e97f3a9bc6773295fe34c89962c)
---
 src/tests/dbus/service.at | 165 +++++++++++++++++++++++++++++++++++++-
 1 file changed, 164 insertions(+), 1 deletion(-)

diff --git a/src/tests/dbus/service.at b/src/tests/dbus/service.at
index 579548d66509..8ad9334aaa56 100644
--- a/src/tests/dbus/service.at
+++ b/src/tests/dbus/service.at
@@ -287,4 +287,167 @@ DBUS_CHECK([], [getServiceSettings], ["foobar"], 0, [dnl
     [(('1.1', 'foobar new', 'foobar new service is for foobar', [('12345', 'udp'), ('2222', 'tcp')], ['ftp'], @a{ss} {}, ['icmp'], [('4321', 'tcp')]),)]
 ])
 
-FWD_END_TEST
+
+dnl ===============
+dnl New APIs tests
+dnl ===============
+
+dnl modify service with new API that was created with old API
+dnl Verify old APIs also reflect the change.
+DBUS_CHECK([config], [config.addService],
+    ["foobar-old" dnl name
+     '("1.0", dnl version
+       "foobar-old", dnl short
+       "foobar-old service is for foobar-old", dnl description
+       @<:@("1234", "udp"), ("22", "tcp"), ("1234", "udp")@:>@, dnl ports, deliberate duplicate
+       @<:@"ftp"@:>@, dnl modules
+       {}, dnl destination
+       @<:@@:>@, dnl protocols
+       @<:@("4321", "tcp"), ("4321", "udp")@:>@ dnl source ports
+     )'dnl
+    ], 0, [stdout])
+SERVICE_OBJ=[$(sed -e "s/.*config\/service\/\([^']\+\)['].*/\1/" ./stdout)]
+export SERVICE_OBJ
+DBUS_CHECK([config/service/${SERVICE_OBJ}], [config.service.update2],
+    ['{"version": <"1.1">,
+       "includes": <@<:@"https"@:>@>,
+       "protocols": <@<:@"icmp"@:>@>
+     }'dnl
+    ], 0, [ignore])
+
+DBUS_CHECK([config/service/${SERVICE_OBJ}], [config.service.getSettings], [], 0, [dnl
+    [(('1.1', 'foobar-old', 'foobar-old service is for foobar-old', [('1234', 'udp'), ('22', 'tcp')], ['ftp'], @a{ss} {}, ['icmp'], [('4321', 'tcp'), ('4321', 'udp')]),)]
+])
+DBUS_CHECK([config/service/${SERVICE_OBJ}], [config.service.getSettings2], [], 0, [dnl
+   ['description': <'foobar-old service is for foobar-old'>
+    'includes': <['https']>
+    'modules': <['ftp']>
+    'ports': <[('1234', 'udp'), ('22', 'tcp')]>
+    'protocols': <['icmp']>
+    'short': <'foobar-old'>
+    'source_ports': <[('4321', 'tcp'), ('4321', 'udp')]>
+    'version': <'1.1'>]
+])
+
+FWD_RELOAD
+DBUS_CHECK([], [getServiceSettings], ["foobar-old"], 0, [dnl
+    [(('1.1', 'foobar-old', 'foobar-old service is for foobar-old', [('1234', 'udp'), ('22', 'tcp')], ['ftp'], @a{ss} {}, ['icmp'], [('4321', 'tcp'), ('4321', 'udp')]),)]
+])
+DBUS_CHECK([], [getServiceSettings2], ["foobar-old"], 0, [dnl
+   ['description': <'foobar-old service is for foobar-old'>
+    'includes': <['https']>
+    'modules': <['ftp']>
+    'ports': <[('1234', 'udp'), ('22', 'tcp')]>
+    'protocols': <['icmp']>
+    'short': <'foobar-old'>
+    'source_ports': <[('4321', 'tcp'), ('4321', 'udp')]>
+    'version': <'1.1'>]
+])
+
+dnl add service with new API
+DBUS_INTROSPECT([config], [[//method[@name="addService2"]]], 0, [dnl
+    <method name="addService2">
+        <arg direction="in" name="service" type="s"/>
+        <arg direction="in" name="settings" type="a{sv}"/>
+        <arg direction="out" type="o"/>
+    </method>
+])
+DBUS_CHECK([config], [config.addService2],
+    ["foobar-dict" dnl name
+     '{"version": <"1.0">,
+       "short": <"foobar-dict">,
+       "description": <"foobar-dict service is for foobar-dict">,
+       "ports": <@<:@("1234", "udp"), ("22", "tcp"), ("1234", "udp")@:>@>,
+       "modules": <@<:@"ftp"@:>@>,
+       "destination": <{"ipv6": "1234::4321"}>,
+       "protocols": <@<:@"icmp", "igmp"@:>@>,
+       "source_ports": <@<:@("4321", "tcp"), ("4321", "udp")@:>@>,
+       "includes": <@<:@"https", "samba"@:>@>
+     }'dnl
+    ], 0, [stdout])
+SERVICE_OBJ=[$(sed -e "s/.*config\/service\/\([^']\+\)['].*/\1/" ./stdout)]
+export SERVICE_OBJ
+
+DBUS_INTROSPECT([config/service/${SERVICE_OBJ}], [[//method[@name="getSettings2"]]], 0, [dnl
+    <method name="getSettings2">
+        <arg direction="out" type="a{sv}"/>
+    </method>
+])
+DBUS_CHECK([config/service/${SERVICE_OBJ}], [config.service.getSettings2], [], 0, [dnl
+   ['description': <'foobar-dict service is for foobar-dict'>
+    'destination': <{'ipv6': '1234::4321'}>
+    'includes': <['https', 'samba']>
+    'modules': <['ftp']>
+    'ports': <[('1234', 'udp'), ('22', 'tcp')]>
+    'protocols': <['icmp', 'igmp']>
+    'short': <'foobar-dict'>
+    'source_ports': <[('4321', 'tcp'), ('4321', 'udp')]>
+    'version': <'1.0'>]
+])
+
+dnl New API allows partial updates to service object
+DBUS_INTROSPECT([config/service/${SERVICE_OBJ}], [[//method[@name="update2"]]], 0, [dnl
+    <method name="update2">
+        <arg direction="in" name="settings" type="a{sv}"/>
+    </method>
+])
+DBUS_CHECK([config/service/${SERVICE_OBJ}], [config.service.update2],
+    ['{"version": <"1.1">,
+       "includes": <@<:@"https", "samba", "http"@:>@>
+     }'dnl
+    ], 0, [ignore])
+DBUS_CHECK([config/service/${SERVICE_OBJ}], [config.service.getSettings2], [], 0, [dnl
+   ['description': <'foobar-dict service is for foobar-dict'>
+    'destination': <{'ipv6': '1234::4321'}>
+    'includes': <['https', 'samba', 'http']>
+    'modules': <['ftp']>
+    'ports': <[('1234', 'udp'), ('22', 'tcp')]>
+    'protocols': <['icmp', 'igmp']>
+    'short': <'foobar-dict'>
+    'source_ports': <[('4321', 'tcp'), ('4321', 'udp')]>
+    'version': <'1.1'>]
+])
+
+dnl To zero a field you have to set it with an empty value
+DBUS_CHECK([config/service/${SERVICE_OBJ}], [config.service.update2],
+    ['{"version": <"1.2">,
+       "includes": <@as @<:@@:>@>
+     }'dnl
+    ], 0, [ignore])
+DBUS_CHECK([config/service/${SERVICE_OBJ}], [config.service.getSettings2], [], 0, [dnl
+   ['description': <'foobar-dict service is for foobar-dict'>
+    'destination': <{'ipv6': '1234::4321'}>
+    'modules': <['ftp']>
+    'ports': <[('1234', 'udp'), ('22', 'tcp')]>
+    'protocols': <['icmp', 'igmp']>
+    'short': <'foobar-dict'>
+    'source_ports': <[('4321', 'tcp'), ('4321', 'udp')]>
+    'version': <'1.2'>]
+])
+
+FWD_RELOAD
+DBUS_INTROSPECT([], [[//method[@name="getServiceSettings2"]]], 0, [dnl
+    <method name="getServiceSettings2">
+        <arg direction="in" name="service" type="s"/>
+        <arg direction="out" type="a{sv}"/>
+    </method>
+])
+DBUS_CHECK([], [getServiceSettings2], ["foobar-dict"], 0, [dnl
+   ['description': <'foobar-dict service is for foobar-dict'>
+    'destination': <{'ipv6': '1234::4321'}>
+    'modules': <['ftp']>
+    'ports': <[('1234', 'udp'), ('22', 'tcp')]>
+    'protocols': <['icmp', 'igmp']>
+    'short': <'foobar-dict'>
+    'source_ports': <[('4321', 'tcp'), ('4321', 'udp')]>
+    'version': <'1.2'>]
+])
+
+dnl bogus arguments
+DBUS_CHECK([config/service/${SERVICE_OBJ}], [config.service.update2],
+    ['{"version": <"1.3">,
+       "thisdoesnotexist": <"">
+     }'dnl
+    ], 1, [ignore], [ignore])
+
+FWD_END_TEST([-e '/ERROR: INVALID_OPTION: service option/d'])
-- 
2.20.1