]> granicus.if.org Git - pdns/commitdiff
rec: fix outgoingProtobufServer config instanciation
authorCharles-Henri Bruyand <charles-henri.bruyand@open-xchange.com>
Thu, 6 Sep 2018 09:40:17 +0000 (11:40 +0200)
committerCharles-Henri Bruyand <charles-henri.bruyand@open-xchange.com>
Thu, 6 Sep 2018 09:40:17 +0000 (11:40 +0200)
pdns/rec-lua-conf.cc
regression-tests.recursor-dnssec/test_Protobuf.py

index 25dc3e1e38c251723ad2d9923b055983a6604ba1..bd9dd0e2b4a3564e57d1e1af23cdb6b0023a08c2 100644 (file)
@@ -396,8 +396,8 @@ void loadRecursorLuaConfig(const std::string& fname, luaConfigDelayedThreads& de
       try {
         if (!lci.outgoingProtobufExportConfig.enabled) {
           lci.outgoingProtobufExportConfig.enabled = true;
-          lci.protobufExportConfig.server = ComboAddress(server_);
-          parseProtobufOptions(vars, lci.protobufExportConfig);
+          lci.outgoingProtobufExportConfig.server = ComboAddress(server_);
+          parseProtobufOptions(vars, lci.outgoingProtobufExportConfig);
         }
         else {
           g_log<<Logger::Error<<"Only one protobuf server can be configured, we already have "<<lci.outgoingProtobufExportConfig.server.toString()<<endl;
index 469c680259e58ba604f6b5857c52ffa934ebf091..3a7bc317754aad2714e1aa316e03f52a9b716a2b 100644 (file)
@@ -118,6 +118,20 @@ class TestRecursorProtobuf(RecursorTest):
             self.assertEquals(len(msg.originalRequestorSubnet), 4)
             self.assertEquals(socket.inet_ntop(socket.AF_INET, msg.originalRequestorSubnet), '127.0.0.1')
 
+    def checkOutgoingProtobufBase(self, msg, protocol, query, initiator):
+        self.assertTrue(msg)
+        self.assertTrue(msg.HasField('timeSec'))
+        self.assertTrue(msg.HasField('socketFamily'))
+        self.assertEquals(msg.socketFamily, dnsmessage_pb2.PBDNSMessage.INET)
+        self.assertTrue(msg.HasField('socketProtocol'))
+        self.assertEquals(msg.socketProtocol, protocol)
+        self.assertTrue(msg.HasField('messageId'))
+        self.assertTrue(msg.HasField('id'))
+        self.assertNotEquals(msg.id, query.id)
+        self.assertTrue(msg.HasField('inBytes'))
+        # compare inBytes with length of query/response
+        self.assertEquals(msg.inBytes, len(query.to_wire()))
+
     def checkProtobufQuery(self, msg, protocol, query, qclass, qtype, qname, initiator='127.0.0.1'):
         self.assertEquals(msg.type, dnsmessage_pb2.PBDNSMessage.DNSQueryType)
         self.checkProtobufBase(msg, protocol, query, initiator)
@@ -162,6 +176,24 @@ class TestRecursorProtobuf(RecursorTest):
         for tag in msg.response.tags:
             self.assertTrue(tag in tags)
 
+    def checkProtobufOutgoingQuery(self, msg, protocol, query, qclass, qtype, qname, initiator='127.0.0.1'):
+        self.assertEquals(msg.type, dnsmessage_pb2.PBDNSMessage.DNSOutgoingQueryType)
+        self.checkOutgoingProtobufBase(msg, protocol, query, initiator)
+        self.assertTrue(msg.HasField('to'))
+        self.assertTrue(msg.HasField('question'))
+        self.assertTrue(msg.question.HasField('qClass'))
+        self.assertEquals(msg.question.qClass, qclass)
+        self.assertTrue(msg.question.HasField('qType'))
+        self.assertEquals(msg.question.qClass, qtype)
+        self.assertTrue(msg.question.HasField('qName'))
+        self.assertEquals(msg.question.qName, qname)
+
+    def checkProtobufIncomingResponse(self, msg, protocol, response, initiator='127.0.0.1'):
+        self.assertEquals(msg.type, dnsmessage_pb2.PBDNSMessage.DNSIncomingResponseType)
+        self.checkOutgoingProtobufBase(msg, protocol, response, initiator)
+        self.assertTrue(msg.HasField('response'))
+        self.assertTrue(msg.response.HasField('queryTimeSec'))
+
     @classmethod
     def setUpClass(cls):
 
@@ -237,6 +269,35 @@ auth-zones=example=configs/%s/example.zone""" % _confdir
         self.assertEquals(socket.inet_ntop(socket.AF_INET, rr.rdata), '192.0.2.42')
         self.checkNoRemainingMessage()
 
+class OutgoingProtobufDefaultTest(TestRecursorProtobuf):
+    """
+    This test makes sure that we correctly export outgoing queries over protobuf.
+    It must be improved and setup env so we can check for incoming responses, but makes sure for now
+    that the recursor at least connects to the protobuf server.
+    """
+
+    _confdir = 'OutgoingProtobufDefault'
+    _config_template = """
+auth-zones=example=configs/%s/example.zone""" % _confdir
+    _lua_config_file = """
+    outgoingProtobufServer("127.0.0.1:%d")
+    """ % (protobufServerPort)
+
+    def testA(self):
+        name = 'www.example.org.'
+        expected = dns.rrset.from_text(name, 0, dns.rdataclass.IN, 'A', '192.0.2.42')
+        query = dns.message.make_query(name, 'A', want_dnssec=True)
+        query.flags |= dns.flags.RD
+        res = self.sendUDPQuery(query)
+
+        # check the protobuf messages corresponding to the UDP query and answer
+        msg = self.getFirstProtobufMessage()
+        self.checkProtobufOutgoingQuery(msg, dnsmessage_pb2.PBDNSMessage.UDP, query, dns.rdataclass.IN, dns.rdatatype.A, name)
+#        # then the response
+#        msg = self.getFirstProtobufMessage()
+#        self.checkProtobufIncomingResponse(msg, dnsmessage_pb2.PBDNSMessage.UDP, res)
+        self.checkNoRemainingMessage()
+
 class ProtobufMasksTest(TestRecursorProtobuf):
     """
     This test makes sure that we correctly export queries and response over protobuf, respecting the configured initiator masking.