Hotwheels-Cluster 1.2
Creation of Cluster APP for SEA:ME project.
 
Loading...
Searching...
No Matches
test_SPIController.cpp
Go to the documentation of this file.
1
14
15#include "MockSysCalls.hpp"
16#include "SPIController.hpp"
17#include <gtest/gtest.h>
18#include <linux/spi/spidev.h>
19
20using ::testing::_;
21using ::testing::Return;
22
30class SPIControllerTest : public ::testing::Test {
31protected:
34
41 void SetUp() override {
43 }
44
51 void TearDown() override { delete spiController; }
52};
53
61TEST_F(SPIControllerTest, OpenDeviceSuccess) {
62 EXPECT_CALL(MockSysCalls::instance(),
63 open(testing::StrEq("/dev/spidev0.0"), O_RDWR))
64 .WillOnce(Return(3));
65
66 ASSERT_NO_THROW(spiController->openDevice("/dev/spidev0.0"));
67}
68
79TEST_F(SPIControllerTest, OpenDeviceFailure) {
80 EXPECT_CALL(MockSysCalls::instance(),
81 open(testing::StrEq("/dev/spidev0.0"), O_RDWR))
82 .WillOnce(Return(-1)); // Simulate failure
83
84 ASSERT_THROW(spiController->openDevice("/dev/spidev0.0"), std::runtime_error);
85}
86
97TEST_F(SPIControllerTest, ConfigureSPIValidParameters) {
98 EXPECT_CALL(MockSysCalls::instance(), open(_, _)).WillOnce(Return(3));
99 spiController->openDevice("/dev/spidev0.0");
100
101 EXPECT_CALL(MockSysCalls::instance(), ioctl(_, SPI_IOC_WR_MODE))
102 .WillOnce(Return(0));
103 EXPECT_CALL(MockSysCalls::instance(), ioctl(_, SPI_IOC_WR_BITS_PER_WORD))
104 .WillOnce(Return(0));
105 EXPECT_CALL(MockSysCalls::instance(), ioctl(_, SPI_IOC_WR_MAX_SPEED_HZ))
106 .WillOnce(Return(0));
107
108 ASSERT_NO_THROW(spiController->configure(0, 8, 500000));
109}
110
120TEST_F(SPIControllerTest, WriteByteSuccess) {
121 EXPECT_CALL(MockSysCalls::instance(), open(_, _)).WillOnce(Return(3));
122 spiController->openDevice("/dev/spidev0.0");
123
124 EXPECT_CALL(MockSysCalls::instance(), ioctl(_, SPI_IOC_MESSAGE(1)))
125 .WillOnce(Return(0));
126
127 ASSERT_NO_THROW(spiController->writeByte(0x01, 0xFF));
128}
129
139TEST_F(SPIControllerTest, ReadByteSuccess) {
140 EXPECT_CALL(MockSysCalls::instance(), open(_, _)).WillOnce(Return(3));
141 spiController->openDevice("/dev/spidev0.0");
142
143 EXPECT_CALL(MockSysCalls::instance(), ioctl(_, SPI_IOC_MESSAGE(1)))
144 .WillOnce(Return(0));
145
146 ASSERT_NO_THROW(spiController->readByte(0x01));
147}
148
158TEST_F(SPIControllerTest, SpiTransferSuccess) {
159 EXPECT_CALL(MockSysCalls::instance(), open(_, _)).WillOnce(Return(3));
160 spiController->openDevice("/dev/spidev0.0");
161
162 EXPECT_CALL(MockSysCalls::instance(), ioctl(_, SPI_IOC_MESSAGE(1)))
163 .WillOnce(Return(0));
164
165 uint8_t tx[] = {0x02, 0x01, 0xFF};
166 uint8_t rx[sizeof(tx)] = {0};
167
168 ASSERT_NO_THROW(spiController->spiTransfer(tx, rx, sizeof(tx)));
169}
170
180TEST_F(SPIControllerTest, CloseDeviceSuccess) {
181 EXPECT_CALL(MockSysCalls::instance(), open(_, _)).WillOnce(Return(3));
182 spiController->openDevice("/dev/spidev0.0");
183
184 EXPECT_CALL(MockSysCalls::instance(), close(3)).WillOnce(Return(0));
185
186 ASSERT_NO_THROW(spiController->closeDevice());
187}
File containing Mock classes to test the system calls.
int mock_ioctl(int fd, unsigned long request,...)
Mocked ioctl function.
int mock_close(int fd)
Mocked close function.
int mock_open(const char *path, int flags,...)
Mocked open function.
Definition of the SPIController class.
static MockSysCalls & instance()
Get the instance object.
Test fixture for testing the SPIController class.
void TearDown() override
Tear down the test environment.
SPIController * spiController
SPIController object.
void SetUp() override
Set up the test environment.
Class that controls the SPI communication. ISPIController.
TEST_F(SPIControllerTest, OpenDeviceSuccess)
Ensures that the device opens without throwing an exception.