TEST(BLEReturnSysExRecoveryBuffer, ReturnTwice) { using testing::ElementsAreArray; using testing::_; using testing::Args; Fixture f; static uint8_t longSysEx1[9] = { 0x80, 0x80, 0xf0, 0x47, 0x7f, 0x15, 0x5c, 0x00, 0x01 }; static uint8_t longSysEx2[9] = { 0x80, 0x21, 0x46, 0x47, 0x7f, 0x15, 0x5c, 0xf7, 0xf7 }; static uint8_t sysExFalseResult[13] = { 0xf0, 0x47, 0x7f, 0x15, 0x5c, 0x00, 0x01, 0x21, 0x46, 0x47, 0x7f, 0x15, 0xf7 }; static uint8_t sysExRecoveryResult[14] = { 0xf0, 0x47, 0x7f, 0x15, 0x5c, 0x00, 0x01, 0x21, 0x46, 0x47, 0x7f, 0x15, 0x5c, 0xf7 }; EXPECT_CALL(f.getMock(), SendSysEx(_,_,0)).With(Args<0,1>( ElementsAreArray(sysExFalseResult))).Times(1); EXPECT_CALL(f.getMock(), SendSysEx(_,_,0)).With(Args<0,1>( ElementsAreArray(sysExRecoveryResult))).Times(1); f.parseDataArray(longSysEx1, 9); f.parseDataArray(longSysEx2, 9); }
TEST_F(ByteStuffer, receives_two_valid_frames) { uint8_t expected1[] = {5, 0}; uint8_t expected2[] = {3}; EXPECT_CALL(*this, validator_recv_frame(_, _, _)) .With(Args<1, 2>(ElementsAreArray(expected1))); EXPECT_CALL(*this, validator_recv_frame(_, _, _)) .With(Args<1, 2>(ElementsAreArray(expected2))); byte_stuffer_recv_byte(1, 2); byte_stuffer_recv_byte(1, 5); byte_stuffer_recv_byte(1, 1); byte_stuffer_recv_byte(1, 0); byte_stuffer_recv_byte(1, 2); byte_stuffer_recv_byte(1, 3); byte_stuffer_recv_byte(1, 0); }
TEST(EventLogListBuilder, IntThenString) { EventLogListBuilder builder; const uint8_t EXPECTED_LOG[] = { EVENT_TYPE_LIST, 2, // Number of items in the list. EVENT_TYPE_INT, 42, 0, 0, 0, // 4 byte integer value. EVENT_TYPE_STRING, 5, 0, 0, 0, // 4 byte length of the string. 'D', 'r', 'o', 'i', 'd', }; builder.Append(42); builder.Append("Droid"); std::unique_ptr<uint8_t[]> log; size_t size; builder.Release(&log, &size); EXPECT_EQ(17U, size); uint8_t* log_data = log.get(); EXPECT_THAT(std::vector<uint8_t>(log_data, log_data + size), ElementsAreArray(EXPECTED_LOG)); }
TEST_F(FrameValidator, sends_five_bytes_with_correct_crc) { uint8_t original[] = {1, 2, 3, 4, 5, 0, 0, 0, 0}; uint8_t expected[] = {1, 2, 3, 4, 5, 0xF4, 0x99, 0x0B, 0x47}; EXPECT_CALL(*this, byte_stuffer_send_frame(_, _, _)) .With(Args<1, 2>(ElementsAreArray(expected))); validator_send_frame(0, original, 5); }
TEST_F(ByteStuffer, receives_two_long_frames_and_some_more) { uint8_t expected[515]; int i; int j; for (j=0;j<2;j++) { for (i=0;i<254;i++) { expected[i+254*j] = i + 1; } } for (i=0;i<7;i++) { expected[254*2+i] = i + 1; } EXPECT_CALL(*this, validator_recv_frame(_, _, _)) .With(Args<1, 2>(ElementsAreArray(expected))); byte_stuffer_recv_byte(0, 0xFF); for (i=0;i<254;i++) { byte_stuffer_recv_byte(0, i+1); } byte_stuffer_recv_byte(0, 0xFF); for (i=0;i<254;i++) { byte_stuffer_recv_byte(0, i+1); } byte_stuffer_recv_byte(0, 8); byte_stuffer_recv_byte(0, 1); byte_stuffer_recv_byte(0, 2); byte_stuffer_recv_byte(0, 3); byte_stuffer_recv_byte(0, 4); byte_stuffer_recv_byte(0, 5); byte_stuffer_recv_byte(0, 6); byte_stuffer_recv_byte(0, 7); byte_stuffer_recv_byte(0, 0); }
TEST_F(FrameValidator, sends_one_byte_with_correct_crc) { uint8_t original[] = {0x44, 0, 0, 0, 0}; uint8_t expected[] = {0x44, 0x04, 0x6A, 0xB3, 0xA3}; EXPECT_CALL(*this, byte_stuffer_send_frame(_, _, _)) .With(Args<1, 2>(ElementsAreArray(expected))); validator_send_frame(0, original, 1); }
TEST_F(ByteStuffer, receives_single_byte_valid_frame) { uint8_t expected[] = {0x37}; EXPECT_CALL(*this, validator_recv_frame(_, _, _)) .With(Args<1, 2>(ElementsAreArray(expected))); byte_stuffer_recv_byte(0, 2); byte_stuffer_recv_byte(0, 0x37); byte_stuffer_recv_byte(0, 0); }
TEST(BLEReturnRunningMIDIData, TwoNotes) { using testing::ElementsAreArray; using testing::_; Fixture f; static uint8_t testdata[8] = { 0x80, 0x80, 0x90, 0x45, 0x45, 0x80, 0x22, 0x45 }; static uint8_t midiResult1[3] = { 0x90, 0x45, 0x45 }; static uint8_t midiResult2[3] = { 0x90, 0x22, 0x45 }; EXPECT_CALL(f.getMock(), SendData(ElementsAreArray(midiResult1),0)); EXPECT_CALL(f.getMock(), SendData(ElementsAreArray(midiResult2),0)); f.parseDataArray(testdata, 8); }
TEST_F(ByteStuffer, sends_and_receives_full_roundtrip_small_packet_with_zeros) { uint8_t original_data[] = { 1, 0, 3, 0, 0, 9}; byte_stuffer_send_frame(1, original_data, sizeof(original_data)); EXPECT_CALL(*this, validator_recv_frame(_, _, _)) .With(Args<1, 2>(ElementsAreArray(original_data))); int i; for(auto& d : sent_data) { byte_stuffer_recv_byte(1, d); } }
TEST_F(ByteStuffer, receives_an_all_zeros_frame_that_is_maximum_size) { uint8_t expected[MAX_FRAME_SIZE] = {}; EXPECT_CALL(*this, validator_recv_frame(_, _, _)) .With(Args<1, 2>(ElementsAreArray(expected))); int i; byte_stuffer_recv_byte(0, 1); for(i=0;i<MAX_FRAME_SIZE;i++) { byte_stuffer_recv_byte(0, 1); } byte_stuffer_recv_byte(0, 0); }
TEST_F(ByteStuffer, receives_valid_frame_with_zeroes) { uint8_t expected[] = {5, 0, 3, 0}; EXPECT_CALL(*this, validator_recv_frame(_, _, _)) .With(Args<1, 2>(ElementsAreArray(expected))); byte_stuffer_recv_byte(0, 2); byte_stuffer_recv_byte(0, 5); byte_stuffer_recv_byte(0, 2); byte_stuffer_recv_byte(0, 3); byte_stuffer_recv_byte(0, 1); byte_stuffer_recv_byte(0, 0); }
TEST_F(ByteStuffer, receives_valid_frame_after_unexpected_zero) { uint8_t expected[] = {5, 7}; EXPECT_CALL(*this, validator_recv_frame(_, _, _)) .With(Args<1, 2>(ElementsAreArray(expected))); byte_stuffer_recv_byte(1, 3); byte_stuffer_recv_byte(1, 1); byte_stuffer_recv_byte(1, 0); byte_stuffer_recv_byte(1, 3); byte_stuffer_recv_byte(1, 5); byte_stuffer_recv_byte(1, 7); byte_stuffer_recv_byte(1, 0); }
TEST_F(ByteStuffer, receives_valid_frame_after_unexpected_non_zero) { uint8_t expected[] = {5, 7}; EXPECT_CALL(*this, validator_recv_frame(_, _, _)) .With(Args<1, 2>(ElementsAreArray(expected))); byte_stuffer_recv_byte(0, 2); byte_stuffer_recv_byte(0, 9); byte_stuffer_recv_byte(0, 4); // This should have been zero byte_stuffer_recv_byte(0, 0); byte_stuffer_recv_byte(0, 3); byte_stuffer_recv_byte(0, 5); byte_stuffer_recv_byte(0, 7); byte_stuffer_recv_byte(0, 0); }
TEST_F(ByteStuffer, received_frame_is_aborted_when_its_too_long) { uint8_t expected[1] = {1}; EXPECT_CALL(*this, validator_recv_frame(_, _, _)) .With(Args<1, 2>(ElementsAreArray(expected))); int i; byte_stuffer_recv_byte(0, 1); for(i=0;i<MAX_FRAME_SIZE;i++) { byte_stuffer_recv_byte(0, 1); } byte_stuffer_recv_byte(0, 2); byte_stuffer_recv_byte(0, 1); byte_stuffer_recv_byte(0, 0); }
TEST(BLEReturnMIDIData, SingleNote) { using testing::ElementsAreArray; using testing::_; Fixture f; static uint8_t testdata[5] = { 0x80, 0x80, 0x90, 0x80, 0x45 }; static uint8_t midiResult[3] = { 0x90, 0x80, 0x45 }; EXPECT_CALL(f.getMock(), SendData(ElementsAreArray(midiResult),0)); f.parseDataArray(testdata, 5); }
TEST_F(ByteStuffer, sends_and_receives_full_roundtrip_254_bytes) { uint8_t original_data[254]; int i; for(i=0;i<254;i++) { original_data[i] = i + 1; } byte_stuffer_send_frame(0, original_data, sizeof(original_data)); EXPECT_CALL(*this, validator_recv_frame(_, _, _)) .With(Args<1, 2>(ElementsAreArray(original_data))); for(auto& d : sent_data) { byte_stuffer_recv_byte(1, d); } }
TEST(BLEReturnSysExData, SingleData) { using testing::ElementsAreArray; using testing::_; using testing::Args; Fixture f; static uint8_t testdata[8] = { 0x80, 0x80, 0xf0, 0x90, 0x80, 0x45, 0x88, 0xf7}; static uint8_t sysExResult[5] = { 0xf0, 0x90, 0x80, 0x45, 0xf7 }; EXPECT_CALL(f.getMock(), SendSysEx(_,_,0)).With(Args<0,1>(ElementsAreArray(sysExResult))); f.parseDataArray(testdata, 8); }
TEST_F(ByteStuffer, receives_a_valid_frame_with_over254_non_zeroes_and_then_end_of_frame) { uint8_t expected[254]; int i; for (i=0;i<254;i++) { expected[i] = i + 1; } EXPECT_CALL(*this, validator_recv_frame(_, _, _)) .With(Args<1, 2>(ElementsAreArray(expected))); byte_stuffer_recv_byte(0, 0xFF); for (i=0;i<254;i++) { byte_stuffer_recv_byte(0, i+1); } byte_stuffer_recv_byte(0, 0); }
TEST_F(ByteStuffer, sends_frame_with_254_non_zeroes) { uint8_t data[254]; int i; for(i=0;i<254;i++) { data[i] = i + 1; } byte_stuffer_send_frame(0, data, 254); uint8_t expected[256]; expected[0] = 0xFF; for(i=1;i<255;i++) { expected[i] = i; } expected[255] = 0; EXPECT_THAT(sent_data, ElementsAreArray(expected)); }
TEST(EventLogListBuilder, Empty) { EventLogListBuilder builder; const uint8_t EXPECTED_LOG[] = { EVENT_TYPE_LIST, 0, // Number of items in the list. }; std::unique_ptr<uint8_t[]> log; size_t size; builder.Release(&log, &size); EXPECT_EQ(2U, size); uint8_t* log_data = log.get(); EXPECT_THAT(std::vector<uint8_t>(log_data, log_data + size), ElementsAreArray(EXPECTED_LOG)); }
TEST(EventLogListBuilder, SingleInt) { EventLogListBuilder builder; const uint8_t EXPECTED_LOG[] = { EVENT_TYPE_LIST, 1, // Number of items in the list. EVENT_TYPE_INT, 42, 0, 0, 0, // 4 byte integer value. }; builder.Append(42); std::unique_ptr<uint8_t[]> log; size_t size; builder.Release(&log, &size); EXPECT_EQ(7U, size); uint8_t* log_data = log.get(); EXPECT_THAT(std::vector<uint8_t>(log_data, log_data + size), ElementsAreArray(EXPECTED_LOG)); }
TEST(BLEReturnLongSysExData, MultipleData) { using testing::ElementsAreArray; using testing::_; using testing::Args; Fixture f; static uint8_t longSysEx1[9] = { 0x80, 0x80, 0xf0, 0x47, 0x7f, 0x15, 0x5c, 0x00, 0x01 }; static uint8_t longSysEx2[9] = { 0x80, 0x21, 0x46, 0x47, 0x7f, 0x15, 0x5c, 0x80, 0xf7 }; static uint8_t sysExResult[14] = { 0xf0, 0x47, 0x7f, 0x15, 0x5c, 0x00, 0x01, 0x21, 0x46, 0x47, 0x7f, 0x15, 0x5c, 0xf7 }; EXPECT_CALL(f.getMock(), SendSysEx(_,_,0)).With(Args<0,1>(ElementsAreArray(sysExResult))); f.parseDataArray(longSysEx1, 9); f.parseDataArray(longSysEx2, 9); }
TEST_F(FrameValidator, validates_one_byte_frame_with_correct_crc) { uint8_t data[] = {0x44, 0x04, 0x6A, 0xB3, 0xA3}; EXPECT_CALL(*this, route_incoming_frame(_, _, _)) .With(Args<1, 2>(ElementsAreArray(data, 1))); validator_recv_frame(0, data, 5); }
TEST_F(FrameValidator, validates_four_byte_frame_with_correct_crc) { uint8_t data[] = {0x44, 0x10, 0xFF, 0x00, 0x74, 0x4E, 0x30, 0xBA}; EXPECT_CALL(*this, route_incoming_frame(_, _, _)) .With(Args<1, 2>(ElementsAreArray(data, 4))); validator_recv_frame(1, data, 8); }
TEST_F(FrameValidator, validates_five_byte_frame_with_correct_crc) { uint8_t data[] = {1, 2, 3, 4, 5, 0xF4, 0x99, 0x0B, 0x47}; EXPECT_CALL(*this, route_incoming_frame(_, _, _)) .With(Args<1, 2>(ElementsAreArray(data, 5))); validator_recv_frame(0, data, 9); }
TEST_F(ByteStuffer, sends_three_byte_frame_with_all_zeroes) { uint8_t data[] = {0, 0, 0}; byte_stuffer_send_frame(0, data, 3); uint8_t expected[] = {1, 1, 1, 1, 0}; EXPECT_THAT(sent_data, ElementsAreArray(expected)); }
TEST_F(ByteStuffer, sends_three_byte_frame_data_in_the_middle) { uint8_t data[] = {0, 0x55, 0}; byte_stuffer_send_frame(0, data, 3); uint8_t expected[] = {1, 2, 0x55, 1, 0}; EXPECT_THAT(sent_data, ElementsAreArray(expected)); }
TEST_F(ByteStuffer, sends_two_byte_frame_starting_with_non_zero) { uint8_t data[] = {9, 0}; byte_stuffer_send_frame(1, data, 2); uint8_t expected[] = {2, 9, 1, 0}; EXPECT_THAT(sent_data, ElementsAreArray(expected)); }
TEST_F(ByteStuffer, sends_two_byte_frame) { uint8_t data[] = {5, 0x77}; byte_stuffer_send_frame(0, data, 2); uint8_t expected[] = {3, 5, 0x77, 0}; EXPECT_THAT(sent_data, ElementsAreArray(expected)); }
TEST_F(ByteStuffer, send_one_byte_frame) { uint8_t data[] = {5}; byte_stuffer_send_frame(1, data, 1); uint8_t expected[] = {2, 5, 0}; EXPECT_THAT(sent_data, ElementsAreArray(expected)); }