]> git.ipfire.org Git - thirdparty/kea.git/commitdiff
[#3683] Added registered lease state
authorFrancis Dupont <fdupont@isc.org>
Fri, 27 Dec 2024 10:16:24 +0000 (11:16 +0100)
committerFrancis Dupont <fdupont@isc.org>
Fri, 21 Feb 2025 17:23:22 +0000 (18:23 +0100)
src/bin/admin/tests/mysql_tests.sh.in
src/bin/admin/tests/pgsql_tests.sh.in
src/lib/dhcpsrv/lease.cc
src/lib/dhcpsrv/lease.h
src/lib/dhcpsrv/tests/lease_unittest.cc
src/share/database/scripts/mysql/dhcpdb_create.mysql
src/share/database/scripts/mysql/upgrade_027_to_028.sh.in
src/share/database/scripts/pgsql/dhcpdb_create.pgsql
src/share/database/scripts/pgsql/upgrade_027_to_028.sh.in

index 44bc9d80475f790e248a4d59e6c7fd5369f4de1a..234d1dc1bb379ca48dea878d3c8a24851e858e10 100755 (executable)
@@ -1020,6 +1020,13 @@ mysql_upgrade_27_to_28_test() {
     check_table_column ddns_ttl dhcp6_subnet
     check_table_column ddns_ttl_min dhcp6_subnet
     check_table_column ddns_ttl_max dhcp6_subnet
+
+    # check registered were added tp lease_state
+    qry="SELECT name FROM lease_state WHERE state = 4"
+    run_command \
+        mysql_execute "${qry}"
+    assert_eq 0 "${EXIT_CODE}" "${qry}: expected %d, returned %d"
+    assert_str_eq 'registered' "${OUTPUT}" "${qry}: expected output %s, returned %s"
 }
 
 mysql_upgrade_test() {
index 4fd7a33786a17f19bfbc3e270e0f2706f2aeb379..2463f993e1ba3bff19d2615c064a66985095534f 100755 (executable)
@@ -1110,7 +1110,14 @@ pgsql_upgrade_27_to_28_test() {
     check_table_column ddns_ttl_percent dhcp6_subnet
     check_table_column ddns_ttl dhcp6_subnet
     check_table_column ddns_ttl_min dhcp6_subnet
-   check_table_column ddns_ttl_max dhcp6_subnet
+    check_table_column ddns_ttl_max dhcp6_subnet
+
+    # check registered were added tp lease_state
+    query="SELECT name FROM lease_state WHERE state = 4"
+    run_command \
+        pgsql_execute "${query}"
+    assert_eq 0 "${EXIT_CODE}" "${query}: expected %d, returned %d"
+    assert_str_eq 'registered' "${OUTPUT}" "${query}: expected output %s, returned %s"
 }
 
 pgsql_upgrade_test() {
index d28580c3de99715ef9615c982d6bee140fc68998..905ee59c64d5e1cfcf72a2954fa8b9a634305b14 100644 (file)
@@ -28,6 +28,7 @@ const uint32_t Lease::STATE_DEFAULT = 0;
 const uint32_t Lease::STATE_DECLINED = 1;
 const uint32_t Lease::STATE_EXPIRED_RECLAIMED = 2;
 const uint32_t Lease::STATE_RELEASED = 3;
+const uint32_t Lease::STATE_REGISTERED = 4;
 
 std::string
 Lease::lifetimeToText(uint32_t lifetime) {
@@ -100,6 +101,8 @@ Lease::basicStatesToText(const uint32_t state) {
         return ("expired-reclaimed");
     case STATE_RELEASED:
         return ("released");
+    case STATE_REGISTERED:
+        return ("registered");
     default:
         // The default case will be handled further on
         ;
@@ -284,10 +287,10 @@ Lease::fromElementCommon(const LeasePtr& lease, const data::ConstElementPtr& ele
                   " or it is not an integer");
     }
 
-    if ((state->intValue() < 0) || (state->intValue() > Lease::STATE_RELEASED)) {
+    if ((state->intValue() < 0) || (state->intValue() > Lease::STATE_REGISTERED)) {
         isc_throw(BadValue, "state " << state->intValue()
                   << " must be in range [0.."
-                  << Lease::STATE_RELEASED << "]");
+                  << Lease::STATE_REGISTERED << "]");
     }
 
     lease->state_ = state->intValue();
index 85b82c70ebe56721dad3f6c05a05674756038ef9..f22ff0eeab9e389eb3513c967724bbdbd3b92c4e 100644 (file)
@@ -77,6 +77,9 @@ struct Lease : public isc::data::UserContext, public isc::data::CfgToElement {
     /// @brief Released lease held in the database for lease affinity.
     static const uint32_t STATE_RELEASED;
 
+    /// @brief Registered self-generated lease.
+    static const uint32_t STATE_REGISTERED;
+
     /// @brief Returns name(s) of the basic lease state(s).
     ///
     /// @param state A numeric value holding a state information.
index 98222e760c29780af60882549e07cced2197403e..638d12d7eca10a0b57ce0e7d67e9ea83ef23144c 100644 (file)
@@ -619,7 +619,8 @@ TEST_F(Lease4Test, stateToText) {
     EXPECT_EQ("declined", Lease4::statesToText(Lease::STATE_DECLINED));
     EXPECT_EQ("expired-reclaimed", Lease4::statesToText(Lease::STATE_EXPIRED_RECLAIMED));
     EXPECT_EQ("released", Lease4::statesToText(Lease::STATE_RELEASED));
-    EXPECT_EQ("unknown (4)", Lease4::statesToText(4));
+    EXPECT_EQ("registered", Lease4::statesToText(Lease::STATE_REGISTERED));
+    EXPECT_EQ("unknown (5)", Lease4::statesToText(5));
 }
 
 /// @brief Creates an instance of the lease with certain FQDN data.
@@ -1329,8 +1330,8 @@ TEST(Lease6Test, fromElementPD) {
     EXPECT_EQ(400, lease->preferred_lft_);
 }
 
-  // Verify that a released Lease6 can be created from JSON.
-TEST(Lease6Test, fromElementReleased) {
+  // Verify that a registered Lease6 can be created from JSON.
+TEST(Lease6Test, fromElementRegistered) {
     // Same as fromElementNA test at the exception of the state.
     std::string json = "{"
         "\"cltt\": 12345678,"
@@ -1342,7 +1343,7 @@ TEST(Lease6Test, fromElementReleased) {
         "\"iaid\": 123456,"
         "\"ip-address\": \"2001:db8::1\","
         "\"preferred-lft\": 400,"
-        "\"state\": 3,"
+        "\"state\": 4,"
         "\"subnet-id\": 5678,"
         "\"pool-id\": 5,"
         "\"type\": \"IA_NA\","
@@ -1355,7 +1356,7 @@ TEST(Lease6Test, fromElementReleased) {
 
     ASSERT_TRUE(lease);
 
-    EXPECT_EQ(Lease::STATE_RELEASED, lease->state_);
+    EXPECT_EQ(Lease::STATE_REGISTERED, lease->state_);
 }
 
 // Test that specifying invalid values for a lease or not specifying
@@ -1424,7 +1425,8 @@ TEST(Lease6Test, stateToText) {
     EXPECT_EQ("declined", Lease6::statesToText(Lease::STATE_DECLINED));
     EXPECT_EQ("expired-reclaimed", Lease6::statesToText(Lease::STATE_EXPIRED_RECLAIMED));
     EXPECT_EQ("released", Lease6::statesToText(Lease::STATE_RELEASED));
-    EXPECT_EQ("unknown (4)", Lease6::statesToText(4));
+    EXPECT_EQ("registered", Lease6::statesToText(Lease::STATE_REGISTERED));
+    EXPECT_EQ("unknown (5)", Lease6::statesToText(5));
 }
 
 } // end of anonymous namespace
index 87f1d2da386d9f9dd1d5a272dd65ee50ae3e276c..6dc07036ab4843a4fe8e3e29e46ab86c82a72800 100644 (file)
@@ -6157,6 +6157,9 @@ ALTER TABLE dhcp6_subnet
     ADD COLUMN ddns_ttl_min     INT(10) DEFAULT NULL,
     ADD COLUMN ddns_ttl_max     INT(10) DEFAULT NULL;
 
+-- New lease state for address registration
+INSERT INTO lease_state VALUES (4, 'registered');
+
 -- Update the schema version number.
 UPDATE schema_version
     SET version = '28', minor = '0';
index 0d117349002fd20c1270f7ba5d660c75237147a3..3a7c7843585228253436d2d3bfce399358694bff 100755 (executable)
@@ -80,6 +80,9 @@ ALTER TABLE dhcp6_subnet
     ADD COLUMN ddns_ttl_min     INT(10) DEFAULT NULL,
     ADD COLUMN ddns_ttl_max     INT(10) DEFAULT NULL;
 
+-- New lease state for address registration
+INSERT INTO lease_state VALUES (4, 'registered');
+
 -- Update the schema version number.
 UPDATE schema_version
     SET version = '28', minor = '0';
index 83ec6969daf7daaaeee6c77d26ec2b6cc2583533..1d3edcc5c3e9cd61848ed2b419cebc90bcee1aa3 100644 (file)
@@ -6616,6 +6616,9 @@ ALTER TABLE dhcp6_subnet
     ADD COLUMN ddns_ttl_min     BIGINT DEFAULT NULL,
     ADD COLUMN ddns_ttl_max     BIGINT DEFAULT NULL;
 
+-- New lease state for address registration
+INSERT INTO lease_state VALUES (4, 'registered');
+
 -- Update the schema version number.
 UPDATE schema_version
     SET version = '28', minor = '0';
index be3a235d247930236d43bbc0552d4889241224f5..fa239b54774d4d0064244dacc4b2a575734971c5 100755 (executable)
@@ -63,6 +63,9 @@ ALTER TABLE dhcp6_subnet
     ADD COLUMN ddns_ttl_min     BIGINT DEFAULT NULL,
     ADD COLUMN ddns_ttl_max     BIGINT DEFAULT NULL;
 
+-- New lease state for address registration
+INSERT INTO lease_state VALUES (4, 'registered');
+
 -- Update the schema version number.
 UPDATE schema_version
     SET version = '28', minor = '0';