summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/usr/diag/attn/attn.C5
-rw-r--r--src/usr/diag/attn/attnprd.H7
-rw-r--r--src/usr/diag/attn/test/attnfakeprd.C93
-rw-r--r--src/usr/diag/attn/test/attnfakeprd.H86
-rw-r--r--src/usr/diag/attn/test/makefile2
5 files changed, 192 insertions, 1 deletions
diff --git a/src/usr/diag/attn/attn.C b/src/usr/diag/attn/attn.C
index af78f41bf..fed47c991 100644
--- a/src/usr/diag/attn/attn.C
+++ b/src/usr/diag/attn/attn.C
@@ -51,6 +51,11 @@ errlHndl_t stopService()
return Singleton<Service>::instance().stop();
}
+void PrdImpl::installPrd()
+{
+ getPrdWrapper().setImpl(*this);
+}
+
errlHndl_t PrdImpl::callPrd(const AttentionList & i_attentions)
{
// forward call to the real PRD
diff --git a/src/usr/diag/attn/attnprd.H b/src/usr/diag/attn/attnprd.H
index 5569c0ab9..34d9f27be 100644
--- a/src/usr/diag/attn/attnprd.H
+++ b/src/usr/diag/attn/attnprd.H
@@ -57,6 +57,13 @@ class PrdImpl
virtual errlHndl_t callPrd(const AttentionList & i_attentions);
/**
+ * @brief installPrd
+ *
+ * Make this the active PRD implementation.
+ */
+ void installPrd();
+
+ /**
* @brief dtor
*/
virtual ~PrdImpl() {}
diff --git a/src/usr/diag/attn/test/attnfakeprd.C b/src/usr/diag/attn/test/attnfakeprd.C
new file mode 100644
index 000000000..058af49a3
--- /dev/null
+++ b/src/usr/diag/attn/test/attnfakeprd.C
@@ -0,0 +1,93 @@
+/* IBM_PROLOG_BEGIN_TAG
+ * This is an automatically generated prolog.
+ *
+ * $Source: src/usr/diag/attn/test/attnfakeprd.C $
+ *
+ * IBM CONFIDENTIAL
+ *
+ * COPYRIGHT International Business Machines Corp. 2012
+ *
+ * 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 other-
+ * wise divested of its trade secrets, irrespective of what has
+ * been deposited with the U.S. Copyright Office.
+ *
+ * Origin: 30
+ *
+ * IBM_PROLOG_END_TAG
+ */
+/**
+ * @file attnfakeprd.C
+ *
+ * @brief HBATTN fake PRD class method definitions.
+ */
+
+#include "attnfakeprd.H"
+#include "attnfakesys.H"
+#include "../attnops.H"
+#include "../attnlist.H"
+#include <sys/time.h>
+
+using namespace PRDF;
+
+namespace ATTN
+{
+
+struct Clear
+{
+ Clear(FakeSystem & i_system) : iv_system(&i_system), err(0) {}
+
+ void operator()(const Attention & i_attention)
+ {
+ if(!err)
+ {
+ AttnData d;
+
+ i_attention.getData(d);
+
+ // sleep for a random interval to simulate
+ // real prd processing time
+
+ nanosleep(0, randint(TEN_CTX_SWITCHES_NS, TEN_CTX_SWITCHES_NS * 10));
+
+ uint64_t behavior = randint(0, 2);
+
+ switch(behavior)
+ {
+ case 1:
+
+ // periodically do nothing to force the main service
+ // to see attentions that were not cleared and call PRD
+ // again
+
+ break;
+
+ default:
+
+ err = iv_system->clearAllAttentions(d);
+
+ break;
+ }
+ }
+ }
+
+ FakeSystem * iv_system;
+ errlHndl_t err;
+};
+
+errlHndl_t FakePrd::callPrd(const AttentionList & i_attentions)
+{
+ return i_attentions.forEach(Clear(*iv_system)).err;
+}
+
+FakePrd::FakePrd(FakeSystem & i_system) :
+ iv_system(&i_system)
+{
+
+}
+}
diff --git a/src/usr/diag/attn/test/attnfakeprd.H b/src/usr/diag/attn/test/attnfakeprd.H
new file mode 100644
index 000000000..0e35410ce
--- /dev/null
+++ b/src/usr/diag/attn/test/attnfakeprd.H
@@ -0,0 +1,86 @@
+/* IBM_PROLOG_BEGIN_TAG
+ * This is an automatically generated prolog.
+ *
+ * $Source: src/usr/diag/attn/test/attnfakeprd.H $
+ *
+ * IBM CONFIDENTIAL
+ *
+ * COPYRIGHT International Business Machines Corp. 2012
+ *
+ * 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 other-
+ * wise divested of its trade secrets, irrespective of what has
+ * been deposited with the U.S. Copyright Office.
+ *
+ * Origin: 30
+ *
+ * IBM_PROLOG_END_TAG
+ */
+#ifndef __TEST_ATTNFAKEPRD_H
+#define __TEST_ATTNFAKEPRD_H
+
+/**
+ * @file attnfakeprd.H
+ *
+ * @brief HBATTN fake PRD class definitions.
+ */
+
+#include "attntest.H"
+#include "../attnprd.H"
+
+namespace ATTN
+{
+
+/**
+ * @brief FakePrd
+ *
+ * Basic PRD implementation that eventually clears every attention it
+ * receives.
+ */
+class FakePrd : public PrdImpl
+{
+ public:
+
+ /**
+ * @brief ctor
+ *
+ * @param[in] i_system The system where attentions
+ * should be cleared.
+ */
+ explicit FakePrd(FakeSystem & i_system);
+
+ /**
+ * @brief dtor
+ */
+ ~FakePrd() {}
+
+ /**
+ * @brief callPrd Simulate a call to PRD.
+ *
+ * Sleeps random intervals, to simulate PRD processing times. Periodically
+ * does not clear some attentions, to simulate real PRD behavior.
+ *
+ * @param[in] i_attentions List of attentions for PRD to analyze.
+ *
+ * @return errlHndl_t Error log.
+ *
+ * @retval[0] No error occurred.
+ * @retval[!0] Unexpected error occurred.
+ */
+ errlHndl_t callPrd(const AttentionList & i_attentions);
+
+ private:
+
+ /**
+ * @brief iv_system The system where attentions should
+ * be cleared.
+ */
+ FakeSystem * iv_system;
+};
+}
+#endif
diff --git a/src/usr/diag/attn/test/makefile b/src/usr/diag/attn/test/makefile
index 20dd9cf89..f8f75e9a6 100644
--- a/src/usr/diag/attn/test/makefile
+++ b/src/usr/diag/attn/test/makefile
@@ -24,7 +24,7 @@ ROOTPATH = ../../../../..
EXTRAINCDIR += ${ROOTPATH}/src/include/usr/diag
-OBJS = attnfakesys.o attntest.o attnrand.o attnfakepresenter.o
+OBJS = attnfakesys.o attntest.o attnrand.o attnfakepresenter.o attnfakeprd.o
MODULE = testattn
OpenPOWER on IntegriCloud