diff --git a/requester/test/handler_test.cpp b/requester/test/handler_test.cpp
index ebccdf7..caa4663 100644
--- a/requester/test/handler_test.cpp
+++ b/requester/test/handler_test.cpp
@@ -79,9 +79,7 @@
         pldmTransport, event, instanceIdDb, false, seconds(1), 2,
         milliseconds(100));
     pldm::Request request{};
-    auto instanceIdResult = pldm::utils::getInstanceId(instanceIdDb.next(eid));
-    ASSERT_TRUE(instanceIdResult);
-    auto instanceId = instanceIdResult.value();
+    auto instanceId = instanceIdDb.next(eid);
     EXPECT_EQ(instanceId, 0);
     auto rc = reqHandler.registerRequest(
         eid, instanceId, 0, 0, std::move(request),
@@ -104,9 +102,7 @@
         pldmTransport, event, instanceIdDb, false, seconds(1), 2,
         milliseconds(100));
     pldm::Request request{};
-    auto instanceIdResult = pldm::utils::getInstanceId(instanceIdDb.next(eid));
-    ASSERT_TRUE(instanceIdResult);
-    auto instanceId = instanceIdResult.value();
+    auto instanceId = instanceIdDb.next(eid);
     EXPECT_EQ(instanceId, 0);
     auto rc = reqHandler.registerRequest(
         eid, instanceId, 0, 0, std::move(request),
@@ -127,9 +123,7 @@
         pldmTransport, event, instanceIdDb, false, seconds(2), 2,
         milliseconds(100));
     pldm::Request request{};
-    auto instanceIdResult = pldm::utils::getInstanceId(instanceIdDb.next(eid));
-    ASSERT_TRUE(instanceIdResult);
-    auto instanceId = instanceIdResult.value();
+    auto instanceId = instanceIdDb.next(eid);
     EXPECT_EQ(instanceId, 0);
     auto rc = reqHandler.registerRequest(
         eid, instanceId, 0, 0, std::move(request),
@@ -139,10 +133,7 @@
     EXPECT_EQ(rc, PLDM_SUCCESS);
 
     pldm::Request requestNxt{};
-    auto instanceIdNxtResult =
-        pldm::utils::getInstanceId(instanceIdDb.next(eid));
-    ASSERT_TRUE(instanceIdNxtResult);
-    auto instanceIdNxt = instanceIdNxtResult.value();
+    auto instanceIdNxt = instanceIdDb.next(eid);
     EXPECT_EQ(instanceIdNxt, 1);
     rc = reqHandler.registerRequest(
         eid, instanceIdNxt, 0, 0, std::move(requestNxt),
@@ -177,9 +168,7 @@
         pldmTransport, event, instanceIdDb, false, seconds(1), 2,
         milliseconds(100));
 
-    auto instanceIdResult = pldm::utils::getInstanceId(instanceIdDb.next(eid));
-    ASSERT_TRUE(instanceIdResult);
-    auto instanceId = instanceIdResult.value();
+    auto instanceId = instanceIdDb.next(eid);
     EXPECT_EQ(instanceId, 0);
 
     scope.spawn(
@@ -225,9 +214,7 @@
     Handler<NiceMock<MockRequest>> reqHandler(
         pldmTransport, event, instanceIdDb, false, seconds(1), 2,
         milliseconds(100));
-    auto instanceIdResult = pldm::utils::getInstanceId(instanceIdDb.next(eid));
-    ASSERT_TRUE(instanceIdResult);
-    auto instanceId = instanceIdResult.value();
+    auto instanceId = instanceIdDb.next(eid);
     EXPECT_EQ(instanceId, 0);
 
     bool stopped = false;
@@ -284,9 +271,7 @@
     exec::async_scope scope;
     Handler<MockRequest> reqHandler(pldmTransport, event, instanceIdDb, false,
                                     seconds(1), 2, milliseconds(100));
-    auto instanceIdResult = pldm::utils::getInstanceId(instanceIdDb.next(eid));
-    ASSERT_TRUE(instanceIdResult);
-    auto instanceId = instanceIdResult.value();
+    auto instanceId = instanceIdDb.next(eid);
 
     uint8_t expectedTid = 1;
 
