Add pdbg test cases to use test device tree file.

Signed-off-by: austinfcui <austinfcui@gmail.com>
Change-Id: I9a82bb954e0a329691579a10fdf7e71c229d1e73
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);
+    }
+}