@@ -31,10 +31,10 @@ struct SysmanPmuFixture : public SysmanDeviceFixture {
3131 .WillByDefault (::testing::Invoke (pFsAccess.get (), &Mock<PmuFsAccess>::readValSuccess));
3232 ON_CALL (*pPmuInterface.get (), perfEventOpen (_, _, _, _, _))
3333 .WillByDefault (::testing::Invoke (pPmuInterface.get (), &Mock<MockPmuInterfaceImpForSysman>::mockedPerfEventOpenAndSuccessReturn));
34+ ON_CALL (*pPmuInterface.get (), pmuRead (_, _, _))
35+ .WillByDefault (::testing::Invoke (pPmuInterface.get (), &Mock<MockPmuInterfaceImpForSysman>::mockedReadCountersForGroupSuccess));
3436 ON_CALL (*pPmuInterface.get (), getErrorNo ())
3537 .WillByDefault (::testing::Invoke (pPmuInterface.get (), &Mock<MockPmuInterfaceImpForSysman>::mockGetErrorNoSuccess));
36- ON_CALL (*pPmuInterface.get (), readCounters (_, _, _))
37- .WillByDefault (::testing::Invoke (pPmuInterface.get (), &Mock<MockPmuInterfaceImpForSysman>::mockReadCounterSuccess));
3838 }
3939 void TearDown () override {
4040 SysmanDeviceFixture::TearDown ();
@@ -43,38 +43,48 @@ struct SysmanPmuFixture : public SysmanDeviceFixture {
4343 }
4444};
4545
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;
5250}
5351
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 ;
6058}
6159
62- TEST_F (SysmanPmuFixture, GivenValidPmuHandleWhenCallingReadCountersAndInvalidFdIsPassedToReadSyscallThenFailureIsReturned ) {
60+ TEST_F (SysmanPmuFixture, GivenValidPmuHandleWhenCallingPmuReadThenSuccessIsReturned ) {
6361 MockPmuInterfaceImpForSysman *pmuInterface = new MockPmuInterfaceImpForSysman (pLinuxSysmanImp);
62+ pmuInterface->readFunction = openReadReturnSuccess;
6463 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 ]);
6768 delete pmuInterface;
6869}
6970
70- TEST_F (SysmanPmuFixture, GivenValidPmuHandleWhenCallingPerfEventOpenAndInvalidConfigIsPassedThenFailureIsReturned ) {
71+ TEST_F (SysmanPmuFixture, GivenValidPmuHandleWhenCallingPerEventOpenThenSuccessIsReturned ) {
7172 MockPmuInterfaceImpForSysman *pmuInterface = new MockPmuInterfaceImpForSysman (pLinuxSysmanImp);
73+ pmuInterface->syscallFunction = syscallReturnSuccess;
7274 struct perf_event_attr attr = {};
7375 int cpu = 0 ;
74- attr.type = 0 ;
7576 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)));
7888 delete pmuInterface;
7989}
8090
@@ -84,8 +94,6 @@ TEST_F(SysmanPmuFixture, GivenValidPmuHandleWhenCallingPmuInterfaceOpenAndPerfEv
8494}
8595
8696TEST_F (SysmanPmuFixture, GivenValidPmuHandleWhenReadingGroupOfEventsUsingGroupFdThenSuccessIsReturned) {
87- ON_CALL (*pPmuInterface.get (), readCounters (_, _, _))
88- .WillByDefault (::testing::Invoke (pPmuInterface.get (), &Mock<MockPmuInterfaceImpForSysman>::mockedReadCountersForGroupSuccess));
8997 uint64_t configForEvent1 = 10 ;
9098 int64_t groupFd = pLinuxSysmanImp->pPmuInterface ->pmuInterfaceOpen (configForEvent1, -1 , PERF_FORMAT_TOTAL_TIME_ENABLED | PERF_FORMAT_GROUP); // To get group leader
9199 uint64_t configForEvent2 = 15 ;
@@ -114,13 +122,12 @@ TEST_F(SysmanPmuFixture, GivenValidPmuHandleWhenCallingPmuInterfaceOpenAndPerfEv
114122 EXPECT_EQ (-1 , pLinuxSysmanImp->pPmuInterface ->pmuInterfaceOpen (config, -1 , PERF_FORMAT_TOTAL_TIME_ENABLED));
115123}
116124
117- TEST_F (SysmanPmuFixture, GivenValidPmuHandleWhenCallingReadCountersAndInvalidFdIsPassedToReadSyscallThenErrorNoInavlidFileDescriptorIsSet ) {
125+ TEST_F (SysmanPmuFixture, GivenValidPmuHandleWhenAndDomainErrorOccursThenDomainErrorIsReturnedBygetErrorNoFunction ) {
118126 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 ());
123129 delete pmuInterface;
124130}
131+
125132} // namespace ult
126133} // namespace L0
0 commit comments