@@ -31,10 +31,10 @@ struct SysmanPmuFixture : public SysmanDeviceFixture {
31
31
.WillByDefault (::testing::Invoke (pFsAccess.get (), &Mock<PmuFsAccess>::readValSuccess));
32
32
ON_CALL (*pPmuInterface.get (), perfEventOpen (_, _, _, _, _))
33
33
.WillByDefault (::testing::Invoke (pPmuInterface.get (), &Mock<MockPmuInterfaceImpForSysman>::mockedPerfEventOpenAndSuccessReturn));
34
+ ON_CALL (*pPmuInterface.get (), pmuRead (_, _, _))
35
+ .WillByDefault (::testing::Invoke (pPmuInterface.get (), &Mock<MockPmuInterfaceImpForSysman>::mockedReadCountersForGroupSuccess));
34
36
ON_CALL (*pPmuInterface.get (), getErrorNo ())
35
37
.WillByDefault (::testing::Invoke (pPmuInterface.get (), &Mock<MockPmuInterfaceImpForSysman>::mockGetErrorNoSuccess));
36
- ON_CALL (*pPmuInterface.get (), readCounters (_, _, _))
37
- .WillByDefault (::testing::Invoke (pPmuInterface.get (), &Mock<MockPmuInterfaceImpForSysman>::mockReadCounterSuccess));
38
38
}
39
39
void TearDown () override {
40
40
SysmanDeviceFixture::TearDown ();
@@ -43,38 +43,48 @@ struct SysmanPmuFixture : public SysmanDeviceFixture {
43
43
}
44
44
};
45
45
46
- TEST_F (SysmanPmuFixture, GivenValidPmuHandleWhenCallingPmuReadAndReadCountersFunctionReturnsSuccessThenSuccessIsReturned) {
47
- uint64_t data[2 ];
48
- int validFd = 10 ;
49
- EXPECT_EQ (0 , pLinuxSysmanImp->pPmuInterface ->pmuRead (validFd, data, sizeof (data)));
50
- EXPECT_EQ (mockEventVal, data[0 ]);
51
- EXPECT_EQ (mockTimeStamp, data[1 ]);
46
+ inline static ssize_t openReadReturnSuccess (int fd, void *data, size_t sizeOfdata) {
47
+ uint64_t dataVal[2 ] = {mockEventVal, mockTimeStamp};
48
+ memcpy_s (data, sizeOfdata, dataVal, sizeOfdata);
49
+ return sizeOfdata;
52
50
}
53
51
54
- TEST_F (SysmanPmuFixture, GivenValidPmuHandleWhenCallingPmuReadAndReadCountersFunctionReturnsFailureThenFailureIsReturned ) {
55
- ON_CALL (*pPmuInterface. get (), readCounters (_, _, _))
56
- . WillByDefault (:: testing::Invoke (pPmuInterface. get (), &Mock<MockPmuInterfaceImpForSysman>::mockReadCounterFailure));
57
- int validFd = 10 ;
58
- uint64_t data[ 2 ];
59
- EXPECT_EQ (- 1 , pLinuxSysmanImp-> pPmuInterface -> pmuRead (validFd, data, sizeof (data))) ;
52
+ inline static ssize_t openReadReturnFailure ( int fd, void *data, size_t sizeOfdata ) {
53
+ return - 1 ;
54
+ }
55
+
56
+ inline static long int syscallReturnSuccess ( long int sysNo, ...) noexcept {
57
+ return mockPmuFd ;
60
58
}
61
59
62
- TEST_F (SysmanPmuFixture, GivenValidPmuHandleWhenCallingReadCountersAndInvalidFdIsPassedToReadSyscallThenFailureIsReturned ) {
60
+ TEST_F (SysmanPmuFixture, GivenValidPmuHandleWhenCallingPmuReadThenSuccessIsReturned ) {
63
61
MockPmuInterfaceImpForSysman *pmuInterface = new MockPmuInterfaceImpForSysman (pLinuxSysmanImp);
62
+ pmuInterface->readFunction = openReadReturnSuccess;
64
63
uint64_t data[2 ];
65
- int invalidFd = -1 ;
66
- EXPECT_EQ (-1 , pmuInterface->readCounters (invalidFd, data, sizeof (data)));
64
+ int validFd = 10 ;
65
+ EXPECT_EQ (0 , pmuInterface->pmuRead (validFd, data, sizeof (data)));
66
+ EXPECT_EQ (mockEventVal, data[0 ]);
67
+ EXPECT_EQ (mockTimeStamp, data[1 ]);
67
68
delete pmuInterface;
68
69
}
69
70
70
- TEST_F (SysmanPmuFixture, GivenValidPmuHandleWhenCallingPerfEventOpenAndInvalidConfigIsPassedThenFailureIsReturned ) {
71
+ TEST_F (SysmanPmuFixture, GivenValidPmuHandleWhenCallingPerEventOpenThenSuccessIsReturned ) {
71
72
MockPmuInterfaceImpForSysman *pmuInterface = new MockPmuInterfaceImpForSysman (pLinuxSysmanImp);
73
+ pmuInterface->syscallFunction = syscallReturnSuccess;
72
74
struct perf_event_attr attr = {};
73
75
int cpu = 0 ;
74
- attr.type = 0 ;
75
76
attr.read_format = static_cast <uint64_t >(PERF_FORMAT_TOTAL_TIME_ENABLED);
76
- attr.config = 0 ;
77
- EXPECT_LT (pmuInterface->perfEventOpen (&attr, -1 , cpu, -1 , 0 ), 0 );
77
+ attr.config = 11 ;
78
+ EXPECT_EQ (mockPmuFd, pmuInterface->perfEventOpen (&attr, -1 , cpu, -1 , 0 ));
79
+ delete pmuInterface;
80
+ }
81
+
82
+ TEST_F (SysmanPmuFixture, GivenValidPmuHandleWhenCallingThenFailureIsReturned) {
83
+ MockPmuInterfaceImpForSysman *pmuInterface = new MockPmuInterfaceImpForSysman (pLinuxSysmanImp);
84
+ pmuInterface->readFunction = openReadReturnFailure;
85
+ int validFd = 10 ;
86
+ uint64_t data[2 ];
87
+ EXPECT_EQ (-1 , pmuInterface->pmuRead (validFd, data, sizeof (data)));
78
88
delete pmuInterface;
79
89
}
80
90
@@ -84,8 +94,6 @@ TEST_F(SysmanPmuFixture, GivenValidPmuHandleWhenCallingPmuInterfaceOpenAndPerfEv
84
94
}
85
95
86
96
TEST_F (SysmanPmuFixture, GivenValidPmuHandleWhenReadingGroupOfEventsUsingGroupFdThenSuccessIsReturned) {
87
- ON_CALL (*pPmuInterface.get (), readCounters (_, _, _))
88
- .WillByDefault (::testing::Invoke (pPmuInterface.get (), &Mock<MockPmuInterfaceImpForSysman>::mockedReadCountersForGroupSuccess));
89
97
uint64_t configForEvent1 = 10 ;
90
98
int64_t groupFd = pLinuxSysmanImp->pPmuInterface ->pmuInterfaceOpen (configForEvent1, -1 , PERF_FORMAT_TOTAL_TIME_ENABLED | PERF_FORMAT_GROUP); // To get group leader
91
99
uint64_t configForEvent2 = 15 ;
@@ -114,13 +122,12 @@ TEST_F(SysmanPmuFixture, GivenValidPmuHandleWhenCallingPmuInterfaceOpenAndPerfEv
114
122
EXPECT_EQ (-1 , pLinuxSysmanImp->pPmuInterface ->pmuInterfaceOpen (config, -1 , PERF_FORMAT_TOTAL_TIME_ENABLED));
115
123
}
116
124
117
- TEST_F (SysmanPmuFixture, GivenValidPmuHandleWhenCallingReadCountersAndInvalidFdIsPassedToReadSyscallThenErrorNoInavlidFileDescriptorIsSet ) {
125
+ TEST_F (SysmanPmuFixture, GivenValidPmuHandleWhenAndDomainErrorOccursThenDomainErrorIsReturnedBygetErrorNoFunction ) {
118
126
MockPmuInterfaceImpForSysman *pmuInterface = new MockPmuInterfaceImpForSysman (pLinuxSysmanImp);
119
- uint64_t data[2 ];
120
- int invalidFd = -1 ;
121
- EXPECT_EQ (-1 , pmuInterface->readCounters (invalidFd, data, sizeof (data)));
122
- EXPECT_EQ (EBADF, pmuInterface->getErrorNo ());
127
+ log (-1.0 ); // Domain error injected
128
+ EXPECT_EQ (EDOM, pmuInterface->getErrorNo ());
123
129
delete pmuInterface;
124
130
}
131
+
125
132
} // namespace ult
126
133
} // namespace L0
0 commit comments