]> git.ipfire.org Git - thirdparty/pdns.git/commitdiff
Test suite for unix connector
authorAki Tuomi <cmouse@desteem.org>
Tue, 9 Jul 2013 07:29:09 +0000 (10:29 +0300)
committerAki Tuomi <cmouse@desteem.org>
Tue, 9 Jul 2013 07:29:09 +0000 (10:29 +0300)
modules/remotebackend/.gitignore
modules/remotebackend/test-remotebackend-unix.cc [new file with mode: 0644]
modules/remotebackend/testrunner.sh

index c14f877c6a6735bcbd36eda9e97e1bea7a271ab9..572d122258c9649eec018f55653b0c46f534ce51 100644 (file)
@@ -1,5 +1,6 @@
 remotebackend-access.log
 test_remotebackend_http
 test_remotebackend_pipe
+test_remotebackend_unix
 test_remotebackend_json
 test_remotebackend_post
diff --git a/modules/remotebackend/test-remotebackend-unix.cc b/modules/remotebackend/test-remotebackend-unix.cc
new file mode 100644 (file)
index 0000000..823da3b
--- /dev/null
@@ -0,0 +1,65 @@
+#define BOOST_TEST_DYN_LINK
+#define BOOST_TEST_MAIN
+#define BOOST_TEST_MODULE unit
+
+#include <boost/test/unit_test.hpp>
+#include <boost/assign/list_of.hpp>
+#include <boost/foreach.hpp>
+#include <boost/tuple/tuple.hpp>
+#include "pdns/namespaces.hh"
+#include <pdns/dns.hh>
+#include <pdns/dnsbackend.hh>
+#include <pdns/dnspacket.hh>
+#include <pdns/ueberbackend.hh>
+#include <pdns/ahuexception.hh>
+#include <pdns/logger.hh>
+#include <pdns/arguments.hh>
+#include "pdns/dnsrecords.hh"
+#include <boost/lexical_cast.hpp>
+#include <rapidjson/rapidjson.h>
+#include <rapidjson/document.h>
+#include "pdns/json.hh"
+#include "pdns/statbag.hh"
+#include "pdns/packetcache.hh"
+
+StatBag S;
+PacketCache PC;
+ArgvMap &arg()
+{
+  static ArgvMap arg;
+  return arg;
+};
+
+class RemoteLoader
+{
+   public:
+      RemoteLoader();
+};
+
+DNSBackend *be;
+
+struct RemotebackendSetup {
+    RemotebackendSetup()  {
+       be = 0; 
+       try {
+               // setup minimum arguments
+               ::arg().set("module-dir")="";
+                new RemoteLoader();
+               BackendMakers().launch("remote");
+                // then get us a instance of it 
+                ::arg().set("remote-connection-string")="unix:path=/tmp/remotebackend.sock";
+                ::arg().set("remote-dnssec")="yes";
+                be = BackendMakers().all()[0];
+               // load few record types to help out
+               SOARecordContent::report();
+               NSRecordContent::report();
+                ARecordContent::report();
+       } catch (AhuException &ex) {
+               BOOST_TEST_MESSAGE("Cannot start remotebackend: " << ex.reason );
+       };
+    }
+    ~RemotebackendSetup()  {  }
+};
+
+BOOST_GLOBAL_FIXTURE( RemotebackendSetup );
+
index 3238e7fb996a36d266a460ac60f1fa59c55fab98..aefee74dd438148a5f16ad6920030f44a1c58ea9 100755 (executable)
@@ -1,6 +1,8 @@
 #!/bin/bash 
 
 webrick_pid=""
+socat_pid=""
+socat=/usr/bin/socat
 
 function start_web() {
   if [ x"$REMOTEBACKEND_HTTP" == "xyes" ]; then
@@ -30,6 +32,34 @@ function stop_web() {
  fi
 }
 
+function start_unix() {
+  if [ ! -x $socat ]; then
+     echo "Cannot find socat - cannot test (non-fatal)"
+     exit 0
+  fi
+  
+  $socat unix-listen:/tmp/remotebackend.sock exec:./unittest_pipe.rb &
+  socat_pid=$!
+}
+
+function stop_unix() {
+ if [ ! -z "$socat_pid" ]; then
+   kill -TERM $socat_pid 2>/dev/null
+   if [ $? -ne 0 ]; then
+     # already dead
+     return 
+   fi
+   # wait a moment for it to die
+   i=0
+   while [ $i -lt 5 ]; do
+     sleep 1
+     kill -0 $socat_pid 2>/dev/null
+     if [ $? -ne 0 ]; then break; fi
+     let i=i+1
+   done
+ fi
+}
+
 mode=`basename "$1"`
 
 case "$mode" in
@@ -37,6 +67,12 @@ case "$mode" in
     ./test_remotebackend_pipe
     rv=$?
   ;;
+  test_remotebackend_unix)
+    start_unix
+    ./test_remotebackend_unix
+    rv=$?
+    stop_unix
+  ;;
   test_remotebackend_http)
     start_web "http"
     ./test_remotebackend_http