aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--chpp/test/app_test.cpp32
-rw-r--r--chpp/test/transport_test.cpp309
-rw-r--r--java/test/cross_validation/src/com/google/android/chre/test/crossvalidator/ChreCrossValidatorSensor.java2
-rw-r--r--platform/freertos/include/chre/target_platform/init.h8
-rw-r--r--platform/freertos/init.cc26
-rw-r--r--platform/shared/nanoapp_loader.cc1
6 files changed, 202 insertions, 176 deletions
diff --git a/chpp/test/app_test.cpp b/chpp/test/app_test.cpp
index 248688c6..413be338 100644
--- a/chpp/test/app_test.cpp
+++ b/chpp/test/app_test.cpp
@@ -137,26 +137,28 @@ TEST_F(AppTestBase, FragmentedLoopback) {
EXPECT_EQ(result.error, CHPP_APP_ERROR_NONE);
}
-TEST_F(AppTestBase, Timesync) {
- constexpr uint64_t kMaxRtt = 2 * CHPP_NSEC_PER_MSEC; // in ms
- constexpr int64_t kMaxOffset = 1 * CHPP_NSEC_PER_MSEC; // in ms
+// Disabled because flaky (fixed in U).
+// TEST_F(AppTestBase, Timesync) {
+// constexpr uint64_t kMaxRtt = 2 * CHPP_NSEC_PER_MSEC; // in ms
+// constexpr int64_t kMaxOffset = 1 * CHPP_NSEC_PER_MSEC; // in ms
- CHPP_LOGI("Starting timesync test...");
+// CHPP_LOGI("Starting timesync test...");
- std::this_thread::sleep_for(std::chrono::milliseconds(100));
- EXPECT_TRUE(chppTimesyncMeasureOffset(&mClientAppContext));
- std::this_thread::sleep_for(std::chrono::milliseconds(100));
+// std::this_thread::sleep_for(std::chrono::milliseconds(100));
+// EXPECT_TRUE(chppTimesyncMeasureOffset(&mClientAppContext));
+// std::this_thread::sleep_for(std::chrono::milliseconds(100));
- EXPECT_EQ(chppTimesyncGetResult(&mClientAppContext)->error,
- CHPP_APP_ERROR_NONE);
+// EXPECT_EQ(chppTimesyncGetResult(&mClientAppContext)->error,
+// CHPP_APP_ERROR_NONE);
- EXPECT_LT(chppTimesyncGetResult(&mClientAppContext)->rttNs, kMaxRtt);
- EXPECT_NE(chppTimesyncGetResult(&mClientAppContext)->rttNs, 0);
+// EXPECT_LT(chppTimesyncGetResult(&mClientAppContext)->rttNs, kMaxRtt);
+// EXPECT_NE(chppTimesyncGetResult(&mClientAppContext)->rttNs, 0);
- EXPECT_LT(chppTimesyncGetResult(&mClientAppContext)->offsetNs, kMaxOffset);
- EXPECT_GT(chppTimesyncGetResult(&mClientAppContext)->offsetNs, -kMaxOffset);
- EXPECT_NE(chppTimesyncGetResult(&mClientAppContext)->offsetNs, 0);
-}
+// EXPECT_LT(chppTimesyncGetResult(&mClientAppContext)->offsetNs, kMaxOffset);
+// EXPECT_GT(chppTimesyncGetResult(&mClientAppContext)->offsetNs,
+// -kMaxOffset);
+// EXPECT_NE(chppTimesyncGetResult(&mClientAppContext)->offsetNs, 0);
+// }
TEST_F(AppTestBase, DiscoveryMatched) {
constexpr uint64_t kTimeoutMs = 5000;
diff --git a/chpp/test/transport_test.cpp b/chpp/test/transport_test.cpp
index 625cfdee..8a412c8d 100644
--- a/chpp/test/transport_test.cpp
+++ b/chpp/test/transport_test.cpp
@@ -392,115 +392,119 @@ TEST_P(TransportTests, ZeroThenPreambleInput) {
}
}
-/**
- * Rx Testing with various length payloads of zeros
- */
-TEST_P(TransportTests, RxPayloadOfZeros) {
- mTransportContext.rxStatus.state = CHPP_STATE_PREAMBLE;
- size_t len = static_cast<size_t>(GetParam());
- bool validLen = (len <= CHPP_TRANSPORT_RX_MTU_BYTES);
-
- mTransportContext.txStatus.hasPacketsToSend = true;
- std::thread t1(chppWorkThreadStart, &mTransportContext);
- WaitForTransport(&mTransportContext);
-
- if (len <= kMaxChunkSize) {
- size_t loc = 0;
- addPreambleToBuf(mBuf, &loc);
- ChppTransportHeader *transHeader = addTransportHeaderToBuf(mBuf, &loc);
-
- transHeader->length = static_cast<uint16_t>(len);
- loc += len;
-
- addTransportFooterToBuf(mBuf, &loc);
-
- // Send header and check for correct state
- EXPECT_EQ(
- chppRxDataCb(&mTransportContext, mBuf,
- CHPP_PREAMBLE_LEN_BYTES + sizeof(ChppTransportHeader)),
- !validLen);
-
- if (!validLen) {
- EXPECT_EQ(mTransportContext.rxStatus.state, CHPP_STATE_PREAMBLE);
- } else if (len > 0) {
- EXPECT_EQ(mTransportContext.rxStatus.state, CHPP_STATE_PAYLOAD);
- } else {
- EXPECT_EQ(mTransportContext.rxStatus.state, CHPP_STATE_FOOTER);
- }
-
- // Correct decoding of packet length
- EXPECT_EQ(mTransportContext.rxHeader.length, len);
- EXPECT_EQ(mTransportContext.rxStatus.locInDatagram, 0);
- EXPECT_EQ(mTransportContext.rxDatagram.length, validLen ? len : 0);
-
- // Send payload if any and check for correct state
- if (len > 0) {
- EXPECT_EQ(
- chppRxDataCb(
- &mTransportContext,
- &mBuf[CHPP_PREAMBLE_LEN_BYTES + sizeof(ChppTransportHeader)],
- len),
- !validLen);
- EXPECT_EQ(mTransportContext.rxStatus.state,
- validLen ? CHPP_STATE_FOOTER : CHPP_STATE_PREAMBLE);
- }
-
- // Should have complete packet payload by now
- EXPECT_EQ(mTransportContext.rxStatus.locInDatagram, validLen ? len : 0);
-
- // But no ACK yet
- EXPECT_EQ(mTransportContext.rxStatus.expectedSeq, transHeader->seq);
-
- // Send footer
- EXPECT_TRUE(chppRxDataCb(
- &mTransportContext,
- &mBuf[CHPP_PREAMBLE_LEN_BYTES + sizeof(ChppTransportHeader) + len],
- sizeof(ChppTransportFooter)));
-
- // The next expected packet sequence # should incremented only if the
- // received packet is payload-bearing.
- uint8_t nextSeq = transHeader->seq + ((validLen && len > 0) ? 1 : 0);
- EXPECT_EQ(mTransportContext.rxStatus.expectedSeq, nextSeq);
-
- // Check for correct ACK crafting if applicable (i.e. if the received packet
- // is payload-bearing).
- if (validLen && len > 0) {
- // TODO: Remove later as can cause flaky tests
- // These are expected to change shortly afterwards, as chppTransportDoWork
- // is run
- // EXPECT_TRUE(mTransportContext.txStatus.hasPacketsToSend);
- EXPECT_EQ(mTransportContext.txStatus.packetCodeToSend,
- CHPP_TRANSPORT_ERROR_NONE);
- EXPECT_EQ(mTransportContext.txDatagramQueue.pending, 0);
-
- WaitForTransport(&mTransportContext);
-
- // Check response packet fields
- struct ChppTransportHeader *txHeader =
- (struct ChppTransportHeader *)&mTransportContext.pendingTxPacket
- .payload[CHPP_PREAMBLE_LEN_BYTES];
- EXPECT_EQ(txHeader->flags, CHPP_TRANSPORT_FLAG_FINISHED_DATAGRAM);
- EXPECT_EQ(txHeader->packetCode, CHPP_TRANSPORT_ERROR_NONE);
- EXPECT_EQ(txHeader->ackSeq, nextSeq);
- EXPECT_EQ(txHeader->length, 0);
-
- // Check outgoing packet length
- EXPECT_EQ(mTransportContext.pendingTxPacket.length,
- CHPP_PREAMBLE_LEN_BYTES + sizeof(struct ChppTransportHeader) +
- sizeof(struct ChppTransportFooter));
- }
-
- // Check for correct state
- EXPECT_EQ(mTransportContext.rxStatus.state, CHPP_STATE_PREAMBLE);
-
- // Should have reset loc and length for next packet / datagram
- EXPECT_EQ(mTransportContext.rxStatus.locInDatagram, 0);
- EXPECT_EQ(mTransportContext.rxDatagram.length, 0);
- }
-
- chppWorkThreadStop(&mTransportContext);
- t1.join();
-}
+// Disabled because flaky (fixed in U).
+// /**
+// * Rx Testing with various length payloads of zeros
+// */
+// TEST_P(TransportTests, RxPayloadOfZeros) {
+// mTransportContext.rxStatus.state = CHPP_STATE_PREAMBLE;
+// size_t len = static_cast<size_t>(GetParam());
+// bool validLen = (len <= CHPP_TRANSPORT_RX_MTU_BYTES);
+
+// mTransportContext.txStatus.hasPacketsToSend = true;
+// std::thread t1(chppWorkThreadStart, &mTransportContext);
+// WaitForTransport(&mTransportContext);
+
+// if (len <= kMaxChunkSize) {
+// size_t loc = 0;
+// addPreambleToBuf(mBuf, &loc);
+// ChppTransportHeader *transHeader = addTransportHeaderToBuf(mBuf, &loc);
+
+// transHeader->length = static_cast<uint16_t>(len);
+// loc += len;
+
+// addTransportFooterToBuf(mBuf, &loc);
+
+// // Send header and check for correct state
+// EXPECT_EQ(
+// chppRxDataCb(&mTransportContext, mBuf,
+// CHPP_PREAMBLE_LEN_BYTES + sizeof(ChppTransportHeader)),
+// !validLen);
+
+// if (!validLen) {
+// EXPECT_EQ(mTransportContext.rxStatus.state, CHPP_STATE_PREAMBLE);
+// } else if (len > 0) {
+// EXPECT_EQ(mTransportContext.rxStatus.state, CHPP_STATE_PAYLOAD);
+// } else {
+// EXPECT_EQ(mTransportContext.rxStatus.state, CHPP_STATE_FOOTER);
+// }
+
+// // Correct decoding of packet length
+// EXPECT_EQ(mTransportContext.rxHeader.length, len);
+// EXPECT_EQ(mTransportContext.rxStatus.locInDatagram, 0);
+// EXPECT_EQ(mTransportContext.rxDatagram.length, validLen ? len : 0);
+
+// // Send payload if any and check for correct state
+// if (len > 0) {
+// EXPECT_EQ(
+// chppRxDataCb(
+// &mTransportContext,
+// &mBuf[CHPP_PREAMBLE_LEN_BYTES + sizeof(ChppTransportHeader)],
+// len),
+// !validLen);
+// EXPECT_EQ(mTransportContext.rxStatus.state,
+// validLen ? CHPP_STATE_FOOTER : CHPP_STATE_PREAMBLE);
+// }
+
+// // Should have complete packet payload by now
+// EXPECT_EQ(mTransportContext.rxStatus.locInDatagram, validLen ? len : 0);
+
+// // But no ACK yet
+// EXPECT_EQ(mTransportContext.rxStatus.expectedSeq, transHeader->seq);
+
+// // Send footer
+// EXPECT_TRUE(chppRxDataCb(
+// &mTransportContext,
+// &mBuf[CHPP_PREAMBLE_LEN_BYTES + sizeof(ChppTransportHeader) + len],
+// sizeof(ChppTransportFooter)));
+
+// // The next expected packet sequence # should incremented only if the
+// // received packet is payload-bearing.
+// uint8_t nextSeq = transHeader->seq + ((validLen && len > 0) ? 1 : 0);
+// EXPECT_EQ(mTransportContext.rxStatus.expectedSeq, nextSeq);
+
+// // Check for correct ACK crafting if applicable (i.e. if the received
+// packet
+// // is payload-bearing).
+// if (validLen && len > 0) {
+// // TODO: Remove later as can cause flaky tests
+// // These are expected to change shortly afterwards, as
+// chppTransportDoWork
+// // is run
+// // EXPECT_TRUE(mTransportContext.txStatus.hasPacketsToSend);
+// EXPECT_EQ(mTransportContext.txStatus.packetCodeToSend,
+// CHPP_TRANSPORT_ERROR_NONE);
+// EXPECT_EQ(mTransportContext.txDatagramQueue.pending, 0);
+
+// WaitForTransport(&mTransportContext);
+
+// // Check response packet fields
+// struct ChppTransportHeader *txHeader =
+// (struct ChppTransportHeader *)&mTransportContext.pendingTxPacket
+// .payload[CHPP_PREAMBLE_LEN_BYTES];
+// EXPECT_EQ(txHeader->flags, CHPP_TRANSPORT_FLAG_FINISHED_DATAGRAM);
+// EXPECT_EQ(txHeader->packetCode, CHPP_TRANSPORT_ERROR_NONE);
+// EXPECT_EQ(txHeader->ackSeq, nextSeq);
+// EXPECT_EQ(txHeader->length, 0);
+
+// // Check outgoing packet length
+// EXPECT_EQ(mTransportContext.pendingTxPacket.length,
+// CHPP_PREAMBLE_LEN_BYTES + sizeof(struct ChppTransportHeader)
+// +
+// sizeof(struct ChppTransportFooter));
+// }
+
+// // Check for correct state
+// EXPECT_EQ(mTransportContext.rxStatus.state, CHPP_STATE_PREAMBLE);
+
+// // Should have reset loc and length for next packet / datagram
+// EXPECT_EQ(mTransportContext.rxStatus.locInDatagram, 0);
+// EXPECT_EQ(mTransportContext.rxDatagram.length, 0);
+// }
+
+// chppWorkThreadStop(&mTransportContext);
+// t1.join();
+// }
/**
* End of Packet Link Notification during preamble
@@ -921,49 +925,51 @@ TEST_F(TransportTests, WifiOpen) {
sizeof(ChppWwanGetCapabilitiesResponse));
}
-/**
- * GNSS service Open and GetCapabilities.
- */
-TEST_F(TransportTests, GnssOpen) {
- mTransportContext.txStatus.hasPacketsToSend = true;
- std::thread t1(chppWorkThreadStart, &mTransportContext);
- WaitForTransport(&mTransportContext);
+// Disabled because flaky (fixed in U).
+// /**
+// * GNSS service Open and GetCapabilities.
+// */
+// TEST_F(TransportTests, GnssOpen) {
+// mTransportContext.txStatus.hasPacketsToSend = true;
+// std::thread t1(chppWorkThreadStart, &mTransportContext);
+// WaitForTransport(&mTransportContext);
- uint8_t ackSeq = 1;
- uint8_t seq = 0;
- uint8_t handle = CHPP_HANDLE_NEGOTIATED_RANGE_START + 2;
- uint8_t transactionID = 0;
- size_t len = 0;
+// uint8_t ackSeq = 1;
+// uint8_t seq = 0;
+// uint8_t handle = CHPP_HANDLE_NEGOTIATED_RANGE_START + 2;
+// uint8_t transactionID = 0;
+// size_t len = 0;
- openService(&mTransportContext, mBuf, ackSeq++, seq++, handle,
- transactionID++, CHPP_GNSS_OPEN);
+// openService(&mTransportContext, mBuf, ackSeq++, seq++, handle,
+// transactionID++, CHPP_GNSS_OPEN);
- addPreambleToBuf(mBuf, &len);
+// addPreambleToBuf(mBuf, &len);
- uint16_t command = CHPP_GNSS_GET_CAPABILITIES;
- sendCommandToService(&mTransportContext, mBuf, ackSeq++, seq++, handle,
- transactionID++, command);
+// uint16_t command = CHPP_GNSS_GET_CAPABILITIES;
+// sendCommandToService(&mTransportContext, mBuf, ackSeq++, seq++, handle,
+// transactionID++, command);
- size_t responseLoc = sizeof(ChppTestResponse);
+// size_t responseLoc = sizeof(ChppTestResponse);
- // Cleanup
- chppWorkThreadStop(&mTransportContext);
- t1.join();
+// // Cleanup
+// chppWorkThreadStop(&mTransportContext);
+// t1.join();
- // Validate capabilities
- uint32_t *capabilities =
- (uint32_t *)&mTransportContext.pendingTxPacket.payload[responseLoc];
- responseLoc += sizeof(uint32_t);
+// // Validate capabilities
+// uint32_t *capabilities =
+// (uint32_t *)&mTransportContext.pendingTxPacket.payload[responseLoc];
+// responseLoc += sizeof(uint32_t);
- uint32_t capabilitySet =
- CHRE_GNSS_CAPABILITIES_LOCATION | CHRE_GNSS_CAPABILITIES_MEASUREMENTS |
- CHRE_GNSS_CAPABILITIES_GNSS_ENGINE_BASED_PASSIVE_LISTENER;
- EXPECT_EQ((*capabilities) & ~(capabilitySet), 0);
+// uint32_t capabilitySet =
+// CHRE_GNSS_CAPABILITIES_LOCATION | CHRE_GNSS_CAPABILITIES_MEASUREMENTS |
+// CHRE_GNSS_CAPABILITIES_GNSS_ENGINE_BASED_PASSIVE_LISTENER;
+// EXPECT_EQ((*capabilities) & ~(capabilitySet), 0);
- // Check total length
- EXPECT_EQ(responseLoc, CHPP_PREAMBLE_LEN_BYTES + sizeof(ChppTransportHeader) +
- sizeof(ChppGnssGetCapabilitiesResponse));
-}
+// // Check total length
+// EXPECT_EQ(responseLoc, CHPP_PREAMBLE_LEN_BYTES +
+// sizeof(ChppTransportHeader) +
+// sizeof(ChppGnssGetCapabilitiesResponse));
+// }
/**
* Discovery client.
@@ -1140,15 +1146,16 @@ TEST_F(TransportTests, NotificationToInvalidClient) {
CHPP_MESSAGE_TYPE_SERVICE_NOTIFICATION);
}
-TEST_F(TransportTests, WorkMonitorInvoked) {
- // Send message to spin work thread so it interacts with the work monitor
- messageToInvalidHandle(&mTransportContext,
- CHPP_MESSAGE_TYPE_SERVICE_NOTIFICATION);
+// Disabled because flaky (fixed in U).
+// TEST_F(TransportTests, WorkMonitorInvoked) {
+// // Send message to spin work thread so it interacts with the work monitor
+// messageToInvalidHandle(&mTransportContext,
+// CHPP_MESSAGE_TYPE_SERVICE_NOTIFICATION);
- // 1 pre/post call for executing the work and 1 for shutting down the thread.
- EXPECT_EQ(mTransportContext.workMonitor.numPreProcessCalls, 2);
- EXPECT_EQ(mTransportContext.workMonitor.numPostProcessCalls, 2);
-}
+// // 1 pre/post call for executing the work and 1 for shutting down the
+// thread. EXPECT_EQ(mTransportContext.workMonitor.numPreProcessCalls, 2);
+// EXPECT_EQ(mTransportContext.workMonitor.numPostProcessCalls, 2);
+// }
INSTANTIATE_TEST_SUITE_P(TransportTestRange, TransportTests,
testing::ValuesIn(kChunkSizes));
diff --git a/java/test/cross_validation/src/com/google/android/chre/test/crossvalidator/ChreCrossValidatorSensor.java b/java/test/cross_validation/src/com/google/android/chre/test/crossvalidator/ChreCrossValidatorSensor.java
index 11a965eb..e73ec0c4 100644
--- a/java/test/cross_validation/src/com/google/android/chre/test/crossvalidator/ChreCrossValidatorSensor.java
+++ b/java/test/cross_validation/src/com/google/android/chre/test/crossvalidator/ChreCrossValidatorSensor.java
@@ -77,7 +77,7 @@ public class ChreCrossValidatorSensor
private static final long SAMPLING_LATENCY_IN_MS = 0;
- private static final long MAX_TIMESTAMP_DIFF_NS = 10000000L;
+ private static final long MAX_TIMESTAMP_DIFF_NS = 4000000L;
private static final float AP_PROXIMITY_SENSOR_FAR_DISTANCE_IN_CM = 5f;
diff --git a/platform/freertos/include/chre/target_platform/init.h b/platform/freertos/include/chre/target_platform/init.h
index 4c8927dc..01e8cccc 100644
--- a/platform/freertos/include/chre/target_platform/init.h
+++ b/platform/freertos/include/chre/target_platform/init.h
@@ -40,6 +40,14 @@ namespace freertos {
BaseType_t init();
/**
+ * This function initializes the and starts the logger so it's ready to accept
+ * logs. Spawns a (non-privileged) FreeRTOS task for sending logs to the host.
+ *
+ * @return pdPASS on success, a FreeRTOS error code otherwise.
+ */
+BaseType_t initLogger();
+
+/**
* Delete the task spawned in the init function
*/
void deinit();
diff --git a/platform/freertos/init.cc b/platform/freertos/init.cc
index c993b406..524d3131 100644
--- a/platform/freertos/init.cc
+++ b/platform/freertos/init.cc
@@ -95,15 +95,7 @@ BaseType_t init() {
DramVoteClientSingleton::init();
-#ifdef CHRE_USE_BUFFERED_LOGGING
- chre::LogBufferManagerSingleton::init(gPrimaryLogBufferData,
- gSecondaryLogBufferData,
- sizeof(gPrimaryLogBufferData));
-
- rc = xTaskCreate(chreFlushLogsToHostThreadEntry, getChreFlushTaskName(),
- kChreTaskStackDepthWords, nullptr /* args */,
- kChreTaskPriority, &gChreFlushTaskHandle);
-#endif
+ rc = initLogger();
if (rc == pdPASS) {
rc = xTaskCreate(chreThreadEntry, getChreTaskName(),
@@ -118,6 +110,22 @@ BaseType_t init() {
return rc;
}
+BaseType_t initLogger() {
+ BaseType_t rc = pdPASS;
+#ifdef CHRE_USE_BUFFERED_LOGGING
+ if (!chre::LogBufferManagerSingleton::isInitialized()) {
+ chre::LogBufferManagerSingleton::init(gPrimaryLogBufferData,
+ gSecondaryLogBufferData,
+ sizeof(gPrimaryLogBufferData));
+
+ rc = xTaskCreate(chreFlushLogsToHostThreadEntry, getChreFlushTaskName(),
+ kChreTaskStackDepthWords, nullptr /* args */,
+ kChreTaskPriority, &gChreFlushTaskHandle);
+ }
+#endif
+ return rc;
+}
+
void deinit() {
// On a deinit call, we just stop the CHRE event loop. This causes the 'run'
// method in the task function exit, and move on to handle task cleanup
diff --git a/platform/shared/nanoapp_loader.cc b/platform/shared/nanoapp_loader.cc
index df6019dc..acbc13ac 100644
--- a/platform/shared/nanoapp_loader.cc
+++ b/platform/shared/nanoapp_loader.cc
@@ -182,6 +182,7 @@ const ExportedData gExportedData[] = {
ADD_EXPORTED_C_SYMBOL(log1pf),
ADD_EXPORTED_C_SYMBOL(log2f),
ADD_EXPORTED_C_SYMBOL(logf),
+ ADD_EXPORTED_C_SYMBOL(lrintf),
ADD_EXPORTED_C_SYMBOL(lroundf),
ADD_EXPORTED_C_SYMBOL(powf),
ADD_EXPORTED_C_SYMBOL(remainderf),