From: Michal 'vorner' Vaner Date: Thu, 7 Jun 2012 14:35:46 +0000 (+0200) Subject: [1997] Tests for static data source X-Git-Tag: trac2351_base~226^2~59^2~5^2~3 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=2d96fb33890ca6e6abe991d694d9408f5264fc57;p=thirdparty%2Fkea.git [1997] Tests for static data source Introduced (yet empty and not implemented) static data source library. The tests for the future implementations are in place and obviously fail. --- diff --git a/src/lib/datasrc/Makefile.am b/src/lib/datasrc/Makefile.am index 2cdb8ea378..9a42c771b1 100644 --- a/src/lib/datasrc/Makefile.am +++ b/src/lib/datasrc/Makefile.am @@ -33,7 +33,7 @@ libdatasrc_la_SOURCES += factory.h factory.cc nodist_libdatasrc_la_SOURCES = datasrc_messages.h datasrc_messages.cc libdatasrc_la_LDFLAGS = -no-undefined -version-info 1:0:1 -pkglib_LTLIBRARIES = sqlite3_ds.la memory_ds.la +pkglib_LTLIBRARIES = sqlite3_ds.la memory_ds.la static_ds.la sqlite3_ds_la_SOURCES = sqlite3_accessor.h sqlite3_accessor.cc sqlite3_ds_la_SOURCES += sqlite3_accessor_link.cc @@ -49,6 +49,12 @@ memory_ds_la_LDFLAGS = -module -avoid-version memory_ds_la_LIBADD = $(top_builddir)/src/lib/exceptions/libexceptions.la memory_ds_la_LIBADD += libdatasrc.la +static_ds_la_SOURCES = memory_datasrc.h memory_datasrc.cc +static_ds_la_SOURCES += static_datasrc_link.cc +static_ds_la_LDFLAGS = -module -avoid-version +static_ds_la_LIBADD = $(top_builddir)/src/lib/exceptions/libexceptions.la +static_ds_la_LIBADD += libdatasrc.la + libdatasrc_la_LIBADD = $(top_builddir)/src/lib/exceptions/libexceptions.la libdatasrc_la_LIBADD += $(top_builddir)/src/lib/dns/libdns++.la libdatasrc_la_LIBADD += $(top_builddir)/src/lib/log/liblog.la diff --git a/src/lib/datasrc/static_datasrc_link.cc b/src/lib/datasrc/static_datasrc_link.cc new file mode 100644 index 0000000000..d10ebab6a7 --- /dev/null +++ b/src/lib/datasrc/static_datasrc_link.cc @@ -0,0 +1,38 @@ +// Copyright (C) 2012 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 "client.h" +#include "memory_datasrc.h" + +#include + +using namespace isc::data; +using namespace std; + +namespace isc { +namespace datasrc { + +DataSourceClient* +createInstance(ConstElementPtr, string& error) { + error = "Not yet implemented"; + return (NULL); +} + +void +destroyInstance(DataSourceClient* instance) { + delete instance; +} + +} +} diff --git a/src/lib/datasrc/tests/factory_unittest.cc b/src/lib/datasrc/tests/factory_unittest.cc index 58afd7b694..8fb2f24e3b 100644 --- a/src/lib/datasrc/tests/factory_unittest.cc +++ b/src/lib/datasrc/tests/factory_unittest.cc @@ -28,6 +28,8 @@ using namespace isc::datasrc; using namespace isc::data; std::string SQLITE_DBFILE_EXAMPLE_ORG = TEST_DATA_DIR "/example.org.sqlite3"; +const std::string STATIC_DS_FILE = TEST_DATA_DIR "/static.zone"; +const std::string ROOT_ZONE_FILE = TEST_DATA_DIR "/root.zone"; namespace { @@ -235,5 +237,55 @@ TEST(FactoryTest, badType) { DataSourceError); } +// Check the static data source can be loaded. +TEST(FactoryTest, staticDS) { + // The only configuration is the file to load. + const ConstElementPtr config(new StringElement(STATIC_DS_FILE)); + // Get the data source + DataSourceClientContainer dsc("static", config); + // And try getting something out to see if it really works. + DataSourceClient::FindResult + result(dsc.getInstance().findZone(isc::dns::Name("BIND"))); + ASSERT_EQ(result::SUCCESS, result.code); + EXPECT_EQ(isc::dns::Name("BIND"), result.zone_finder->getOrigin()); + EXPECT_EQ(isc::dns::RRClass::CH(), result.zone_finder->getClass()); + const isc::dns::ConstRRsetPtr + version(result.zone_finder->find(isc::dns::Name("VERSION.BIND"), + isc::dns::RRType::TXT())->rrset); + ASSERT_NE(isc::dns::ConstRRsetPtr(), version); + EXPECT_EQ(isc::dns::Name("VERSION.BIND"), version->getName()); + EXPECT_EQ(isc::dns::RRClass::CH(), version->getClass()); + EXPECT_EQ(isc::dns::RRType::TXT(), version->getType()); +} + +// Check that file not containing BIND./CH is rejected +TEST(FactoryTest, staticDSBadFile) { + // The only configuration is the file to load. + const ConstElementPtr config(new StringElement(STATIC_DS_FILE)); + // See it does not want the file + EXPECT_THROW(DataSourceClientContainer("static", config), DataSourceError); +} + +// Check that some bad configs are rejected +TEST(FactoryTest, staticDSBadConfig) { + const char* configs[] = { + // The file does not exist + "\"/does/not/exist\"", + // Bad types + "null", + "42", + "{}", + "[]", + "true", + NULL + }; + for (const char** config(configs); *config; ++config) { + SCOPED_TRACE(*config); + EXPECT_THROW(DataSourceClientContainer("static", + Element::fromJSON(*config)), + DataSourceError); + } +} + } // end anonymous namespace diff --git a/src/lib/datasrc/tests/testdata/static.zone b/src/lib/datasrc/tests/testdata/static.zone new file mode 100644 index 0000000000..5e9e8a65bd --- /dev/null +++ b/src/lib/datasrc/tests/testdata/static.zone @@ -0,0 +1,2 @@ +BIND. 3600 CH SOA BIND. BIND. 1 3600 300 36000 3600 +VERSION.BIND. 3600 CH TXT "10"