summaryrefslogtreecommitdiffstats
path: root/src/usr/targeting/test/testTargetUtil.H
diff options
context:
space:
mode:
Diffstat (limited to 'src/usr/targeting/test/testTargetUtil.H')
-rw-r--r--src/usr/targeting/test/testTargetUtil.H458
1 files changed, 458 insertions, 0 deletions
diff --git a/src/usr/targeting/test/testTargetUtil.H b/src/usr/targeting/test/testTargetUtil.H
new file mode 100644
index 000000000..1cfc8412f
--- /dev/null
+++ b/src/usr/targeting/test/testTargetUtil.H
@@ -0,0 +1,458 @@
+/* IBM_PROLOG_BEGIN_TAG */
+/* This is an automatically generated prolog. */
+/* */
+/* $Source: src/usr/targeting/test/testTargetUtil.H $ */
+/* */
+/* OpenPOWER HostBoot Project */
+/* */
+/* Contributors Listed Below - COPYRIGHT 2011,2019 */
+/* [+] International Business Machines Corp. */
+/* */
+/* */
+/* Licensed under the Apache License, Version 2.0 (the "License"); */
+/* you may not use this file except in compliance with the License. */
+/* You may obtain a copy of the License at */
+/* */
+/* http://www.apache.org/licenses/LICENSE-2.0 */
+/* */
+/* Unless required by applicable law or agreed to in writing, software */
+/* distributed under the License is distributed on an "AS IS" BASIS, */
+/* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or */
+/* implied. See the License for the specific language governing */
+/* permissions and limitations under the License. */
+/* */
+/* IBM_PROLOG_END_TAG */
+
+#ifndef __TEST_TARGETING_UTIL_H
+#define __TEST_TARGETING_UTIL_H
+
+/**
+ * @file targeting/test/testTargetUtil.H
+ *
+ * @brief Unit test for the templates makeAttribute
+ * and makeAttributeStdArr
+ */
+
+//******************************************************************************
+// Includes
+//******************************************************************************
+
+// CXX TEST
+#include <cxxtest/TestSuite.H>
+
+#include <targeting/common/targetUtil.H>
+
+using namespace TARGETING;
+
+//******************************************************************************
+// class MakeAttributeTest
+//******************************************************************************
+class MakeAttributeTest: public CxxTest::TestSuite
+{
+public:
+
+ /**
+ * @test Test the Make Attribute template
+ */
+ void testMakeAttribute(void);
+
+ /**
+ * @test Test the Make Attribute for Standard Array template
+ */
+ void testMakeAttributeStdArr(void);
+
+}; // end class MakeAttributeTest
+
+// testMakeAttribute
+void MakeAttributeTest::testMakeAttribute(void)
+{
+ TRACFCOMP( g_trac_test, ENTER_MRK "testMakeAttribute" );
+
+ // Test stats
+ uint8_t l_numTests(0);
+ uint8_t l_numFails(0);
+
+ if (!TARGETING::targetService().isInitialized())
+ {
+ TS_FAIL("testMakeAttribute: Target Service is not initialized, "
+ "cannot perform test, exiting");
+
+ TRACFCOMP( g_trac_test, EXIT_MRK "testMakeAttribute "
+ "num tests = 1 / num fails = 1");
+ return;
+ }
+
+ // Get the top level target
+ TARGETING::Target * l_sys(nullptr);
+ TARGETING::targetService().getTopLevelTarget( l_sys );
+
+ if(!l_sys)
+ {
+ TS_FAIL("testMakeAttribute: Get Top Level Target failed, "
+ "unable to get top level target, cannot perform "
+ "test, exiting");
+
+ TRACFCOMP( g_trac_test, EXIT_MRK "testMakeAttribute "
+ "num tests = 1 / num fails = 1");
+ return;
+ }
+
+ // Save initial value to restore later
+ uint8_t l_simpleTypeRestoreValue =
+ l_sys->getAttr<TARGETING::ATTR_IS_SIMULATION>();
+
+ // Test 1, test a simple attribute with known data
+ ++l_numTests;
+ do
+ {
+ // Set the attribute 'Is Simulation' to a known value to
+ // facilitate testing
+ uint8_t l_isSimulationSet = 1;
+ l_sys->setAttr<TARGETING::ATTR_IS_SIMULATION>(l_isSimulationSet);
+ uint8_t l_isSimulationReturn =
+ l_sys->getAttr<TARGETING::ATTR_IS_SIMULATION>();
+
+ // Verify setting the attribute worked
+ if (l_isSimulationSet != l_isSimulationReturn)
+ {
+ TS_FAIL("testMakeAttribute: Test 1 - Setting attribute failed "
+ "to initialize attribute to %d but retained "
+ "value at %d, cannot perform test, exiting",
+ l_isSimulationSet,
+ l_isSimulationReturn);
+ ++l_numFails;
+ break;
+ }
+
+ // Retrieve that set attribute back via the 'make attribute' call
+ TARGETING::AttributeTank::Attribute l_attribute;
+ bool l_return =
+ TARGETING::makeAttribute<TARGETING::ATTR_IS_SIMULATION>
+ (l_sys, l_attribute);
+
+ // Verify the called worked
+ if (true != l_return)
+ {
+ TS_INFO("testMakeAttribute: Test 1 - Make attribute call failed");
+ ++l_numFails;
+ break;
+ }
+
+ // Get a pointer to the attribute created in make attribute call,
+ // to get to the data.
+ const uint8_t* l_attributeValue =
+ static_cast<const uint8_t*>(l_attribute.getValue());
+
+ // If the pointer to the data is NULL, then the make attribute did fail
+ if (l_attributeValue == nullptr)
+ {
+ TS_INFO("testMakeAttribute: Test 1 - Getting attribute value "
+ "failed, NULL pointer returned when getting value.");
+ ++l_numFails;
+ break;
+ }
+
+ // Verify the returned attribute matches it's set value
+ if (*l_attributeValue != l_isSimulationSet)
+ {
+ TS_INFO("testMakeAttribute: Test 1 - Retrieved attribute value "
+ "failed, retrieved attribute value(%d) does not "
+ "match set attribute value(%d)",
+ l_isSimulationSet,
+ *l_attributeValue);
+ ++l_numFails;
+ break;
+ }
+ }
+ while (0);
+
+ // Test 2, test the same simple attribute but with different data
+ ++l_numTests;
+ do
+ {
+ // Set the attribute 'Is Simulation' to a known value to
+ // facilitate testing
+ uint8_t l_isSimulationSet = 5;
+ l_sys->setAttr<TARGETING::ATTR_IS_SIMULATION>(l_isSimulationSet);
+ uint8_t l_isSimulationReturn =
+ l_sys->getAttr<TARGETING::ATTR_IS_SIMULATION>();
+
+ // Verify setting the attribute worked
+ if (l_isSimulationSet != l_isSimulationReturn)
+ {
+ TS_FAIL("testMakeAttribute: Test 2 - Setting attribute failed "
+ "to initialize attribute to %d but retained "
+ "value at %d, cannot perform test, exiting",
+ l_isSimulationSet,
+ l_isSimulationReturn);
+ ++l_numFails;
+ break;
+ }
+
+ // Retrieve that set attribute back via the 'make attribute' call
+ TARGETING::AttributeTank::Attribute l_attribute;
+ bool l_return =
+ TARGETING::makeAttribute<TARGETING::ATTR_IS_SIMULATION>
+ (l_sys, l_attribute);
+
+ // Verify the called worked
+ if (true != l_return)
+ {
+ TS_INFO("testMakeAttribute: Test 2 - Make attribute call failed");
+ ++l_numFails;
+ break;
+ }
+
+ // Get a pointer to the attribute created in make attribute call,
+ // to get to the data.
+ const uint8_t* l_attributeValue =
+ static_cast<const uint8_t*>(l_attribute.getValue());
+
+ // If the pointer to the data is NULL, then the make attribute did fail
+ if (l_attributeValue == nullptr)
+ {
+ TS_INFO("testMakeAttribute: Test 1 - Getting attribute value "
+ "failed, NULL pointer returned when getting value.");
+ ++l_numFails;
+ break;
+ }
+
+ // Verify the returned attribute matches it's set value
+ if (*l_attributeValue != l_isSimulationSet)
+ {
+ TS_INFO("testMakeAttribute: Test 2 - Retrieved attribute value "
+ "failed, retrieved attribute value(%d) does not "
+ "match set attribute value(%d)",
+ l_isSimulationSet,
+ *l_attributeValue);
+ ++l_numFails;
+ break;
+ }
+ }
+ while (0);
+
+ // Restore value
+ l_sys->setAttr<TARGETING::ATTR_IS_SIMULATION>(l_simpleTypeRestoreValue);
+
+ TRACFCOMP( g_trac_test, EXIT_MRK "testMakeAttribute "
+ "num tests = %d / num fails = %d", l_numTests, l_numFails);
+} // end testMakeAttribute
+
+// testMakeAttributeStdArr
+void MakeAttributeTest::testMakeAttributeStdArr(void)
+{
+ TRACFCOMP( g_trac_test, ENTER_MRK "testMakeAttributeStdArr" );
+
+ // Test stats
+ uint8_t l_numTests(0);
+ uint8_t l_numFails(0);
+
+
+ if (!TARGETING::targetService().isInitialized())
+ {
+ TS_FAIL("testMakeAttributeStdArr: Target Service is not initialized, "
+ "cannot perform test, exiting");
+
+ TRACFCOMP( g_trac_test, EXIT_MRK "testMakeAttributeStdArr: "
+ "num tests = 1 / num fails = 1");
+ return;
+ }
+
+ // Get the top level target
+ TARGETING::Target * l_sys(nullptr);
+ TARGETING::targetService().getTopLevelTarget( l_sys );
+
+ if(!l_sys)
+ {
+ TS_FAIL("testMakeAttributeStdArr: Get Top Level Target failed, "
+ "unable to get top level target, cannot perform "
+ "test, exiting");
+
+ TRACFCOMP( g_trac_test, EXIT_MRK "testMakeAttributeStdArr: "
+ "num tests = 1 / num fails = 1");
+ return;
+ }
+
+ // Save initial value to restore later
+ TARGETING::ATTR_IPC_NODE_BUFFER_GLOBAL_ADDRESS_typeStdArr
+ l_complexTypeRestoreValue;
+
+ // Test 1, test a complex attribute with known data
+ ++l_numTests;
+ do
+ {
+ // Set the attribute 'IPC Node Buffer Global Address' to a
+ // known value to facilitate testing
+ TARGETING::ATTR_IPC_NODE_BUFFER_GLOBAL_ADDRESS_typeStdArr
+ l_complexTypeSet = {9, 6, 3, 1, 5, 1, 7, 3};
+
+ if ( !l_sys->trySetAttr<TARGETING::ATTR_IPC_NODE_BUFFER_GLOBAL_ADDRESS>(
+ l_complexTypeSet) )
+ {
+ TS_FAIL("testMakeAttributeStdArr: Test 1 - can't set "
+ "TARGETING::ATTR_IPC_NODE_BUFFER_GLOBAL_ADDRESS ");
+ ++l_numFails;
+ break;
+ }
+
+ // Do a sanity check and make sure we can set/get attribute via
+ // trySetAttr/tryGetAttr
+ TARGETING::ATTR_IPC_NODE_BUFFER_GLOBAL_ADDRESS_typeStdArr
+ l_complexTypeGet;
+
+ if ( !l_sys->tryGetAttr<TARGETING::ATTR_IPC_NODE_BUFFER_GLOBAL_ADDRESS>(
+ l_complexTypeGet) )
+ {
+ TS_FAIL("testMakeAttributeStdArr: Test 1 - can't get "
+ "TARGETING::ATTR_IPC_NODE_BUFFER_GLOBAL_ADDRESS ");
+ ++l_numFails;
+ break;
+ }
+
+ // Verify setting the attribute worked
+ if (0 != memcmp(&l_complexTypeGet, &l_complexTypeSet,
+ sizeof(l_complexTypeSet)) )
+ {
+ TS_FAIL("testMakeAttributeStdArr: Test 1 - Setting "
+ "attribute failed, cannot perform test, exiting");
+ ++l_numFails;
+ break;
+ }
+
+ // Retrieved that set attribute back via the 'make attribute' call
+ TARGETING::AttributeTank::Attribute l_attribute;
+ bool l_return =
+ TARGETING::makeAttributeStdArr
+ <TARGETING::ATTR_IPC_NODE_BUFFER_GLOBAL_ADDRESS>
+ (l_sys, l_attribute);
+
+ // Verify the called worked
+ if (l_return == false)
+ {
+ TS_FAIL("testMakeAttributeStdArr: Test 1 - Make "
+ "attribute call failed");
+ ++l_numFails;
+ break;
+ }
+
+ // Get a pointer to the attribute created in make attribute call,
+ // to get to the data.
+ const uint8_t* l_attributeValue =
+ static_cast<const uint8_t*>(l_attribute.getValue());
+
+ // If the pointer to the data is NULL, then the make attribute did fail
+ if (l_attributeValue == nullptr)
+ {
+ TS_INFO("testMakeAttributeStdArr: Test 1 - Getting attribute value "
+ "failed, NULL pointer returned when getting value.");
+ ++l_numFails;
+ }
+
+ // Verify the returned attribute matches it's set value
+ if (0 != memcmp(l_attributeValue, &l_complexTypeSet,
+ sizeof(l_complexTypeSet)) )
+ {
+ TS_INFO("testMakeAttributeStdArr: Test 1 - Retrieved attribute "
+ "value failed, expected value and retrieved value do "
+ "not match");
+ ++l_numFails;
+ break;
+ }
+ }
+ while (0);
+
+
+ // Test 2, test the same complex attribute but with different data
+ ++l_numTests;
+ do
+ {
+ // Set the attribute 'IPC Node Buffer Global Address' to a
+ // known value to facilitate testing
+ TARGETING::ATTR_IPC_NODE_BUFFER_GLOBAL_ADDRESS_typeStdArr
+ l_complexTypeSet = {1, 2, 6, 8, 3, 2, 9, 3};
+
+ if ( !l_sys->trySetAttr<TARGETING::ATTR_IPC_NODE_BUFFER_GLOBAL_ADDRESS>(
+ l_complexTypeSet) )
+ {
+ TS_FAIL("testMakeAttributeStdArr: Test 2 - can't set "
+ "TARGETING::ATTR_IPC_NODE_BUFFER_GLOBAL_ADDRESS ");
+ ++l_numFails;
+ break;
+ }
+
+ // Do a sanity check and make sure we can set/get attribute via
+ // trySetAttr/tryGetAttr
+ TARGETING::ATTR_IPC_NODE_BUFFER_GLOBAL_ADDRESS_typeStdArr
+ l_complexTypeGet;
+
+ if ( !l_sys->tryGetAttr<TARGETING::ATTR_IPC_NODE_BUFFER_GLOBAL_ADDRESS>(
+ l_complexTypeGet) )
+ {
+ TS_FAIL("testMakeAttributeStdArr: Test 2 - can't get "
+ "TARGETING::ATTR_IPC_NODE_BUFFER_GLOBAL_ADDRESS ");
+ ++l_numFails;
+ break;
+ }
+
+ // Verify setting the attribute worked
+ if (0 != memcmp(&l_complexTypeGet, &l_complexTypeSet,
+ sizeof(l_complexTypeSet)) )
+ {
+ TS_FAIL("testMakeAttributeStdArr: Test 2 - Setting "
+ "attribute failed, cannot perform test, exiting");
+ ++l_numFails;
+ break;
+ }
+
+ // Retrieved that set attribute back via the 'make attribute' call
+ TARGETING::AttributeTank::Attribute l_attribute;
+ bool l_return =
+ TARGETING::makeAttributeStdArr
+ <TARGETING::ATTR_IPC_NODE_BUFFER_GLOBAL_ADDRESS>
+ (l_sys, l_attribute);
+
+ // Verify the called worked
+ if (l_return == false)
+ {
+ TS_FAIL("testMakeAttributeStdArr: Test 2 - Make "
+ "attribute call failed");
+ ++l_numFails;
+ break;
+ }
+
+ // Get a pointer to the attribute created in make attribute call,
+ // to get to the data.
+ const uint8_t* l_attributeValue =
+ static_cast<const uint8_t*>(l_attribute.getValue());
+
+ // If the pointer to the data is NULL, then the make attribute did fail
+ if (l_attributeValue == nullptr)
+ {
+ TS_INFO("testMakeAttributeStdArr: Test 2 - Getting attribute value "
+ "failed, NULL pointer returned when getting value.");
+ ++l_numFails;
+ }
+
+ // Verify the returned attribute matches it's set value
+ if (0 != memcmp(l_attributeValue, &l_complexTypeSet,
+ sizeof(l_complexTypeSet)) )
+ {
+ TS_INFO("testMakeAttributeStdArr: Test 2 - Retrieved attribute "
+ "value failed, expected value and retrieved value do "
+ "not match");
+ ++l_numFails;
+ break;
+ }
+ }
+ while (0);
+
+ // Restore value
+ l_sys->trySetAttr<TARGETING::ATTR_IPC_NODE_BUFFER_GLOBAL_ADDRESS>(
+ l_complexTypeRestoreValue);
+
+ TRACFCOMP( g_trac_test, EXIT_MRK "testMakeAttributeStdArr "
+ "num tests = %d / num fails = %d", l_numTests, l_numFails);
+
+} // end testMakeAttributeStdArr
+
+#endif // end __TEST_ATTRIBUTE_H
OpenPOWER on IntegriCloud