[svn] commit: r3309 - in /branches/trac374/src/lib/datasrc: sqlite3_datasrc.cc tests/sqlite3_unittest.cc

BIND 10 source code commits bind10-changes at lists.isc.org
Thu Oct 21 15:04:29 UTC 2010


Author: jelte
Date: Thu Oct 21 15:04:28 2010
New Revision: 3309

Log:
added test for trying to replace a non-existent zone with create_zone set to false. And fixed one instance where it could go wrong in subsequent database actions
also fixed return statement style

Modified:
    branches/trac374/src/lib/datasrc/sqlite3_datasrc.cc
    branches/trac374/src/lib/datasrc/tests/sqlite3_unittest.cc

Modified: branches/trac374/src/lib/datasrc/sqlite3_datasrc.cc
==============================================================================
--- branches/trac374/src/lib/datasrc/sqlite3_datasrc.cc (original)
+++ branches/trac374/src/lib/datasrc/sqlite3_datasrc.cc Thu Oct 21 15:04:28 2010
@@ -791,30 +791,41 @@
 Sqlite3DataSrc::startTransaction(DataSrcTransaction& transaction, bool new_zone)
 {
     if (transaction.getState() != DataSrcTransaction::INIT) {
-        return DataSrc::W_ERROR;
-    }
-    int result = sqlite3_exec(dbparameters->db_, w_start_transaction_str, NULL, NULL, NULL);
+        return (DataSrc::W_ERROR);
+    }
+    int result = sqlite3_exec(dbparameters->db_,
+                              w_start_transaction_str,
+                              NULL, NULL, NULL);
     if (result == SQLITE_OK) {
         int zone_id = hasExactZone(transaction.getZoneName().toText().c_str());
         if (zone_id <= 0) {
             if (new_zone) {
                 DataSrc::WriteResult add_zone_res = 
-                    addZone(transaction.getZoneName(), isc::dns::RRClass::IN());
+                    addZone(transaction.getZoneName(),
+                            isc::dns::RRClass::IN());
                 if (add_zone_res != DataSrc::W_SUCCESS) {
-                    return add_zone_res;
+                    return (add_zone_res);
                 }
                 zone_id = hasExactZone(transaction.getZoneName().toText().c_str());
             } else {
-                return DataSrc::W_NO_SUCH_ZONE;
+                // roll back the transaction we started
+                result = sqlite3_exec(dbparameters->db_,
+                                      w_rollback_transaction_str,
+                                      NULL, NULL, NULL);
+                if (result == SQLITE_OK) {
+                    return (DataSrc::W_NO_SUCH_ZONE);
+                } else {
+                    return (DataSrc::W_DB_ERROR);
+                }
             }
         }
         isc::data::ElementPtr trans_data = isc::data::Element::createMap();
         trans_data->set("zone_id", isc::data::Element::create(zone_id));
         transaction.setData(trans_data);
         transaction.setState(DataSrcTransaction::RUNNING);
-        return DataSrc::W_SUCCESS;
-    } else {
-        return DataSrc::W_DB_ERROR;
+        return (DataSrc::W_SUCCESS);
+    } else {
+        return (DataSrc::W_DB_ERROR);
     }
 }
 
@@ -822,16 +833,16 @@
 Sqlite3DataSrc::commitTransaction(DataSrcTransaction& transaction UNUSED_PARAM)
 {
     if (transaction.getState() != DataSrcTransaction::RUNNING) {
-        return DataSrc::W_ERROR;
+        return (DataSrc::W_ERROR);
     }
 
     int result = sqlite3_exec(dbparameters->db_, w_commit_transaction_str, NULL, NULL, NULL);
     
     if (result == SQLITE_OK) {
         transaction.setState(DataSrcTransaction::DONE);
-        return DataSrc::W_SUCCESS;
-    } else {
-        return DataSrc::W_DB_ERROR;
+        return (DataSrc::W_SUCCESS);
+    } else {
+        return (DataSrc::W_DB_ERROR);
     }
 }
 
@@ -839,15 +850,15 @@
 Sqlite3DataSrc::rollbackTransaction(DataSrcTransaction& transaction)
 {
     if (transaction.getState() != DataSrcTransaction::RUNNING) {
-        return DataSrc::W_ERROR;
+        return (DataSrc::W_ERROR);
     }
     int result = sqlite3_exec(dbparameters->db_, w_rollback_transaction_str, NULL, NULL, NULL);
 
     if (result == SQLITE_OK) {
         transaction.setState(DataSrcTransaction::DONE);
-        return DataSrc::W_SUCCESS;
-    } else {
-        return DataSrc::W_DB_ERROR;
+        return (DataSrc::W_SUCCESS);
+    } else {
+        return (DataSrc::W_DB_ERROR);
     }
 }
 
@@ -880,9 +891,9 @@
     sqlite3_reset(query);
 
     if (result == SQLITE_DONE) {
-        return DataSrc::W_SUCCESS;
-    } else {
-        return DataSrc::W_DB_ERROR;
+        return (DataSrc::W_SUCCESS);
+    } else {
+        return (DataSrc::W_DB_ERROR);
     }
 }
 
@@ -947,9 +958,9 @@
     sqlite3_reset(query);
 
     if (result == SQLITE_DONE) {
-        return DataSrc::W_SUCCESS;
-    } else {
-        return DataSrc::W_DB_ERROR;
+        return (DataSrc::W_SUCCESS);
+    } else {
+        return (DataSrc::W_DB_ERROR);
     }
 
 }
@@ -959,10 +970,10 @@
                          isc::dns::ConstRRsetPtr rrset)
 {
     if (transaction.getState() != DataSrcTransaction::RUNNING) {
-        return DataSrc::W_ERROR;
+        return (DataSrc::W_ERROR);
     }
     if (rrset->getRdataCount() == 0) {
-        return DataSrc::W_ERROR;
+        return (DataSrc::W_ERROR);
     }
     int zone_id = transaction.getData()->get("zone_id")->intValue();
     RdataIteratorPtr rdp = rrset->getRdataIterator();
@@ -973,12 +984,12 @@
         result = addRR(zone_id, rrset->getName(), rrset->getType(),
                        rrset->getTTL(), rdp->getCurrent());
         if (result != DataSrc::W_SUCCESS) {
-            return result;
+            return (result);
         } else {
             rdp->next();
         }
     } while (!rdp->isLast());
-    return result;
+    return (result);
 }
 
 DataSrc::WriteResult
@@ -1030,12 +1041,12 @@
 
     if (result == SQLITE_DONE) {
         if (deleted_rows > 0) {
-            return DataSrc::W_SUCCESS;
+            return (DataSrc::W_SUCCESS);
         } else {
-            return DataSrc::W_NO_SUCH_DATA;
-        }
-    } else {
-        return DataSrc::W_DB_ERROR;
+            return (DataSrc::W_NO_SUCH_DATA);
+        }
+    } else {
+        return (DataSrc::W_DB_ERROR);
     }
 }
 
@@ -1084,12 +1095,12 @@
 
     if (result == SQLITE_DONE) {
         if (deleted_rows > 0) {
-            return DataSrc::W_SUCCESS;
+            return (DataSrc::W_SUCCESS);
         } else {
-            return DataSrc::W_NO_SUCH_DATA;
-        }
-    } else {
-        return DataSrc::W_DB_ERROR;
+            return (DataSrc::W_NO_SUCH_DATA);
+        }
+    } else {
+        return (DataSrc::W_DB_ERROR);
     }
 }
 
@@ -1113,9 +1124,9 @@
     sqlite3_reset(query);
 
     if (result == SQLITE_DONE) {
-        return DataSrc::W_SUCCESS;
-    } else {
-        return DataSrc::W_DB_ERROR;
+        return (DataSrc::W_SUCCESS);
+    } else {
+        return (DataSrc::W_DB_ERROR);
     }
 }
 
@@ -1125,42 +1136,42 @@
                             void* arg1, void* arg2)
 {
     if (transaction.getState() != DataSrcTransaction::RUNNING) {
-        return DataSrc::W_ERROR;
+        return (DataSrc::W_ERROR);
     }
 
     int zone_id = transaction.getData()->get("zone_id")->intValue();
 
     DataSrc::WriteResult result = delAll(zone_id);
     if (result != DataSrc::W_SUCCESS) {
-        return result;
+        return (result);
     }
 
     if (!nextRRset) {
-        return DataSrc::W_SUCCESS;
+        return (DataSrc::W_SUCCESS);
     }
     RRsetPtr next_rrset = nextRRset(arg1, arg2);
     while (next_rrset) {
         result = addRRset(transaction, next_rrset);
         if (result != DataSrc::W_SUCCESS) {
-            return result;
+            return (result);
         }
         next_rrset = nextRRset(arg1, arg2);
     }
-    return DataSrc::W_SUCCESS;
+    return (DataSrc::W_SUCCESS);
 }
 
 DataSrc::WriteResult
 Sqlite3DataSrc::delZone(DataSrcTransaction& transaction)
 {
     if (transaction.getState() != DataSrcTransaction::RUNNING) {
-        return DataSrc::W_ERROR;
+        return (DataSrc::W_ERROR);
     }
 
     int zone_id = transaction.getData()->get("zone_id")->intValue();
 
     DataSrc::WriteResult result = delAll(zone_id);
     if (result != DataSrc::W_SUCCESS) {
-        return result;
+        return (result);
     }
 
     sqlite3_stmt* query = dbparameters->w_del_zone_;
@@ -1180,9 +1191,9 @@
     sqlite3_reset(query);
 
     if (q_result == SQLITE_DONE) {
-        return DataSrc::W_SUCCESS;
-    } else {
-        return DataSrc::W_DB_ERROR;
+        return (DataSrc::W_SUCCESS);
+    } else {
+        return (DataSrc::W_DB_ERROR);
     }
 }
 
@@ -1191,7 +1202,7 @@
                          isc::dns::ConstRRsetPtr rrset)
 {
     if (transaction.getState() != DataSrcTransaction::RUNNING) {
-        return DataSrc::W_ERROR;
+        return (DataSrc::W_ERROR);
     }
 
     int zone_id = transaction.getData()->get("zone_id")->intValue();
@@ -1204,7 +1215,7 @@
         do {
             result = delRR(zone_id, rrset->getName(), rrset->getType(), rdp->getCurrent());
             if (result != DataSrc::W_SUCCESS) {
-                return result;
+                return (result);
             } else {
                 rdp->next();
             }
@@ -1212,8 +1223,8 @@
     } else {
         result = delRR(zone_id, rrset->getName(), rrset->getType());
     }
-    return result;
-}
-
-}
-}
+    return (result);
+}
+
+}
+}

Modified: branches/trac374/src/lib/datasrc/tests/sqlite3_unittest.cc
==============================================================================
--- branches/trac374/src/lib/datasrc/tests/sqlite3_unittest.cc (original)
+++ branches/trac374/src/lib/datasrc/tests/sqlite3_unittest.cc Thu Oct 21 15:04:28 2010
@@ -963,7 +963,7 @@
 int
 install_writable_database()
 {
-    return system(INSTALL_PROG " " TEST_DATA_DIR "/test.sqlite3 " TEST_DATA_OUT_DIR "/write_test.sqlite3" );
+    return (system(INSTALL_PROG " " TEST_DATA_DIR "/test.sqlite3 " TEST_DATA_OUT_DIR "/write_test.sqlite3" ));
 }
 
 TEST_F(Sqlite3DataSourceTest, Transactions) {
@@ -1152,7 +1152,7 @@
 RRsetPtr
 getRRsetCallback_empty(void *arg1 UNUSED_PARAM,
                        void* arg2 UNUSED_PARAM) {
-    return RRsetPtr();
+    return (RRsetPtr());
 }
 
 TEST_F(Sqlite3DataSourceTest, replaceZone_callback_empty) {
@@ -1198,11 +1198,7 @@
 
 }
 
-TEST_F(Sqlite3DataSourceTest, replaceZone_callback_vector) {
-    std::vector<RRsetPtr> rrsets;
-
-    size_t i = 0;
-    
+TEST_F(Sqlite3DataSourceTest, replaceZone_new_zone) {
     // reset database
     ASSERT_EQ(0, install_writable_database());
 
@@ -1210,54 +1206,51 @@
     ASSERT_EQ(DataSrc::SUCCESS, data_source.close());
     ASSERT_EQ(DataSrc::SUCCESS, data_source.init(SQLITE_DBFILE_WRITE));
 
-    // Let's take the existing SOA for now
-    RRsetList soa_rrset;
-    EXPECT_EQ(DataSrc::SUCCESS,
-              data_source.findExactRRset(zone_name, RRClass::IN(), RRType::SOA(),
-                                    soa_rrset, find_flags, &zone_name));
-    ASSERT_EQ(DataSrc::SUCCESS, find_flags);
-    ASSERT_EQ(1, soa_rrset.size());
-
-    rrsets.push_back(soa_rrset.findRRset(RRType::SOA(), RRClass::IN()));
-    rrsets.push_back(new_rrset);
-
-    // Replace them, roll back
-    DataSrcTransaction transaction1(&data_source, zone_name, RRClass::IN());
-    ASSERT_EQ(DataSrc::W_SUCCESS, data_source.startTransaction(transaction1));
-    ASSERT_EQ(DataSrc::W_SUCCESS, data_source.replaceZone(transaction1, isc::datasrc::callbackHelperRRsetVector, &rrsets, &i));
-    ASSERT_EQ(DataSrc::W_SUCCESS, data_source.rollbackTransaction(transaction1));
-
-    // check whether it still exists
-    EXPECT_EQ(DataSrc::SUCCESS,
-              data_source.findRRset(www_name, RRClass::IN(), RRType::A(),
-                                    result_sets, find_flags, &zone_name));
-    EXPECT_EQ(DataSrc::SUCCESS, find_flags);
-    EXPECT_EQ(1, result_sets.size());
+    std::vector<RRsetPtr> rrsets;
+
+    RRsetPtr soa_rrset = RRsetPtr(new RRset(Name("new.example.com"),
+                                  RRClass::IN(),
+                                  RRType::SOA(),
+                                  RRTTL(3600)));
+    RdataPtr soa_rdata = isc::dns::rdata::createRdata(RRType::SOA(),
+                                                      RRClass::IN(),
+                                                      "new.example.com. new.example.com. 760 28800 7200 604800 3600");
+    soa_rrset->addRdata(soa_rdata);
+    rrsets.push_back(soa_rrset);
+
+    RRsetPtr a_rrset = RRsetPtr(new RRset(Name("new.example.com"),
+                                RRClass::IN(),
+                                RRType::A(),
+                                RRTTL(3600)));
+    RdataPtr a_rdata = isc::dns::rdata::createRdata(RRType::A(),
+                                                    RRClass::IN(),
+                                                    "192.0.2.1");
+    a_rrset->addRdata(a_rdata);
+    rrsets.push_back(a_rrset);
+
+    // Try to start transaction without create_zone set to true
+    DataSrcTransaction transaction1(&data_source, soa_rrset->getName(), RRClass::IN());
+    ASSERT_EQ(DataSrc::W_NO_SUCH_ZONE, data_source.startTransaction(transaction1));
 
     // Replace them, commit
-    i = 0;
-    DataSrcTransaction transaction2(&data_source, zone_name, RRClass::IN());
-    ASSERT_EQ(DataSrc::W_SUCCESS, data_source.startTransaction(transaction2));
-    ASSERT_EQ(DataSrc::W_SUCCESS, data_source.replaceZone(transaction2, isc::datasrc::callbackHelperRRsetVector, &rrsets, &i));
+    size_t i = 0;
+    
+    DataSrcTransaction transaction2(&data_source, soa_rrset->getName(), RRClass::IN());
+    ASSERT_EQ(DataSrc::W_SUCCESS, data_source.startTransaction(transaction2, true));
+    ASSERT_EQ(DataSrc::W_SUCCESS,
+              data_source.replaceZone(transaction2,
+                                      isc::datasrc::callbackHelperRRsetVector,
+                                      &rrsets, &i));
     ASSERT_EQ(DataSrc::W_SUCCESS, data_source.commitTransaction(transaction2));
     
-    // check whether the original rrs are gone now
-    EXPECT_EQ(DataSrc::SUCCESS,
-              data_source.findRRset(www_name, RRClass::IN(), RRType::A(),
-                                    result_sets, find_flags, &zone_name));
-    EXPECT_EQ(DataSrc::NAME_NOT_FOUND, find_flags);
-    EXPECT_EQ(1, result_sets.size());
-    
     // and check if the new record exists
     EXPECT_EQ(DataSrc::SUCCESS,
-              data_source.findExactRRset(new_rrset->getName(), new_rrset->getClass(), new_rrset->getType(),
-                                    result_sets, find_flags, &zone_name));
-    //std::cout << "[XX] done, exit" << std::endl;
-    //data_source.close();
-    //exit(0);
+              data_source.findExactRRset(a_rrset->getName(), a_rrset->getClass(), a_rrset->getType(),
+                                    result_sets, find_flags, &a_rrset->getName()));
     ASSERT_EQ(DataSrc::SUCCESS, find_flags);
     ASSERT_EQ(1, result_sets.size());
 }
+
 
 TEST_F(Sqlite3DataSourceTest, delZone) {
     // reset database
@@ -1313,12 +1306,12 @@
     string s;
     file >> s;
     if (s == "") {
-        return QuestionPtr();
+        return (QuestionPtr());
     }
     if (s.size() > 0 && s[0] == ';') {
         std::string ignore_rest_of_line;
         getline(file, ignore_rest_of_line);
-        return QuestionPtr();
+        return (QuestionPtr());
     }
     Name n(s);
     file >> s;
@@ -1329,7 +1322,7 @@
     getline(file, line);
 
     QuestionPtr question(new Question(n, rrclass, rrtype));
-    return question;
+    return (question);
 }
 
 static RRsetPtr
@@ -1338,12 +1331,12 @@
     string s;
     file >> s;
     if (s == "") {
-        return RRsetPtr();
+        return (RRsetPtr());
     }
     if (s.size() > 0 && s[0] == ';') {
         std::string ignore_rest_of_line;
         getline(file, ignore_rest_of_line);
-        return RRsetPtr();
+        return (RRsetPtr());
     }
     Name n(s);
 
@@ -1382,7 +1375,7 @@
         RdataPtr rdata = createRdata(rrtype, rrclass, line);
         rrset->addRdata(rdata);
     }
-    return rrset;
+    return (rrset);
 }
 
 // initialize the message with flags and codes,
@@ -1405,7 +1398,7 @@
             if (prev_rrset) {
                 msg.addRRset(section, prev_rrset);
             }
-            return 1;
+            return (1);
         }
         if (prev_rrset) {
             if (rrset) {
@@ -1426,7 +1419,7 @@
             prev_rrset = rrset;
         }
     }
-    return 0;
+    return (0);
 }
 
 int
@@ -1439,7 +1432,7 @@
             if (prev_rrset) {
                 container.push_back(prev_rrset);
             }
-            return 1;
+            return (1);
         }
         if (prev_rrset) {
             if (rrset) {
@@ -1460,7 +1453,7 @@
             prev_rrset = rrset;
         }
     }
-    return 0;
+    return (0);
 }
 
 int
@@ -1471,9 +1464,9 @@
         rrsetsFromFile(myfile, container);
         myfile.close();
     } else {
-        return -1;
+        return (-1);
     }
-    return 0;
+    return (0);
 }
 
 static int
@@ -1489,9 +1482,9 @@
         rrsetsFromFile(myfile, m, Section::ANSWER());
         myfile.close();
     } else {
-        return -1;
+        return (-1);
     }
-    return 0;
+    return (0);
 }
 
 static int
@@ -1522,9 +1515,9 @@
             }
         }
     } else {
-        return -1;
+        return (-1);
     }
-    return 0;
+    return (0);
 }
 
 // check a single rrset for exact match including rdata




More information about the bind10-changes mailing list