Add simulated SCOM/CFAM read support for test

Change-Id: I615f1819cd309528735d63f2e6e4b4181c58fd34
Signed-off-by: Zane Shelley <zshelle@us.ibm.com>
diff --git a/test/test-pdbg-dts.cpp b/test/test-pdbg-dts.cpp
index 1e5075c..9fd49fd 100644
--- a/test/test-pdbg-dts.cpp
+++ b/test/test-pdbg-dts.cpp
@@ -1,5 +1,6 @@
 #include <fcntl.h>
 
+#include <test/sim-hw-access.hpp>
 #include <util/pdbg.hpp>
 #include <util/trace.hpp>
 
@@ -161,3 +162,72 @@
     EXPECT_EQ(memPortUnit,
               getChipUnit(ocmbChip, TYPE_MEM_PORT, memPortUnitPos));
 }
+
+TEST(util_pdbg, getScom)
+{
+    using namespace util::pdbg;
+    pdbg_targets_init(nullptr);
+
+    auto procChip = getTrgt("/proc0");
+    auto ocmbChip = getTrgt("/proc0/pib/perv13/mc1/mi0/mcc0/omi1/ocmb0");
+    auto omiUnit  = getTrgt("/proc0/pib/perv13/mc1/mi0/mcc0/omi1");
+
+    sim::ScomAccess& scom = sim::ScomAccess::getSingleton();
+    scom.flush();
+    scom.add(procChip, 0x11111111, 0x0011223344556677);
+    scom.error(ocmbChip, 0x22222222);
+
+    int rc       = 0;
+    uint64_t val = 0;
+
+    // Test good path.
+    rc = getScom(procChip, 0x11111111, val);
+    EXPECT_EQ(0, rc);
+    EXPECT_EQ(0x0011223344556677, val);
+
+    // Test address that has not been added to ScomAccess.
+    rc = getScom(procChip, 0x33333333, val);
+    EXPECT_EQ(0, rc);
+    EXPECT_EQ(0, val);
+
+    // Test SCOM error.
+    rc = getScom(ocmbChip, 0x22222222, val);
+    EXPECT_EQ(1, rc);
+
+    // Test non-chip target.
+    EXPECT_DEATH({ getScom(omiUnit, 0x11111111, val); }, "");
+}
+
+TEST(util_pdbg, getCfam)
+{
+    using namespace util::pdbg;
+    pdbg_targets_init(nullptr);
+
+    auto procChip = getTrgt("/proc0");
+    auto omiUnit  = getTrgt("/proc0/pib/perv13/mc1/mi0/mcc0/omi1");
+
+    sim::CfamAccess& cfam = sim::CfamAccess::getSingleton();
+    cfam.flush();
+    cfam.add(procChip, 0x11111111, 0x00112233);
+    cfam.error(procChip, 0x22222222);
+
+    int rc       = 0;
+    uint32_t val = 0;
+
+    // Test good path.
+    rc = getCfam(procChip, 0x11111111, val);
+    EXPECT_EQ(0, rc);
+    EXPECT_EQ(0x00112233, val);
+
+    // Test address that has not been added to CfamAccess.
+    rc = getCfam(procChip, 0x33333333, val);
+    EXPECT_EQ(0, rc);
+    EXPECT_EQ(0, val);
+
+    // Test CFAM error.
+    rc = getCfam(procChip, 0x22222222, val);
+    EXPECT_EQ(1, rc);
+
+    // Test non-chip target.
+    EXPECT_DEATH({ getCfam(omiUnit, 0x11111111, val); }, "");
+}