Add Attn config option for clearing Attn Interrupts
Added attn config option
Added UT for attn config object
Added UT for cli that uses attn config object
Signed-off-by: austinfcui <austinfcui@gmail.com>
Change-Id: I0e30ebf4d94de676814bf5e173691c4d1ee362cb
diff --git a/test/meson.build b/test/meson.build
index e9b6e6e..0517032 100644
--- a/test/meson.build
+++ b/test/meson.build
@@ -65,6 +65,7 @@
'test-pll-unlock',
'test-resolution',
'test-tod-step-check-fault',
+ 'test-cli',
]
foreach tc : testcases
diff --git a/test/test-attention.cpp b/test/test-attention.cpp
index f894535..2b33a6d 100644
--- a/test/test-attention.cpp
+++ b/test/test-attention.cpp
@@ -118,9 +118,7 @@
EXPECT_NE(nullptr, target);
- attr = std::numeric_limits<uint32_t>::max();
attr = getTrgtType(target);
-
EXPECT_EQ(TYPE_PROC, attr);
attr = std::numeric_limits<uint32_t>::max();
@@ -142,7 +140,7 @@
std::unique_ptr<Attention> pAttn;
Config* config = nullptr;
pdbg_target* target = nullptr;
- uint32_t attr;
+ uint32_t attr = std::numeric_limits<uint32_t>::max();
};
TEST_F(AttentionTestProc, TestAttentionProc)
@@ -168,4 +166,37 @@
EXPECT_EQ(false, config_tmp->getFlag(gAttnFlag));
config_tmp->setFlag(gAttnFlag);
EXPECT_EQ(true, config_tmp->getFlag(gAttnFlag));
+}
+
+TEST(AttnConfig, TestAttnConfig)
+{
+ Config* config = new Config();
+
+ // Test clearFlagAll() function.
+ config->clearFlagAll();
+ EXPECT_EQ(false, config->getFlag(AttentionFlag::enVital));
+ EXPECT_EQ(false, config->getFlag(AttentionFlag::enCheckstop));
+ EXPECT_EQ(false, config->getFlag(AttentionFlag::enTerminate));
+ EXPECT_EQ(false, config->getFlag(AttentionFlag::enBreakpoints));
+ // The dfltTi flag is not impacted.
+ EXPECT_EQ(false, config->getFlag(AttentionFlag::dfltTi));
+ EXPECT_EQ(false, config->getFlag(AttentionFlag::enClrAttnIntr));
+
+ // Test setFlagAll() function.
+ config->setFlagAll();
+ EXPECT_EQ(true, config->getFlag(AttentionFlag::enVital));
+ EXPECT_EQ(true, config->getFlag(AttentionFlag::enCheckstop));
+ EXPECT_EQ(true, config->getFlag(AttentionFlag::enTerminate));
+ EXPECT_EQ(true, config->getFlag(AttentionFlag::enBreakpoints));
+ // The dfltTi flag is not impacted.
+ EXPECT_EQ(false, config->getFlag(AttentionFlag::dfltTi));
+ EXPECT_EQ(true, config->getFlag(AttentionFlag::enClrAttnIntr));
+
+ // Test setFlag() and getFlag() functions.
+ // Only test one flag.
+ config->clearFlagAll();
+ config->setFlag(enVital);
+ EXPECT_EQ(true, config->getFlag(enVital));
+
+ delete config;
}
\ No newline at end of file
diff --git a/test/test-cli.cpp b/test/test-cli.cpp
new file mode 100644
index 0000000..08595e4
--- /dev/null
+++ b/test/test-cli.cpp
@@ -0,0 +1,94 @@
+#include <cli.hpp>
+
+#include "gtest/gtest.h"
+
+using namespace attn;
+
+TEST(TestCli, TestCliOptAll)
+{
+
+ // Test --all on options
+ Config* config = new Config();
+ char* argv[2];
+ int i = 0;
+ argv[i++] = (char*)"--all";
+ argv[i++] = (char*)"on";
+ parseConfig(argv, argv + i, config);
+ EXPECT_EQ(true, config->getFlag(AttentionFlag::enVital));
+ EXPECT_EQ(true, config->getFlag(AttentionFlag::enCheckstop));
+ EXPECT_EQ(true, config->getFlag(AttentionFlag::enTerminate));
+ EXPECT_EQ(true, config->getFlag(AttentionFlag::enBreakpoints));
+ // The dfltTi flag is cleared by default and is not updated in the function.
+ EXPECT_EQ(false, config->getFlag(AttentionFlag::dfltTi));
+ EXPECT_EQ(true, config->getFlag(AttentionFlag::enClrAttnIntr));
+
+ // Test --all off options
+ // Set the dfltTi flag to default value.
+ config->clearFlag(dfltTi);
+ i = 0;
+ argv[i++] = (char*)"--all";
+ argv[i++] = (char*)"off";
+ parseConfig(argv, argv + i, config);
+ EXPECT_EQ(false, config->getFlag(AttentionFlag::enVital));
+ EXPECT_EQ(false, config->getFlag(AttentionFlag::enCheckstop));
+ EXPECT_EQ(false, config->getFlag(AttentionFlag::enTerminate));
+ EXPECT_EQ(false, config->getFlag(AttentionFlag::enBreakpoints));
+ // The same, the dfltTi flag is not updated in the function.
+ EXPECT_EQ(false, config->getFlag(AttentionFlag::dfltTi));
+ EXPECT_EQ(false, config->getFlag(AttentionFlag::enClrAttnIntr));
+ delete config;
+}
+
+TEST(TestCli, TestCliNonAll)
+{
+ // Test options with on switch.
+ Config* config = new Config();
+ char* argv[11];
+ int i = 0;
+ argv[i++] = (char*)"--vital";
+ argv[i++] = (char*)"on";
+ argv[i++] = (char*)"--checkstop";
+ argv[i++] = (char*)"on";
+ argv[i++] = (char*)"--terminate";
+ argv[i++] = (char*)"on";
+ argv[i++] = (char*)"--breakpoints";
+ argv[i++] = (char*)"on";
+ argv[i++] = (char*)"--clrattnintr";
+ argv[i++] = (char*)"on";
+ // The --defaultti option does not have on/off switch.
+ // If this option is specified, it is enabled.
+ argv[i++] = (char*)"--defaultti";
+
+ parseConfig(argv, argv + i, config);
+ EXPECT_EQ(true, config->getFlag(AttentionFlag::enVital));
+ EXPECT_EQ(true, config->getFlag(AttentionFlag::enCheckstop));
+ EXPECT_EQ(true, config->getFlag(AttentionFlag::enTerminate));
+ EXPECT_EQ(true, config->getFlag(AttentionFlag::enBreakpoints));
+ EXPECT_EQ(true, config->getFlag(AttentionFlag::enClrAttnIntr));
+ EXPECT_EQ(true, config->getFlag(AttentionFlag::dfltTi));
+
+ // Test options with off switch.
+ // Set the dfltTi flag to default value.
+ config->clearFlag(dfltTi);
+ i = 0;
+ argv[i++] = (char*)"--vital";
+ argv[i++] = (char*)"off";
+ argv[i++] = (char*)"--checkstop";
+ argv[i++] = (char*)"off";
+ argv[i++] = (char*)"--terminate";
+ argv[i++] = (char*)"off";
+ argv[i++] = (char*)"--breakpoints";
+ argv[i++] = (char*)"off";
+ argv[i++] = (char*)"--clrattnintr";
+ argv[i++] = (char*)"off";
+
+ parseConfig(argv, argv + i, config);
+ EXPECT_EQ(false, config->getFlag(AttentionFlag::enVital));
+ EXPECT_EQ(false, config->getFlag(AttentionFlag::enCheckstop));
+ EXPECT_EQ(false, config->getFlag(AttentionFlag::enTerminate));
+ EXPECT_EQ(false, config->getFlag(AttentionFlag::enBreakpoints));
+ EXPECT_EQ(false, config->getFlag(AttentionFlag::enClrAttnIntr));
+ // If the --defaultti option is not specified, it is disabled by default.
+ EXPECT_EQ(false, config->getFlag(AttentionFlag::dfltTi));
+ delete config;
+}