BIND 10 trac615, updated. 7b2536d7a654ecb24d98c3c0814c7384230e81df [trac615] Support setting of xfrout socket

BIND 10 source code commits bind10-changes at lists.isc.org
Wed Apr 6 11:02:48 UTC 2011


The branch, trac615 has been updated
       via  7b2536d7a654ecb24d98c3c0814c7384230e81df (commit)
       via  a3f3377467d511fb0e789957a4b7a9105e4fe0d2 (commit)
      from  4a484575725500dd766516377eda41daaa17f402 (commit)

Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.

- Log -----------------------------------------------------------------
commit 7b2536d7a654ecb24d98c3c0814c7384230e81df
Author: Michal 'vorner' Vaner <michal.vaner at nic.cz>
Date:   Wed Apr 6 13:02:27 2011 +0200

    [trac615] Support setting of xfrout socket

commit a3f3377467d511fb0e789957a4b7a9105e4fe0d2
Author: Michal 'vorner' Vaner <michal.vaner at nic.cz>
Date:   Wed Apr 6 12:59:54 2011 +0200

    [trac615] Tests for path setup in auth

-----------------------------------------------------------------------

Summary of changes:
 src/bin/auth/Makefile.am                        |    2 +-
 src/{lib/log/dummylog.cc => bin/auth/common.cc} |   37 ++++-----
 src/bin/auth/common.h                           |   11 +++-
 src/bin/auth/main.cc                            |   16 +----
 src/bin/auth/tests/Makefile.am                  |    2 +
 src/bin/auth/tests/common_unittest.cc           |   96 +++++++++++++++++++++++
 6 files changed, 129 insertions(+), 35 deletions(-)
 copy src/{lib/log/dummylog.cc => bin/auth/common.cc} (51%)
 create mode 100644 src/bin/auth/tests/common_unittest.cc

-----------------------------------------------------------------------
diff --git a/src/bin/auth/Makefile.am b/src/bin/auth/Makefile.am
index cdfc55e..e6fbf23 100644
--- a/src/bin/auth/Makefile.am
+++ b/src/bin/auth/Makefile.am
@@ -41,7 +41,7 @@ b10_auth_SOURCES += auth_srv.cc auth_srv.h
 b10_auth_SOURCES += change_user.cc change_user.h
 b10_auth_SOURCES += config.cc config.h
 b10_auth_SOURCES += command.cc command.h
-b10_auth_SOURCES += common.h
+b10_auth_SOURCES += common.h common.cc
 b10_auth_SOURCES += statistics.cc statistics.h
 b10_auth_SOURCES += main.cc
 b10_auth_LDADD =  $(top_builddir)/src/lib/datasrc/libdatasrc.la
diff --git a/src/bin/auth/common.cc b/src/bin/auth/common.cc
new file mode 100644
index 0000000..fe383e2
--- /dev/null
+++ b/src/bin/auth/common.cc
@@ -0,0 +1,36 @@
+// Copyright (C) 2009-2011  Internet Systems Consortium, Inc. ("ISC")
+//
+// Permission to use, copy, modify, and/or distribute this software for any
+// purpose with or without fee is hereby granted, provided that the above
+// copyright notice and this permission notice appear in all copies.
+//
+// THE SOFTWARE IS PROVIDED "AS IS" AND ISC DISCLAIMS ALL WARRANTIES WITH
+// REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
+// AND FITNESS.  IN NO EVENT SHALL ISC BE LIABLE FOR ANY SPECIAL, DIRECT,
+// INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
+// LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE
+// OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+// PERFORMANCE OF THIS SOFTWARE.
+
+#include <auth/common.h>
+#include <auth/spec_config.h>
+#include <cstdlib>
+
+using std::string;
+
+string getXfroutSocketPath() {
+    if (getenv("B10_FROM_BUILD") != NULL) {
+        if (getenv("B10_FROM_SOURCE_LOCALSTATEDIR")) {
+            return (string(getenv("B10_FROM_SOURCE_LOCALSTATEDIR")) +
+                    "/auth_xfrout_conn");
+        } else {
+            return (string(getenv("B10_FROM_BUILD")) + "/auth_xfrout_conn");
+        }
+    } else {
+        if (getenv("BIND10_XFROUT_SOCKET_FILE")) {
+            return (getenv("BIND10_XFROUT_SOCKET_FILE"));
+        } else {
+            return (UNIX_SOCKET_FILE);
+        }
+    }
+}
diff --git a/src/bin/auth/common.h b/src/bin/auth/common.h
index 6af09fb..b913593 100644
--- a/src/bin/auth/common.h
+++ b/src/bin/auth/common.h
@@ -1,4 +1,4 @@
-// Copyright (C) 2009  Internet Systems Consortium, Inc. ("ISC")
+// Copyright (C) 2009-2011  Internet Systems Consortium, Inc. ("ISC")
 //
 // Permission to use, copy, modify, and/or distribute this software for any
 // purpose with or without fee is hereby granted, provided that the above
@@ -29,6 +29,15 @@ public:
     {}
 };
 
+/// \short Get the path of socket to talk to xfrout
+///
+/// It takes some environment variables into account (B10_FROM_BUILD,
+/// B10_FROM_SOURCE_LOCALSTATEDIR and BIND10_XFROUT_SOCKET_FILE). It
+/// also considers the installation prefix.
+///
+/// The logic should be the same as in b10-xfrout, so they find each other.
+std::string getXfroutSocketPath();
+
 #endif // __COMMON_H
 
 // Local Variables:
diff --git a/src/bin/auth/main.cc b/src/bin/auth/main.cc
index fad4a72..23b8902 100644
--- a/src/bin/auth/main.cc
+++ b/src/bin/auth/main.cc
@@ -1,4 +1,4 @@
-// Copyright (C) 2009  Internet Systems Consortium, Inc. ("ISC")
+// Copyright (C) 2009-2011  Internet Systems Consortium, Inc. ("ISC")
 //
 // Permission to use, copy, modify, and/or distribute this software for any
 // purpose with or without fee is hereby granted, provided that the above
@@ -120,19 +120,7 @@ main(int argc, char* argv[]) {
     bool xfrin_session_established = false; // XXX (see Trac #287)
     bool statistics_session_established = false; // XXX (see Trac #287)
     ModuleCCSession* config_session = NULL;
-    string xfrout_socket_path;
-    if (getenv("B10_FROM_BUILD") != NULL) {
-        if (getenv("B10_FROM_SOURCE_LOCALSTATEDIR")) {
-            xfrout_socket_path = string("B10_FROM_SOURCE_LOCALSTATEDIR") +
-                "/auth_xfrout_conn";
-        } else {
-            xfrout_socket_path = string(getenv("B10_FROM_BUILD")) +
-                "/auth_xfrout_conn";
-        }
-    } else {
-        xfrout_socket_path = UNIX_SOCKET_FILE;
-    }
-    XfroutClient xfrout_client(xfrout_socket_path);
+    XfroutClient xfrout_client(getXfroutSocketPath());
     try {
         string specfile;
         if (getenv("B10_FROM_BUILD")) {
diff --git a/src/bin/auth/tests/Makefile.am b/src/bin/auth/tests/Makefile.am
index 7d489a1..ebcd612 100644
--- a/src/bin/auth/tests/Makefile.am
+++ b/src/bin/auth/tests/Makefile.am
@@ -24,10 +24,12 @@ run_unittests_SOURCES += ../query.h ../query.cc
 run_unittests_SOURCES += ../change_user.h ../change_user.cc
 run_unittests_SOURCES += ../config.h ../config.cc
 run_unittests_SOURCES += ../command.h ../command.cc
+run_unittests_SOURCES += ../common.h ../common.cc
 run_unittests_SOURCES += ../statistics.h ../statistics.cc
 run_unittests_SOURCES += auth_srv_unittest.cc
 run_unittests_SOURCES += config_unittest.cc
 run_unittests_SOURCES += command_unittest.cc
+run_unittests_SOURCES += common_unittest.cc
 run_unittests_SOURCES += query_unittest.cc
 run_unittests_SOURCES += change_user_unittest.cc
 run_unittests_SOURCES += statistics_unittest.cc
diff --git a/src/bin/auth/tests/common_unittest.cc b/src/bin/auth/tests/common_unittest.cc
new file mode 100644
index 0000000..9b18142
--- /dev/null
+++ b/src/bin/auth/tests/common_unittest.cc
@@ -0,0 +1,96 @@
+// Copyright (C) 2011  Internet Systems Consortium, Inc. ("ISC")
+//
+// Permission to use, copy, modify, and/or distribute this software for any
+// purpose with or without fee is hereby granted, provided that the above
+// copyright notice and this permission notice appear in all copies.
+//
+// THE SOFTWARE IS PROVIDED "AS IS" AND ISC DISCLAIMS ALL WARRANTIES WITH
+// REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
+// AND FITNESS.  IN NO EVENT SHALL ISC BE LIABLE FOR ANY SPECIAL, DIRECT,
+// INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
+// LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE
+// OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+// PERFORMANCE OF THIS SOFTWARE.
+
+#include <gtest/gtest.h>
+#include <auth/common.h>
+#include <auth/spec_config.h>
+#include <vector>
+#include <string>
+#include <cstdio>
+#include <boost/foreach.hpp>
+
+using std::pair;
+using std::vector;
+using std::string;
+
+namespace {
+
+class Paths : public ::testing::Test {
+private:
+    typedef pair<string, string*> Environ;
+    vector<Environ> restoreEnviron;
+public:
+    void TearDown() {
+        // Restore the original environment
+        BOOST_FOREACH(const Environ &env, restoreEnviron) {
+            if (env.second == NULL) {
+                EXPECT_EQ(0, unsetenv(env.first.c_str())) <<
+                    "Couldn't restore environment, results of other tests"
+                    "are uncertain";
+            } else {
+                EXPECT_EQ(0, setenv(env.first.c_str(), env.second->c_str(),
+                                    1)) << "Couldn't restore environment, "
+                    "results of other tests are uncertain";
+            }
+        }
+    }
+protected:
+    // Sets a temporary value into environment. If value is empty, it deletes
+    // the variable from environment (just for simplicity).
+    void setEnv(const string& name, const string& value) {
+        // Backup the original environment
+        char* env(getenv(name.c_str()));
+        restoreEnviron.push_back(Environ(name, env == NULL ? NULL :
+                                         new string(env)));
+        // Set the new value
+        if (value.empty()) {
+            EXPECT_EQ(0, unsetenv(name.c_str()));
+        } else {
+            EXPECT_EQ(0, setenv(name.c_str(), value.c_str(), 1));
+        }
+    }
+    // Test getXfroutSocketPath under given environment
+    void testXfrout(const string& fromBuild, const string& localStateDir,
+                    const string& socketFile, const string& expected)
+    {
+        setEnv("B10_FROM_BUILD", fromBuild);
+        setEnv("B10_FROM_SOURCE_LOCALSTATEDIR", localStateDir);
+        setEnv("BIND10_XFROUT_SOCKET_FILE", socketFile);
+        EXPECT_EQ(expected, getXfroutSocketPath());
+    }
+};
+
+// Test that when we have no special environment, we get the default from prefix
+TEST_F(Paths, xfroutNoEnv) {
+    testXfrout("", "", "", UNIX_SOCKET_FILE);
+}
+
+// Override by B10_FROM_BUILD
+TEST_F(Paths, xfroutFromBuild) {
+    testXfrout("/from/build", "", "/wrong/path",
+               "/from/build/auth_xfrout_conn");
+}
+
+// Override by B10_FROM_SOURCE_LOCALSTATEDIR
+TEST_F(Paths, xfroutLocalStatedir) {
+    testXfrout("/wrong/path", "/state/dir", "/wrong/path",
+               "/state/dir/auth_xfrout_conn");
+}
+
+// Override by BIND10_XFROUT_SOCKET_FILE explicitly
+TEST_F(Paths, xfroutFromEnv) {
+    testXfrout("", "", "/the/path/to/file", "/the/path/to/file");
+}
+
+}




More information about the bind10-changes mailing list