]> granicus.if.org Git - pdns/commitdiff
make dnsbulktest statistics line up, plus detect nodata, nxdomain properly now
authorBert Hubert <bert.hubert@netherlabs.nl>
Sat, 12 Jun 2010 20:54:36 +0000 (20:54 +0000)
committerBert Hubert <bert.hubert@netherlabs.nl>
Sat, 12 Jun 2010 20:54:36 +0000 (20:54 +0000)
git-svn-id: svn://svn.powerdns.com/pdns/trunk/pdns@1632 d19b8d6e-7fed-0310-83ef-9ca221ded41b

pdns/dnsbulktest.cc
pdns/inflighter.cc

index 8f5eceb8e83aff6f681407084f41407738d77f53..53cead789d5b59ef30de9bb0fe5a2331a5facbde 100644 (file)
@@ -12,6 +12,7 @@ struct DNSResult
 {
   vector<ComboAddress> ips;
   int rcode;
+  bool seenauthsoa;
 };
 
 struct SendReceive
@@ -29,7 +30,7 @@ struct SendReceive
     
     ComboAddress remote(remoteAddr, port);
     connect(d_socket, (struct sockaddr*)&remote, remote.getSocklen());
-    d_oks = d_errors = 0;
+    d_oks = d_errors = d_nodatas = d_nxdomains = 0;
   }
   
   ~SendReceive()
@@ -66,17 +67,22 @@ struct SendReceive
       // parse packet, set 'id', fill out 'ip' 
       
       MOADNSParser mdp(string(buf, len));
-      //cout<<"Reply to question for qname='"<<mdp.d_qname<<"', qtype="<<DNSRecordContent::NumberToType(mdp.d_qtype)<<endl;
-      //cout<<"Rcode: "<<mdp.d_header.rcode<<", RD: "<<mdp.d_header.rd<<", QR: "<<mdp.d_header.qr;
-      //cout<<", TC: "<<mdp.d_header.tc<<", AA: "<<mdp.d_header.aa<<", opcode: "<<mdp.d_header.opcode<<endl;
+      cout<<"Reply to question for qname='"<<mdp.d_qname<<"', qtype="<<DNSRecordContent::NumberToType(mdp.d_qtype)<<endl;
+      cout<<"Rcode: "<<mdp.d_header.rcode<<", RD: "<<mdp.d_header.rd<<", QR: "<<mdp.d_header.qr;
+      cout<<", TC: "<<mdp.d_header.tc<<", AA: "<<mdp.d_header.aa<<", opcode: "<<mdp.d_header.opcode<<endl;
       dr.rcode = mdp.d_header.rcode;
       for(MOADNSParser::answers_t::const_iterator i=mdp.d_answers.begin(); i!=mdp.d_answers.end(); ++i) {          
         if(i->first.d_place == 1 && i->first.d_type == QType::A)
           dr.ips.push_back(ComboAddress(i->first.d_content->getZoneRepresentation()));
-        //cout<<i->first.d_place-1<<"\t"<<i->first.d_label<<"\tIN\t"<<DNSRecordContent::NumberToType(i->first.d_type);
-        //cout<<"\t"<<i->first.d_ttl<<"\t"<< i->first.d_content->getZoneRepresentation()<<"\n";
+        if(i->first.d_place == 3 && i->first.d_type == QType::SOA) {
+          dr.seenauthsoa = 1;
+        }
+        cout<<i->first.d_place-1<<"\t"<<i->first.d_label<<"\tIN\t"<<DNSRecordContent::NumberToType(i->first.d_type);
+        cout<<"\t"<<i->first.d_ttl<<"\t"<< i->first.d_content->getZoneRepresentation()<<"\n";
       }
+      
       id = mdp.d_header.id;
+    
       return 1;
     }
     return 0;
@@ -89,12 +95,18 @@ struct SendReceive
       cout<<", "<<ca.toString();
     }
     cout<<endl;
-    if(dr.rcode)
+    if(dr.rcode == RCode::NXDomain) {
+      d_nxdomains++;
+    }
+    else if(dr.rcode) {
       d_errors++;
+    }
+    else if(dr.ips.empty() && dr.seenauthsoa) 
+      d_nodatas++;
     else if(!dr.ips.empty())
       d_oks++;
   }
-  int d_errors, d_oks;
+  int d_errors, d_nxdomains, d_nodatas, d_oks;
 };
 
 
@@ -110,6 +122,7 @@ int main(int argc, char** argv)
     
   Inflighter<vector<string>, SendReceive> inflighter(domains, sr);
   inflighter.d_maxInFlight = 1000;
+  inflighter.d_timeoutSeconds = 5;
   string line;
   
   pair<string, string> split;
@@ -123,7 +136,7 @@ int main(int argc, char** argv)
     domains.push_back("www."+split.second);
   }
   cerr<<"Read "<<domains.size()<<" domains!"<<endl;
-
+  random_shuffle(domains.begin(), domains.end());
 
   for(;;) {
     try {
@@ -134,7 +147,8 @@ int main(int argc, char** argv)
       cerr<<"Caught exception: "<<e.what()<<endl;
     }
   }
-  cerr<<"Results: "<<sr.d_errors<<" errors, "<<sr.d_oks<<" oks, "<<inflighter.getTimeouts()<<" timeouts"<<endl;
+  cerr<<"Results: "<<sr.d_errors<<" errors, "<<sr.d_oks<<" oks, "<<sr.d_nodatas<<" nodatas, "<<sr.d_nxdomains<<" nxdomains, "<<inflighter.getTimeouts()<<" timeouts"<<endl;
+  cerr<<inflighter.getUnexpecteds()<<" unexpected responses (probably seen as timeouts)"<<endl;
 }
 
 
index 40f516f12d5ad4cf33698a938c557799b0c97f9c..69ae344f24f4a0b4e949eb58c93800df2a0b7f7e 100644 (file)
@@ -41,6 +41,11 @@ public:
     return d_timeouts;
   }
   
+  uint64_t getUnexpecteds()
+  {
+    return d_unexpectedResponse;
+  }
+  
 private:
   struct TTDItem
   {
@@ -109,7 +114,7 @@ template<typename Container, typename SendReceive> void Inflighter<Container, Se
           break; // we can send new questions!
         }
         else {
-         // cerr<<"UNEXPECTED ANSWER!"<<endl;
+          // cerr<<"UNEXPECTED ANSWER: "<<id<<endl;
           d_unexpectedResponse++;
         }
       }
@@ -125,7 +130,8 @@ template<typename Container, typename SendReceive> void Inflighter<Container, Se
         for(typename waiters_by_ttd_index_t::iterator valiter = waiters_index.begin(); valiter != waiters_index.end(); ) {
           if(valiter->ttd.tv_sec < now.tv_sec || (valiter->ttd.tv_sec == now.tv_sec && valiter->ttd.tv_usec < now.tv_usec)) {
             waiters_index.erase(valiter++);
-           // cerr<<"Have timeout"<<endl;
+            // cerr<<"Have timeout for id="<< valiter->id <<endl;
+            d_timeouts++;
           }
           else 
             break;