From 3c4972c2d3fc777a09f4a18ebb1b8091abee31e6 Mon Sep 17 00:00:00 2001 From: Paolo Calao Date: Tue, 3 Nov 2020 11:37:01 +0100 Subject: [PATCH 1/4] Change advertising raw data setting If a BLEAdvertisingData packet has the raw data parameter set, all the other parameters are ignored when encoding the actual data packet. This means that the raw data parameter can be as long as the maximum length for an advertising packet (MAX_AD_DATA_LENGTH), that is 31 bytes as per BLE standard. During the setting of the raw data parameter: if the passed raw data length is larger than this maximum value, then the raw data is not set and the function returns false. --- src/BLEAdvertisingData.cpp | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/BLEAdvertisingData.cpp b/src/BLEAdvertisingData.cpp index 50063913..d528bdfa 100644 --- a/src/BLEAdvertisingData.cpp +++ b/src/BLEAdvertisingData.cpp @@ -186,7 +186,7 @@ bool BLEAdvertisingData::setLocalName(const char *localName) bool BLEAdvertisingData::setRawData(const uint8_t* data, int length) { if (length > MAX_AD_DATA_LENGTH) { - length = MAX_AD_DATA_LENGTH; + return false; } _rawData = data; _rawDataLength = length; @@ -195,11 +195,11 @@ bool BLEAdvertisingData::setRawData(const uint8_t* data, int length) bool BLEAdvertisingData::setRawData(const BLEAdvertisingRawData& rawData) { + if (rawData.length > MAX_AD_DATA_LENGTH) { + return false; + } _rawData = rawData.data; _rawDataLength = rawData.length; - if (_rawDataLength > MAX_AD_DATA_LENGTH) { - _rawDataLength = MAX_AD_DATA_LENGTH; - } return true; } From 6080fde0d34c06e39cf9b332505b37406e48e20b Mon Sep 17 00:00:00 2001 From: Paolo Calao Date: Mon, 2 Nov 2020 16:59:23 +0100 Subject: [PATCH 2/4] [WIP] Add unit test workflow based on https://github.com/arduino/cpp-test-action/pull/2 --- .github/workflows/unit-tests.yml | 45 ++++++++++++++++++++++++++++++++ 1 file changed, 45 insertions(+) create mode 100644 .github/workflows/unit-tests.yml diff --git a/.github/workflows/unit-tests.yml b/.github/workflows/unit-tests.yml new file mode 100644 index 00000000..b889c771 --- /dev/null +++ b/.github/workflows/unit-tests.yml @@ -0,0 +1,45 @@ +name: Unit Tests + +on: + pull_request: + paths: + - ".github/workflows/unit-tests.yml" + - 'extras/test/**' + - 'src/**' + + push: + paths: + - ".github/workflows/unit-tests.yml" + - 'extras/test/**' + - 'src/**' + +jobs: + test: + name: Run unit tests + runs-on: ubuntu-latest + + env: + COVERAGE_DATA_PATH: extras/coverage-data/coverage.info + + steps: + - name: Checkout + uses: actions/checkout@v2 + + - uses: arduino/cpp-test-action@main + with: + runtime-paths: | + - extras/test/build/bin/TEST_TARGET_UUID + - extras/test/build/bin/TEST_TARGET_DISC_DEVICE + - extras/test/build/bin/TEST_TARGET_ADVERTISING_DATA + coverage-exclude-paths: | + - '*/extras/test/*' + - '/usr/*' + coverage-data-path: ${{ env.COVERAGE_DATA_PATH }} + + - name: Upload coverage report to Codecov + uses: codecov/codecov-action@v1 + with: + file: "${{ env.COVERAGE_DATA_PATH }}" + fail_ci_if_error: true + + From 71115a61a07f6b41dd7ddddfd89743027eeff0d1 Mon Sep 17 00:00:00 2001 From: Paolo Calao Date: Tue, 3 Nov 2020 11:35:54 +0100 Subject: [PATCH 3/4] [CI] Fix uninitialized checked variable --- extras/test/src/test_advertising_data/test_advertising_data.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/extras/test/src/test_advertising_data/test_advertising_data.cpp b/extras/test/src/test_advertising_data/test_advertising_data.cpp index 67fa1d25..005ab51d 100644 --- a/extras/test/src/test_advertising_data/test_advertising_data.cpp +++ b/extras/test/src/test_advertising_data/test_advertising_data.cpp @@ -142,7 +142,7 @@ TEST_CASE("BLE test raw data", "[ArduinoBLE::BLEAdvertisingData]") uint8_t data[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32 }; - advData.setRawData(data, sizeof(data)); + retVal = advData.setRawData(data, sizeof(data)); REQUIRE(!retVal); advData.clear(); } From e620d4cd42ccf09250d5fa5a4fd17fabd90a778b Mon Sep 17 00:00:00 2001 From: Paolo Calao Date: Wed, 11 Nov 2020 15:47:13 +0100 Subject: [PATCH 4/4] [CI] Improve unit tests - improve test failures readability - add const qualifiers to golden data for improving safety --- .../test_advertising_data.cpp | 58 ++++++++----- .../test_advertising_data/test_local_name.cpp | 43 ++++++---- .../test_manufacturer.cpp | 81 ++++++++++++------- .../test_advertising_data/test_service.cpp | 55 ++++++++----- extras/test/src/test_uuid/test_uuid.cpp | 2 +- 5 files changed, 157 insertions(+), 82 deletions(-) diff --git a/extras/test/src/test_advertising_data/test_advertising_data.cpp b/extras/test/src/test_advertising_data/test_advertising_data.cpp index 005ab51d..5c4902d8 100644 --- a/extras/test/src/test_advertising_data/test_advertising_data.cpp +++ b/extras/test/src/test_advertising_data/test_advertising_data.cpp @@ -30,8 +30,8 @@ TEST_CASE("Test flags override", "[ArduinoBLE::BLEAdvertisingData]") // Mocking advertisement packet BLEAdvertisingData advData; // Expected results - uint8_t defaultData[] = {0x02, BLEFieldFlags, 0x06}; - uint8_t goldenFlags[] = {0x02, 0x01, BLEFlagsBREDRNotSupported}; + const uint8_t defaultData[] = {0x02, BLEFieldFlags, 0x06}; + const uint8_t goldenFlags[] = {0x02, 0x01, BLEFlagsBREDRNotSupported}; WHEN("Default options for flags") { @@ -74,9 +74,9 @@ TEST_CASE("Set default flags in an already full advertising data packet", "[Ardu const uint8_t manufacturerData[24] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23}; - uint8_t defaultFlags[3] = {0x02, 0x01, 0x06}; + const uint8_t defaultFlags[3] = {0x02, 0x01, 0x06}; - uint8_t goldenData[31] = { + const uint8_t goldenData[31] = { (sizeof(manufacturerData) + 1), BLEFieldManufacturerData, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, ((uint8_t)(strlen(name) + 1)), BLEFieldCompleteLocalName, 't', 'e', 's' @@ -109,22 +109,36 @@ TEST_CASE("BLE overwrite a full internal advertising data with an external built BLE.setLocalName("test"); BLE.setAdvertisedServiceUuid("1818"); BLE.advertise(); - //WARN("data length: " << BLE.getAdvertisingData().dataLength()); - verify = (BLE.getAdvertisingData().dataLength() == (3 + (2+2))); - REQUIRE(verify); - verify = (BLE.getScanResponseData().dataLength() == (4+2)); - REQUIRE(verify); + THEN("Check that BLE advertising data has been set") + { + verify = (BLE.getAdvertisingData().dataLength() == (3 + (2+2))); + REQUIRE(verify); + } + + THEN("Check that BLE scan response data has been set") + { + verify = (BLE.getScanResponseData().dataLength() == (4+2)); + REQUIRE(verify); + } + + // Copy external empty adv data into advertising data BLE.setAdvertisingData(advData); BLE.advertise(); - //WARN(BLE.getAdvertisingData().dataLength()); - verify = (BLE.getAdvertisingData().dataLength() == 3); - REQUIRE(verify); + THEN("BLE advertising data should be erased") + { + verify = (BLE.getAdvertisingData().dataLength() == 3); + REQUIRE(verify); + } + // Copy external empty adv data into scan response data BLE.setScanResponseData(advData); BLE.advertise(); - verify = (BLE.getScanResponseData().dataLength() == 0); - REQUIRE(verify); + THEN("BLE scan response data should be erased") + { + verify = (BLE.getScanResponseData().dataLength() == 0); + REQUIRE(verify); + } } // Clear BLE advertising data @@ -139,21 +153,27 @@ TEST_CASE("BLE test raw data", "[ArduinoBLE::BLEAdvertisingData]") WHEN("Set too large raw data") { - uint8_t data[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, + const uint8_t data[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32 }; retVal = advData.setRawData(data, sizeof(data)); - REQUIRE(!retVal); + THEN("Set raw data should return false. The parameter should not be set") + { + REQUIRE(!retVal); + } advData.clear(); } WHEN("Set correct raw data") { - uint8_t data[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, + const uint8_t data[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31}; retVal = advData.setRawData(data, sizeof(data)); - REQUIRE(retVal); + THEN("Set raw data should return true. The parameter should be correctly set") + { + REQUIRE(retVal); + } advData.updateData(); REQUIRE( 0 == memcmp(data, advData.data(), sizeof(data)) ); advData.clear(); @@ -161,7 +181,7 @@ TEST_CASE("BLE test raw data", "[ArduinoBLE::BLEAdvertisingData]") WHEN("Hide other parameters by setting raw data") { - uint8_t data[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10}; + const uint8_t data[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10}; advData.setLocalName("test"); advData.setRawData(data, sizeof(data)); diff --git a/extras/test/src/test_advertising_data/test_local_name.cpp b/extras/test/src/test_advertising_data/test_local_name.cpp index 947224cc..a0b4e19d 100644 --- a/extras/test/src/test_advertising_data/test_local_name.cpp +++ b/extras/test/src/test_advertising_data/test_local_name.cpp @@ -35,8 +35,15 @@ TEST_CASE("Test local name setting", "[ArduinoBLE::BLEAdvertisingData]") { const char* name = "test"; retVal = advData.setLocalName(name); - REQUIRE(retVal); - REQUIRE( (strlen(name) + 2) == (oldRemainingLength - advData.remainingLength()) ); + THEN("Set local name should return true. The name parameter should be correctly set") + { + REQUIRE(retVal); + } + + THEN("Check the exact number of bytes occupied by the name just set") + { + REQUIRE( (strlen(name) + 2) == (oldRemainingLength - advData.remainingLength()) ); + } oldRemainingLength = advData.remainingLength(); advData.updateData(); @@ -47,30 +54,36 @@ TEST_CASE("Test local name setting", "[ArduinoBLE::BLEAdvertisingData]") { const char* name = "way too long local name (len 32)"; retVal = advData.setLocalName(name); - REQUIRE(!retVal); - REQUIRE( oldRemainingLength == advData.remainingLength() ); - advData.updateData(); - REQUIRE( advData.dataLength() == (MAX_AD_DATA_LENGTH - oldRemainingLength) ); + THEN("Set local name should return false. The name parameter should not be set") + { + REQUIRE(!retVal); + REQUIRE( oldRemainingLength == advData.remainingLength() ); + advData.updateData(); + REQUIRE( advData.dataLength() == (MAX_AD_DATA_LENGTH - oldRemainingLength) ); + } } WHEN("Overwrite local name with a name as long as max data length") { const char* name = "local name with full length "; retVal = advData.setLocalName(name); - REQUIRE(retVal); - REQUIRE( (strlen(name) + 2) == (oldRemainingLength - advData.remainingLength()) ); - oldRemainingLength = advData.remainingLength(); + THEN("The name parameter should be correctly overwritten. The remaining length should be 0") + { + REQUIRE(retVal); + REQUIRE( (strlen(name) + 2) == (oldRemainingLength - advData.remainingLength()) ); + oldRemainingLength = advData.remainingLength(); - advData.updateData(); - REQUIRE(advData.dataLength() == (strlen(name) + 2)); - // advData should be full now - REQUIRE( 0 == advData.remainingLength() ); - REQUIRE( 0 == advData.availableForWrite() ); + advData.updateData(); + REQUIRE(advData.dataLength() == (strlen(name) + 2)); + // advData should be full now + REQUIRE( 0 == advData.remainingLength() ); + REQUIRE( 0 == advData.availableForWrite() ); + } } WHEN("Check consistency when setting the external advertising data") { - auto goldenData = advData.data(); + const auto goldenData = advData.data(); BLE.setAdvertisingData(advData); BLE.advertise(); REQUIRE( 0 == memcmp(goldenData, BLE.getAdvertisingData().data(), advData.dataLength()) ); diff --git a/extras/test/src/test_advertising_data/test_manufacturer.cpp b/extras/test/src/test_advertising_data/test_manufacturer.cpp index 39f7e955..7c23d26c 100644 --- a/extras/test/src/test_advertising_data/test_manufacturer.cpp +++ b/extras/test/src/test_advertising_data/test_manufacturer.cpp @@ -29,7 +29,7 @@ TEST_CASE("Test manufacturer data setting", "[ArduinoBLE::BLEAdvertisingData]") { BLEAdvertisingData advData; int oldRemainingLength = advData.remainingLength(); - uint16_t companyId = 0x1100; + const uint16_t companyId = 0x1100; bool retVal; WHEN("Set correct manufacturer data without id") @@ -38,8 +38,11 @@ TEST_CASE("Test manufacturer data setting", "[ArduinoBLE::BLEAdvertisingData]") const uint8_t goldenData[] = {(sizeof(data) + 1), BLEFieldManufacturerData, 0x00, 0x11, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9}; retVal = advData.setManufacturerData(data, sizeof(data)); - REQUIRE(retVal); - REQUIRE( (sizeof(data) + 2) == (oldRemainingLength - advData.remainingLength()) ); + THEN("Check that the manufacturer data has been correctly set") + { + REQUIRE(retVal); + REQUIRE( (sizeof(data) + 2) == (oldRemainingLength - advData.remainingLength()) ); + } oldRemainingLength = advData.remainingLength(); advData.updateData(); @@ -53,8 +56,11 @@ TEST_CASE("Test manufacturer data setting", "[ArduinoBLE::BLEAdvertisingData]") const uint8_t goldenData[] = {(sizeof(data) + sizeof(companyId) + 1), BLEFieldManufacturerData, 0x00, 0x11, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9}; retVal = advData.setManufacturerData(companyId, data, sizeof(data)); - REQUIRE(retVal); - REQUIRE( (sizeof(data) + sizeof(companyId) + 2) == (oldRemainingLength - advData.remainingLength()) ); + THEN("Check that the manufacturer data has been correctly set") + { + REQUIRE(retVal); + REQUIRE( (sizeof(data) + sizeof(companyId) + 2) == (oldRemainingLength - advData.remainingLength()) ); + } oldRemainingLength = advData.remainingLength(); advData.updateData(); @@ -68,8 +74,11 @@ TEST_CASE("Test manufacturer data setting", "[ArduinoBLE::BLEAdvertisingData]") const uint8_t data[] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27}; retVal = advData.setManufacturerData(companyId, data, sizeof(data)); - REQUIRE(!retVal); - REQUIRE( oldRemainingLength == advData.remainingLength() ); + THEN("Manufacturer data was too long, check that it has not been set") + { + REQUIRE(!retVal); + REQUIRE( oldRemainingLength == advData.remainingLength() ); + } advData.updateData(); REQUIRE( advData.dataLength() == (MAX_AD_DATA_LENGTH - oldRemainingLength) ); } @@ -80,8 +89,11 @@ TEST_CASE("Test manufacturer data setting", "[ArduinoBLE::BLEAdvertisingData]") const uint8_t data[] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29}; retVal = advData.setManufacturerData(data, sizeof(data)); - REQUIRE(!retVal); - REQUIRE( oldRemainingLength == advData.remainingLength() ); + THEN("Manufacturer data was too long, check that it has not been set") + { + REQUIRE(!retVal); + REQUIRE( oldRemainingLength == advData.remainingLength() ); + } advData.updateData(); REQUIRE( advData.dataLength() == (MAX_AD_DATA_LENGTH - oldRemainingLength) ); } @@ -93,13 +105,19 @@ TEST_CASE("Test manufacturer data setting", "[ArduinoBLE::BLEAdvertisingData]") 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26}; const uint8_t data[] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28}; - retVal = advData.setManufacturerData(companyId, dataGivenId, sizeof(dataGivenId)); - REQUIRE(retVal); - retVal = advData.setManufacturerData(data, sizeof(data)); - REQUIRE(retVal); - REQUIRE( 0 == advData.remainingLength() ); - advData.updateData(); - REQUIRE( advData.dataLength() == (MAX_AD_DATA_LENGTH) ); + THEN("Check that first insertion of manufacturer data given id is correctly done") + { + retVal = advData.setManufacturerData(companyId, dataGivenId, sizeof(dataGivenId)); + REQUIRE(retVal); + } + THEN("Check that the insertion of manufacturer data without after one with id is correctly done") + { + retVal = advData.setManufacturerData(data, sizeof(data)); + REQUIRE(retVal); + REQUIRE( 0 == advData.remainingLength() ); + advData.updateData(); + REQUIRE( advData.dataLength() == (MAX_AD_DATA_LENGTH) ); + } } WHEN("Set manufacturer data given id after setting manufacturer data without id") @@ -110,10 +128,16 @@ TEST_CASE("Test manufacturer data setting", "[ArduinoBLE::BLEAdvertisingData]") 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27}; const uint8_t data[] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28}; - retVal = advData.setManufacturerData(data, sizeof(data)); - REQUIRE(retVal); - retVal = advData.setManufacturerData(companyId, dataGivenId, sizeof(dataGivenId)); - REQUIRE(!retVal); + THEN("Check that first insertion of manufacturer data WITHOUT id is correctly done") + { + retVal = advData.setManufacturerData(data, sizeof(data)); + REQUIRE(retVal); + } + THEN("Check that the insertion of manufacturer data given id after one without id is correctly done") + { + retVal = advData.setManufacturerData(companyId, dataGivenId, sizeof(dataGivenId)); + REQUIRE(!retVal); + } } WHEN("Overwrite manufacturer data with one as long as max data length") @@ -124,17 +148,20 @@ TEST_CASE("Test manufacturer data setting", "[ArduinoBLE::BLEAdvertisingData]") 0x00, 0x11, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26}; retVal = advData.setManufacturerData(companyId, data, sizeof(data)); - REQUIRE(retVal); - - advData.updateData(); - REQUIRE( 0 == advData.remainingLength() ); - REQUIRE( 0 == advData.availableForWrite() ); - REQUIRE( 0 == memcmp(goldenData, advData.data(), sizeof(goldenData)) ); + THEN("Manufacturer data should be set correctly") + { + REQUIRE(retVal); + + advData.updateData(); + REQUIRE( 0 == advData.remainingLength() ); + REQUIRE( 0 == advData.availableForWrite() ); + REQUIRE( 0 == memcmp(goldenData, advData.data(), sizeof(goldenData)) ); + } } WHEN("Check consistency when setting the external advertising data") { - auto goldenData = advData.data(); + const auto goldenData = advData.data(); BLE.setAdvertisingData(advData); BLE.advertise(); REQUIRE( 0 == memcmp(goldenData, BLE.getAdvertisingData().data(), advData.dataLength()) ); diff --git a/extras/test/src/test_advertising_data/test_service.cpp b/extras/test/src/test_advertising_data/test_service.cpp index 5c212c1f..66b1689f 100644 --- a/extras/test/src/test_advertising_data/test_service.cpp +++ b/extras/test/src/test_advertising_data/test_service.cpp @@ -50,12 +50,13 @@ TEST_CASE("Test advertised service id setting", "[ArduinoBLE::BLEAdvertisingData const char* service = "00112233445566770011223344556677"; advData.setLocalName(name); oldRemainingLength = advData.remainingLength(); - retVal = advData.setAdvertisedServiceUuid(service); - REQUIRE(!retVal); - - REQUIRE( oldRemainingLength == advData.remainingLength() ); - advData.updateData(); - REQUIRE( advData.dataLength() == (MAX_AD_DATA_LENGTH - oldRemainingLength) ); + THEN("Check that the too long parameter has not been set") + { + REQUIRE(!advData.setAdvertisedServiceUuid(service)); + REQUIRE( oldRemainingLength == advData.remainingLength() ); + advData.updateData(); + REQUIRE( advData.dataLength() == (MAX_AD_DATA_LENGTH - oldRemainingLength) ); + } } WHEN("Fill to maximum an advertising packet with a service id") @@ -64,8 +65,7 @@ TEST_CASE("Test advertised service id setting", "[ArduinoBLE::BLEAdvertisingData const char* name = "11 char str"; const char* service = "00112233445566770011223344556677"; advData.setLocalName(name); - retVal = advData.setAdvertisedServiceUuid(service); - REQUIRE(retVal); + REQUIRE(advData.setAdvertisedServiceUuid(service)); advData.updateData(); REQUIRE(advData.dataLength() == (MAX_AD_DATA_LENGTH)); @@ -76,7 +76,7 @@ TEST_CASE("Test advertised service id setting", "[ArduinoBLE::BLEAdvertisingData WHEN("Check consistency when setting the external advertising data") { - auto goldenData = advData.data(); + const auto goldenData = advData.data(); BLE.setAdvertisingData(advData); BLE.advertise(); REQUIRE( 0 == memcmp(goldenData, BLE.getAdvertisingData().data(), advData.dataLength()) ); @@ -91,7 +91,7 @@ TEST_CASE("Test service data setting", "[ArduinoBLE::BLEAdvertisingData]") { BLEAdvertisingData advData; int oldRemainingLength = advData.remainingLength(); - uint16_t uuid = 0x1100; + const uint16_t uuid = 0x1100; bool retVal; WHEN("Set correct service data") @@ -100,14 +100,20 @@ TEST_CASE("Test service data setting", "[ArduinoBLE::BLEAdvertisingData]") const uint8_t goldenData[] = {(sizeof(data) + sizeof(uuid) + 1), BLEFieldServiceData, 0x00, 0x11, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9}; retVal = advData.setAdvertisedServiceData(uuid, data, sizeof(data)); - REQUIRE(retVal); - REQUIRE( (sizeof(data) + 2 + sizeof(uuid)) == (oldRemainingLength - advData.remainingLength()) ); + THEN("Correctly set parameter") + { + REQUIRE(retVal); + REQUIRE( (sizeof(data) + 2 + sizeof(uuid)) == (oldRemainingLength - advData.remainingLength()) ); + } oldRemainingLength = advData.remainingLength(); advData.updateData(); - REQUIRE(advData.dataLength() == (sizeof(data) + 2 + sizeof(uuid))); - REQUIRE(advData.dataLength() == sizeof(goldenData)); - REQUIRE( 0 == memcmp(goldenData, advData.data(), sizeof(goldenData)) ); + THEN("Check parameter analyzing advertising raw data") + { + REQUIRE(advData.dataLength() == (sizeof(data) + 2 + sizeof(uuid))); + REQUIRE(advData.dataLength() == sizeof(goldenData)); + REQUIRE( 0 == memcmp(goldenData, advData.data(), sizeof(goldenData)) ); + } } WHEN("Set too long service data") @@ -116,7 +122,10 @@ TEST_CASE("Test service data setting", "[ArduinoBLE::BLEAdvertisingData]") const uint8_t data[] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27}; retVal = advData.setAdvertisedServiceData(uuid, data, sizeof(data)); - REQUIRE(!retVal); + THEN("Check that the too long parameter has not been set") + { + REQUIRE(!retVal); + } REQUIRE( oldRemainingLength == advData.remainingLength() ); advData.updateData(); REQUIRE( advData.dataLength() == (MAX_AD_DATA_LENGTH - oldRemainingLength) ); @@ -127,17 +136,23 @@ TEST_CASE("Test service data setting", "[ArduinoBLE::BLEAdvertisingData]") const uint8_t data[] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26}; retVal = advData.setAdvertisedServiceData(uuid, data, sizeof(data)); - REQUIRE(retVal); + THEN("Check correctly set parameter") + { + REQUIRE(retVal); + } advData.updateData(); // advData should be full now - REQUIRE( 0 == advData.remainingLength() ); - REQUIRE( 0 == advData.availableForWrite() ); + THEN("advData should be full now") + { + REQUIRE( 0 == advData.remainingLength() ); + REQUIRE( 0 == advData.availableForWrite() ); + } } WHEN("Check consistency when setting the external advertising data") { - auto goldenData = advData.data(); + const auto goldenData = advData.data(); BLE.setAdvertisingData(advData); BLE.advertise(); REQUIRE( 0 == memcmp(goldenData, BLE.getAdvertisingData().data(), advData.dataLength()) ); diff --git a/extras/test/src/test_uuid/test_uuid.cpp b/extras/test/src/test_uuid/test_uuid.cpp index 13b655e6..1832c741 100644 --- a/extras/test/src/test_uuid/test_uuid.cpp +++ b/extras/test/src/test_uuid/test_uuid.cpp @@ -47,6 +47,6 @@ TEST_CASE("BLE uuid test", "[ArduinoBLE::BLEUuid]") REQUIRE(verify); // print the uuid - WARN("test: " << testUuid << ", golden: " << goldenUuid); + //WARN("test: " << testUuid << ", golden: " << goldenUuid); } } \ No newline at end of file