summaryrefslogtreecommitdiffstats
path: root/src/usr/errl/runtime/test/rt_errltest.H
diff options
context:
space:
mode:
Diffstat (limited to 'src/usr/errl/runtime/test/rt_errltest.H')
-rw-r--r--src/usr/errl/runtime/test/rt_errltest.H348
1 files changed, 348 insertions, 0 deletions
diff --git a/src/usr/errl/runtime/test/rt_errltest.H b/src/usr/errl/runtime/test/rt_errltest.H
new file mode 100644
index 000000000..dfb7ec9fb
--- /dev/null
+++ b/src/usr/errl/runtime/test/rt_errltest.H
@@ -0,0 +1,348 @@
+/* IBM_PROLOG_BEGIN_TAG */
+/* This is an automatically generated prolog. */
+/* */
+/* $Source: src/usr/errl/test/errltest.H $ */
+/* */
+/* IBM CONFIDENTIAL */
+/* */
+/* COPYRIGHT International Business Machines Corp. 2011,2013 */
+/* */
+/* p1 */
+/* */
+/* Object Code Only (OCO) source materials */
+/* Licensed Internal Code Source Materials */
+/* IBM HostBoot Licensed Internal Code */
+/* */
+/* The source code for this program is not published or otherwise */
+/* divested of its trade secrets, irrespective of what has been */
+/* deposited with the U.S. Copyright Office. */
+/* */
+/* Origin: 30 */
+/* */
+/* IBM_PROLOG_END_TAG */
+#ifndef __RT_ERRLTEST_H
+#define __RT_ERRLTEST_H
+
+/**
+ * @file errltest.H
+ *
+ * @brief Test case for Error Logging
+*/
+
+#include <cxxtest/TestSuite.H>
+#include <errl/errlmanager.H>
+#include <errl/errlentry.H>
+#include <errl/errlreasoncodes.H>
+#include <trace/trace.H>
+#include <hbotcompid.H>
+
+#include <errl/errludtarget.H>
+#include <targeting/common/target.H>
+#include <targeting/common/iterators/rangefilter.H>
+#include <targeting/common/predicates/predicates.H>
+#include <hwas/common/hwasCallout.H>
+#include <hwas/common/deconfigGard.H>
+
+#include "../../../trace/entry.H"
+
+#define TEST_SEVERITY ERRORLOG::ERRL_SEV_INFORMATIONAL
+
+
+#define TEST_USR_8BIT_1 0x80
+#define TEST_USR_8BIT_2 0x93
+
+#define TEST_USR_16BIT_1 0x8000
+#define TEST_USR_16BIT_2 0x9003
+
+#define TEST_USR_32BIT_1 0x80000001
+#define TEST_USR_32BIT_2 0x90000003
+
+#define TEST_USR_64BIT_1 0x8000000000000001
+#define TEST_USR_64BIT_2 0x9000000000000003
+
+
+
+class RT_ErrlTest: public CxxTest::TestSuite
+{
+public:
+
+
+ /**
+ * @brief Test error log creation
+ * - Create an error log
+ * - Verify data of created log
+ * - Commit an error log
+ * - Delete an error log
+ */
+ void testErrl1(void)
+ {
+ ERRORLOG::ErrlUD * pffdc;
+
+ // An example that shows how to use macros to stuff data into
+ // the two 64-bit user data parameters in the error log.
+ // l_userData1 = 16bit(0):l_bit8_1:l_bit8_2:l_32bit_1
+ uint8_t l_8bit_1 = TEST_USR_8BIT_1; // 0x80
+ uint8_t l_8bit_2 = TEST_USR_8BIT_2; // 0x93
+ uint32_t l_32bit_1 = TEST_USR_32BIT_1; // 0x80000001
+ uint64_t l_userData1 =
+ TWO_UINT32_TO_UINT64( TO_UINT32(TWO_UINT8_TO_UINT16(l_8bit_1, l_8bit_2)), l_32bit_1);
+ // yields 0x0000809380000001
+
+
+ // l_userData2 = l_16bit_1:l_16bit_2:l_32bit_2
+ uint16_t l_16bit_1 = TEST_USR_16BIT_1; // 0x8000
+ uint16_t l_16bit_2 = TEST_USR_16BIT_2; // 0x9003
+ uint32_t l_32bit_2 = TEST_USR_32BIT_2; // 0x90000003
+ uint64_t l_userData2 = TWO_UINT16_ONE_UINT32_TO_UINT64(l_16bit_1, l_16bit_2, l_32bit_2);
+ // yields 0x8000900390000003
+
+
+
+ do
+ {
+ /*@
+ * @errortype
+ * @reasoncode ERRORLOG::ERRL_TEST_REASON_CODE
+ * @severity ERRORLOG::ERRL_SEV_INFORMATIONAL
+ * @moduleid ERRORLOG::ERRL_RT_TEST_MOD_ID
+ * @devdesc Errl test. Error with non-decoded string
+ * and lots of trace buffers.
+ */
+
+ // Create an error log
+ errlHndl_t l_err = new ERRORLOG::ErrlEntry(
+ ERRORLOG::ERRL_SEV_INFORMATIONAL,
+ ERRORLOG::ERRL_RT_TEST_MOD_ID,
+ ERRORLOG::ERRL_TEST_REASON_CODE,
+ l_userData1,
+ l_userData2);
+
+ // These addFFDC() calls return a pointer to class ERRORLOG::ErrlFFDC
+ // but errlffdc.H is not publicly includable to give me the definition
+ // for it. addFFDC() should return a Boolean indication of success.
+
+ // really short user data
+ const char * pch = "A";
+ pffdc = l_err->addFFDC( DEVFW_COMP_ID, pch, strlen( pch ), 0, 0);
+ if ( NULL == pffdc )
+ {
+ TS_FAIL("testErrl1: addFFDC() output NULL pointer");
+ break;
+ }
+
+ // Append data to something already added.
+ pch = " test-user-data-string";
+ l_err->appendToFFDC( pffdc, pch, strlen(pch) );
+
+ // Collect trace
+ // NOTE Trace buffers are not currently kept in Runtime
+ // - tests deleted
+
+ // Add null data.
+ pffdc = l_err->addFFDC( ERRL_COMP_ID, NULL, 0, 9, 10 );
+ if ( NULL != pffdc )
+ {
+ TS_FAIL("testErrl1: addFFDC() returned non null");
+ break;
+ }
+
+ // Verify log data
+ if (l_err->sev() != ERRORLOG::ERRL_SEV_INFORMATIONAL)
+ {
+ TS_FAIL("testErrl1: createErrlLog() returns incorrect severity!");
+ break;
+ }
+
+ if (l_err->reasonCode() != ERRORLOG::ERRL_TEST_REASON_CODE)
+ {
+ TS_FAIL("testErrl1: createErrlLog() returns incorrect reason code!");
+ break;
+ }
+
+ if (l_err->eventType() != ERRORLOG::ERRL_ETYPE_NOT_APPLICABLE)
+ {
+ TS_FAIL("testErrl1: createErrlLog() returns incorrect event type!");
+ break;
+ }
+
+ if (l_err->subSys() != ERRORLOG::EPUB_FIRMWARE_SUBSYS )
+ {
+ TS_FAIL("testErrl1: createErrlLog() returns incorrect sub system!");
+ break;
+ }
+
+ if (l_err->srcType() != ERRORLOG::SRC_ERR_INFO)
+ {
+ TS_FAIL("testErrl1: createErrlLog() returns incorrect SRC type!");
+ break;
+ }
+
+ if (l_err->termState() != ERRORLOG::TERM_STATE_UNKNOWN)
+ {
+ TS_FAIL("testErrl1: termState() returns incorrect term state!");
+ break;
+ }
+
+
+
+ // Commit error log with different component ID.
+ errlCommit(l_err, CXXTEST_COMP_ID);
+
+ // Make sure error log has been deleted by manager
+ if (l_err != NULL)
+ {
+ TS_FAIL("testErrl1: commitErrLog() did not delete error!");
+ break;
+ }
+
+ }
+ while(0);
+ }
+
+ /**
+ * @brief Test error log parameter settings
+ */
+ void testErrl2(void)
+ {
+ // An example that shows how to use macros to stuff data into
+ // the two 64-bit user data parameters in the error log.
+ // l_userData1 = l_bit32_1:l_bit32_2
+ uint32_t l_32bit_1 = TEST_USR_32BIT_1;
+ uint32_t l_32bit_2 = TEST_USR_32BIT_2;
+ uint64_t l_userData1 = TWO_UINT32_TO_UINT64(l_32bit_1, l_32bit_2);
+
+ // l_userData2 = 24bit(0):l_8bit_1:16bit(0):l_16bit_1
+ uint8_t l_8bit_1 = TEST_USR_8BIT_1;
+ uint16_t l_16bit_1 = TEST_USR_16BIT_1;
+ uint64_t l_userData2 =
+ TWO_UINT32_TO_UINT64(TO_UINT32(l_8bit_1), TO_UINT32(l_16bit_1));
+
+ // Create an error log
+ errlHndl_t l_err = new ERRORLOG::ErrlEntry(
+ ERRORLOG::ERRL_SEV_UNRECOVERABLE,
+ ERRORLOG::ERRL_RT_TEST_MOD_ID,
+ ERRORLOG::ERRL_TEST_REASON_CODE,
+ l_userData1,
+ l_userData2);
+
+ // Set and verify log data
+ l_err->setSev(ERRORLOG::ERRL_SEV_UNKNOWN);
+ l_err->setEventType(ERRORLOG::ERRL_ETYPE_CAPACITY_UPGRADE);
+ l_err->setSubSys(ERRORLOG::EPUB_UNKNOWN);
+ l_err->setSrcType(ERRORLOG::SRC_ERR_INFO);
+ l_err->setTermState(ERRORLOG::TERM_STATE_NO_FLAGS);
+
+ if (l_err->sev() != ERRORLOG::ERRL_SEV_UNKNOWN)
+ {
+ TS_FAIL("testErrl2: setSev() fails!");
+ }
+ else if (l_err->eventType() != ERRORLOG::ERRL_ETYPE_CAPACITY_UPGRADE)
+ {
+ TS_FAIL("testErrl2: setEventType() fails!");
+ }
+ else if (l_err->subSys() != ERRORLOG::EPUB_UNKNOWN)
+ {
+ TS_FAIL("testErrl2: setSubSys() fails!");
+ }
+ else if (l_err->srcType() != ERRORLOG::SRC_ERR_INFO)
+ {
+ TS_FAIL("testErrl2: setSrcType() fails!");
+ }
+ else if (l_err->termState() != ERRORLOG::TERM_STATE_NO_FLAGS)
+ {
+ TS_FAIL("testErrl2: setTermState() fails!");
+ }
+
+ // Delete the log
+ delete l_err;
+ l_err = NULL;
+ }
+
+ /**
+ * @brief Test callouts
+ */
+ void testErrl3(void)
+ {
+ TS_TRACE( "test testErrl3");
+ do
+ {
+ // find some ex units that we can play with
+ TARGETING::Target * pSys;
+ TARGETING::targetService().getTopLevelTarget(pSys);
+
+ TARGETING::PredicateCTM predEx(TARGETING::CLASS_UNIT,
+ TARGETING::TYPE_EX);
+ TARGETING::PredicateHwas predFunctional;
+ predFunctional.poweredOn(true).present(true).functional(true);
+ TARGETING::PredicatePostfixExpr checkExpr;
+ checkExpr.push(&predEx).push(&predFunctional).And();
+ TARGETING::TargetHandleList pExList;
+ TARGETING::targetService().getAssociated( pExList, pSys,
+ TARGETING::TargetService::CHILD, TARGETING::TargetService::ALL,
+ &checkExpr );
+
+ if (pExList.empty())
+ {
+ TS_FAIL("testErrl3: empty pExList");
+ break;
+ }
+ TARGETING::TargetHandle_t pTarget = *pExList.begin();
+
+ // Create an error log
+ errlHndl_t errl = new ERRORLOG::ErrlEntry(
+ ERRORLOG::ERRL_SEV_UNRECOVERABLE,
+ ERRORLOG::ERRL_RT_TEST_MOD_ID,
+ ERRORLOG::ERRL_TEST_REASON_CODE);
+
+ // test the different callout types
+ TS_TRACE("test callout target %.8X", TARGETING::get_huid(pTarget));
+ ERRORLOG::ErrlUserDetailsTarget(pTarget).addToLog(errl);
+
+ errl->addHwCallout(pTarget,
+ HWAS::SRCI_PRIORITY_LOW,
+ HWAS::DELAYED_DECONFIG,
+ HWAS::GARD_Fatal);
+
+ errl->addHwCallout(pTarget,
+ HWAS::SRCI_PRIORITY_MED,
+ HWAS::DELAYED_DECONFIG,
+ HWAS::GARD_NULL);
+
+ errl->addHwCallout(TARGETING::MASTER_PROCESSOR_CHIP_TARGET_SENTINEL,
+ HWAS::SRCI_PRIORITY_LOW,
+ HWAS::NO_DECONFIG,
+ HWAS::GARD_PHYP);
+
+ errl->addHwCallout(TARGETING::MASTER_PROCESSOR_CHIP_TARGET_SENTINEL,
+ HWAS::SRCI_PRIORITY_MED,
+ HWAS::DELAYED_DECONFIG,
+ HWAS::GARD_NULL);
+
+ errl->addProcedureCallout(
+ HWAS::EPUB_PRC_MEMORY_PLUGGING_ERROR,
+ HWAS::SRCI_PRIORITY_HIGH);
+
+ errl->addClockCallout(
+ pExList[0],
+ HWAS::TODCLK_TYPE,
+ HWAS::SRCI_PRIORITY_MED);
+
+ if (pExList.size() > 1)
+ {
+ errl->addBusCallout(
+ pExList[0],
+ pExList[1],
+ HWAS::A_BUS_TYPE,
+ HWAS::SRCI_PRIORITY_LOW);
+ }
+
+ errlCommit(errl, CXXTEST_COMP_ID);
+
+ TS_TRACE( "testErrl3 done");
+
+ }
+ while(0);
+ }
+};
+
+#endif
OpenPOWER on IntegriCloud