|
|
8a3219 |
From 0d526d6f20695b48d374b1966038ac5c4397e17c Mon Sep 17 00:00:00 2001
|
|
|
8a3219 |
From: Eric Garver <eric@garver.life>
|
|
|
8a3219 |
Date: Mon, 24 Jun 2019 10:20:23 -0400
|
|
|
8a3219 |
Subject: [PATCH 15/20] test: dbus: service API coverage
|
|
|
8a3219 |
|
|
|
8a3219 |
(cherry picked from commit b0ecd9e3916a691fa7adefa258e7ab0df2e9e1ea)
|
|
|
8a3219 |
---
|
|
|
8a3219 |
src/tests/dbus.at | 1 +
|
|
|
8a3219 |
src/tests/dbus/service.at | 290 ++++++++++++++++++++++++++++++++++++++
|
|
|
8a3219 |
2 files changed, 291 insertions(+)
|
|
|
8a3219 |
create mode 100644 src/tests/dbus/service.at
|
|
|
8a3219 |
|
|
|
8a3219 |
diff --git a/src/tests/dbus.at b/src/tests/dbus.at
|
|
|
8a3219 |
index 4cb0568cbc9c..46fec2ff4024 100644
|
|
|
8a3219 |
--- a/src/tests/dbus.at
|
|
|
8a3219 |
+++ b/src/tests/dbus.at
|
|
|
8a3219 |
@@ -1,2 +1,3 @@
|
|
|
8a3219 |
AT_BANNER([dbus])
|
|
|
8a3219 |
m4_include([dbus/firewalld.conf.at])
|
|
|
8a3219 |
+m4_include([dbus/service.at])
|
|
|
8a3219 |
diff --git a/src/tests/dbus/service.at b/src/tests/dbus/service.at
|
|
|
8a3219 |
new file mode 100644
|
|
|
8a3219 |
index 000000000000..579548d66509
|
|
|
8a3219 |
--- /dev/null
|
|
|
8a3219 |
+++ b/src/tests/dbus/service.at
|
|
|
8a3219 |
@@ -0,0 +1,290 @@
|
|
|
8a3219 |
+FWD_START_TEST([dbus api - services])
|
|
|
8a3219 |
+AT_KEYWORDS(dbus service rhbz1721414)
|
|
|
8a3219 |
+
|
|
|
8a3219 |
+DBUS_INTROSPECT([config], [[//method[@name="addService"]]], 0, [dnl
|
|
|
8a3219 |
+ <method name="addService">
|
|
|
8a3219 |
+ <arg direction="in" name="service" type="s"/>
|
|
|
8a3219 |
+ <arg direction="in" name="settings" type="(sssa(ss)asa{ss}asa(ss))"/>
|
|
|
8a3219 |
+ <arg direction="out" type="o"/>
|
|
|
8a3219 |
+ </method>
|
|
|
8a3219 |
+])
|
|
|
8a3219 |
+DBUS_CHECK([config], [config.addService],
|
|
|
8a3219 |
+ ["foobar" dnl name
|
|
|
8a3219 |
+ '("1.0", dnl version
|
|
|
8a3219 |
+ "foobar", dnl short
|
|
|
8a3219 |
+ "foobar service is for foobar", dnl description
|
|
|
8a3219 |
+ @<:@("1234", "udp"), ("22", "tcp"), ("1234", "udp")@:>@, dnl ports, deliberate duplicate
|
|
|
8a3219 |
+ @<:@"ftp"@:>@, dnl modules
|
|
|
8a3219 |
+ {"ipv4": "1.2.3.4"}, dnl destination
|
|
|
8a3219 |
+ @<:@"icmp", "igmp"@:>@, dnl protocols
|
|
|
8a3219 |
+ @<:@("4321", "tcp"), ("4321", "udp")@:>@ dnl source ports
|
|
|
8a3219 |
+ )'dnl
|
|
|
8a3219 |
+ ], 0, [stdout])
|
|
|
8a3219 |
+SERVICE_OBJ=[$(sed -e "s/.*config\/service\/\([^']\+\)['].*/\1/" ./stdout)]
|
|
|
8a3219 |
+export SERVICE_OBJ
|
|
|
8a3219 |
+
|
|
|
8a3219 |
+DBUS_INTROSPECT([config/service/${SERVICE_OBJ}], [[//method[@name="getSettings"]]], 0, [dnl
|
|
|
8a3219 |
+ <method name="getSettings">
|
|
|
8a3219 |
+ <arg direction="out" type="(sssa(ss)asa{ss}asa(ss))"/>
|
|
|
8a3219 |
+ </method>
|
|
|
8a3219 |
+])
|
|
|
8a3219 |
+DBUS_CHECK([config/service/${SERVICE_OBJ}], [config.service.getSettings], [], 0, [dnl
|
|
|
8a3219 |
+ [(('1.0', 'foobar', 'foobar service is for foobar', [('1234', 'udp'), ('22', 'tcp')], ['ftp'], {'ipv4': '1.2.3.4'}, ['icmp', 'igmp'], [('4321', 'tcp'), ('4321', 'udp')]),)]
|
|
|
8a3219 |
+])
|
|
|
8a3219 |
+
|
|
|
8a3219 |
+DBUS_INTROSPECT([config/service/${SERVICE_OBJ}], [[//method[@name="update"]]], 0, [dnl
|
|
|
8a3219 |
+ <method name="update">
|
|
|
8a3219 |
+ <arg direction="in" name="settings" type="(sssa(ss)asa{ss}asa(ss))"/>
|
|
|
8a3219 |
+ </method>
|
|
|
8a3219 |
+])
|
|
|
8a3219 |
+DBUS_CHECK([config/service/${SERVICE_OBJ}], [config.service.update],
|
|
|
8a3219 |
+ ['("1.1", dnl version
|
|
|
8a3219 |
+ "foobar new", dnl short
|
|
|
8a3219 |
+ "foobar new service is for foobar", dnl description
|
|
|
8a3219 |
+ @<:@("12345", "udp"), ("2222", "tcp")@:>@, dnl ports
|
|
|
8a3219 |
+ @<:@"ftp"@:>@, dnl modules
|
|
|
8a3219 |
+ {}, dnl destination
|
|
|
8a3219 |
+ @<:@"icmp"@:>@, dnl protocols
|
|
|
8a3219 |
+ @<:@("4321", "tcp")@:>@ dnl source ports
|
|
|
8a3219 |
+ )'dnl
|
|
|
8a3219 |
+ ], 0, [ignore])
|
|
|
8a3219 |
+
|
|
|
8a3219 |
+DBUS_CHECK([config/service/${SERVICE_OBJ}], [config.service.getSettings], [], 0, [dnl
|
|
|
8a3219 |
+ [(('1.1', 'foobar new', 'foobar new service is for foobar', [('12345', 'udp'), ('2222', 'tcp')], ['ftp'], @a{ss} {}, ['icmp'], [('4321', 'tcp')]),)]
|
|
|
8a3219 |
+])
|
|
|
8a3219 |
+
|
|
|
8a3219 |
+DBUS_INTROSPECT([config/service/${SERVICE_OBJ}], [[//method[@name="loadDefaults"]]], 0, [dnl
|
|
|
8a3219 |
+ <method name="loadDefaults">
|
|
|
8a3219 |
+ </method>
|
|
|
8a3219 |
+])
|
|
|
8a3219 |
+DBUS_INTROSPECT([config/service/${SERVICE_OBJ}], [[//method[@name="remove"]]], 0, [dnl
|
|
|
8a3219 |
+ <method name="remove">
|
|
|
8a3219 |
+ </method>
|
|
|
8a3219 |
+])
|
|
|
8a3219 |
+DBUS_INTROSPECT([config/service/${SERVICE_OBJ}], [[//method[@name="rename"]]], 0, [dnl
|
|
|
8a3219 |
+ <method name="rename">
|
|
|
8a3219 |
+ <arg direction="in" name="name" type="s"/>
|
|
|
8a3219 |
+ </method>
|
|
|
8a3219 |
+])
|
|
|
8a3219 |
+
|
|
|
8a3219 |
+DBUS_INTROSPECT([config/service/${SERVICE_OBJ}], [[//method[@name="getVersion"]]], 0, [dnl
|
|
|
8a3219 |
+ <method name="getVersion">
|
|
|
8a3219 |
+ <arg direction="out" type="s"/>
|
|
|
8a3219 |
+ </method>
|
|
|
8a3219 |
+])
|
|
|
8a3219 |
+DBUS_INTROSPECT([config/service/${SERVICE_OBJ}], [[//method[@name="setVersion"]]], 0, [dnl
|
|
|
8a3219 |
+ <method name="setVersion">
|
|
|
8a3219 |
+ <arg direction="in" name="version" type="s"/>
|
|
|
8a3219 |
+ </method>
|
|
|
8a3219 |
+])
|
|
|
8a3219 |
+
|
|
|
8a3219 |
+DBUS_INTROSPECT([config/service/${SERVICE_OBJ}], [[//method[@name="getShort"]]], 0, [dnl
|
|
|
8a3219 |
+ <method name="getShort">
|
|
|
8a3219 |
+ <arg direction="out" type="s"/>
|
|
|
8a3219 |
+ </method>
|
|
|
8a3219 |
+])
|
|
|
8a3219 |
+DBUS_INTROSPECT([config/service/${SERVICE_OBJ}], [[//method[@name="setShort"]]], 0, [dnl
|
|
|
8a3219 |
+ <method name="setShort">
|
|
|
8a3219 |
+ <arg direction="in" name="short" type="s"/>
|
|
|
8a3219 |
+ </method>
|
|
|
8a3219 |
+])
|
|
|
8a3219 |
+
|
|
|
8a3219 |
+DBUS_INTROSPECT([config/service/${SERVICE_OBJ}], [[//method[@name="getDescription"]]], 0, [dnl
|
|
|
8a3219 |
+ <method name="getDescription">
|
|
|
8a3219 |
+ <arg direction="out" type="s"/>
|
|
|
8a3219 |
+ </method>
|
|
|
8a3219 |
+])
|
|
|
8a3219 |
+DBUS_INTROSPECT([config/service/${SERVICE_OBJ}], [[//method[@name="setDescription"]]], 0, [dnl
|
|
|
8a3219 |
+ <method name="setDescription">
|
|
|
8a3219 |
+ <arg direction="in" name="description" type="s"/>
|
|
|
8a3219 |
+ </method>
|
|
|
8a3219 |
+])
|
|
|
8a3219 |
+
|
|
|
8a3219 |
+DBUS_INTROSPECT([config/service/${SERVICE_OBJ}], [[//method[@name="getPorts"]]], 0, [dnl
|
|
|
8a3219 |
+ <method name="getPorts">
|
|
|
8a3219 |
+ <arg direction="out" type="a(ss)"/>
|
|
|
8a3219 |
+ </method>
|
|
|
8a3219 |
+])
|
|
|
8a3219 |
+DBUS_INTROSPECT([config/service/${SERVICE_OBJ}], [[//method[@name="setPorts"]]], 0, [dnl
|
|
|
8a3219 |
+ <method name="setPorts">
|
|
|
8a3219 |
+ <arg direction="in" name="ports" type="a(ss)"/>
|
|
|
8a3219 |
+ </method>
|
|
|
8a3219 |
+])
|
|
|
8a3219 |
+DBUS_INTROSPECT([config/service/${SERVICE_OBJ}], [[//method[@name="addPort"]]], 0, [dnl
|
|
|
8a3219 |
+ <method name="addPort">
|
|
|
8a3219 |
+ <arg direction="in" name="port" type="s"/>
|
|
|
8a3219 |
+ <arg direction="in" name="protocol" type="s"/>
|
|
|
8a3219 |
+ </method>
|
|
|
8a3219 |
+])
|
|
|
8a3219 |
+DBUS_INTROSPECT([config/service/${SERVICE_OBJ}], [[//method[@name="removePort"]]], 0, [dnl
|
|
|
8a3219 |
+ <method name="removePort">
|
|
|
8a3219 |
+ <arg direction="in" name="port" type="s"/>
|
|
|
8a3219 |
+ <arg direction="in" name="protocol" type="s"/>
|
|
|
8a3219 |
+ </method>
|
|
|
8a3219 |
+])
|
|
|
8a3219 |
+DBUS_INTROSPECT([config/service/${SERVICE_OBJ}], [[//method[@name="queryPort"]]], 0, [dnl
|
|
|
8a3219 |
+ <method name="queryPort">
|
|
|
8a3219 |
+ <arg direction="in" name="port" type="s"/>
|
|
|
8a3219 |
+ <arg direction="in" name="protocol" type="s"/>
|
|
|
8a3219 |
+ <arg direction="out" type="b"/>
|
|
|
8a3219 |
+ </method>
|
|
|
8a3219 |
+])
|
|
|
8a3219 |
+
|
|
|
8a3219 |
+DBUS_INTROSPECT([config/service/${SERVICE_OBJ}], [[//method[@name="getSourcePorts"]]], 0, [dnl
|
|
|
8a3219 |
+ <method name="getSourcePorts">
|
|
|
8a3219 |
+ <arg direction="out" type="a(ss)"/>
|
|
|
8a3219 |
+ </method>
|
|
|
8a3219 |
+])
|
|
|
8a3219 |
+DBUS_INTROSPECT([config/service/${SERVICE_OBJ}], [[//method[@name="setSourcePorts"]]], 0, [dnl
|
|
|
8a3219 |
+ <method name="setSourcePorts">
|
|
|
8a3219 |
+ <arg direction="in" name="ports" type="a(ss)"/>
|
|
|
8a3219 |
+ </method>
|
|
|
8a3219 |
+])
|
|
|
8a3219 |
+DBUS_INTROSPECT([config/service/${SERVICE_OBJ}], [[//method[@name="addSourcePort"]]], 0, [dnl
|
|
|
8a3219 |
+ <method name="addSourcePort">
|
|
|
8a3219 |
+ <arg direction="in" name="port" type="s"/>
|
|
|
8a3219 |
+ <arg direction="in" name="protocol" type="s"/>
|
|
|
8a3219 |
+ </method>
|
|
|
8a3219 |
+])
|
|
|
8a3219 |
+DBUS_INTROSPECT([config/service/${SERVICE_OBJ}], [[//method[@name="removeSourcePort"]]], 0, [dnl
|
|
|
8a3219 |
+ <method name="removeSourcePort">
|
|
|
8a3219 |
+ <arg direction="in" name="port" type="s"/>
|
|
|
8a3219 |
+ <arg direction="in" name="protocol" type="s"/>
|
|
|
8a3219 |
+ </method>
|
|
|
8a3219 |
+])
|
|
|
8a3219 |
+DBUS_INTROSPECT([config/service/${SERVICE_OBJ}], [[//method[@name="querySourcePort"]]], 0, [dnl
|
|
|
8a3219 |
+ <method name="querySourcePort">
|
|
|
8a3219 |
+ <arg direction="in" name="port" type="s"/>
|
|
|
8a3219 |
+ <arg direction="in" name="protocol" type="s"/>
|
|
|
8a3219 |
+ <arg direction="out" type="b"/>
|
|
|
8a3219 |
+ </method>
|
|
|
8a3219 |
+])
|
|
|
8a3219 |
+
|
|
|
8a3219 |
+DBUS_INTROSPECT([config/service/${SERVICE_OBJ}], [[//method[@name="getProtocols"]]], 0, [dnl
|
|
|
8a3219 |
+ <method name="getProtocols">
|
|
|
8a3219 |
+ <arg direction="out" type="as"/>
|
|
|
8a3219 |
+ </method>
|
|
|
8a3219 |
+])
|
|
|
8a3219 |
+DBUS_INTROSPECT([config/service/${SERVICE_OBJ}], [[//method[@name="setProtocols"]]], 0, [dnl
|
|
|
8a3219 |
+ <method name="setProtocols">
|
|
|
8a3219 |
+ <arg direction="in" name="protocols" type="as"/>
|
|
|
8a3219 |
+ </method>
|
|
|
8a3219 |
+])
|
|
|
8a3219 |
+DBUS_INTROSPECT([config/service/${SERVICE_OBJ}], [[//method[@name="addProtocol"]]], 0, [dnl
|
|
|
8a3219 |
+ <method name="addProtocol">
|
|
|
8a3219 |
+ <arg direction="in" name="protocol" type="s"/>
|
|
|
8a3219 |
+ </method>
|
|
|
8a3219 |
+])
|
|
|
8a3219 |
+DBUS_INTROSPECT([config/service/${SERVICE_OBJ}], [[//method[@name="removeProtocol"]]], 0, [dnl
|
|
|
8a3219 |
+ <method name="removeProtocol">
|
|
|
8a3219 |
+ <arg direction="in" name="protocol" type="s"/>
|
|
|
8a3219 |
+ </method>
|
|
|
8a3219 |
+])
|
|
|
8a3219 |
+DBUS_INTROSPECT([config/service/${SERVICE_OBJ}], [[//method[@name="queryProtocol"]]], 0, [dnl
|
|
|
8a3219 |
+ <method name="queryProtocol">
|
|
|
8a3219 |
+ <arg direction="in" name="protocol" type="s"/>
|
|
|
8a3219 |
+ <arg direction="out" type="b"/>
|
|
|
8a3219 |
+ </method>
|
|
|
8a3219 |
+])
|
|
|
8a3219 |
+
|
|
|
8a3219 |
+DBUS_INTROSPECT([config/service/${SERVICE_OBJ}], [[//method[@name="getModules"]]], 0, [dnl
|
|
|
8a3219 |
+ <method name="getModules">
|
|
|
8a3219 |
+ <arg direction="out" type="as"/>
|
|
|
8a3219 |
+ </method>
|
|
|
8a3219 |
+])
|
|
|
8a3219 |
+DBUS_INTROSPECT([config/service/${SERVICE_OBJ}], [[//method[@name="setModules"]]], 0, [dnl
|
|
|
8a3219 |
+ <method name="setModules">
|
|
|
8a3219 |
+ <arg direction="in" name="modules" type="as"/>
|
|
|
8a3219 |
+ </method>
|
|
|
8a3219 |
+])
|
|
|
8a3219 |
+DBUS_INTROSPECT([config/service/${SERVICE_OBJ}], [[//method[@name="addModule"]]], 0, [dnl
|
|
|
8a3219 |
+ <method name="addModule">
|
|
|
8a3219 |
+ <arg direction="in" name="module" type="s"/>
|
|
|
8a3219 |
+ </method>
|
|
|
8a3219 |
+])
|
|
|
8a3219 |
+DBUS_INTROSPECT([config/service/${SERVICE_OBJ}], [[//method[@name="removeModule"]]], 0, [dnl
|
|
|
8a3219 |
+ <method name="removeModule">
|
|
|
8a3219 |
+ <arg direction="in" name="module" type="s"/>
|
|
|
8a3219 |
+ </method>
|
|
|
8a3219 |
+])
|
|
|
8a3219 |
+DBUS_INTROSPECT([config/service/${SERVICE_OBJ}], [[//method[@name="queryModule"]]], 0, [dnl
|
|
|
8a3219 |
+ <method name="queryModule">
|
|
|
8a3219 |
+ <arg direction="in" name="module" type="s"/>
|
|
|
8a3219 |
+ <arg direction="out" type="b"/>
|
|
|
8a3219 |
+ </method>
|
|
|
8a3219 |
+])
|
|
|
8a3219 |
+
|
|
|
8a3219 |
+DBUS_INTROSPECT([config/service/${SERVICE_OBJ}], [[//method[@name="getDestinations"]]], 0, [dnl
|
|
|
8a3219 |
+ <method name="getDestinations">
|
|
|
8a3219 |
+ <arg direction="out" type="a{ss}"/>
|
|
|
8a3219 |
+ </method>
|
|
|
8a3219 |
+])
|
|
|
8a3219 |
+DBUS_INTROSPECT([config/service/${SERVICE_OBJ}], [[//method[@name="setDestinations"]]], 0, [dnl
|
|
|
8a3219 |
+ <method name="setDestinations">
|
|
|
8a3219 |
+ <arg direction="in" name="destinations" type="a{ss}"/>
|
|
|
8a3219 |
+ </method>
|
|
|
8a3219 |
+])
|
|
|
8a3219 |
+DBUS_INTROSPECT([config/service/${SERVICE_OBJ}], [[//method[@name="setDestination"]]], 0, [dnl
|
|
|
8a3219 |
+ <method name="setDestination">
|
|
|
8a3219 |
+ <arg direction="in" name="family" type="s"/>
|
|
|
8a3219 |
+ <arg direction="in" name="address" type="s"/>
|
|
|
8a3219 |
+ </method>
|
|
|
8a3219 |
+])
|
|
|
8a3219 |
+DBUS_INTROSPECT([config/service/${SERVICE_OBJ}], [[//method[@name="getDestination"]]], 0, [dnl
|
|
|
8a3219 |
+ <method name="getDestination">
|
|
|
8a3219 |
+ <arg direction="in" name="family" type="s"/>
|
|
|
8a3219 |
+ <arg direction="out" type="s"/>
|
|
|
8a3219 |
+ </method>
|
|
|
8a3219 |
+])
|
|
|
8a3219 |
+DBUS_INTROSPECT([config/service/${SERVICE_OBJ}], [[//method[@name="removeDestination"]]], 0, [dnl
|
|
|
8a3219 |
+ <method name="removeDestination">
|
|
|
8a3219 |
+ <arg direction="in" name="family" type="s"/>
|
|
|
8a3219 |
+ </method>
|
|
|
8a3219 |
+])
|
|
|
8a3219 |
+DBUS_INTROSPECT([config/service/${SERVICE_OBJ}], [[//method[@name="queryDestination"]]], 0, [dnl
|
|
|
8a3219 |
+ <method name="queryDestination">
|
|
|
8a3219 |
+ <arg direction="in" name="family" type="s"/>
|
|
|
8a3219 |
+ <arg direction="in" name="address" type="s"/>
|
|
|
8a3219 |
+ <arg direction="out" type="b"/>
|
|
|
8a3219 |
+ </method>
|
|
|
8a3219 |
+])
|
|
|
8a3219 |
+
|
|
|
8a3219 |
+DBUS_INTROSPECT([config/service/${SERVICE_OBJ}], [[//method[@name="getIncludes"]]], 0, [dnl
|
|
|
8a3219 |
+ <method name="getIncludes">
|
|
|
8a3219 |
+ <arg direction="out" type="as"/>
|
|
|
8a3219 |
+ </method>
|
|
|
8a3219 |
+])
|
|
|
8a3219 |
+DBUS_INTROSPECT([config/service/${SERVICE_OBJ}], [[//method[@name="setIncludes"]]], 0, [dnl
|
|
|
8a3219 |
+ <method name="setIncludes">
|
|
|
8a3219 |
+ <arg direction="in" name="includes" type="as"/>
|
|
|
8a3219 |
+ </method>
|
|
|
8a3219 |
+])
|
|
|
8a3219 |
+DBUS_INTROSPECT([config/service/${SERVICE_OBJ}], [[//method[@name="addInclude"]]], 0, [dnl
|
|
|
8a3219 |
+ <method name="addInclude">
|
|
|
8a3219 |
+ <arg direction="in" name="include" type="s"/>
|
|
|
8a3219 |
+ </method>
|
|
|
8a3219 |
+])
|
|
|
8a3219 |
+DBUS_INTROSPECT([config/service/${SERVICE_OBJ}], [[//method[@name="removeInclude"]]], 0, [dnl
|
|
|
8a3219 |
+ <method name="removeInclude">
|
|
|
8a3219 |
+ <arg direction="in" name="include" type="s"/>
|
|
|
8a3219 |
+ </method>
|
|
|
8a3219 |
+])
|
|
|
8a3219 |
+DBUS_INTROSPECT([config/service/${SERVICE_OBJ}], [[//method[@name="queryInclude"]]], 0, [dnl
|
|
|
8a3219 |
+ <method name="queryInclude">
|
|
|
8a3219 |
+ <arg direction="in" name="include" type="s"/>
|
|
|
8a3219 |
+ <arg direction="out" type="b"/>
|
|
|
8a3219 |
+ </method>
|
|
|
8a3219 |
+])
|
|
|
8a3219 |
+
|
|
|
8a3219 |
+FWD_RELOAD
|
|
|
8a3219 |
+DBUS_INTROSPECT([], [[//method[@name="getServiceSettings"]]], 0, [dnl
|
|
|
8a3219 |
+ <method name="getServiceSettings">
|
|
|
8a3219 |
+ <arg direction="in" name="service" type="s"/>
|
|
|
8a3219 |
+ <arg direction="out" type="(sssa(ss)asa{ss}asa(ss))"/>
|
|
|
8a3219 |
+ </method>
|
|
|
8a3219 |
+])
|
|
|
8a3219 |
+DBUS_CHECK([], [getServiceSettings], ["foobar"], 0, [dnl
|
|
|
8a3219 |
+ [(('1.1', 'foobar new', 'foobar new service is for foobar', [('12345', 'udp'), ('2222', 'tcp')], ['ftp'], @a{ss} {}, ['icmp'], [('4321', 'tcp')]),)]
|
|
|
8a3219 |
+])
|
|
|
8a3219 |
+
|
|
|
8a3219 |
+FWD_END_TEST
|
|
|
8a3219 |
--
|
|
|
8a3219 |
2.20.1
|
|
|
8a3219 |
|