Browse Source

[1292_2] add some more tests

Jelte Jansen 13 years ago
parent
commit
6690b8985d
3 changed files with 34 additions and 2 deletions
  1. 5 1
      src/lib/datasrc/factory.cc
  2. 1 1
      src/lib/datasrc/factory.h
  3. 28 0
      src/lib/datasrc/tests/factory_unittest.cc

+ 5 - 1
src/lib/datasrc/factory.cc

@@ -39,9 +39,13 @@ namespace {
 const std::string
 getDataSourceLibFile(const std::string& type) {
     if (type.empty()) {
-        isc_throw(DataSourceError,
+        isc_throw(DataSourceLibraryError,
                   "DataSourceClient container called with empty type value");
     }
+    if (type == ".so") {
+        isc_throw(DataSourceLibraryError, "DataSourceClient container called"
+                                          "with bad type or file name");
+    }
 
     // Type can be either a short name, in which case we need to
     // append "_ds.so", or it can be a direct .so library.

+ 1 - 1
src/lib/datasrc/factory.h

@@ -68,7 +68,7 @@ public:
     ///             the library path.
     ///
     /// \exception DataSourceLibraryError If the library cannot be found or
-    ///            cannot be loaded.
+    ///            cannot be loaded, or if name is an empty string.
     LibraryContainer(const std::string& name);
 
     /// \brief Destructor

+ 28 - 0
src/lib/datasrc/tests/factory_unittest.cc

@@ -14,6 +14,7 @@
 
 #include <boost/scoped_ptr.hpp>
 
+#include <datasrc/datasrc_config.h>
 #include <datasrc/factory.h>
 #include <datasrc/data_source.h>
 #include <datasrc/sqlite3_accessor.h>
@@ -41,6 +42,7 @@ pathtestHelper(const std::string& file, const std::string& expected_error) {
     } catch (const DataSourceLibraryError& dsle) {
         error = dsle.what();
     }
+    ASSERT_LT(expected_error.size(), error.size());
     EXPECT_EQ(expected_error, error.substr(0, expected_error.size()));
 }
 
@@ -65,6 +67,32 @@ TEST(FactoryTest, paths) {
                    "/src/lib/datasrc/.libs/no_such_file.so");
     pathtestHelper("no_such_file", error + builddir +
                    "/src/lib/datasrc/.libs/no_such_file_ds.so");
+
+    // Some tests with '.so' in the name itself
+    pathtestHelper("no_such_file.so.something", error + builddir +
+                   "/src/lib/datasrc/.libs/no_such_file.so.something_ds.so");
+    pathtestHelper("/no_such_file.so.something", error +
+                   "/no_such_file.so.something_ds.so");
+    pathtestHelper("/no_such_file.so.something.so", error +
+                   "/no_such_file.so.something.so");
+    pathtestHelper("/no_such_file.so.so", error +
+                   "/no_such_file.so.so");
+    pathtestHelper("no_such_file.so.something", error + builddir +
+                   "/src/lib/datasrc/.libs/no_such_file.so.something_ds.so");
+
+    // Temporarily unset B10_FROM_BUILD to see that BACKEND_LIBRARY_PATH
+    // is used
+    unsetenv("B10_FROM_BUILD");
+    pathtestHelper("no_such_file.so", error + BACKEND_LIBRARY_PATH +
+                   "no_such_file.so");
+    // Put it back just in case
+    setenv("B10_FROM_BUILD", builddir.c_str(), 1);
+
+    // Test some bad input values
+    ASSERT_THROW(DataSourceClientContainer("", ElementPtr()),
+                 DataSourceLibraryError);
+    ASSERT_THROW(DataSourceClientContainer(".so", ElementPtr()),
+                 DataSourceLibraryError);
 }
 
 TEST(FactoryTest, sqlite3ClientBadConfig) {