]> git.ipfire.org Git - thirdparty/kea.git/commitdiff
[#4282] Checkpoint: more UTs
authorFrancis Dupont <fdupont@isc.org>
Mon, 29 Dec 2025 13:20:53 +0000 (14:20 +0100)
committerFrancis Dupont <fdupont@isc.org>
Tue, 20 Jan 2026 09:31:09 +0000 (10:31 +0100)
src/hooks/dhcp/radius/tests/status_unittests.cc

index 0f8bd83f25281b11e0cf27bdfc0ef0f66af940f2..789ed8721cdfce80959e1e75469f5e773954005c 100644 (file)
@@ -1365,4 +1365,112 @@ TEST_F(StatusTest, accountingIdleTimerCallback) {
     EXPECT_EQ(0, memcmp(expected, &receive_buffer_[AUTH_HDR_LEN], 8));
 }
 
+/// Verify that access idle timer works as expected.
+TEST_F(StatusTest, accessIdleTimer) {
+    // Use CONFIGS[0].
+    ElementPtr json;
+    ASSERT_NO_THROW(json = Element::fromJSON(CONFIGS[0]));
+    ASSERT_NO_THROW(impl_.init(json));
+    ASSERT_TRUE(impl_.auth_);
+    impl_.auth_->idle_timer_interval_ = 1;
+
+    // Open server socket.
+    open(SERVER_AUTH_PORT);
+
+    // Push a receiver on it.
+    boost::asio::ip::udp::endpoint client;
+    size_t size = 0;
+    Callback receive_callback(receive_error_code_, size, received_);
+    server_socket_.async_receive_from(
+        boost::asio::buffer(&receive_buffer_[0], receive_buffer_.size()),
+        client, receive_callback);
+
+    // Set the idle timer.
+    impl_.auth_->setIdleTimer();
+
+    // Start timer for 2.5s timeout.
+    start(2500);
+
+    // Busy loop.
+    while (!received_ && !timeout_) {
+        poll();
+    }
+
+    ASSERT_TRUE(received_);
+    ASSERT_FALSE(timeout_);
+
+    // Check received request.
+    receive_buffer_.resize(size);
+    ASSERT_LE(20, size);
+    EXPECT_EQ(PW_STATUS_SERVER, receive_buffer_[0]);
+    uint16_t length = (receive_buffer_[2] << 8) | receive_buffer_[3];
+    EXPECT_EQ(length, size);
+    EXPECT_GE(4096, length);
+
+    // Check attributes.
+    EXPECT_EQ(44, size);
+    uint8_t expected[] = {
+        0x04,                   // NAS-IP-Address
+        0x06,                   // length
+        0x7f, 0x00, 0x00, 0x01, // 127.0.0.1
+        0x50,                   // Message-Authenticator
+        0x12                    // length
+    };
+    EXPECT_EQ(0, memcmp(expected, &receive_buffer_[AUTH_HDR_LEN], 8));
+}
+
+/// Verify that accounting idle timer works as expected.
+TEST_F(StatusTest, accountingIdleTimer) {
+    // Use CONFIGS[0].
+    ElementPtr json;
+    ASSERT_NO_THROW(json = Element::fromJSON(CONFIGS[0]));
+    ASSERT_NO_THROW(impl_.init(json));
+    ASSERT_TRUE(impl_.acct_);
+    impl_.acct_->idle_timer_interval_ = 1;
+
+    // Open server socket.
+    open(SERVER_ACCT_PORT);
+
+    // Push a receiver on it.
+    boost::asio::ip::udp::endpoint client;
+    size_t size = 0;
+    Callback receive_callback(receive_error_code_, size, received_);
+    server_socket_.async_receive_from(
+        boost::asio::buffer(&receive_buffer_[0], receive_buffer_.size()),
+        client, receive_callback);
+
+    // Set the idle timer.
+    impl_.acct_->setIdleTimer();
+
+    // Start timer for 2.5s timeout.
+    start(2500);
+
+    // Busy loop.
+    while (!received_ && !timeout_) {
+        poll();
+    }
+
+    ASSERT_TRUE(received_);
+    ASSERT_FALSE(timeout_);
+
+    // Check received request.
+    receive_buffer_.resize(size);
+    ASSERT_LE(20, size);
+    EXPECT_EQ(PW_STATUS_SERVER, receive_buffer_[0]);
+    uint16_t length = (receive_buffer_[2] << 8) | receive_buffer_[3];
+    EXPECT_EQ(length, size);
+    EXPECT_GE(4096, length);
+
+    // Check attributes.
+    EXPECT_EQ(44, size);
+    uint8_t expected[] = {
+        0x04,                   // NAS-IP-Address
+        0x06,                   // length
+        0x7f, 0x00, 0x00, 0x01, // 127.0.0.1
+        0x50,                   // Message-Authenticator
+        0x12                    // length
+    };
+    EXPECT_EQ(0, memcmp(expected, &receive_buffer_[AUTH_HDR_LEN], 8));
+}
+
 } // end of anonymous namespace