| Line | Branch | Decision | Exec | Source |
|---|---|---|---|---|
| 1 | #include "pch.h" | |||
| 2 | #include "tunerstudio.h" | |||
| 3 | #include "tunerstudio_io.h" | |||
| 4 | ||||
| 5 | static uint8_t st5TestBuffer[16000]; | |||
| 6 | ||||
| 7 | class BufferTsChannel : public TsChannelBase { | |||
| 8 | public: | |||
| 9 | 1 | BufferTsChannel() : TsChannelBase("Test") { } | ||
| 10 | ||||
| 11 | 3 | void write(const uint8_t* buffer, size_t size, bool /*isLastWriteInTransaction*/) override { | ||
| 12 | 3 | memcpy(&st5TestBuffer[writeIdx], buffer, size); | ||
| 13 | 3 | writeIdx += size; | ||
| 14 | 3 | } | ||
| 15 | ||||
| 16 | ✗ | size_t readTimeout(uint8_t* buffer, size_t size, int timeout) override { | ||
| 17 | // nothing to do here | |||
| 18 | ✗ | return size; | ||
| 19 | } | |||
| 20 | ||||
| 21 | 3 | void reset() { | ||
| 22 | 3 | writeIdx = 0; | ||
| 23 | 3 | } | ||
| 24 | ||||
| 25 | size_t writeIdx = 0; | |||
| 26 | }; | |||
| 27 | ||||
| 28 | #define CODE 2 | |||
| 29 | #define PAYLOAD "123" | |||
| 30 | #define SIZE strlen(PAYLOAD) | |||
| 31 | ||||
| 32 | 3 | static void assertCrcPacket(BufferTsChannel& dut) { | ||
| 33 |
3/8✓ Branch 3 taken 3 times.
✗ Branch 7 not taken.
✓ Branch 8 taken 3 times.
✗ Branch 11 not taken.
✗ Branch 16 not taken.
✗ Branch 19 not taken.
✓ Branch 26 taken 3 times.
✗ Branch 27 not taken.
|
3 | ASSERT_EQ(dut.writeIdx, SIZE + 7); | |
| 34 | ||||
| 35 | // todo: proper uint16 comparison | |||
| 36 |
3/8✓ Branch 3 taken 3 times.
✗ Branch 7 not taken.
✓ Branch 8 taken 3 times.
✗ Branch 11 not taken.
✗ Branch 16 not taken.
✗ Branch 19 not taken.
✓ Branch 26 taken 3 times.
✗ Branch 27 not taken.
|
3 | ASSERT_EQ(st5TestBuffer[0], 0); | |
| 37 |
3/8✓ Branch 3 taken 3 times.
✗ Branch 7 not taken.
✓ Branch 8 taken 3 times.
✗ Branch 11 not taken.
✗ Branch 16 not taken.
✗ Branch 19 not taken.
✓ Branch 26 taken 3 times.
✗ Branch 27 not taken.
|
3 | ASSERT_EQ(st5TestBuffer[1], SIZE + 1); | |
| 38 | ||||
| 39 |
3/8✓ Branch 3 taken 3 times.
✗ Branch 7 not taken.
✓ Branch 8 taken 3 times.
✗ Branch 11 not taken.
✗ Branch 16 not taken.
✗ Branch 19 not taken.
✓ Branch 26 taken 3 times.
✗ Branch 27 not taken.
|
3 | ASSERT_EQ(st5TestBuffer[2], CODE); | |
| 40 | ||||
| 41 |
3/8✓ Branch 4 taken 3 times.
✗ Branch 9 not taken.
✓ Branch 10 taken 3 times.
✗ Branch 13 not taken.
✗ Branch 18 not taken.
✗ Branch 21 not taken.
✓ Branch 28 taken 3 times.
✗ Branch 29 not taken.
|
3 | ASSERT_EQ(memcmp(&st5TestBuffer[3], PAYLOAD, SIZE), 0); | |
| 42 | ||||
| 43 | ||||
| 44 | // todo: proper uint32 comparison | |||
| 45 |
3/8✓ Branch 3 taken 3 times.
✗ Branch 7 not taken.
✓ Branch 8 taken 3 times.
✗ Branch 11 not taken.
✗ Branch 16 not taken.
✗ Branch 19 not taken.
✓ Branch 26 taken 3 times.
✗ Branch 27 not taken.
|
3 | ASSERT_EQ(st5TestBuffer[6], 252); | |
| 46 |
3/8✓ Branch 3 taken 3 times.
✗ Branch 7 not taken.
✓ Branch 8 taken 3 times.
✗ Branch 11 not taken.
✗ Branch 16 not taken.
✗ Branch 19 not taken.
✓ Branch 26 taken 3 times.
✗ Branch 27 not taken.
|
3 | ASSERT_EQ(st5TestBuffer[7], 68); | |
| 47 |
3/8✓ Branch 3 taken 3 times.
✗ Branch 7 not taken.
✓ Branch 8 taken 3 times.
✗ Branch 11 not taken.
✗ Branch 16 not taken.
✗ Branch 19 not taken.
✓ Branch 26 taken 3 times.
✗ Branch 27 not taken.
|
3 | ASSERT_EQ(st5TestBuffer[8], 173); | |
| 48 |
3/8✓ Branch 3 taken 3 times.
✗ Branch 7 not taken.
✓ Branch 8 taken 3 times.
✗ Branch 11 not taken.
✗ Branch 16 not taken.
✗ Branch 19 not taken.
✓ Branch 26 taken 3 times.
✗ Branch 27 not taken.
|
3 | ASSERT_EQ(st5TestBuffer[9], 87); | |
| 49 | } | |||
| 50 | ||||
| 51 | 4 | TEST(binary, testIsTouching) { | ||
| 52 |
1/1✓ Branch 2 taken 1 time.
|
1 | EngineTestHelper eth(engine_type_e::TEST_ENGINE); | |
| 53 |
3/9✓ Branch 3 taken 1 time.
✗ Branch 8 not taken.
✓ Branch 9 taken 1 time.
✗ Branch 12 not taken.
✗ Branch 17 not taken.
✗ Branch 21 not taken.
✗ Branch 24 not taken.
✓ Branch 33 taken 1 time.
✗ Branch 34 not taken.
|
1 | ASSERT_FALSE(isTouchingArea(0, 0, offsetof(persistent_config_s, veTable), sizeof(config->veTable))); | |
| 54 |
3/9✓ Branch 3 taken 1 time.
✗ Branch 8 not taken.
✓ Branch 9 taken 1 time.
✗ Branch 12 not taken.
✗ Branch 17 not taken.
✗ Branch 21 not taken.
✗ Branch 24 not taken.
✓ Branch 33 taken 1 time.
✗ Branch 34 not taken.
|
1 | ASSERT_TRUE(isTouchingArea(offsetof(persistent_config_s, veTable), 5, offsetof(persistent_config_s, veTable), sizeof(config->veTable))); | |
| 55 | 1 | } | ||
| 56 | ||||
| 57 | 4 | TEST(binary, testWriteCrc) { | ||
| 58 |
1/1✓ Branch 2 taken 1 time.
|
1 | BufferTsChannel test; | |
| 59 | ||||
| 60 | // Let it pick which impl (small vs large) to use | |||
| 61 | 1 | test.reset(); | ||
| 62 |
1/1✓ Branch 1 taken 1 time.
|
1 | test.writeCrcPacket(CODE, (const uint8_t*)PAYLOAD, SIZE); | |
| 63 |
1/1✓ Branch 1 taken 1 time.
|
1 | assertCrcPacket(test); | |
| 64 | ||||
| 65 | // Force the large impl | |||
| 66 | 1 | test.reset(); | ||
| 67 |
1/1✓ Branch 1 taken 1 time.
|
1 | test.writeCrcPacket(CODE, (const uint8_t*)PAYLOAD, SIZE); | |
| 68 |
1/1✓ Branch 1 taken 1 time.
|
1 | assertCrcPacket(test); | |
| 69 | ||||
| 70 | // Force the small impl | |||
| 71 | 1 | test.reset(); | ||
| 72 |
1/1✓ Branch 1 taken 1 time.
|
1 | test.writeCrcPacket(CODE, (const uint8_t*)PAYLOAD, SIZE); | |
| 73 |
1/1✓ Branch 1 taken 1 time.
|
1 | assertCrcPacket(test); | |
| 74 | 1 | } | ||
| 75 | ||||
| 76 | 4 | TEST(TunerstudioCommands, writeChunkEngineConfig) { | ||
| 77 |
1/1✓ Branch 2 taken 1 time.
|
1 | EngineTestHelper eth(engine_type_e::TEST_ENGINE); | |
| 78 |
1/1✓ Branch 2 taken 1 time.
|
1 | ::testing::NiceMock<MockTsChannel> channel; | |
| 79 | ||||
| 80 | 1 | uint8_t* configBytes = reinterpret_cast<uint8_t*>(config); | ||
| 81 | ||||
| 82 | // Contains zero before the write | |||
| 83 | 1 | configBytes[100] = 0; | ||
| 84 |
2/6✓ Branch 3 taken 1 time.
✗ Branch 7 not taken.
✓ Branch 8 taken 1 time.
✗ Branch 11 not taken.
✗ Branch 16 not taken.
✗ Branch 19 not taken.
|
1 | EXPECT_EQ(configBytes[100], 0); | |
| 85 | ||||
| 86 | // two step - writes to the engineConfiguration section require a burn | |||
| 87 | 1 | uint8_t val = 50; | ||
| 88 | 1 | TunerStudio instance; | ||
| 89 |
1/1✓ Branch 1 taken 1 time.
|
1 | instance.handleWriteChunkCommand(&channel, 0, 100, 1, &val); | |
| 90 | ||||
| 91 |
2/6✓ Branch 3 taken 1 time.
✗ Branch 7 not taken.
✓ Branch 8 taken 1 time.
✗ Branch 11 not taken.
✗ Branch 16 not taken.
✗ Branch 19 not taken.
|
1 | EXPECT_EQ(configBytes[100], 50); | |
| 92 | 2 | } | ||
| 93 |