]> git.ipfire.org Git - thirdparty/pdns.git/blobdiff - regression-tests.dnsdist/test_EDNSOptions.py
Merge pull request #13781 from omoerbeek/rec-keytrap-public
[thirdparty/pdns.git] / regression-tests.dnsdist / test_EDNSOptions.py
index f62a9e3d9e2e7f04bb11c56e2fcfc5c3525c07e8..a200596aa2e7ab0f799ecc5653bc651adcfb7cc7 100644 (file)
@@ -8,7 +8,7 @@ class EDNSOptionsBase(DNSDistTest):
     _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
@@ -58,6 +58,43 @@ class EDNSOptionsBase(DNSDistTest):
 
       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
     """
 
@@ -92,8 +129,8 @@ class TestEDNSOptions(EDNSOptionsBase):
             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):
         """
@@ -116,8 +153,8 @@ class TestEDNSOptions(EDNSOptionsBase):
             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):
         """
@@ -140,8 +177,8 @@ class TestEDNSOptions(EDNSOptionsBase):
             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):
         """
@@ -164,8 +201,8 @@ class TestEDNSOptions(EDNSOptionsBase):
             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):
         """
@@ -189,8 +226,8 @@ class TestEDNSOptions(EDNSOptionsBase):
             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):
         """
@@ -215,8 +252,8 @@ class TestEDNSOptions(EDNSOptionsBase):
             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):
 
@@ -224,6 +261,7 @@ 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}
     """
@@ -382,31 +420,17 @@ class TestEDNSOptionsAddingECS(EDNSOptionsBase):
             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))
 
@@ -558,8 +582,8 @@ class TestEDNSOptionsLuaFFI(DNSDistTest):
             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):
         """
@@ -582,8 +606,8 @@ class TestEDNSOptionsLuaFFI(DNSDistTest):
             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):
         """
@@ -606,8 +630,8 @@ class TestEDNSOptionsLuaFFI(DNSDistTest):
             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):
         """
@@ -630,8 +654,8 @@ class TestEDNSOptionsLuaFFI(DNSDistTest):
             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):
         """
@@ -655,8 +679,8 @@ class TestEDNSOptionsLuaFFI(DNSDistTest):
             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):
         """
@@ -681,5 +705,5 @@ class TestEDNSOptionsLuaFFI(DNSDistTest):
             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)