diff --git a/test/meson.build b/test/meson.build
index b34dda2..662274d 100644
--- a/test/meson.build
+++ b/test/meson.build
@@ -38,6 +38,7 @@
   'bin_stream_test',
   'ffdc_file_test',
   'resolution_test',
+  'pdbg_dts_test',
   'test-lpc-timeout',
   'test-pll-unlock',
 ]
diff --git a/test/pdbg_dts_test.cpp b/test/pdbg_dts_test.cpp
new file mode 100644
index 0000000..19ffc28
--- /dev/null
+++ b/test/pdbg_dts_test.cpp
@@ -0,0 +1,108 @@
+#include <fcntl.h>
+
+#include <util/pdbg.hpp>
+#include <util/trace.hpp>
+
+#include <limits>
+
+#include "gtest/gtest.h"
+
+TEST(PDBG, PdbgDtsTest1)
+{
+    const char* perv1_fapi_pos_path  = "/proc0/pib/perv1";
+    const char* perv12_fapi_pos_path = "/proc0/pib/perv12";
+    const uint32_t perv1_fapi_pos    = 1;
+    const uint32_t perv12_fapi_pos   = 12;
+
+    pdbg_targets_init(nullptr);
+
+    trace::inf("retrieving fapi pos.");
+    uint32_t attr     = std::numeric_limits<uint32_t>::max();
+    pdbg_target* trgt = pdbg_target_from_path(nullptr, perv1_fapi_pos_path);
+    pdbg_target_get_attribute(trgt, "ATTR_FAPI_POS", 4, 1, &attr);
+    trace::inf("perv1 fapi pos in DTS: %u", attr);
+    EXPECT_EQ(attr, perv1_fapi_pos);
+
+    attr = std::numeric_limits<uint32_t>::max();
+    trgt = pdbg_target_from_path(nullptr, perv12_fapi_pos_path);
+    pdbg_target_get_attribute(trgt, "ATTR_FAPI_POS", 4, 1, &attr);
+    trace::inf("perv12 fapi pos in DTS: %u", attr);
+    EXPECT_EQ(attr, perv12_fapi_pos);
+}
+
+TEST(PDBG, PdbgDtsTest2)
+{
+    const char* dimm0_path =
+        "/proc0/pib/perv12/mc0/mi0/mcc0/omi0/ocmb0/mem_port0/dimm0";
+    const uint32_t index    = 0;
+    const uint32_t fapi_pos = 0;
+
+    pdbg_targets_init(nullptr);
+
+    trace::inf("retrieving fapi pos.");
+    uint32_t attr     = std::numeric_limits<uint32_t>::max();
+    pdbg_target* trgt = pdbg_target_from_path(nullptr, dimm0_path);
+    pdbg_target_get_attribute(trgt, "index", 4, 1, &attr);
+    trace::inf("index in DTS: %u", attr);
+    EXPECT_EQ(attr, index);
+
+    attr = std::numeric_limits<uint32_t>::max();
+    pdbg_target_get_attribute(trgt, "ATTR_FAPI_POS", 4, 1, &attr);
+    trace::inf("fapi pos in DTS: %u", attr);
+    EXPECT_EQ(attr, fapi_pos);
+}
+
+TEST(PDBG, PdbgDtsTest3)
+{
+    const uint32_t chipId  = 0; // ID for proc0.
+    const uint32_t fapiPos = 0; // FAPI Position for proc0.
+
+    pdbg_targets_init(nullptr);
+
+    // Iterate each processor.
+    pdbg_target* procTrgt;
+    pdbg_for_each_class_target("/proc0", procTrgt)
+    {
+        // Active processors only.
+        if (PDBG_TARGET_ENABLED !=
+            pdbg_target_probe(util::pdbg::getPibTrgt(procTrgt)))
+            continue;
+
+        // Process the PROC target.
+        uint32_t attr = std::numeric_limits<uint32_t>::max();
+        pdbg_target_get_attribute(procTrgt, "ATTR_CHIP_ID", 4, 1, &attr);
+        trace::inf("Chip ID: %u", attr);
+        EXPECT_EQ(attr, chipId);
+
+        attr = std::numeric_limits<uint32_t>::max();
+        pdbg_target_get_attribute(procTrgt, "ATTR_FAPI_POS", 4, 1, &attr);
+        trace::inf("ATTR_FAPI_POS: %u", attr);
+        EXPECT_EQ(attr, fapiPos);
+    }
+}
+
+TEST(PDBG, PdbgDtsTest4)
+{
+    const uint32_t index    = 1;
+    const uint32_t fapi_pos = 1;
+    const char* perv1_path  = "/proc0/pib/perv1";
+
+    pdbg_targets_init(nullptr);
+
+    // Iterate each processor.
+    pdbg_target* trgt;
+    uint32_t attr;
+
+    pdbg_for_each_class_target(perv1_path, trgt)
+    {
+        attr = std::numeric_limits<uint32_t>::max();
+        pdbg_target_get_attribute(trgt, "index", 4, 1, &attr);
+        trace::inf("index in DTS: %u", attr);
+        EXPECT_EQ(attr, index);
+
+        attr = std::numeric_limits<uint32_t>::max();
+        pdbg_target_get_attribute(trgt, "ATTR_FAPI_POS", 4, 1, &attr);
+        trace::inf("fapi pos in DTS: %u", attr);
+        EXPECT_EQ(attr, fapi_pos);
+    }
+}
