summaryrefslogtreecommitdiffstats
path: root/src/usr/hwas/test/hwasGardTest.H
diff options
context:
space:
mode:
authorBrian Horton <brianh@linux.ibm.com>2015-01-27 16:24:36 -0600
committerA. Patrick Williams III <iawillia@us.ibm.com>2015-01-30 13:01:34 -0600
commit9a44d77296981912a412d741f3198c6a761ac5c0 (patch)
treefb18272bdb90746bf3f586db77a2c3225d7bd6af /src/usr/hwas/test/hwasGardTest.H
parent5d05de78f647d44c570429463c49c92a06abcd90 (diff)
downloadtalos-hostboot-9a44d77296981912a412d741f3198c6a761ac5c0.tar.gz
talos-hostboot-9a44d77296981912a412d741f3198c6a761ac5c0.zip
deconfigure MBA if no DIMMs are functional
update existing discoverTargets() code to also check for MBAs that do not have functional DIMM children, and deconfigure them. Change-Id: I4926195ba7b0fd829575a60cf5442ad22358a4a6 RTC: 79862 Reviewed-on: http://gfw160.aus.stglabs.ibm.com:8080/gerrit/15331 Tested-by: Jenkins Server Reviewed-by: STEPHEN M. CPREK <smcprek@us.ibm.com> Reviewed-by: Daniel M. Crowell <dcrowell@us.ibm.com> Reviewed-by: A. Patrick Williams III <iawillia@us.ibm.com>
Diffstat (limited to 'src/usr/hwas/test/hwasGardTest.H')
-rw-r--r--src/usr/hwas/test/hwasGardTest.H626
1 files changed, 529 insertions, 97 deletions
diff --git a/src/usr/hwas/test/hwasGardTest.H b/src/usr/hwas/test/hwasGardTest.H
index 3de1b5fc8..8237c7f73 100644
--- a/src/usr/hwas/test/hwasGardTest.H
+++ b/src/usr/hwas/test/hwasGardTest.H
@@ -5,7 +5,7 @@
/* */
/* OpenPOWER HostBoot Project */
/* */
-/* Contributors Listed Below - COPYRIGHT 2011,2014 */
+/* Contributors Listed Below - COPYRIGHT 2011,2015 */
/* [+] International Business Machines Corp. */
/* */
/* */
@@ -45,6 +45,11 @@
using namespace HWAS;
using namespace TARGETING;
+bool compareAffinity(const TargetInfo t1, const TargetInfo t2)
+{
+ return t1.affinityPath < t2.affinityPath;
+}
+
class HwasGardTest: public CxxTest::TestSuite
{
public:
@@ -3377,56 +3382,75 @@ public:
void testdeconfigPresentByAssoc1()
{
TS_TRACE(INFO_MRK "testDeconfigureAssocProc1: Started");
- // This tests the scenario where there is one mcs, membuff, and dimm
+ // This tests the scenario where there is 1 mcs, membuff, mba and dimm
// This is done to ensure that the algorithm works on each edge case
- TargetInfoVector l_targInfo;
+ TargetInfoVector l_targets;
TargetInfoVector l_targToDeconfig;
TargetInfo l_TargetInfo;
l_TargetInfo.pThisTarget = NULL;
- EntityPath l_ep(TARGETING::EntityPath::PATH_AFFINITY);
- l_TargetInfo.functional = 1;
+ EntityPath l_ep[4];
// MCS only
- l_ep.addLast(TYPE_MCS, 0);
- l_TargetInfo.affinityPath = l_ep;
- l_TargetInfo.huid = 0;
+ l_ep[0].addLast(TYPE_MCS, 0);
+ l_TargetInfo.affinityPath = l_ep[0]; // SHOULD GET DECONFIGURED
l_TargetInfo.type = TYPE_MCS;
- l_targInfo.push_back(l_TargetInfo);
+ l_targets.push_back(l_TargetInfo);
- presentByAssoc(l_targInfo, l_targToDeconfig);
+ presentByAssoc(l_targets, l_targToDeconfig);
// MEMBUF only
- l_ep.addLast(TYPE_MEMBUF, 0);
- l_TargetInfo.affinityPath = l_ep;
- l_TargetInfo.huid = 1;
+ l_ep[1].addLast(TYPE_MCS, 0);
+ l_ep[1].addLast(TYPE_MEMBUF, 0);
+ l_TargetInfo.affinityPath = l_ep[1]; // SHOULD GET DECONFIGURED
l_TargetInfo.type = TYPE_MEMBUF;
- l_targInfo.push_back(l_TargetInfo);
+ l_targets.push_back(l_TargetInfo);
- presentByAssoc(l_targInfo, l_targToDeconfig);
+ presentByAssoc(l_targets, l_targToDeconfig);
+
+ // MBA only
+ l_ep[2].addLast(TYPE_MCS, 0);
+ l_ep[2].addLast(TYPE_MEMBUF, 0);
+ l_ep[2].addLast(TYPE_MBA, 0);
+ l_TargetInfo.affinityPath = l_ep[2]; // SHOULD GET DECONFIGURED
+ l_TargetInfo.type = TYPE_MBA;
+ l_targets.push_back(l_TargetInfo);
+
+ presentByAssoc(l_targets, l_targToDeconfig);
// DIMM only
- l_ep.addLast(TYPE_DIMM, 0);
- l_TargetInfo.affinityPath = l_ep;
- l_TargetInfo.huid = 2;
+ l_ep[3].addLast(TYPE_MCS, 0);
+ l_ep[3].addLast(TYPE_MEMBUF, 0);
+ l_ep[3].addLast(TYPE_MBA, 0);
+ l_ep[3].addLast(TYPE_DIMM, 0);
+ l_TargetInfo.affinityPath = l_ep[3]; // SHOULD GET DECONFIGURED
l_TargetInfo.type = TYPE_DIMM;
- l_targInfo.push_back(l_TargetInfo);
+ l_targets.push_back(l_TargetInfo);
- presentByAssoc(l_targInfo, l_targToDeconfig);
+ presentByAssoc(l_targets, l_targToDeconfig);
// Check result
- if (l_targToDeconfig.size() == 3 &&
- l_targToDeconfig[0].huid == 0 &&
- l_targToDeconfig[1].huid == 1 &&
- l_targToDeconfig[2].huid == 2 )
+ std::sort(l_targToDeconfig.begin(), l_targToDeconfig.end(),
+ compareAffinity);
+ if ((l_targToDeconfig.size() == 4) &&
+ (l_targToDeconfig[0].affinityPath == l_ep[0]) &&
+ (l_targToDeconfig[1].affinityPath == l_ep[1]) &&
+ (l_targToDeconfig[2].affinityPath == l_ep[2]) &&
+ (l_targToDeconfig[3].affinityPath == l_ep[3]) )
{
TS_TRACE(INFO_MRK "testdeconfigPresentByAssoc1: Success");
}
else
{
TS_FAIL("testdeconfigPresentByAssoc1: incorrect configuration returned");
+ for (uint8_t i=0;i<l_targToDeconfig.size();i++)
+ {
+ char *s = l_targToDeconfig[i].affinityPath.toString();
+ TS_WARN("deconfig %s reason %x",s, l_targToDeconfig[i].reason);
+ free(s);
+ }
}
}
@@ -3436,63 +3460,77 @@ public:
void testdeconfigPresentByAssoc2()
{
TS_TRACE(INFO_MRK "testdeconfigPresentByAssoc2: Started");
- // This test the scenario where MCS Group 0 does not have a membuf and
- // is marked for deconfigure.
+ // This test the scenario where MCS Group 0 does not have a membuf
+ // MCS Group 1 is fully populated
// User-defined number of targets
- size_t NUM_TARGS = 4;
+ size_t NUM_TARGS = 5;
// Input target vector
TargetInfoVector l_targets;
TargetInfo l_TargInfo;
- EntityPath l_ep(TARGETING::EntityPath::PATH_AFFINITY);
- l_TargInfo.affinityPath = l_ep;
+ EntityPath l_ep[NUM_TARGS];
+ l_TargInfo.pThisTarget = NULL;
+ l_TargInfo.affinityPath = l_ep[0];
l_targets.insert(l_targets.begin(), NUM_TARGS, l_TargInfo);
// Output target vector
TargetInfoVector l_targToDeconfig;
// Add MCS Group 0
- l_targets[0].pThisTarget = NULL;
- l_targets[0].functional = 1;
+ //l_targets[0].pThisTarget = NULL;
l_targets[0].affinityPath.addLast(TYPE_MCS, 0);
- l_targets[0].huid = 0;
+ l_ep[0] = l_targets[0].affinityPath; // SHOULD GET DECONFIGURED
l_targets[0].type = TYPE_MCS;
// Add MEMBUF Group 1
- l_targets[1].pThisTarget = NULL;
- l_targets[1].functional = 1;
+ //l_targets[1].pThisTarget = NULL;
l_targets[1].affinityPath.addLast(TYPE_MCS, 1);
l_targets[1].affinityPath.addLast(TYPE_MEMBUF, 0);
- l_targets[1].huid = 1;
+ l_ep[1] = l_targets[1].affinityPath;
l_targets[1].type = TYPE_MEMBUF;
- // Add DIMM Group 1
- l_targets[2].pThisTarget = NULL;
- l_targets[2].functional = 1;
+ // Add MBA Group 1
+ //l_targets[2].pThisTarget = NULL;
l_targets[2].affinityPath.addLast(TYPE_MCS, 1);
l_targets[2].affinityPath.addLast(TYPE_MEMBUF, 0);
- l_targets[2].affinityPath.addLast(TYPE_DIMM, 0);
- l_targets[2].huid = 2;
- l_targets[2].type = TYPE_DIMM;
+ l_targets[2].affinityPath.addLast(TYPE_MBA, 0);
+ l_ep[2] = l_targets[2].affinityPath;
+ l_targets[2].type = TYPE_MBA;
- // Add MCS Group 1
- l_targets[3].pThisTarget = NULL;
- l_targets[3].functional = 1;
+ // Add DIMM Group 1
+ //l_targets[3].pThisTarget = NULL;
l_targets[3].affinityPath.addLast(TYPE_MCS, 1);
- l_targets[3].huid = 3;
- l_targets[3].type = TYPE_MCS;
+ l_targets[3].affinityPath.addLast(TYPE_MEMBUF, 0);
+ l_targets[3].affinityPath.addLast(TYPE_MBA, 0);
+ l_targets[3].affinityPath.addLast(TYPE_DIMM, 0);
+ l_ep[3] = l_targets[3].affinityPath;
+ l_targets[3].type = TYPE_DIMM;
+
+ // Add MCS Group 1
+ //l_targets[4].pThisTarget = NULL;
+ l_targets[4].affinityPath.addLast(TYPE_MCS, 1);
+ l_ep[4] = l_targets[4].affinityPath;
+ l_targets[4].type = TYPE_MCS;
presentByAssoc(l_targets, l_targToDeconfig);
// Check result
- if (l_targToDeconfig.size() == 1 &&
- l_targToDeconfig[0].huid == 0 )
+ std::sort(l_targToDeconfig.begin(), l_targToDeconfig.end(),
+ compareAffinity);
+ if ((l_targToDeconfig.size() == 1) &&
+ (l_targToDeconfig[0].affinityPath == l_ep[0]) )
{
TS_TRACE(INFO_MRK "testdeconfigPresentByAssoc2: Success");
}
else
{
TS_FAIL("testdeconfigPresentByAssoc2: incorrect configuration returned");
+ for (uint8_t i=0;i<l_targToDeconfig.size();i++)
+ {
+ char *s = l_targToDeconfig[i].affinityPath.toString();
+ TS_WARN("deconfig %s reason %x",s, l_targToDeconfig[i].reason);
+ free(s);
+ }
}
}
@@ -3507,71 +3545,92 @@ public:
// deconfigure
// User-defined number of targets
- size_t NUM_TARGS = 5;
+ size_t NUM_TARGS = 7;
// Input target vector
TargetInfoVector l_targets;
TargetInfo l_TargInfo;
- EntityPath l_ep(TARGETING::EntityPath::PATH_AFFINITY);
- l_TargInfo.affinityPath = l_ep;
+ EntityPath l_ep[NUM_TARGS];
+ l_TargInfo.affinityPath = l_ep[0];
l_targets.insert(l_targets.begin(), NUM_TARGS, l_TargInfo);
// Output target vector
TargetInfoVector l_targToDeconfig;
// Add MCS Group 0
l_targets[0].pThisTarget = NULL;
- l_targets[0].functional = 1;
l_targets[0].affinityPath.addLast(TYPE_MCS, 0);
- l_targets[0].huid = 0;
+ l_ep[0] = l_targets[0].affinityPath;
l_targets[0].type = TYPE_MCS;
// Add MEMBUF Group 0
l_targets[1].pThisTarget = NULL;
- l_targets[1].functional = 1;
l_targets[1].affinityPath.addLast(TYPE_MCS, 0);
l_targets[1].affinityPath.addLast(TYPE_MEMBUF, 0);
- l_targets[1].huid = 1;
+ l_ep[1] = l_targets[1].affinityPath;
l_targets[1].type = TYPE_MEMBUF;
- // Add MEMBUF Group 1
+ // Add MBA Group 0
l_targets[2].pThisTarget = NULL;
- l_targets[2].functional = 1;
- l_targets[2].affinityPath.addLast(TYPE_MCS, 1);
+ l_targets[2].affinityPath.addLast(TYPE_MCS, 0);
l_targets[2].affinityPath.addLast(TYPE_MEMBUF, 0);
- l_targets[2].huid = 2;
- l_targets[2].type = TYPE_MEMBUF;
-
+ l_targets[2].affinityPath.addLast(TYPE_MBA, 0);
+ l_ep[2] = l_targets[2].affinityPath;
+ l_targets[2].type = TYPE_MBA;
- // Add DIMM Group 0
+ // Add MBA Group 1
l_targets[3].pThisTarget = NULL;
- l_targets[3].functional = 1;
- l_targets[3].affinityPath.addLast(TYPE_MCS, 0);
+ l_targets[3].affinityPath.addLast(TYPE_MCS, 1);
l_targets[3].affinityPath.addLast(TYPE_MEMBUF, 0);
- l_targets[3].affinityPath.addLast(TYPE_DIMM, 0);
- l_targets[3].huid = 3;
- l_targets[3].type = TYPE_DIMM;
+ l_targets[3].affinityPath.addLast(TYPE_MBA, 0);
+ l_ep[3] = l_targets[3].affinityPath; // SHOULD GET DECONFIGURED
+ l_targets[3].type = TYPE_MBA;
- // Add DIMM Group 1
+ // Add MEMBUF Group 1
l_targets[4].pThisTarget = NULL;
- l_targets[4].functional = 1;
l_targets[4].affinityPath.addLast(TYPE_MCS, 1);
l_targets[4].affinityPath.addLast(TYPE_MEMBUF, 0);
- l_targets[4].affinityPath.addLast(TYPE_DIMM, 0);
- l_targets[4].huid = 4;
- l_targets[4].type = TYPE_DIMM;
+ l_ep[4] = l_targets[4].affinityPath; // SHOULD GET DECONFIGURED
+ l_targets[4].type = TYPE_MEMBUF;
+
+ // Add DIMM Group 0
+ l_targets[5].pThisTarget = NULL;
+ l_targets[5].affinityPath.addLast(TYPE_MCS, 0);
+ l_targets[5].affinityPath.addLast(TYPE_MEMBUF, 0);
+ l_targets[5].affinityPath.addLast(TYPE_MBA, 0);
+ l_targets[5].affinityPath.addLast(TYPE_DIMM, 0);
+ l_ep[5] = l_targets[5].affinityPath;
+ l_targets[5].type = TYPE_DIMM;
+
+ // Add DIMM Group 1
+ l_targets[6].pThisTarget = NULL;
+ l_targets[6].affinityPath.addLast(TYPE_MCS, 1);
+ l_targets[6].affinityPath.addLast(TYPE_MEMBUF, 0);
+ l_targets[6].affinityPath.addLast(TYPE_MBA, 0);
+ l_targets[6].affinityPath.addLast(TYPE_DIMM, 0);
+ l_ep[6] = l_targets[6].affinityPath; // SHOULD GET DECONFIGURED
+ l_targets[6].type = TYPE_DIMM;
presentByAssoc(l_targets, l_targToDeconfig);
// Check result
- if (l_targToDeconfig.size() == 2 &&
- l_targToDeconfig[0].huid == 2 &&
- l_targToDeconfig[1].huid == 4 )
+ std::sort(l_targToDeconfig.begin(), l_targToDeconfig.end(),
+ compareAffinity);
+ if ((l_targToDeconfig.size() == 3) &&
+ (l_targToDeconfig[0].affinityPath == l_ep[4]) && // 10 MEMBUF
+ (l_targToDeconfig[1].affinityPath == l_ep[3]) && // 100 MBA
+ (l_targToDeconfig[2].affinityPath == l_ep[6]) ) // 1000 DIMM
{
TS_TRACE(INFO_MRK "testdeconfigPresentByAssoc3: Success");
}
else
{
TS_FAIL("testdeconfigPresentByAssoc3: incorrect configuration returned");
+ for (uint8_t i=0;i<l_targToDeconfig.size();i++)
+ {
+ char *s = l_targToDeconfig[i].affinityPath.toString();
+ TS_WARN("deconfig %s reason %x",s, l_targToDeconfig[i].reason);
+ free(s);
+ }
}
}
@@ -3581,7 +3640,7 @@ public:
void testdeconfigPresentByAssoc4()
{
TS_TRACE(INFO_MRK "testdeconfigPresentByAssoc4: Started");
- // This test the scenario where MEMBUF Group 0 has no DIMMs causing
+ // This test the scenario where MEMBUF Group 0 has no MBAs causing
// MCS Group 0 to also be deconfigured.
// User-defined number of targets
@@ -3590,39 +3649,45 @@ public:
// Input target vector
TargetInfoVector l_targets;
TargetInfo l_TargInfo;
- EntityPath l_ep(TARGETING::EntityPath::PATH_AFFINITY);
- l_TargInfo.affinityPath = l_ep;
+ EntityPath l_ep[NUM_TARGS];
+ l_TargInfo.affinityPath = l_ep[0];
l_targets.insert(l_targets.begin(), NUM_TARGS, l_TargInfo);
// Output target vector
TargetInfoVector l_targToDeconfig;
// Add MCS Group 0
l_targets[0].pThisTarget = NULL;
- l_targets[0].functional = 1;
l_targets[0].affinityPath.addLast(TYPE_MCS, 0);
- l_targets[0].huid = 0;
+ l_ep[0] = l_targets[0].affinityPath; // SHOULD BE DECONFIGURED
l_targets[0].type = TYPE_MCS;
// Add MEMBUF Group 0
l_targets[1].pThisTarget = NULL;
- l_targets[1].functional = 1;
l_targets[1].affinityPath.addLast(TYPE_MCS, 0);
l_targets[1].affinityPath.addLast(TYPE_MEMBUF, 0);
- l_targets[1].huid = 1;
+ l_ep[1] = l_targets[1].affinityPath; // SHOULD BE DECONFIGURED
l_targets[1].type = TYPE_MEMBUF;
presentByAssoc(l_targets, l_targToDeconfig);
// Check result
- if (l_targToDeconfig.size() == 2 &&
- l_targToDeconfig[0].huid == 1 &&
- l_targToDeconfig[1].huid == 0 )
+ std::sort(l_targToDeconfig.begin(), l_targToDeconfig.end(),
+ compareAffinity);
+ if ((l_targToDeconfig.size() == 2) &&
+ (l_targToDeconfig[0].affinityPath == l_ep[0]) && // 0 MCS
+ (l_targToDeconfig[1].affinityPath == l_ep[1]) ) // 00 MEMBUF
{
TS_TRACE(INFO_MRK "testdeconfigPresentByAssoc4: Success");
}
else
{
TS_FAIL("testdeconfigPresentByAssoc4: incorrect configuration returned");
+ for (uint8_t i=0;i<l_targToDeconfig.size();i++)
+ {
+ char *s = l_targToDeconfig[i].affinityPath.toString();
+ TS_WARN("deconfig %s reason %x",s, l_targToDeconfig[i].reason);
+ free(s);
+ }
}
}
@@ -3632,7 +3697,7 @@ public:
void testdeconfigPresentByAssoc5()
{
TS_TRACE(INFO_MRK "testdeconfigPresentByAssoc5: Started");
- // This test the scenario where MEMBUF Group 0 and DIMM Group 0 having
+ // This test the scenario where MEMBUF Group 0 and MBA Group 0 having
// no MCS. This tests the MCSINDEX edge case because one never existed
// User-defined number of targets
@@ -3641,41 +3706,408 @@ public:
// Input target vector
TargetInfoVector l_targets;
TargetInfo l_TargInfo;
- EntityPath l_ep(TARGETING::EntityPath::PATH_AFFINITY);
- l_TargInfo.affinityPath = l_ep;
+ EntityPath l_ep[NUM_TARGS];
+ l_TargInfo.affinityPath = l_ep[0];
l_targets.insert(l_targets.begin(), NUM_TARGS, l_TargInfo);
// Output target vector
TargetInfoVector l_targToDeconfig;
// Add MEMBUF Group 0
l_targets[0].pThisTarget = NULL;
- l_targets[0].functional = 1;
l_targets[0].affinityPath.addLast(TYPE_MCS, 0);
l_targets[0].affinityPath.addLast(TYPE_MEMBUF, 0);
- l_targets[0].huid = 0;
+ l_ep[0] = l_targets[0].affinityPath; // SHOULD BE DECONFIGURED
l_targets[0].type = TYPE_MEMBUF;
+ // Add MBA Group 0
+ l_targets[1].pThisTarget = NULL;
+ l_targets[1].affinityPath.addLast(TYPE_MCS, 0);
+ l_targets[1].affinityPath.addLast(TYPE_MEMBUF, 0);
+ l_targets[1].affinityPath.addLast(TYPE_MBA, 0);
+ l_ep[1] = l_targets[1].affinityPath; // SHOULD BE DECONFIGURED
+ l_targets[1].type = TYPE_MBA;
+
+ presentByAssoc(l_targets, l_targToDeconfig);
+
+ // Check result
+ std::sort(l_targToDeconfig.begin(), l_targToDeconfig.end(),
+ compareAffinity);
+ if ((l_targToDeconfig.size() == 2) &&
+ (l_targToDeconfig[0].affinityPath == l_ep[0]) && // 00 MEMBUF
+ (l_targToDeconfig[1].affinityPath == l_ep[1]) ) // 000 MBA
+ {
+ TS_TRACE(INFO_MRK "testdeconfigPresentByAssoc5: Success");
+ }
+ else
+ {
+ TS_FAIL("testdeconfigPresentByAssoc5: incorrect configuration returned");
+ for (uint8_t i=0;i<l_targToDeconfig.size();i++)
+ {
+ char *s = l_targToDeconfig[i].affinityPath.toString();
+ TS_WARN("deconfig %s reason %x",s, l_targToDeconfig[i].reason);
+ free(s);
+ }
+ }
+ }
+
+ /**
+ * @brief Test Deconfig Present Association 6
+ */
+ void testdeconfigPresentByAssoc6()
+ {
+ TS_TRACE(INFO_MRK "testdeconfigPresentByAssoc6: Started");
+ // This test the scenario where MBA Group 0 and DIMM Group 0 having
+ // no MEMBUF. This tests the MEMBUFIndex edge case because one never existed
+
+ // User-defined number of targets
+ size_t NUM_TARGS = 2;
+
+ // Input target vector
+ TargetInfoVector l_targets;
+ TargetInfo l_TargInfo;
+ EntityPath l_ep[NUM_TARGS];
+ l_TargInfo.affinityPath = l_ep[0];
+ l_targets.insert(l_targets.begin(), NUM_TARGS, l_TargInfo);
+ // Output target vector
+ TargetInfoVector l_targToDeconfig;
+
+ // Add MBA Group 0
+ l_targets[0].pThisTarget = NULL;
+ l_targets[0].affinityPath.addLast(TYPE_MCS, 0);
+ l_targets[0].affinityPath.addLast(TYPE_MEMBUF, 0);
+ l_targets[0].affinityPath.addLast(TYPE_MBA, 0);
+ l_ep[0] = l_targets[0].affinityPath; // SHOULD BE DECONFIGURED
+ l_targets[0].type = TYPE_MBA;
+
// Add DIMM Group 0
l_targets[1].pThisTarget = NULL;
- l_targets[1].functional = 1;
l_targets[1].affinityPath.addLast(TYPE_MCS, 0);
l_targets[1].affinityPath.addLast(TYPE_MEMBUF, 0);
+ l_targets[1].affinityPath.addLast(TYPE_MBA, 0);
l_targets[1].affinityPath.addLast(TYPE_DIMM, 0);
- l_targets[1].huid = 1;
+ l_ep[1] = l_targets[1].affinityPath; // SHOULD BE DECONFIGURED
l_targets[1].type = TYPE_DIMM;
presentByAssoc(l_targets, l_targToDeconfig);
// Check result
- if (l_targToDeconfig.size() == 2 &&
- l_targToDeconfig[0].huid == 0 &&
- l_targToDeconfig[1].huid == 1 )
+ std::sort(l_targToDeconfig.begin(), l_targToDeconfig.end(),
+ compareAffinity);
+ if ((l_targToDeconfig.size() == 2) &&
+ (l_targToDeconfig[0].affinityPath == l_ep[0]) && // 000 MBA
+ (l_targToDeconfig[1].affinityPath == l_ep[1]) ) // 0000 DIMM
{
- TS_TRACE(INFO_MRK "testdeconfigPresentByAssoc5: Success");
+ TS_TRACE(INFO_MRK "testdeconfigPresentByAssoc6: Success");
}
else
{
- TS_FAIL("testdeconfigPresentByAssoc5: incorrect configuration returned");
+ TS_FAIL("testdeconfigPresentByAssoc6: incorrect configuration returned");
+ for (uint8_t i=0;i<l_targToDeconfig.size();i++)
+ {
+ char *s = l_targToDeconfig[i].affinityPath.toString();
+ TS_WARN("deconfig %s reason %x",s, l_targToDeconfig[i].reason);
+ free(s);
+ }
+ }
+ }
+
+ /**
+ * @brief Test Deconfig Present Association 7
+ */
+ void testdeconfigPresentByAssoc7()
+ {
+ TS_TRACE(INFO_MRK "testdeconfigPresentByAssoc7: Started");
+ // This test the scenario where MBA Group 1 has no DIMMS
+
+ // User-defined number of targets
+ size_t NUM_TARGS = 5;
+
+ // Input target vector
+ TargetInfoVector l_targets;
+ TargetInfo l_TargInfo;
+ EntityPath l_ep[NUM_TARGS];
+ l_TargInfo.affinityPath = l_ep[0];
+ l_targets.insert(l_targets.begin(), NUM_TARGS, l_TargInfo);
+ // Output target vector
+ TargetInfoVector l_targToDeconfig;
+
+ // Add MCS Group 0
+ l_targets[0].pThisTarget = NULL;
+ l_targets[0].affinityPath.addLast(TYPE_MCS, 0);
+ l_ep[0] = l_targets[0].affinityPath;
+ l_targets[0].type = TYPE_MCS;
+
+ // Add MEMBUF Group 0
+ l_targets[1].pThisTarget = NULL;
+ l_targets[1].affinityPath.addLast(TYPE_MCS, 0);
+ l_targets[1].affinityPath.addLast(TYPE_MEMBUF, 0);
+ l_ep[1] = l_targets[1].affinityPath;
+ l_targets[1].type = TYPE_MEMBUF;
+
+ // Add MBA Group 0
+ l_targets[2].pThisTarget = NULL;
+ l_targets[2].affinityPath.addLast(TYPE_MCS, 0);
+ l_targets[2].affinityPath.addLast(TYPE_MEMBUF, 0);
+ l_targets[2].affinityPath.addLast(TYPE_MBA, 0);
+ l_ep[2] = l_targets[2].affinityPath;
+ l_targets[2].type = TYPE_MBA;
+
+ // Add DIMM Group 0
+ l_targets[3].pThisTarget = NULL;
+ l_targets[3].affinityPath.addLast(TYPE_MCS, 0);
+ l_targets[3].affinityPath.addLast(TYPE_MEMBUF, 0);
+ l_targets[3].affinityPath.addLast(TYPE_MBA, 0);
+ l_targets[3].affinityPath.addLast(TYPE_DIMM, 0);
+ l_ep[3] = l_targets[3].affinityPath;
+ l_targets[3].type = TYPE_DIMM;
+
+ // Add MBA Group 1
+ l_targets[4].pThisTarget = NULL;
+ l_targets[4].affinityPath.addLast(TYPE_MCS, 0);
+ l_targets[4].affinityPath.addLast(TYPE_MEMBUF, 0);
+ l_targets[4].affinityPath.addLast(TYPE_MBA, 1);
+ l_ep[4] = l_targets[4].affinityPath; // SHOULD BE DECONFIGURED
+ l_targets[4].type = TYPE_MBA;
+
+ presentByAssoc(l_targets, l_targToDeconfig);
+
+ // Check result
+ std::sort(l_targToDeconfig.begin(), l_targToDeconfig.end(),
+ compareAffinity);
+ if ((l_targToDeconfig.size() == 1) &&
+ (l_targToDeconfig[0].affinityPath == l_ep[4]) ) // 001 MBA
+ {
+ TS_TRACE(INFO_MRK "testdeconfigPresentByAssoc7: Success");
+ }
+ else
+ {
+ TS_FAIL("testdeconfigPresentByAssoc7: incorrect configuration returned");
+ for (uint8_t i=0;i<l_targToDeconfig.size();i++)
+ {
+ char *s = l_targToDeconfig[i].affinityPath.toString();
+ TS_WARN("deconfig %s reason %x",s, l_targToDeconfig[i].reason);
+ free(s);
+ }
+ }
+ }
+
+ /**
+ * @brief Test Deconfig Present Association 8
+ */
+ void testdeconfigPresentByAssoc8()
+ {
+ TS_TRACE(INFO_MRK "testdeconfigPresentByAssoc8: Started");
+ // This test the scenario where each type is missing it's child
+ // and the cascade
+
+ // User-defined number of targets
+ size_t NUM_TARGS = 10;
+
+ // Input target vector
+ TargetInfoVector l_targets;
+ TargetInfo l_TargInfo;
+ EntityPath l_ep[NUM_TARGS];
+ l_TargInfo.affinityPath = l_ep[0];
+ l_targets.insert(l_targets.begin(), NUM_TARGS, l_TargInfo);
+ // Output target vector
+ TargetInfoVector l_targToDeconfig;
+
+ // Add MCS Group 0
+ l_targets[0].pThisTarget = NULL;
+ l_targets[0].affinityPath.addLast(TYPE_MCS, 0);
+ l_ep[0] = l_targets[0].affinityPath;
+ l_targets[0].type = TYPE_MCS; // SHOULD BE DECONFIGURED
+
+ // Add MEMBUF Group 0
+ l_targets[1].pThisTarget = NULL;
+ l_targets[1].affinityPath.addLast(TYPE_MCS, 0);
+ l_targets[1].affinityPath.addLast(TYPE_MEMBUF, 0);
+ l_ep[1] = l_targets[1].affinityPath;
+ l_targets[1].type = TYPE_MEMBUF; // SHOULD BE DECONFIGURED
+
+ // Add MBA Group 0
+ l_targets[2].pThisTarget = NULL;
+ l_targets[2].affinityPath.addLast(TYPE_MCS, 0);
+ l_targets[2].affinityPath.addLast(TYPE_MEMBUF, 0);
+ l_targets[2].affinityPath.addLast(TYPE_MBA, 0);
+ l_ep[2] = l_targets[2].affinityPath;
+ l_targets[2].type = TYPE_MBA; // SHOULD BE DECONFIGURED
+
+
+ // Add MCS Group 1
+ l_targets[3].pThisTarget = NULL;
+ l_targets[3].affinityPath.addLast(TYPE_MCS, 1);
+ l_ep[3] = l_targets[3].affinityPath;
+ l_targets[3].type = TYPE_MCS; // SHOULD BE DECONFIGURED
+
+
+ // Add MCS Group 2
+ l_targets[4].pThisTarget = NULL;
+ l_targets[4].affinityPath.addLast(TYPE_MCS, 2);
+ l_ep[4] = l_targets[4].affinityPath;
+ l_targets[4].type = TYPE_MCS;
+
+ // Add MEMBUF Group 0
+ l_targets[5].pThisTarget = NULL;
+ l_targets[5].affinityPath.addLast(TYPE_MCS, 2);
+ l_targets[5].affinityPath.addLast(TYPE_MEMBUF, 0);
+ l_ep[5] = l_targets[5].affinityPath;
+ l_targets[5].type = TYPE_MEMBUF; // SHOULD BE DECONFIGURED
+
+ // Add MEMBUF Group 1
+ l_targets[6].pThisTarget = NULL;
+ l_targets[6].affinityPath.addLast(TYPE_MCS, 2);
+ l_targets[6].affinityPath.addLast(TYPE_MEMBUF, 1);
+ l_ep[6] = l_targets[6].affinityPath;
+ l_targets[6].type = TYPE_MEMBUF;
+
+ // Add MBA Group 0
+ l_targets[7].pThisTarget = NULL;
+ l_targets[7].affinityPath.addLast(TYPE_MCS, 2);
+ l_targets[7].affinityPath.addLast(TYPE_MEMBUF, 1);
+ l_targets[7].affinityPath.addLast(TYPE_MBA, 0);
+ l_ep[7] = l_targets[7].affinityPath;
+ l_targets[7].type = TYPE_MBA; // SHOULD BE DECONFIGURED
+
+ // Add MBA Group 1
+ l_targets[8].pThisTarget = NULL;
+ l_targets[8].affinityPath.addLast(TYPE_MCS, 2);
+ l_targets[8].affinityPath.addLast(TYPE_MEMBUF, 1);
+ l_targets[8].affinityPath.addLast(TYPE_MBA, 1);
+ l_ep[8] = l_targets[8].affinityPath;
+ l_targets[8].type = TYPE_MBA;
+
+ // Add DIMM Group 1
+ l_targets[9].pThisTarget = NULL;
+ l_targets[9].affinityPath.addLast(TYPE_MCS, 2);
+ l_targets[9].affinityPath.addLast(TYPE_MEMBUF, 1);
+ l_targets[9].affinityPath.addLast(TYPE_MBA, 1);
+ l_targets[9].affinityPath.addLast(TYPE_DIMM, 0);
+ l_ep[9] = l_targets[9].affinityPath;
+ l_targets[9].type = TYPE_DIMM;
+
+ presentByAssoc(l_targets, l_targToDeconfig);
+
+ // Check result
+ std::sort(l_targToDeconfig.begin(), l_targToDeconfig.end(),
+ compareAffinity);
+ if ((l_targToDeconfig.size() == 6) &&
+ (l_targToDeconfig[0].affinityPath == l_ep[0]) && // 0 MCS
+ (l_targToDeconfig[1].affinityPath == l_ep[1]) && // 00 MEMBUF
+ (l_targToDeconfig[2].affinityPath == l_ep[2]) && // 000 MBA
+ (l_targToDeconfig[3].affinityPath == l_ep[3]) && // 1 MCS
+ (l_targToDeconfig[4].affinityPath == l_ep[5]) && // 20 MEMBUF
+ (l_targToDeconfig[5].affinityPath == l_ep[7]) ) // 210 MBA
+ {
+ TS_TRACE(INFO_MRK "testdeconfigPresentByAssoc8: Success");
+ }
+ else
+ {
+ TS_FAIL("testdeconfigPresentByAssoc8: incorrect configuration returned");
+ for (uint8_t i=0;i<l_targToDeconfig.size();i++)
+ {
+ char *s = l_targToDeconfig[i].affinityPath.toString();
+ TS_WARN("deconfig %s reason %x",s, l_targToDeconfig[i].reason);
+ free(s);
+ }
+ }
+ }
+
+ /**
+ * @brief Test Deconfig Present Association 9
+ */
+ void testdeconfigPresentByAssoc9()
+ {
+ TS_TRACE(INFO_MRK "testdeconfigPresentByAssoc9: Started");
+ // This test the scenario where each type is missing it's parent
+ // and the cascade
+
+ // User-defined number of targets
+ size_t NUM_TARGS = 6;
+
+ // Input target vector
+ TargetInfoVector l_targets;
+ TargetInfo l_TargInfo;
+ EntityPath l_ep[NUM_TARGS];
+ l_TargInfo.affinityPath = l_ep[0];
+ l_targets.insert(l_targets.begin(), NUM_TARGS, l_TargInfo);
+ // Output target vector
+ TargetInfoVector l_targToDeconfig;
+
+ // Add MEMBUF Group 0
+ l_targets[0].pThisTarget = NULL;
+ l_targets[0].affinityPath.addLast(TYPE_MCS, 0);
+ l_targets[0].affinityPath.addLast(TYPE_MEMBUF, 0);
+ l_ep[0] = l_targets[0].affinityPath;
+ l_targets[0].type = TYPE_MEMBUF; // SHOULD BE DECONFIGURED
+
+ // Add MBA Group 0
+ l_targets[1].pThisTarget = NULL;
+ l_targets[1].affinityPath.addLast(TYPE_MCS, 0);
+ l_targets[1].affinityPath.addLast(TYPE_MEMBUF, 0);
+ l_targets[1].affinityPath.addLast(TYPE_MBA, 0);
+ l_ep[1] = l_targets[1].affinityPath;
+ l_targets[1].type = TYPE_MBA; // SHOULD BE DECONFIGURED
+
+ // Add DIMM Group 0
+ l_targets[2].pThisTarget = NULL;
+ l_targets[2].affinityPath.addLast(TYPE_MCS, 0);
+ l_targets[2].affinityPath.addLast(TYPE_MEMBUF, 0);
+ l_targets[2].affinityPath.addLast(TYPE_MBA, 0);
+ l_targets[2].affinityPath.addLast(TYPE_DIMM, 0);
+ l_ep[2] = l_targets[2].affinityPath;
+ l_targets[2].type = TYPE_DIMM; // SHOULD BE DECONFIGURED
+
+ // Add MBA Group 1
+ l_targets[3].pThisTarget = NULL;
+ l_targets[3].affinityPath.addLast(TYPE_MCS, 1);
+ l_targets[3].affinityPath.addLast(TYPE_MEMBUF, 0);
+ l_targets[3].affinityPath.addLast(TYPE_MBA, 0);
+ l_ep[3] = l_targets[3].affinityPath;
+ l_targets[3].type = TYPE_MBA; // SHOULD BE DECONFIGURED
+
+ // Add DIMM Group 1
+ l_targets[4].pThisTarget = NULL;
+ l_targets[4].affinityPath.addLast(TYPE_MCS, 1);
+ l_targets[4].affinityPath.addLast(TYPE_MEMBUF, 0);
+ l_targets[4].affinityPath.addLast(TYPE_MBA, 0);
+ l_targets[4].affinityPath.addLast(TYPE_DIMM, 0);
+ l_ep[4] = l_targets[4].affinityPath;
+ l_targets[4].type = TYPE_DIMM; // SHOULD BE DECONFIGURED
+
+ // Add DIMM Group 2
+ l_targets[5].pThisTarget = NULL;
+ l_targets[5].affinityPath.addLast(TYPE_MCS, 2);
+ l_targets[5].affinityPath.addLast(TYPE_MEMBUF, 0);
+ l_targets[5].affinityPath.addLast(TYPE_MBA, 0);
+ l_targets[5].affinityPath.addLast(TYPE_DIMM, 0);
+ l_ep[5] = l_targets[5].affinityPath;
+ l_targets[5].type = TYPE_DIMM; // SHOULD BE DECONFIGURED
+
+ presentByAssoc(l_targets, l_targToDeconfig);
+
+ // Check result
+ std::sort(l_targToDeconfig.begin(), l_targToDeconfig.end(),
+ compareAffinity);
+ if ((l_targToDeconfig.size() == 6) &&
+ (l_targToDeconfig[0].affinityPath == l_ep[0]) &&
+ (l_targToDeconfig[1].affinityPath == l_ep[1]) &&
+ (l_targToDeconfig[2].affinityPath == l_ep[2]) &&
+ (l_targToDeconfig[3].affinityPath == l_ep[3]) &&
+ (l_targToDeconfig[4].affinityPath == l_ep[4]) &&
+ (l_targToDeconfig[5].affinityPath == l_ep[5]) )
+ {
+ TS_TRACE(INFO_MRK "testdeconfigPresentByAssoc9: Success");
+ }
+ else
+ {
+ TS_FAIL("testdeconfigPresentByAssoc9: incorrect configuration returned");
+ for (uint8_t i=0;i<l_targToDeconfig.size();i++)
+ {
+ char *s = l_targToDeconfig[i].affinityPath.toString();
+ TS_WARN("deconfig %s reason %x",s, l_targToDeconfig[i].reason);
+ free(s);
+ }
}
}
OpenPOWER on IntegriCloud