blob: ec92089cd294a32009ae6c5c9403d892407fc124 [file] [log] [blame]
austinfcuibb742802022-03-10 08:12:22 -06001#include <attn/attention.hpp>
2#include <attn/attn_common.hpp>
3#include <attn/attn_config.hpp>
4#include <attn/attn_handler.hpp>
5#include <util/pdbg.hpp>
6#include <util/trace.hpp>
7
8#include "gtest/gtest.h"
9
10namespace attn
11{
12// these are in the attn_lib but not all exposed via headers
13int handleSpecial(Attention* i_attention);
14} // namespace attn
15
16using namespace attn;
17using namespace util::pdbg;
18
19/** @brief global function to be called back. */
20int handleAttention(Attention* attention)
21{
22 int rc = RC_SUCCESS;
23 if (attention != nullptr)
24 {
25 return rc;
26 }
27 else
28 {
29 return RC_NOT_HANDLED;
30 }
31}
32
33// Global variables for UT #1 and UT#2.
34// Attention type
35Attention::AttentionType gType = Attention::AttentionType::Special;
36// pointer to handler callback function
37int (*gHandler)(Attention*) = &(handleSpecial);
38const AttentionFlag gAttnFlag = AttentionFlag::enBreakpoints;
39
40// Start preparation for UT case #1.
41
42// Global variables for UT #1
43const char* gPosPath = "/proc0/pib/perv12";
44const uint32_t gPos = 12;
45
46/** @brief Fixture class for TEST_F(). */
47class AttentionTestPos : public testing::Test
48{
49 public:
50 AttentionTestPos() {}
51
52 void SetUp()
53 {
54 pdbg_targets_init(nullptr);
55
56 target = pdbg_target_from_path(nullptr, gPosPath);
57 EXPECT_NE(nullptr, target);
58
59 config = new Config;
60 EXPECT_EQ(true, config->getFlag(gAttnFlag));
61
62 pAttn = std::make_unique<Attention>(
63 Attention(gType, gHandler, target, config));
64 }
65
66 void TearDown()
67 {
68 delete config;
69 }
70
71 std::unique_ptr<Attention> pAttn;
72 Config* config;
73 pdbg_target* target = nullptr;
74};
75
76TEST_F(AttentionTestPos, TestAttnTargetPos)
77{
78 EXPECT_EQ(0, pAttn->getPriority());
79 EXPECT_EQ(RC_SUCCESS, pAttn->handle());
80
81 // Verify the global target_tmp.
82 EXPECT_NE(nullptr, target);
83 uint32_t attr = std::numeric_limits<uint32_t>::max();
84 pdbg_target_get_attribute(target, "ATTR_FAPI_POS", 4, 1, &attr);
85 EXPECT_EQ(gPos, attr);
86
87 // Verify the target in Attention object.
88 attr = std::numeric_limits<uint32_t>::max();
89 pdbg_target* target_tmp = pAttn->getTarget();
90 EXPECT_NE(nullptr, target_tmp);
91 pdbg_target_get_attribute(target_tmp, "ATTR_FAPI_POS", 4, 1, &attr);
92 EXPECT_EQ(gPos, attr);
93
94 // Verify the config in Attention object.
95 Config* config_tmp = pAttn->getConfig();
96 EXPECT_EQ(true, config_tmp->getFlag(gAttnFlag));
97 config_tmp->clearFlag(gAttnFlag);
98 EXPECT_EQ(false, config_tmp->getFlag(gAttnFlag));
99 config_tmp->setFlag(gAttnFlag);
100 EXPECT_EQ(true, config_tmp->getFlag(gAttnFlag));
101}
102
103// Start preparation for UT case #2.
104
105// Global variables for UT #2
106const uint32_t gChipId = 0; // ID for proc0.
107
108/** @brief Fixture class for TEST_F(). */
109class AttentionTestProc : public testing::Test
110{
111 public:
112 AttentionTestProc() {}
113
114 void SetUp()
115 {
116 pdbg_targets_init(nullptr);
117 target = getPrimaryProcessor();
118
119 EXPECT_NE(nullptr, target);
120
121 attr = std::numeric_limits<uint32_t>::max();
122 attr = getTrgtType(target);
123
124 EXPECT_EQ(TYPE_PROC, attr);
125
126 attr = std::numeric_limits<uint32_t>::max();
127 pdbg_target_get_attribute(target, "ATTR_CHIP_ID", 4, 1, &attr);
128 EXPECT_EQ(attr, gChipId);
129
130 config = new Config;
131 EXPECT_EQ(true, config->getFlag(gAttnFlag));
132
133 pAttn = std::make_unique<Attention>(
134 Attention(gType, gHandler, target, config));
135 }
136
137 void TearDown()
138 {
139 delete config;
140 }
141
142 std::unique_ptr<Attention> pAttn;
143 Config* config;
144 pdbg_target* target = nullptr;
145 uint32_t attr;
146};
147
148TEST_F(AttentionTestProc, TestAttentionProc)
149{
150 EXPECT_EQ(0, pAttn->getPriority());
151 EXPECT_EQ(RC_SUCCESS, pAttn->handle());
152
153 // Verify the target in Attention object.
154 attr = std::numeric_limits<uint32_t>::max();
155 pdbg_target* target_tmp = pAttn->getTarget();
156 EXPECT_NE(nullptr, target_tmp);
157 attr = getTrgtType(target_tmp);
158 EXPECT_EQ(TYPE_PROC, attr);
159
160 attr = std::numeric_limits<uint32_t>::max();
161 pdbg_target_get_attribute(target_tmp, "ATTR_CHIP_ID", 4, 1, &attr);
162 EXPECT_EQ(attr, gChipId);
163
164 // Verify the config in Attention object.
165 Config* config_tmp = pAttn->getConfig();
166 EXPECT_EQ(true, config_tmp->getFlag(gAttnFlag));
167 config_tmp->clearFlag(gAttnFlag);
168 EXPECT_EQ(false, config_tmp->getFlag(gAttnFlag));
169 config_tmp->setFlag(gAttnFlag);
170 EXPECT_EQ(true, config_tmp->getFlag(gAttnFlag));
171}