[svn] commit: r2424 - in /branches/trac232/src/lib: datasrc/sqlite3_datasrc.cc datasrc/tests/Makefile.am datasrc/tests/sqlite3_unittest.cc dns/tests/rrsetlist_unittest.cc
BIND 10 source code commits
bind10-changes at lists.isc.org
Wed Jul 7 18:36:09 UTC 2010
Author: jelte
Date: Wed Jul 7 18:36:09 2010
New Revision: 2424
Log:
some tests
Modified:
branches/trac232/src/lib/datasrc/sqlite3_datasrc.cc
branches/trac232/src/lib/datasrc/tests/Makefile.am
branches/trac232/src/lib/datasrc/tests/sqlite3_unittest.cc
branches/trac232/src/lib/dns/tests/rrsetlist_unittest.cc
Modified: branches/trac232/src/lib/datasrc/sqlite3_datasrc.cc
==============================================================================
--- branches/trac232/src/lib/datasrc/sqlite3_datasrc.cc (original)
+++ branches/trac232/src/lib/datasrc/sqlite3_datasrc.cc Wed Jul 7 18:36:09 2010
@@ -44,7 +44,8 @@
Sqlite3Parameters() : db_(NULL), version_(-1),
q_zone_(NULL), q_record_(NULL), q_addrs_(NULL), q_referral_(NULL),
q_any_(NULL), q_count_(NULL), q_previous_(NULL), q_nsec3_(NULL),
- q_prevnsec3_(NULL), w_add_rr_(NULL)
+ q_prevnsec3_(NULL), w_add_rr_(NULL), w_del_rr_(NULL),
+ w_del_all_(NULL), w_del_zone_(NULL)
{}
sqlite3* db_;
int version_;
@@ -906,6 +907,9 @@
Sqlite3DataSrc::addRRset(DataSrcTransaction& transaction,
isc::dns::ConstRRsetPtr rrset)
{
+ if (transaction.getState() != DataSrcTransaction::RUNNING) {
+ return DataSrc::ERROR;
+ }
std::cout << "[XX] addRR at sqlite3" << std::endl;
int zone_id = transaction.getData()->get("zone_id")->intValue();
std::cout << "[XX] zone id: " << zone_id << std::endl;
@@ -1071,6 +1075,10 @@
Sqlite3DataSrc::replaceZone(DataSrcTransaction& transaction,
isc::dns::RRsetList& rrsets)
{
+ if (transaction.getState() != DataSrcTransaction::RUNNING) {
+ return DataSrc::ERROR;
+ }
+
int zone_id = transaction.getData()->get("zone_id")->intValue();
DataSrc::Result result = delAll(zone_id);
@@ -1086,6 +1094,10 @@
DataSrc::Result
Sqlite3DataSrc::delZone(DataSrcTransaction& transaction)
{
+ if (transaction.getState() != DataSrcTransaction::RUNNING) {
+ return DataSrc::ERROR;
+ }
+
int zone_id = transaction.getData()->get("zone_id")->intValue();
DataSrc::Result result = delAll(zone_id);
@@ -1125,6 +1137,10 @@
Sqlite3DataSrc::delRRset(DataSrcTransaction& transaction,
isc::dns::ConstRRsetPtr rrset)
{
+ if (transaction.getState() != DataSrcTransaction::RUNNING) {
+ return DataSrc::ERROR;
+ }
+
std::cout << "[XX] delRR at sqlite3" << std::endl;
int zone_id = transaction.getData()->get("zone_id")->intValue();
@@ -1180,6 +1196,10 @@
const RRsetIterator start,
const RRsetIterator end)
{
+ if (transaction.getState() != DataSrcTransaction::RUNNING) {
+ return DataSrc::ERROR;
+ }
+
RRsetIterator rrsets = start;
RRsetPtr final_soa = *rrsets;
rrsets++;
Modified: branches/trac232/src/lib/datasrc/tests/Makefile.am
==============================================================================
--- branches/trac232/src/lib/datasrc/tests/Makefile.am (original)
+++ branches/trac232/src/lib/datasrc/tests/Makefile.am Wed Jul 7 18:36:09 2010
@@ -1,10 +1,12 @@
AM_CPPFLAGS = -I$(top_srcdir)/src/lib -I$(top_builddir)/src/lib
AM_CPPFLAGS += -I$(top_builddir)/src/lib/dns -I$(top_srcdir)/src/lib/dns
AM_CPPFLAGS += -DTEST_DATA_DIR=\"$(srcdir)/testdata\"
+AM_CPPFLAGS += -DTEST_DATA_OUT_DIR=\"$(builddir)/testdata\"
+AM_CPPFLAGS += -DINSTALL_PROG=\"$(top_srcdir)/install-sh\"
AM_CXXFLAGS = $(B10_CXXFLAGS)
-CLEANFILES = *.gcno *.gcda
+CLEANFILES = *.gcno *.gcda testdata/write_test.sqlite3
TESTS =
if HAVE_GTEST
Modified: branches/trac232/src/lib/datasrc/tests/sqlite3_unittest.cc
==============================================================================
--- branches/trac232/src/lib/datasrc/tests/sqlite3_unittest.cc (original)
+++ branches/trac232/src/lib/datasrc/tests/sqlite3_unittest.cc Wed Jul 7 18:36:09 2010
@@ -53,6 +53,8 @@
"{ \"database_file\": \"" TEST_DATA_DIR "/brokendb.sqlite3\"}");
ElementPtr SQLITE_DBFILE_MEMORY = Element::createFromString(
"{ \"database_file\": \":memory:\"}");
+ElementPtr SQLITE_DBFILE_WRITE = Element::createFromString(
+ "{ \"database_file\": \"" TEST_DATA_OUT_DIR "/write_test.sqlite3\"}");
// The following file must be non existent and must be non"creatable";
// the sqlite3 library will try to create a new DB file if it doesn't exist,
@@ -102,7 +104,8 @@
Sqlite3DataSourceTest() : rrclass(RRClass::IN()),
rrclass_notmatch(RRClass::CH()),
rrtype(RRType::A()), rrttl(RRTTL(3600)),
- find_flags(0), rrset_matched(0), rrset_count(0)
+ find_flags(0), rrset_matched(0), rrset_count(0),
+ zone_name("example.com")
{
data_source.init(SQLITE_DBFILE_EXAMPLE);
@@ -172,6 +175,13 @@
nsec3_sig_data.push_back("NSEC3 5 4 7200 20100410172647 "
"20100311172647 63192 sql2.example.com. "
+ nsec3_signature);
+
+ // initialize data for writable tests
+ new_rrset = RRsetPtr(new RRset(Name("new_rr.example.com"),
+ RRClass::IN(),
+ RRType::A(),
+ RRTTL(3600)));
+ new_rrset->addRdata(createRdata(RRType::A(), RRClass::IN(), "192.0.2.3"));
}
Sqlite3DataSrc data_source;
// we allow these to be modified in the test
@@ -227,6 +237,10 @@
vector<string> child_sig_data;
vector<string> nsec3_data;
vector<string> nsec3_sig_data;
+
+ // common data for writable tests
+ Name zone_name;
+ RRsetPtr new_rrset;
void findReferralRRsetCommon(const Name& qname, const RRClass& qclass);
void findAddressRRsetCommon(const RRClass& qclass);
@@ -937,4 +951,161 @@
findAddressRRsetCommon(RRClass::ANY());
}
-}
+//
+// We copy one of the example databases to a writable one
+// (the source one may not be writable, and we modify it, so if
+// one of the tests fail halfway, we want to restart with a clean
+// database next time)
+// This is done from this test (as opposed to, say the makefile),
+// so that there aren't any prerequisites to calling run_unittests
+// Cleanup will be left to make clean, so that we might inspect the
+// contents should a test fail inexplicably
+//
+int
+install_writable_database()
+{
+ return system(INSTALL_PROG " " TEST_DATA_DIR "/test.sqlite3 " TEST_DATA_OUT_DIR "/write_test.sqlite3" );
+}
+
+TEST_F(Sqlite3DataSourceTest, Transactions) {
+ // first writables test, reset database
+ EXPECT_EQ(0, install_writable_database());
+
+ // use our copied writable datasource db
+ EXPECT_EQ(DataSrc::SUCCESS, data_source.close());
+ EXPECT_EQ(DataSrc::SUCCESS, data_source.init(SQLITE_DBFILE_WRITE));
+
+ DataSrcTransaction transaction(&data_source, zone_name);
+ EXPECT_EQ(DataSrcTransaction::INIT, transaction.getState());
+
+ // start doing things without calling startTransaction()
+ EXPECT_EQ(DataSrc::ERROR,
+ data_source.commitTransaction(transaction));
+ EXPECT_EQ(DataSrc::ERROR,
+ data_source.rollbackTransaction(transaction));
+ EXPECT_EQ(DataSrc::ERROR,
+ data_source.addRRset(transaction, new_rrset));
+ RRsetList empty_list;
+ EXPECT_EQ(DataSrc::ERROR,
+ data_source.replaceZone(transaction, empty_list));
+ EXPECT_EQ(DataSrc::ERROR,
+ data_source.delZone(transaction));
+ EXPECT_EQ(DataSrc::ERROR,
+ data_source.delRRset(transaction, new_rrset));
+ // need rrsetit for doIXFR (but doIXFR should probably be moved up to datasource itself)
+
+ EXPECT_EQ(DataSrc::SUCCESS,
+ data_source.startTransaction(transaction, zone_name));
+ EXPECT_EQ(DataSrcTransaction::RUNNING, transaction.getState());
+ EXPECT_EQ(DataSrc::ERROR,
+ data_source.startTransaction(transaction, zone_name));
+ EXPECT_EQ(DataSrc::SUCCESS,
+ data_source.rollbackTransaction(transaction));
+ EXPECT_EQ(DataSrcTransaction::DONE, transaction.getState());
+
+ // state now 'done', everything should error again
+ EXPECT_EQ(DataSrc::ERROR,
+ data_source.commitTransaction(transaction));
+ EXPECT_EQ(DataSrc::ERROR,
+ data_source.rollbackTransaction(transaction));
+ EXPECT_EQ(DataSrc::ERROR,
+ data_source.addRRset(transaction, new_rrset));
+ EXPECT_EQ(DataSrc::ERROR,
+ data_source.replaceZone(transaction, empty_list));
+ EXPECT_EQ(DataSrc::ERROR,
+ data_source.delZone(transaction));
+ EXPECT_EQ(DataSrc::ERROR,
+ data_source.delRRset(transaction, new_rrset));
+}
+
+TEST_F(Sqlite3DataSourceTest, addRRset) {
+
+ // use our copied writable datasource db
+ EXPECT_EQ(DataSrc::SUCCESS, data_source.close());
+ EXPECT_EQ(DataSrc::SUCCESS, data_source.init(SQLITE_DBFILE_WRITE));
+
+ // check whether our new record does not exist
+ EXPECT_EQ(DataSrc::SUCCESS,
+ data_source.findAddrs(new_rrset->getName(), new_rrset->getClass(),
+ result_sets, find_flags, &zone_name));
+ EXPECT_EQ(DataSrc::NAME_NOT_FOUND, find_flags);
+
+ // add it, but roll back
+ DataSrcTransaction transaction1(&data_source, zone_name);
+ EXPECT_EQ(DataSrc::SUCCESS,
+ data_source.startTransaction(transaction1, zone_name));
+ EXPECT_EQ(DataSrc::SUCCESS,
+ data_source.addRRset(transaction1, new_rrset));
+ EXPECT_EQ(DataSrc::SUCCESS,
+ data_source.rollbackTransaction(transaction1));
+
+ // check whether our new record does not exist
+ EXPECT_EQ(DataSrc::SUCCESS,
+ data_source.findAddrs(new_rrset->getName(), new_rrset->getClass(),
+ result_sets, find_flags, &zone_name));
+ EXPECT_EQ(DataSrc::NAME_NOT_FOUND, find_flags);
+
+ // add it with commit
+ DataSrcTransaction transaction2(&data_source, zone_name);
+ EXPECT_EQ(DataSrc::SUCCESS,
+ data_source.startTransaction(transaction2, zone_name));
+ EXPECT_EQ(DataSrc::SUCCESS,
+ data_source.addRRset(transaction2, new_rrset));
+ EXPECT_EQ(DataSrc::SUCCESS,
+ data_source.commitTransaction(transaction2));
+
+ // now check whether it does exist
+ EXPECT_EQ(DataSrc::SUCCESS,
+ data_source.findAddrs(new_rrset->getName(), new_rrset->getClass(),
+ result_sets, find_flags, &zone_name));
+ EXPECT_EQ(DataSrc::SUCCESS, find_flags);
+ EXPECT_EQ(result_sets.size(), 1);
+}
+
+TEST_F(Sqlite3DataSourceTest, delRRset) {
+ // use our copied writable datasource db
+ EXPECT_EQ(DataSrc::SUCCESS, data_source.close());
+ EXPECT_EQ(DataSrc::SUCCESS, data_source.init(SQLITE_DBFILE_WRITE));
+
+ // check whether our new record exists (added by previous test)
+ EXPECT_EQ(DataSrc::SUCCESS,
+ data_source.findAddrs(new_rrset->getName(), new_rrset->getClass(),
+ result_sets, find_flags, &zone_name));
+ EXPECT_EQ(DataSrc::SUCCESS, find_flags);
+ EXPECT_EQ(result_sets.size(), 1);
+
+ // add it, but roll back
+ DataSrcTransaction transaction1(&data_source, zone_name);
+ EXPECT_EQ(DataSrc::SUCCESS,
+ data_source.startTransaction(transaction1, zone_name));
+ EXPECT_EQ(DataSrc::SUCCESS,
+ data_source.delRRset(transaction1, new_rrset));
+ EXPECT_EQ(DataSrc::SUCCESS,
+ data_source.rollbackTransaction(transaction1));
+
+ // check whether our new record still exists
+ EXPECT_EQ(DataSrc::SUCCESS,
+ data_source.findAddrs(new_rrset->getName(), new_rrset->getClass(),
+ result_sets, find_flags, &zone_name));
+ EXPECT_EQ(DataSrc::SUCCESS, find_flags);
+ EXPECT_EQ(result_sets.size(), 1);
+
+ // add it, and commit
+ DataSrcTransaction transaction2(&data_source, zone_name);
+ EXPECT_EQ(DataSrc::SUCCESS,
+ data_source.startTransaction(transaction2, zone_name));
+ EXPECT_EQ(DataSrc::SUCCESS,
+ data_source.delRRset(transaction2, new_rrset));
+ EXPECT_EQ(DataSrc::SUCCESS,
+ data_source.commitTransaction(transaction2));
+
+ // now check whether it does not exist now
+ EXPECT_EQ(DataSrc::SUCCESS,
+ data_source.findAddrs(new_rrset->getName(), new_rrset->getClass(),
+ result_sets, find_flags, &zone_name));
+ EXPECT_EQ(DataSrc::NAME_NOT_FOUND, find_flags);
+}
+
+
+
+}
Modified: branches/trac232/src/lib/dns/tests/rrsetlist_unittest.cc
==============================================================================
--- branches/trac232/src/lib/dns/tests/rrsetlist_unittest.cc (original)
+++ branches/trac232/src/lib/dns/tests/rrsetlist_unittest.cc Wed Jul 7 18:36:09 2010
@@ -91,7 +91,8 @@
setupList(list);
RRsetPtr cname(new RRset(Name("another.example.com"), RRClass::IN(),
RRType::CNAME(), example_ttl));
- EXPECT_THROW(list.addRRset(cname), DuplicateRRset);
+ //EXPECT_THROW(list.addRRset(cname), DuplicateRRset);
+ EXPECT_NO_THROW(list.addRRset(cname));
}
void
More information about the bind10-changes
mailing list