_ednsTestFunction = """
function testEDNSOptions(dq)
local options = dq:getEDNSOptions()
- local qname = dq.qname:toString()
+ local qname = tostring(dq.qname)
if string.match(qname, 'noedns') then
if next(options) ~= nil then
return DNSAction.None, ""
+ end
+
+ function testEDNSOptionsInResponses(dr)
+ local options = dr:getEDNSOptions()
+ local qname = tostring(dr.qname)
+
+ if string.match(qname, 'multiplecookies') then
+ return DNSAction.None, ""
+ elseif string.match(qname, 'cookie') then
+ if options[EDNSOptionCode.COOKIE] == nil then
+ return DNSAction.Spoof, "192.0.2.1"
+ end
+ if options[EDNSOptionCode.COOKIE]:count() ~= 1 or options[EDNSOptionCode.COOKIE]:getValues()[1]:len() ~= 16 then
+ return DNSAction.Spoof, "192.0.2.2"
+ end
+ end
+
+ if string.match(qname, 'ecs4') then
+ if options[EDNSOptionCode.ECS] == nil then
+ return DNSAction.Spoof, "192.0.2.51"
+ end
+ if options[EDNSOptionCode.ECS]:count() ~= 1 or options[EDNSOptionCode.ECS]:getValues()[1]:len() ~= 7 then
+ return DNSAction.Spoof, "192.0.2.52"
+ end
+ end
+
+ if string.match(qname, 'ecs6') then
+ if options[EDNSOptionCode.ECS] == nil then
+ return DNSAction.Spoof, "192.0.2.101"
+ end
+ if options[EDNSOptionCode.ECS]:count() ~= 1 or options[EDNSOptionCode.ECS]:getValues()[1]:len() ~= 11 then
+ return DNSAction.Spoof, "192.0.2.102"
+ end
+ end
+
+ return DNSAction.None, ""
+
end
"""
self.assertTrue(receivedQuery)
self.assertTrue(receivedResponse)
receivedQuery.id = query.id
- self.assertEquals(receivedQuery, query)
- self.assertEquals(receivedResponse, response)
+ self.assertEqual(receivedQuery, query)
+ self.assertEqual(receivedResponse, response)
def testCookie(self):
"""
self.assertTrue(receivedQuery)
self.assertTrue(receivedResponse)
receivedQuery.id = query.id
- self.assertEquals(receivedQuery, query)
- self.assertEquals(receivedResponse, response)
+ self.assertEqual(receivedQuery, query)
+ self.assertEqual(receivedResponse, response)
def testECS4(self):
"""
self.assertTrue(receivedQuery)
self.assertTrue(receivedResponse)
receivedQuery.id = query.id
- self.assertEquals(receivedQuery, query)
- self.assertEquals(receivedResponse, response)
+ self.assertEqual(receivedQuery, query)
+ self.assertEqual(receivedResponse, response)
def testECS6(self):
"""
self.assertTrue(receivedQuery)
self.assertTrue(receivedResponse)
receivedQuery.id = query.id
- self.assertEquals(receivedQuery, query)
- self.assertEquals(receivedResponse, response)
+ self.assertEqual(receivedQuery, query)
+ self.assertEqual(receivedResponse, response)
def testECS6Cookie(self):
"""
self.assertTrue(receivedQuery)
self.assertTrue(receivedResponse)
receivedQuery.id = query.id
- self.assertEquals(receivedQuery, query)
- self.assertEquals(receivedResponse, response)
+ self.assertEqual(receivedQuery, query)
+ self.assertEqual(receivedResponse, response)
def testMultiCookiesECS6(self):
"""
self.assertTrue(receivedQuery)
self.assertTrue(receivedResponse)
receivedQuery.id = query.id
- self.assertEquals(receivedQuery, query)
- self.assertEquals(receivedResponse, response)
+ self.assertEqual(receivedQuery, query)
+ self.assertEqual(receivedResponse, response)
class TestEDNSOptionsAddingECS(EDNSOptionsBase):
%s
addAction(AllRule(), LuaAction(testEDNSOptions))
+ addResponseAction("ednsoptions-ecs.tests.powerdns.com.", LuaResponseAction(testEDNSOptionsInResponses))
newServer{address="127.0.0.1:%s", useClientSubnet=true}
"""
self.assertTrue(receivedQuery)
self.assertTrue(receivedResponse)
receivedQuery.id = query.id
- self.assertEquals(receivedQuery, query)
- self.assertEquals(receivedResponse, response)
+ self.assertEqual(receivedQuery, query)
+ self.assertEqual(receivedResponse, response)
class TestEDNSOptionsLuaFFI(DNSDistTest):
_config_template = """
local ffi = require("ffi")
- ffi.cdef[[
- typedef struct dnsdist_ffi_dnsquestion_t dnsdist_ffi_dnsquestion_t;
-
- typedef struct dnsdist_ednsoption {
- uint16_t optionCode;
- uint16_t len;
- const void* data;
- } dnsdist_ednsoption_t;
-
- void dnsdist_ffi_dnsquestion_get_qname_raw(const dnsdist_ffi_dnsquestion_t* dq, const char** qname, size_t* qnameSize) __attribute__ ((visibility ("default")));
- // returns the length of the resulting 'out' array. 'out' is not set if the length is 0
- size_t dnsdist_ffi_dnsquestion_get_edns_options(dnsdist_ffi_dnsquestion_t* ref, const dnsdist_ednsoption_t** out) __attribute__ ((visibility ("default")));
- ]]
-
function testEDNSOptions(dq)
- local options_ptr = ffi.new("const dnsdist_ednsoption_t *[1]")
- local ret_ptr_param = ffi.cast("const dnsdist_ednsoption_t **", options_ptr)
+ local options_ptr = ffi.new("const dnsdist_ffi_ednsoption_t *[1]")
+ local ret_ptr_param = ffi.cast("const dnsdist_ffi_ednsoption_t **", options_ptr)
local options_count = tonumber(ffi.C.dnsdist_ffi_dnsquestion_get_edns_options(dq, ret_ptr_param))
self.assertTrue(receivedQuery)
self.assertTrue(receivedResponse)
receivedQuery.id = query.id
- self.assertEquals(receivedQuery, query)
- self.assertEquals(receivedResponse, response)
+ self.assertEqual(receivedQuery, query)
+ self.assertEqual(receivedResponse, response)
def testCookieFFI(self):
"""
self.assertTrue(receivedQuery)
self.assertTrue(receivedResponse)
receivedQuery.id = query.id
- self.assertEquals(receivedQuery, query)
- self.assertEquals(receivedResponse, response)
+ self.assertEqual(receivedQuery, query)
+ self.assertEqual(receivedResponse, response)
def testECS4FFI(self):
"""
self.assertTrue(receivedQuery)
self.assertTrue(receivedResponse)
receivedQuery.id = query.id
- self.assertEquals(receivedQuery, query)
- self.assertEquals(receivedResponse, response)
+ self.assertEqual(receivedQuery, query)
+ self.assertEqual(receivedResponse, response)
def testECS6FFI(self):
"""
self.assertTrue(receivedQuery)
self.assertTrue(receivedResponse)
receivedQuery.id = query.id
- self.assertEquals(receivedQuery, query)
- self.assertEquals(receivedResponse, response)
+ self.assertEqual(receivedQuery, query)
+ self.assertEqual(receivedResponse, response)
def testECS6CookieFFI(self):
"""
self.assertTrue(receivedQuery)
self.assertTrue(receivedResponse)
receivedQuery.id = query.id
- self.assertEquals(receivedQuery, query)
- self.assertEquals(receivedResponse, response)
+ self.assertEqual(receivedQuery, query)
+ self.assertEqual(receivedResponse, response)
def testMultiCookiesECS6FFI(self):
"""
self.assertTrue(receivedQuery)
self.assertTrue(receivedResponse)
receivedQuery.id = query.id
- self.assertEquals(receivedQuery, query)
- self.assertEquals(receivedResponse, response)
+ self.assertEqual(receivedQuery, query)
+ self.assertEqual(receivedResponse, response)