diff --git a/test/test_gpio_presence.cpp b/test/test_gpio_presence.cpp
new file mode 100644
index 0000000..727bc40
--- /dev/null
+++ b/test/test_gpio_presence.cpp
@@ -0,0 +1,160 @@
+#include "gpio-presence/device_presence.hpp"
+#include "gpio-presence/gpio_presence_manager.hpp"
+
+#include <gpiod.hpp>
+#include <phosphor-logging/lg2.hpp>
+#include <xyz/openbmc_project/Inventory/Source/DevicePresence/client.hpp>
+
+#include <gtest/gtest.h>
+
+using namespace gpio_presence;
+
+auto requestStop(sdbusplus::async::context& io) -> sdbusplus::async::task<>
+{
+    io.request_stop();
+    co_return;
+}
+
+TEST(GpioPresence, ConstructionSucceeds)
+{
+    sdbusplus::async::context ctx;
+
+    gpio_presence::GPIOPresenceManager s(ctx);
+
+    ctx.spawn(requestStop(ctx));
+    ctx.run();
+}
+
+TEST(GpioPresence, AcceptConfig1Gpio)
+{
+    sdbusplus::async::context ctx;
+
+    gpio_presence::GPIOPresenceManager sensor(ctx);
+
+    std::string name = "cable0";
+    std::string gpioName = "TEST_GPIO";
+
+    std::vector<std::string> gpioNames = {gpioName};
+    std::vector<uint64_t> gpioValues = {0};
+
+    auto c = std::make_unique<gpio_presence::DevicePresence>(
+        ctx, gpioNames, gpioValues, name, sensor.gpioState);
+
+    sensor.addConfig(name, std::move(c));
+
+    sensor.updatePresence(gpioName, false);
+
+    EXPECT_EQ(sensor.getPresence(name), true);
+
+    sensor.updatePresence(gpioName, true);
+
+    EXPECT_EQ(sensor.getPresence(name), false);
+
+    ctx.spawn(requestStop(ctx));
+    ctx.run();
+}
+
+auto testDevicePresentDbus(sdbusplus::async::context& ctx)
+    -> sdbusplus::async::task<>
+{
+    gpio_presence::GPIOPresenceManager sensor(ctx);
+
+    std::string busName = sensor.setupBusName();
+
+    std::string name = "cable0";
+    std::string gpioName = "TEST_GPIO";
+
+    std::vector<std::string> gpioNames = {gpioName};
+    std::vector<uint64_t> gpioValues = {0};
+
+    auto c = std::make_unique<gpio_presence::DevicePresence>(
+        ctx, gpioNames, gpioValues, name, sensor.gpioState);
+
+    sdbusplus::message::object_path objPath = c->getObjPath();
+
+    sensor.addConfig(name, std::move(c));
+
+    sensor.updatePresence(gpioName, false);
+
+    lg2::debug("found obj path {OBJPATH}", "OBJPATH", objPath);
+
+    auto client = sdbusplus::client::xyz::openbmc_project::inventory::source::
+                      DevicePresence<>(ctx)
+                          .service(busName)
+                          .path(objPath.str);
+
+    std::string nameFound = co_await client.name();
+
+    assert(nameFound == "cable0");
+
+    ctx.request_stop();
+
+    co_return;
+}
+
+TEST(GpioPresence, DevicePresentDbus)
+{
+    sdbusplus::async::context ctx;
+    ctx.spawn(testDevicePresentDbus(ctx));
+    ctx.run();
+}
+
+auto testDevicePresentThenDisappearDbus(sdbusplus::async::context& ctx)
+    -> sdbusplus::async::task<>
+{
+    gpio_presence::GPIOPresenceManager sensor(ctx);
+
+    std::string busName = sensor.setupBusName();
+
+    std::string name = "cable0";
+    std::string gpioName = "TEST_GPIO";
+
+    std::vector<std::string> gpioNames = {gpioName};
+    std::vector<uint64_t> gpioValues = {0};
+
+    auto c = std::make_unique<gpio_presence::DevicePresence>(
+        ctx, gpioNames, gpioValues, name, sensor.gpioState);
+
+    sdbusplus::message::object_path objPath = c->getObjPath();
+
+    sensor.addConfig(name, std::move(c));
+
+    sensor.updatePresence(gpioName, false);
+
+    lg2::debug("found obj path {OBJPATH}", "OBJPATH", objPath);
+
+    auto client = sdbusplus::client::xyz::openbmc_project::inventory::source::
+                      DevicePresence<>(ctx)
+                          .service(busName)
+                          .path(objPath.str);
+
+    std::string nameFound = co_await client.name();
+
+    assert(nameFound == "cable0");
+
+    // gpio goes high, cable 0 should disappear
+    sensor.updatePresence(gpioName, true);
+
+    try
+    {
+        co_await client.name();
+        assert(false);
+    }
+    catch (std::exception& _)
+    {
+        // expected, since cable 0 is gone.
+        // have to do something here to shut up clang-tidy
+        std::cout << "" << std::endl;
+    }
+
+    ctx.request_stop();
+
+    co_return;
+}
+
+TEST(GpioPresence, DevicePresentThenDisappearDbus)
+{
+    sdbusplus::async::context ctx;
+    ctx.spawn(testDevicePresentThenDisappearDbus(ctx));
+    ctx.run();
+}
