diff options
author | Marcin Siodelski <marcin@isc.org> | 2016-03-01 16:54:18 +0100 |
---|---|---|
committer | Marcin Siodelski <marcin@isc.org> | 2016-03-01 16:54:18 +0100 |
commit | 24b7fb0e6f57fa808240675e556583b3ef91ecb4 (patch) | |
tree | 76fe190512de10db655f27ed3fa277f5601dcbed | |
parent | [4212] Applied two patches by Adam: (diff) | |
download | kea-24b7fb0e6f57fa808240675e556583b3ef91ecb4.tar.xz kea-24b7fb0e6f57fa808240675e556583b3ef91ecb4.zip |
[4212] Addressed review comments.
- Introduced constants for MySQL fetch results
- Simplified loops in generic SQL unit tests
- Removed some typos
- Removed unused variables
-rwxr-xr-x | src/lib/dhcpsrv/mysql_connection.cc | 19 | ||||
-rwxr-xr-x | src/lib/dhcpsrv/mysql_connection.h | 23 | ||||
-rw-r--r-- | src/lib/dhcpsrv/mysql_host_data_source.cc | 18 | ||||
-rw-r--r-- | src/lib/dhcpsrv/tests/generic_host_data_source_unittest.cc | 42 | ||||
-rw-r--r-- | src/lib/dhcpsrv/tests/generic_host_data_source_unittest.h | 11 | ||||
-rw-r--r-- | src/lib/dhcpsrv/tests/mysql_host_data_source_unittest.cc | 4 |
6 files changed, 61 insertions, 56 deletions
diff --git a/src/lib/dhcpsrv/mysql_connection.cc b/src/lib/dhcpsrv/mysql_connection.cc index 10f841905d..fbfb345f25 100755 --- a/src/lib/dhcpsrv/mysql_connection.cc +++ b/src/lib/dhcpsrv/mysql_connection.cc @@ -30,21 +30,10 @@ using namespace std; namespace isc { namespace dhcp { -/// @brief Maximum size of database fields -/// -/// The following constants define buffer sizes for variable length database -/// fields. The values should be greater than or equal to the length set in -/// the schema definition. -/// -/// The exception is the length of any VARCHAR fields: buffers for these should -/// be set greater than or equal to the length of the field plus 1: this allows -/// for the insertion of a trailing null whatever data is returned. - -const my_bool MLM_FALSE = 0; ///< False value -const my_bool MLM_TRUE = 1; ///< True value - -///@} - +const my_bool MLM_FALSE = 0; +const my_bool MLM_TRUE = 1; +const int MLM_MYSQL_FETCH_SUCCESS = 0; +const int MLM_MYSQL_FETCH_FAILURE = 1; // Open the database using the parameters passed to the constructor. diff --git a/src/lib/dhcpsrv/mysql_connection.h b/src/lib/dhcpsrv/mysql_connection.h index 8d52c57a30..8d208234ff 100755 --- a/src/lib/dhcpsrv/mysql_connection.h +++ b/src/lib/dhcpsrv/mysql_connection.h @@ -24,20 +24,31 @@ namespace isc { namespace dhcp { -/// @brief MySQL True/False constants +/// @name MySQL constants. /// -/// Declare typed values so as to avoid problems of data conversion. These -/// are local to the file but are given the prefix MLM (MySql Lease Manager) to -/// avoid any likely conflicts with variables in header files named TRUE or -/// FALSE. +//@{ + +/// @brief MySQL false value. extern const my_bool MLM_FALSE; + +/// @brief MySQL true value. extern const my_bool MLM_TRUE; -// Define the current database schema values +/// @brief MySQL fetch success code. +extern const int MLM_MYSQL_FETCH_SUCCESS; + +/// @brief MySQL fetch failure code. +extern const int MLM_MYSQL_FETCH_FAILURE; +//@} + +/// @name Current database schema version values. +//@{ const uint32_t CURRENT_VERSION_VERSION = 3; const uint32_t CURRENT_VERSION_MINOR = 0; +//@} + /// @brief Fetch and Release MySQL Results /// /// When a MySQL statement is expected, to fetch the results the function diff --git a/src/lib/dhcpsrv/mysql_host_data_source.cc b/src/lib/dhcpsrv/mysql_host_data_source.cc index 17e6ed2ca3..10599bdefc 100644 --- a/src/lib/dhcpsrv/mysql_host_data_source.cc +++ b/src/lib/dhcpsrv/mysql_host_data_source.cc @@ -842,21 +842,12 @@ public: private: uint64_t host_id_; /// Host unique identifier uint64_t reservation_id_; /// Reservation unique identifier - size_t host_id_length_; /// Length of the host unique ID std::string address_; ///< Address (or prefix) size_t address_len_; ///< Length of the textual address representation uint8_t prefix_len_; ///< Length of the prefix (128 for addresses) uint8_t type_; uint8_t iaid_; - uint64_t host_id_len_; - - // NULL flags for subnets id, ipv4 address, hostname and client classes - my_bool host_id_null_; - my_bool address_null_; - my_bool prefix_len_null_; - my_bool iaid_null_; - IPv6Resrv resv_; MYSQL_BIND bind_[RESRV_COLUMNS]; @@ -999,7 +990,8 @@ MySqlHostDataSource::getIPv6ReservationCollection(StatementIndex stindex, // retrieve the data. mysql_stmt_fetch return value equal to 0 represents // successful data fetch. MySqlFreeResult fetch_release(conn_.statements_[stindex]); - while ((status = mysql_stmt_fetch(conn_.statements_[stindex])) == 0) { + while ((status = mysql_stmt_fetch(conn_.statements_[stindex])) == + MLM_MYSQL_FETCH_SUCCESS) { try { result.insert(IPv6ResrvTuple(exchange->getIPv6ReservData().getType(), exchange->getIPv6ReservData())); @@ -1013,9 +1005,10 @@ MySqlHostDataSource::getIPv6ReservationCollection(StatementIndex stindex, // How did the fetch end? // If mysql_stmt_fetch return value is equal to 1 an error occurred. - if (status == 1) { + if (status == MLM_MYSQL_FETCH_FAILURE) { // Error - unable to fetch results checkError(status, stindex, "unable to fetch results"); + } else if (status == MYSQL_DATA_TRUNCATED) { // Data truncated - throw an exception indicating what was at fault isc_throw(DataTruncated, conn_.text_statements_[stindex] @@ -1106,9 +1099,10 @@ MySqlHostDataSource::getHostCollection(StatementIndex stindex, MYSQL_BIND* bind, // How did the fetch end? // If mysql_stmt_fetch return value is equal to 1 an error occurred. - if (status == 1) { + if (status == MLM_MYSQL_FETCH_FAILURE) { // Error - unable to fetch results checkError(status, stindex, "unable to fetch results"); + } else if (status == MYSQL_DATA_TRUNCATED) { // Data truncated - throw an exception indicating what was at fault isc_throw(DataTruncated, conn_.text_statements_[stindex] diff --git a/src/lib/dhcpsrv/tests/generic_host_data_source_unittest.cc b/src/lib/dhcpsrv/tests/generic_host_data_source_unittest.cc index 6220873c1f..a178b63c0d 100644 --- a/src/lib/dhcpsrv/tests/generic_host_data_source_unittest.cc +++ b/src/lib/dhcpsrv/tests/generic_host_data_source_unittest.cc @@ -250,8 +250,7 @@ void GenericHostDataSourceTest::compareHosts(const ConstHostPtr& host1, // Compare IPv6 reservations compareReservations6(host1->getIPv6Reservations(), - host2->getIPv6Reservations(), - true); + host2->getIPv6Reservations()); // And compare client classification details compareClientClasses(host1->getClientClasses4(), @@ -282,21 +281,34 @@ GenericHostDataSourceTest::DuidToHWAddr(const DuidPtr& duid) { void GenericHostDataSourceTest::compareReservations6(IPv6ResrvRange resrv1, - IPv6ResrvRange resrv2, - bool expect_match) { + IPv6ResrvRange resrv2) { // Compare number of reservations for both hosts if (std::distance(resrv1.first, resrv1.second) != std::distance(resrv2.first, resrv2.second)){ - // Number of reservations is not equal. - // Let's see if it's a problem. - if (expect_match) { - ADD_FAILURE()<< "Reservation comparison failed, " - "hosts got different number of reservations."; - } + ADD_FAILURE()<< "Reservation comparison failed, " + "hosts got different number of reservations."; return; } + // Iterate over the range of reservations to find a match in the + // reference range. + for (IPv6ResrvIterator r1 = resrv1.first; r1 != resrv1.second; ++r1) { + IPv6ResrvIterator r2 = resrv2.first; + for (; r2 != resrv2.second; ++r2) { + // IPv6Resrv object implements equality operator. + if (r1->second == r2->second) { + break; + } + } + // If r2 iterator reached the end of the range it means that there + // is no match. + if (r2 == resrv2.second) { + ADD_FAILURE() << "No match found for reservation: " + << resrv1.first->second.getPrefix().toText(); + } + } + if (std::distance(resrv1.first, resrv1.second) > 0) { for (; resrv1.first != resrv1.second; resrv1.first++) { IPv6ResrvIterator iter = resrv2.first; @@ -307,7 +319,7 @@ GenericHostDataSourceTest::compareReservations6(IPv6ResrvRange resrv1, break; } iter++; - if (iter == resrv2.second && expect_match) { + if (iter == resrv2.second) { ADD_FAILURE()<< "Reservation comparison failed, " "no match for reservation: " << resrv1.first->second.getPrefix().toText(); @@ -824,10 +836,10 @@ void GenericHostDataSourceTest::testAddr6AndPrefix(){ ASSERT_TRUE(from_hds); // Check if reservations are the same - compareReservations6(host->getIPv6Reservations(), from_hds->getIPv6Reservations(), true); + compareReservations6(host->getIPv6Reservations(), from_hds->getIPv6Reservations()); } -void GenericHostDataSourceTest::testMultipletReservations(){ +void GenericHostDataSourceTest::testMultipleReservations(){ // Make sure we have the pointer to the host data source. ASSERT_TRUE(hdsptr_); uint8_t len = 128; @@ -857,7 +869,7 @@ void GenericHostDataSourceTest::testMultipletReservations(){ compareHosts(host, from_hds); } -void GenericHostDataSourceTest::testMultipletReservationsDifferentOrder(){ +void GenericHostDataSourceTest::testMultipleReservationsDifferentOrder(){ // Make sure we have the pointer to the host data source. ASSERT_TRUE(hdsptr_); uint8_t len = 128; @@ -882,7 +894,7 @@ void GenericHostDataSourceTest::testMultipletReservationsDifferentOrder(){ host2->addReservation(resv1); // Check if reservations are the same - compareReservations6(host1->getIPv6Reservations(), host2->getIPv6Reservations(), true); + compareReservations6(host1->getIPv6Reservations(), host2->getIPv6Reservations()); } diff --git a/src/lib/dhcpsrv/tests/generic_host_data_source_unittest.h b/src/lib/dhcpsrv/tests/generic_host_data_source_unittest.h index 1f4a66a324..ed136c5be0 100644 --- a/src/lib/dhcpsrv/tests/generic_host_data_source_unittest.h +++ b/src/lib/dhcpsrv/tests/generic_host_data_source_unittest.h @@ -112,8 +112,7 @@ public: /// /// @param resv1 first IPv6 reservations list /// @param resv2 second IPv6 reservations list - void compareReservations6(IPv6ResrvRange resv1, IPv6ResrvRange resv2, - bool expect_match); + void compareReservations6(IPv6ResrvRange resv1, IPv6ResrvRange resv2); /// @brief Compares two client classes /// @@ -212,12 +211,12 @@ public: void testAddr6AndPrefix(); /// @brief Tests if host with multiple IPv6 reservations can be added and then - /// retrieved correctly. - void testMultipletReservations(); + /// retrieved correctly. + void testMultipleReservations(); /// @brief Tests if compareIPv6Reservations() method treats same pool of - /// reservations but added in different order as equal. - void testMultipletReservationsDifferentOrder(); + /// reservations but added in different order as equal. + void testMultipleReservationsDifferentOrder(); /// @brief Test if host reservations made for different IPv6 subnets /// are handled correctly. diff --git a/src/lib/dhcpsrv/tests/mysql_host_data_source_unittest.cc b/src/lib/dhcpsrv/tests/mysql_host_data_source_unittest.cc index 5b06e8f772..307c2bbd05 100644 --- a/src/lib/dhcpsrv/tests/mysql_host_data_source_unittest.cc +++ b/src/lib/dhcpsrv/tests/mysql_host_data_source_unittest.cc @@ -322,13 +322,13 @@ TEST_F(MySqlHostDataSourceTest, addr6AndPrefix) { // Tests if host with multiple IPv6 reservations can be added and then // retrieved correctly. Test checks reservations comparing. TEST_F(MySqlHostDataSourceTest, multipleReservations){ - testMultipletReservations(); + testMultipleReservations(); } // Tests if compareIPv6Reservations() method treats same pool of reservations // but added in different order as equal. TEST_F(MySqlHostDataSourceTest, multipleReservationsDifferentOrder){ - testMultipletReservationsDifferentOrder(); + testMultipleReservationsDifferentOrder(); } // Test verifies if multiple client classes for IPv4 can be stored. |