Skip to content
This repository has been archived by the owner on Dec 20, 2023. It is now read-only.

Commit

Permalink
Add woble unit tests
Browse files Browse the repository at this point in the history
  • Loading branch information
yunhanw-google committed Sep 18, 2018
1 parent 94b3499 commit 04e3638
Show file tree
Hide file tree
Showing 5 changed files with 429 additions and 346 deletions.
331 changes: 0 additions & 331 deletions src/ble/WoBle.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -624,337 +624,6 @@ void WoBle::LogStateDebug() const
#endif
}

//
// Unit Testing
//

bool WoBle::UnitTest1()
{
PacketBuffer * first_packet;
SequenceNumber_t rcvd_ack;
bool did_rcv_ack;
bool rc = true;

Init(NULL, false);
first_packet = PacketBuffer::New(5);

if (first_packet->AvailableDataLength() < 5)
{
PacketBuffer::Free(first_packet);
return false;
}

first_packet->SetDataLength(5, NULL);
uint8_t * data = first_packet->Start();

if (data == NULL)
{
PacketBuffer::Free(first_packet);
return false;
}

data[0] = 0x05;
data[1] = 1;
data[2] = 1;
data[3] = 0;
data[4] = 0xff; // payload

if (!HandleCharacteristicReceived(first_packet, rcvd_ack, did_rcv_ack))
rc = false;

if (mRxState != kState_Complete)
rc = false;

Init(NULL, false);
PacketBuffer::Free(first_packet);

return rc;
}

bool WoBle::UnitTest2()
{
PacketBuffer * first_packet;
PacketBuffer * second_packet;
SequenceNumber_t rcvd_ack;
bool did_rcv_ack;
bool rc = true;

Init(NULL, false);
first_packet = PacketBuffer::New(10);
first_packet->SetDataLength(5, NULL);
uint8_t * data = first_packet->Start();

if (data == NULL)
{
PacketBuffer::Free(first_packet);
return false;
}

data[0] = kHeaderFlag_StartMessage;
data[1] = 1;
data[2] = 2;
data[3] = 0;
data[4] = 0xfe; // payload

if (!HandleCharacteristicReceived(first_packet, rcvd_ack, did_rcv_ack))
{
PacketBuffer::Free(first_packet);
return false;
}

if (mRxState != kState_InProgress)
{
PacketBuffer::Free(first_packet);
rc = false;
}

second_packet = PacketBuffer::New(3);
second_packet->SetDataLength(3, NULL);
data = second_packet->Start();

if (data == NULL)
{
PacketBuffer::Free(first_packet);
PacketBuffer::Free(second_packet);
return false;
}

data[0] = kHeaderFlag_EndMessage;
data[1] = 2;
data[4] = 0xff; // payload

if (!HandleCharacteristicReceived(second_packet, rcvd_ack, did_rcv_ack))
{
rc = false;
}

if (mRxState != kState_Complete)
{
rc = false;
}

Init(NULL, false);
PacketBuffer::Free(first_packet);

return rc;
}

bool WoBle::UnitTest3()
{
PacketBuffer * first_packet;
PacketBuffer * second_packet;
PacketBuffer * last_packet;
SequenceNumber_t rcvd_ack;
bool did_rcv_ack;
bool rc = true;

Init(NULL, false);
first_packet = PacketBuffer::New(10);
first_packet->SetDataLength(5, NULL);
uint8_t * data = first_packet->Start();
if (data == NULL)
{
PacketBuffer::Free(first_packet);
return false;
}
data[0] = kHeaderFlag_StartMessage;
data[1] = 1;
data[2] = 3;
data[3] = 0;
data[4] = 0xfd; // payload

if (!HandleCharacteristicReceived(first_packet, rcvd_ack, did_rcv_ack))
{
PacketBuffer::Free(first_packet);
return false;
}
if (mRxState != kState_InProgress)
{
PacketBuffer::Free(first_packet);
rc = false;
}

second_packet = PacketBuffer::New(3);
second_packet->SetDataLength(3, NULL);
data = second_packet->Start();
if (data == NULL)
{
PacketBuffer::Free(first_packet);
PacketBuffer::Free(second_packet);
return false;
}
data[0] = kHeaderFlag_ContinueMessage;
data[1] = 2;
data[4] = 0xfe; // payload

if (!HandleCharacteristicReceived(second_packet, rcvd_ack, did_rcv_ack))
{
PacketBuffer::Free(first_packet);
PacketBuffer::Free(second_packet);
return false;
}

if (mRxState != kState_InProgress)
{
PacketBuffer::Free(first_packet);
PacketBuffer::Free(second_packet);
return false;
}

last_packet = PacketBuffer::New(3);
last_packet->SetDataLength(3, NULL);
data = last_packet->Start();
if (data == NULL)
{
PacketBuffer::Free(first_packet);
PacketBuffer::Free(last_packet);
return false;
}
data[0] = kHeaderFlag_EndMessage;
data[1] = 3;
data[4] = 0xff; // payload

if (!HandleCharacteristicReceived(last_packet, rcvd_ack, did_rcv_ack))
{
rc = false;
}

if (mRxState != kState_Complete)
{
rc = false;
}

Init(NULL, false);
PacketBuffer::Free(first_packet);
return rc;
}

bool WoBle::UnitTest4()
{
PacketBuffer * first_packet;
bool rc = true;

Init(NULL, false);
first_packet = PacketBuffer::New(10);
first_packet->SetDataLength(1, NULL);
uint8_t * data = first_packet->Start();
if (data == NULL)
{
PacketBuffer::Free(first_packet);
return false;
}
data[0] = 0xff; // payload

if ((!HandleCharacteristicSend(first_packet, false)) || (first_packet->DataLength() != 5) || (mTxState != kState_Complete))
{
PacketBuffer::Free(first_packet);
return false;
}

Init(NULL, false);
PacketBuffer::Free(first_packet);
return rc;
}

bool WoBle::UnitTest5()
{
PacketBuffer * first_packet;

Init(NULL, false);
first_packet = PacketBuffer::New(140);
first_packet->SetDataLength(140, NULL);
uint8_t * data = first_packet->Start();
if (data == NULL)
{
PacketBuffer::Free(first_packet);
return false;
}
for (int i = 0; i < 140; i++)
{
data[i] = i; // payload
}

if (!HandleCharacteristicSend(first_packet, false) || (first_packet->DataLength() != 128) || (mTxState != kState_InProgress))
{
PacketBuffer::Free(first_packet);
return false;
}

if ((!HandleCharacteristicSend(NULL, false)) || (mTxState != kState_Complete) || (first_packet->DataLength() != 18))
{
PacketBuffer::Free(first_packet);
return false;
}

Init(NULL, false);
PacketBuffer::Free(first_packet);
return true;
}

// Send 300-byte payload.
// First packet: 4 byte header + 124 byte payload
// Second packet: 2 byte header + 126 byte payload
// Third packet: 2 byte header + 50 byte payload
bool WoBle::UnitTest6()
{
PacketBuffer * first_packet;
bool rc = true;

Init(NULL, false);
first_packet = PacketBuffer::New(300);
first_packet->SetDataLength(300, NULL);
uint8_t * data = first_packet->Start();
if (data == NULL)
{
PacketBuffer::Free(first_packet);
return false;
}
for (int i = 0; i < 300; i++)
{
data[i] = i; // payload
}

if (!HandleCharacteristicSend(first_packet, false) || (first_packet->DataLength() != 128) || (mTxState != kState_InProgress))
{
PacketBuffer::Free(first_packet);
return false;
}

if (!HandleCharacteristicSend(NULL, false) || (mTxState != kState_InProgress) || (first_packet->DataLength() != 128))
{
PacketBuffer::Free(first_packet);
return false;
}

if (!HandleCharacteristicSend(NULL, false) || (mTxState != kState_Complete) || (first_packet->DataLength() != 52))
{
PacketBuffer::Free(first_packet);
return false;
}

Init(NULL, false);
PacketBuffer::Free(first_packet);
return rc;
}

bool WoBle::UnitTest()
{
bool rc;

rc = UnitTest1();
rc = rc && UnitTest2();
rc = rc && UnitTest3();
rc = rc && UnitTest4();
rc = rc && UnitTest5();
rc = rc && UnitTest6();
if (!rc)
{
WeaveDie();
}

return rc;
}

} /* namespace Ble */
} /* namespace nl */

Expand Down
12 changes: 2 additions & 10 deletions src/ble/WoBle.h
Original file line number Diff line number Diff line change
Expand Up @@ -91,8 +91,8 @@ class WoBle

public:
// Public functions:
WoBle(void);
~WoBle(void);
WoBle(void) { };
~WoBle(void) { };

BLE_ERROR Init(void * an_app_state, bool expect_first_ack);

Expand Down Expand Up @@ -151,14 +151,6 @@ class WoBle
void LogState(void) const;
void LogStateDebug(void) const;

bool UnitTest(void);
bool UnitTest1(void);
bool UnitTest2(void);
bool UnitTest3(void);
bool UnitTest4(void);
bool UnitTest5(void);
bool UnitTest6(void);

private:
// Private data members:
#if WEAVE_ENABLE_WOBLE_TEST
Expand Down
5 changes: 5 additions & 0 deletions src/test-apps/Makefile.am
Original file line number Diff line number Diff line change
Expand Up @@ -328,6 +328,7 @@ check_PROGRAMS = \
TestErrorStr \
TestStatusReportStr \
TestThermostatStatus \
TestWoble \
TestPairingCodeUtils \
TestResourceIdentifier \
$(NULL)
Expand Down Expand Up @@ -435,6 +436,7 @@ local_test_programs = \
TestErrorStr \
TestStatusReportStr \
TestThermostatStatus \
TestWoble \
TestPairingCodeUtils \
TestResourceIdentifier \
$(NULL)
Expand Down Expand Up @@ -1454,6 +1456,9 @@ TestStatusReportStr_LDADD = $(COMMON_LDADD)
TestThermostatStatus_SOURCES = TestThermostatStatus.cpp
TestThermostatStatus_LDADD = $(COMMON_LDADD)

TestWoble_SOURCES = TestWoble.cpp
TestWoble_LDADD = libWeaveTestCommon.a $(COMMON_LDADD)

TestPairingCodeUtils_SOURCES = TestPairingCodeUtils.cpp
TestPairingCodeUtils_LDADD = $(COMMON_LDADD)

Expand Down
Loading

0 comments on commit 04e3638

Please sign in to comment.