From: Remi Gacogne Date: Thu, 16 Nov 2023 12:38:18 +0000 (+0100) Subject: dnsdist: Stop using `makeRule` in our tests X-Git-Tag: dnsdist-1.9.0-alpha4~26^2~6 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=cc35f43be8031845ef301137a6ac3cc2e0b826ab;p=thirdparty%2Fpdns.git dnsdist: Stop using `makeRule` in our tests --- diff --git a/regression-tests.dnsdist/test-include-dir/01-test.conf b/regression-tests.dnsdist/test-include-dir/01-test.conf index b0926f6766..e9d12e4d49 100644 --- a/regression-tests.dnsdist/test-include-dir/01-test.conf +++ b/regression-tests.dnsdist/test-include-dir/01-test.conf @@ -1 +1 @@ -addAction(makeRule("includedir.advanced.tests.powerdns.com."), AllowAction()) +addAction(SuffixMatchNodeRule("includedir.advanced.tests.powerdns.com."), AllowAction()) diff --git a/regression-tests.dnsdist/test_Basics.py b/regression-tests.dnsdist/test_Basics.py index 7ba61ef27b..b04debc9a8 100644 --- a/regression-tests.dnsdist/test_Basics.py +++ b/regression-tests.dnsdist/test_Basics.py @@ -13,7 +13,7 @@ class TestBasics(DNSDistTest): mySMN = newSuffixMatchNode() mySMN:add(newDNSName("nameAndQtype.tests.powerdns.com.")) addAction(AndRule{SuffixMatchNodeRule(mySMN), QTypeRule("TXT")}, RCodeAction(DNSRCode.NOTIMP)) - addAction(makeRule("drop.test.powerdns.com."), DropAction()) + addAction(SuffixMatchNodeRule("drop.test.powerdns.com."), DropAction()) addAction(AndRule({QTypeRule(DNSQType.A),QNameRule("ds9a.nl")}), SpoofAction("1.2.3.4")) addAction(newDNSName("dnsname.addaction.powerdns.com."), RCodeAction(DNSRCode.REFUSED)) addAction({newDNSName("dnsname-table1.addaction.powerdns.com."), newDNSName("dnsname-table2.addaction.powerdns.com.")}, RCodeAction(DNSRCode.REFUSED)) diff --git a/regression-tests.dnsdist/test_CacheHitResponses.py b/regression-tests.dnsdist/test_CacheHitResponses.py index 1d9137343f..f74e8b7723 100644 --- a/regression-tests.dnsdist/test_CacheHitResponses.py +++ b/regression-tests.dnsdist/test_CacheHitResponses.py @@ -9,7 +9,7 @@ class TestCacheHitResponses(DNSDistTest): _config_template = """ pc = newPacketCache(100, {maxTTL=86400, minTTL=1}) getPool(""):setCache(pc) - addCacheHitResponseAction(makeRule("dropwhencached.cachehitresponses.tests.powerdns.com."), DropResponseAction()) + addCacheHitResponseAction(SuffixMatchNodeRule("dropwhencached.cachehitresponses.tests.powerdns.com."), DropResponseAction()) newServer{address="127.0.0.1:%s"} """ diff --git a/regression-tests.dnsdist/test_CacheInsertedResponses.py b/regression-tests.dnsdist/test_CacheInsertedResponses.py index 42b70078b4..a50d01b12f 100644 --- a/regression-tests.dnsdist/test_CacheInsertedResponses.py +++ b/regression-tests.dnsdist/test_CacheInsertedResponses.py @@ -11,7 +11,7 @@ class TestCacheInsertedResponses(DNSDistTest): _config_template = """ pc = newPacketCache(100, {maxTTL=86400, minTTL=1}) getPool(""):setCache(pc) - addCacheInsertedResponseAction(makeRule("cacheinsertedresponses.tests.powerdns.com."), LimitTTLResponseAction(%d, %d)) + addCacheInsertedResponseAction(SuffixMatchNodeRule("cacheinsertedresponses.tests.powerdns.com."), LimitTTLResponseAction(%d, %d)) newServer{address="127.0.0.1:%s"} """ _config_params = ['capTTLMax', 'capTTLMin', '_testServerPort'] diff --git a/regression-tests.dnsdist/test_Caching.py b/regression-tests.dnsdist/test_Caching.py index d7539836e8..fca4a84b66 100644 --- a/regression-tests.dnsdist/test_Caching.py +++ b/regression-tests.dnsdist/test_Caching.py @@ -12,8 +12,8 @@ class TestCaching(DNSDistTest): _config_template = """ pc = newPacketCache(100, {maxTTL=86400, minTTL=1}) getPool(""):setCache(pc) - addAction(makeRule("nocache.cache.tests.powerdns.com."), SetSkipCacheAction()) - addResponseAction(makeRule("nocache-response.cache.tests.powerdns.com."), SetSkipCacheResponseAction()) + addAction(SuffixMatchNodeRule("nocache.cache.tests.powerdns.com."), SetSkipCacheAction()) + addResponseAction(SuffixMatchNodeRule("nocache-response.cache.tests.powerdns.com."), SetSkipCacheResponseAction()) function skipViaLua(dq) dq.skipCache = true return DNSAction.None, "" diff --git a/regression-tests.dnsdist/test_CheckConfig.py b/regression-tests.dnsdist/test_CheckConfig.py index 53b25a365c..07e080c549 100644 --- a/regression-tests.dnsdist/test_CheckConfig.py +++ b/regression-tests.dnsdist/test_CheckConfig.py @@ -42,7 +42,7 @@ class TestCheckConfig(unittest.TestCase): mySMN:add({"string-one.smn.tests.powerdns.com", "string-two.smn.tests.powerdns.com"}) mySMN:add({newDNSName("dnsname-one.smn.tests.powerdns.com"), newDNSName("dnsname-two.smn.tests.powerdns.com")}) addAction(AndRule{SuffixMatchNodeRule(mySMN), QTypeRule("TXT")}, RCodeAction(DNSRCode.NOTIMP)) - addAction(makeRule("drop.test.powerdns.com."), DropAction()) + addAction(SuffixMatchNodeRule("drop.test.powerdns.com."), DropAction()) """ self.tryDNSDist(configTemplate) diff --git a/regression-tests.dnsdist/test_EdnsClientSubnet.py b/regression-tests.dnsdist/test_EdnsClientSubnet.py index 00bf1adb43..b1131ceafc 100644 --- a/regression-tests.dnsdist/test_EdnsClientSubnet.py +++ b/regression-tests.dnsdist/test_EdnsClientSubnet.py @@ -672,7 +672,7 @@ class TestECSDisabledByRuleOrLua(DNSDistTest): setECSSourcePrefixV4(16) setECSSourcePrefixV6(16) newServer{address="127.0.0.1:%s", useClientSubnet=true} - addAction(makeRule("disabled.ecsrules.tests.powerdns.com."), SetDisableECSAction()) + addAction(SuffixMatchNodeRule("disabled.ecsrules.tests.powerdns.com."), SetDisableECSAction()) function disableECSViaLua(dq) dq.useECS = false return DNSAction.None, "" @@ -765,7 +765,7 @@ class TestECSOverrideSetByRuleOrLua(DNSDistTest): setECSSourcePrefixV4(24) setECSSourcePrefixV6(56) newServer{address="127.0.0.1:%s", useClientSubnet=true} - addAction(makeRule("overridden.ecsrules.tests.powerdns.com."), SetECSOverrideAction(true)) + addAction(SuffixMatchNodeRule("overridden.ecsrules.tests.powerdns.com."), SetECSOverrideAction(true)) function overrideECSViaLua(dq) dq.ecsOverride = true return DNSAction.None, "" @@ -864,7 +864,7 @@ class TestECSPrefixLengthSetByRuleOrLua(DNSDistTest): setECSSourcePrefixV4(24) setECSSourcePrefixV6(56) newServer{address="127.0.0.1:%s", useClientSubnet=true} - addAction(makeRule("overriddenprefixlength.ecsrules.tests.powerdns.com."), SetECSPrefixLengthAction(32, 128)) + addAction(SuffixMatchNodeRule("overriddenprefixlength.ecsrules.tests.powerdns.com."), SetECSPrefixLengthAction(32, 128)) function overrideECSPrefixLengthViaLua(dq) dq.ecsPrefixLength = 32 return DNSAction.None, "" @@ -966,7 +966,7 @@ class TestECSPrefixSetByRule(DNSDistTest): setECSSourcePrefixV4(32) setECSSourcePrefixV6(128) newServer{address="127.0.0.1:%s", useClientSubnet=true} - addAction(makeRule("setecsaction.ecsrules.tests.powerdns.com."), SetECSAction("192.0.2.1/32")) + addAction(SuffixMatchNodeRule("setecsaction.ecsrules.tests.powerdns.com."), SetECSAction("192.0.2.1/32")) """ def testWithRegularECS(self): diff --git a/regression-tests.dnsdist/test_Routing.py b/regression-tests.dnsdist/test_Routing.py index 17708b1fb2..d0ceeafd97 100644 --- a/regression-tests.dnsdist/test_Routing.py +++ b/regression-tests.dnsdist/test_Routing.py @@ -9,14 +9,14 @@ class TestRoutingPoolRouting(DNSDistTest): _config_template = """ newServer{address="127.0.0.1:%s", pool="real"} - addAction(makeRule("poolaction.routing.tests.powerdns.com"), PoolAction("real")) + addAction(SuffixMatchNodeRule("poolaction.routing.tests.powerdns.com"), PoolAction("real")) -- by default PoolAction stops the processing so the second rule should not be executed - addAction(makeRule("poolaction.routing.tests.powerdns.com"), PoolAction("not-real")) + addAction(SuffixMatchNodeRule("poolaction.routing.tests.powerdns.com"), PoolAction("not-real")) -- this time we configure PoolAction to not stop the processing - addAction(makeRule("poolaction-nostop.routing.tests.powerdns.com"), PoolAction("no-real", false)) + addAction(SuffixMatchNodeRule("poolaction-nostop.routing.tests.powerdns.com"), PoolAction("no-real", false)) -- so the second rule should be executed - addAction(makeRule("poolaction-nostop.routing.tests.powerdns.com"), PoolAction("real")) + addAction(SuffixMatchNodeRule("poolaction-nostop.routing.tests.powerdns.com"), PoolAction("real")) """ def testPolicyPoolAction(self): @@ -83,7 +83,7 @@ class TestRoutingPoolRouting(DNSDistTest): class TestRoutingQPSPoolRouting(DNSDistTest): _config_template = """ newServer{address="127.0.0.1:%s", pool="regular"} - addAction(makeRule("qpspoolaction.routing.tests.powerdns.com"), QPSPoolAction(10, "regular")) + addAction(SuffixMatchNodeRule("qpspoolaction.routing.tests.powerdns.com"), QPSPoolAction(10, "regular")) """ def testQPSPoolAction(self): diff --git a/regression-tests.dnsdist/test_RulesActions.py b/regression-tests.dnsdist/test_RulesActions.py index 14f64d9218..0dfbd822ca 100644 --- a/regression-tests.dnsdist/test_RulesActions.py +++ b/regression-tests.dnsdist/test_RulesActions.py @@ -14,7 +14,7 @@ class TestAdvancedAllow(DNSDistTest): _config_template = """ addAction(AllRule(), NoneAction()) - addAction(makeRule("allowed.advanced.tests.powerdns.com."), AllowAction()) + addAction(SuffixMatchNodeRule("allowed.advanced.tests.powerdns.com."), AllowAction()) addAction(AllRule(), DropAction()) newServer{address="127.0.0.1:%s"} """ diff --git a/regression-tests.dnsdist/test_SVCB.py b/regression-tests.dnsdist/test_SVCB.py index 41ef270d80..9056924231 100644 --- a/regression-tests.dnsdist/test_SVCB.py +++ b/regression-tests.dnsdist/test_SVCB.py @@ -8,20 +8,20 @@ class TestSVCB(DNSDistTest): local basicSVC = { newSVCRecordParameters(1, "dot.powerdns.com.", { mandatory={"port"}, alpn={"dot"}, noDefaultAlpn=true, port=853, ipv4hint={ "192.0.2.1" }, ipv6hint={ "2001:db8::1" } }), newSVCRecordParameters(2, "doh.powerdns.com.", { mandatory={"port"}, alpn={"h2"}, port=443, ipv4hint={ "192.0.2.2" }, ipv6hint={ "2001:db8::2" }, key7="/dns-query{?dns}" }) } - addAction(AndRule{QTypeRule(64), makeRule("basic.svcb.tests.powerdns.com.")}, SpoofSVCAction(basicSVC, {aa=true})) + addAction(AndRule{QTypeRule(64), SuffixMatchNodeRule("basic.svcb.tests.powerdns.com.")}, SpoofSVCAction(basicSVC, {aa=true})) local noHintsSVC = { newSVCRecordParameters(1, "dot.powerdns.com.", { mandatory={"port"}, alpn={"dot"}, noDefaultAlpn=true, port=853}), newSVCRecordParameters(2, "doh.powerdns.com.", { mandatory={"port"}, alpn={"h2"}, port=443, key7="/dns-query{?dns}" }) } - addAction(AndRule{QTypeRule(64), makeRule("no-hints.svcb.tests.powerdns.com.")}, SpoofSVCAction(noHintsSVC, {aa=true})) + addAction(AndRule{QTypeRule(64), SuffixMatchNodeRule("no-hints.svcb.tests.powerdns.com.")}, SpoofSVCAction(noHintsSVC, {aa=true})) local effectiveTargetSVC = { newSVCRecordParameters(1, ".", { mandatory={"port"}, alpn={ "dot" }, noDefaultAlpn=true, port=853, ipv4hint={ "192.0.2.1" }, ipv6hint={ "2001:db8::1" }}), newSVCRecordParameters(2, ".", { mandatory={"port"}, alpn={ "h2" }, port=443, ipv4hint={ "192.0.2.1" }, ipv6hint={ "2001:db8::1" }, key7="/dns-query{?dns}"}) } - addAction(AndRule{QTypeRule(64), makeRule("effective-target.svcb.tests.powerdns.com.")}, SpoofSVCAction(effectiveTargetSVC, {aa=true})) + addAction(AndRule{QTypeRule(64), SuffixMatchNodeRule("effective-target.svcb.tests.powerdns.com.")}, SpoofSVCAction(effectiveTargetSVC, {aa=true})) local httpsSVC = { newSVCRecordParameters(1, ".", { mandatory={"port"}, alpn={ "h2" }, noDefaultAlpn=true, port=8002, ipv4hint={ "192.0.2.2" }, ipv6hint={ "2001:db8::2" }}) } - addAction(AndRule{QTypeRule(65), makeRule("https.svcb.tests.powerdns.com.")}, SpoofSVCAction(httpsSVC)) + addAction(AndRule{QTypeRule(65), SuffixMatchNodeRule("https.svcb.tests.powerdns.com.")}, SpoofSVCAction(httpsSVC)) newServer{address="127.0.0.1:%s"} """ diff --git a/regression-tests.dnsdist/test_SelfAnsweredResponses.py b/regression-tests.dnsdist/test_SelfAnsweredResponses.py index 6f38c58fe4..a0a033990e 100644 --- a/regression-tests.dnsdist/test_SelfAnsweredResponses.py +++ b/regression-tests.dnsdist/test_SelfAnsweredResponses.py @@ -6,10 +6,10 @@ class TestSelfAnsweredResponses(DNSDistTest): _config_template = """ -- this is a silly test config, please do not do this in production. - addAction(makeRule("udp.selfanswered.tests.powerdns.com."), SpoofAction("192.0.2.1")) - addSelfAnsweredResponseAction(AndRule({makeRule("udp.selfanswered.tests.powerdns.com."), NotRule(MaxQPSRule(1))}), DropResponseAction()) - addAction(makeRule("tcp.selfanswered.tests.powerdns.com."), SpoofAction("192.0.2.1")) - addSelfAnsweredResponseAction(AndRule({makeRule("tcp.selfanswered.tests.powerdns.com."), NotRule(MaxQPSRule(1))}), DropResponseAction()) + addAction(SuffixMatchNodeRule("udp.selfanswered.tests.powerdns.com."), SpoofAction("192.0.2.1")) + addSelfAnsweredResponseAction(AndRule({SuffixMatchNodeRule("udp.selfanswered.tests.powerdns.com."), NotRule(MaxQPSRule(1))}), DropResponseAction()) + addAction(SuffixMatchNodeRule("tcp.selfanswered.tests.powerdns.com."), SpoofAction("192.0.2.1")) + addSelfAnsweredResponseAction(AndRule({SuffixMatchNodeRule("tcp.selfanswered.tests.powerdns.com."), NotRule(MaxQPSRule(1))}), DropResponseAction()) newServer{address="127.0.0.1:%s"} """ diff --git a/regression-tests.dnsdist/test_Spoofing.py b/regression-tests.dnsdist/test_Spoofing.py index d40c13ca5e..85478a788c 100644 --- a/regression-tests.dnsdist/test_Spoofing.py +++ b/regression-tests.dnsdist/test_Spoofing.py @@ -5,20 +5,20 @@ from dnsdisttests import DNSDistTest class TestSpoofingSpoof(DNSDistTest): _config_template = """ - addAction(makeRule("spoofaction.spoofing.tests.powerdns.com."), SpoofAction({"192.0.2.1", "2001:DB8::1"})) - addAction(makeRule("spoofaction-aa.spoofing.tests.powerdns.com."), SpoofAction({"192.0.2.1", "2001:DB8::1"}, {aa=true})) - addAction(makeRule("spoofaction-ad.spoofing.tests.powerdns.com."), SpoofAction({"192.0.2.1", "2001:DB8::1"}, {ad=true})) - addAction(makeRule("spoofaction-ra.spoofing.tests.powerdns.com."), SpoofAction({"192.0.2.1", "2001:DB8::1"}, {ra=true})) - addAction(makeRule("spoofaction-nora.spoofing.tests.powerdns.com."), SpoofAction({"192.0.2.1", "2001:DB8::1"}, {ra=false})) - addAction(makeRule("spoofaction-ttl.spoofing.tests.powerdns.com."), SpoofAction({"192.0.2.1", "2001:DB8::1"}, {ttl=1500})) - addAction(makeRule("cnamespoofaction.spoofing.tests.powerdns.com."), SpoofCNAMEAction("cnameaction.spoofing.tests.powerdns.com.")) + addAction(SuffixMatchNodeRule("spoofaction.spoofing.tests.powerdns.com."), SpoofAction({"192.0.2.1", "2001:DB8::1"})) + addAction(SuffixMatchNodeRule("spoofaction-aa.spoofing.tests.powerdns.com."), SpoofAction({"192.0.2.1", "2001:DB8::1"}, {aa=true})) + addAction(SuffixMatchNodeRule("spoofaction-ad.spoofing.tests.powerdns.com."), SpoofAction({"192.0.2.1", "2001:DB8::1"}, {ad=true})) + addAction(SuffixMatchNodeRule("spoofaction-ra.spoofing.tests.powerdns.com."), SpoofAction({"192.0.2.1", "2001:DB8::1"}, {ra=true})) + addAction(SuffixMatchNodeRule("spoofaction-nora.spoofing.tests.powerdns.com."), SpoofAction({"192.0.2.1", "2001:DB8::1"}, {ra=false})) + addAction(SuffixMatchNodeRule("spoofaction-ttl.spoofing.tests.powerdns.com."), SpoofAction({"192.0.2.1", "2001:DB8::1"}, {ttl=1500})) + addAction(SuffixMatchNodeRule("cnamespoofaction.spoofing.tests.powerdns.com."), SpoofCNAMEAction("cnameaction.spoofing.tests.powerdns.com.")) addAction("multispoof.spoofing.tests.powerdns.com", SpoofAction({"192.0.2.1", "192.0.2.2", "2001:DB8::1", "2001:DB8::2"})) - addAction(AndRule{makeRule("raw.spoofing.tests.powerdns.com"), QTypeRule(DNSQType.A)}, SpoofRawAction("\\192\\000\\002\\001")) - addAction(AndRule{makeRule("raw.spoofing.tests.powerdns.com"), QTypeRule(DNSQType.TXT)}, SpoofRawAction("\\003aaa\\004bbbb\\011ccccccccccc")) - addAction(AndRule{makeRule("raw.spoofing.tests.powerdns.com"), QTypeRule(DNSQType.SRV)}, SpoofRawAction("\\000\\000\\000\\000\\255\\255\\003srv\\008powerdns\\003com\\000", { aa=true, ttl=3600 })) - addAction(AndRule{makeRule("rawchaos.spoofing.tests.powerdns.com"), QTypeRule(DNSQType.TXT), QClassRule(DNSClass.CHAOS)}, SpoofRawAction("\\005chaos")) - addAction(AndRule{makeRule("multiraw.spoofing.tests.powerdns.com"), QTypeRule(DNSQType.TXT)}, SpoofRawAction({"\\003aaa\\004bbbb", "\\011ccccccccccc"})) - addAction(AndRule{makeRule("multiraw.spoofing.tests.powerdns.com"), QTypeRule(DNSQType.A)}, SpoofRawAction({"\\192\\000\\002\\001", "\\192\\000\\002\\002"})) + addAction(AndRule{SuffixMatchNodeRule("raw.spoofing.tests.powerdns.com"), QTypeRule(DNSQType.A)}, SpoofRawAction("\\192\\000\\002\\001")) + addAction(AndRule{SuffixMatchNodeRule("raw.spoofing.tests.powerdns.com"), QTypeRule(DNSQType.TXT)}, SpoofRawAction("\\003aaa\\004bbbb\\011ccccccccccc")) + addAction(AndRule{SuffixMatchNodeRule("raw.spoofing.tests.powerdns.com"), QTypeRule(DNSQType.SRV)}, SpoofRawAction("\\000\\000\\000\\000\\255\\255\\003srv\\008powerdns\\003com\\000", { aa=true, ttl=3600 })) + addAction(AndRule{SuffixMatchNodeRule("rawchaos.spoofing.tests.powerdns.com"), QTypeRule(DNSQType.TXT), QClassRule(DNSClass.CHAOS)}, SpoofRawAction("\\005chaos")) + addAction(AndRule{SuffixMatchNodeRule("multiraw.spoofing.tests.powerdns.com"), QTypeRule(DNSQType.TXT)}, SpoofRawAction({"\\003aaa\\004bbbb", "\\011ccccccccccc"})) + addAction(AndRule{SuffixMatchNodeRule("multiraw.spoofing.tests.powerdns.com"), QTypeRule(DNSQType.A)}, SpoofRawAction({"\\192\\000\\002\\001", "\\192\\000\\002\\002"})) newServer{address="127.0.0.1:%s"} """ @@ -449,8 +449,8 @@ class TestSpoofingLuaSpoof(DNSDistTest): return DNSAction.Spoof, "spoofedcname.spoofing.tests.powerdns.com." end - addAction(AndRule{makeRule("raw.spoofing.tests.powerdns.com"), QTypeRule(DNSQType.TXT)}, SpoofRawAction("\\003aaa\\004bbbb\\011ccccccccccc")) - addAction(AndRule{makeRule("raw.spoofing.tests.powerdns.com"), QTypeRule(DNSQType.SRV)}, SpoofRawAction("\\000\\000\\000\\000\\255\\255\\003srv\\008powerdns\\003com\\000", { aa=true, ttl=3600 })) + addAction(AndRule{SuffixMatchNodeRule("raw.spoofing.tests.powerdns.com"), QTypeRule(DNSQType.TXT)}, SpoofRawAction("\\003aaa\\004bbbb\\011ccccccccccc")) + addAction(AndRule{SuffixMatchNodeRule("raw.spoofing.tests.powerdns.com"), QTypeRule(DNSQType.SRV)}, SpoofRawAction("\\000\\000\\000\\000\\255\\255\\003srv\\008powerdns\\003com\\000", { aa=true, ttl=3600 })) function spoofrawrule(dq) if dq.qtype == DNSQType.A then @@ -950,7 +950,7 @@ class TestSpoofingLuaSpoofPacket(DNSDistTest): addAction("lua-raw-packet.spoofing.tests.powerdns.com.", LuaAction(spoofpacket)) local rawResponse="\\000\\000\\129\\133\\000\\001\\000\\000\\000\\000\\000\\000\\019rule\\045lua\\045raw\\045packet\\008spoofing\\005tests\\008powerdns\\003com\\000\\000\\001\\000\\001" - addAction(AndRule{QTypeRule(DNSQType.A), makeRule("rule-lua-raw-packet.spoofing.tests.powerdns.com.")}, SpoofPacketAction(rawResponse, string.len(rawResponse))) + addAction(AndRule{QTypeRule(DNSQType.A), SuffixMatchNodeRule("rule-lua-raw-packet.spoofing.tests.powerdns.com.")}, SpoofPacketAction(rawResponse, string.len(rawResponse))) local ffi = require("ffi")