aboutsummaryrefslogtreecommitdiff
path: root/apps/spammer
diff options
context:
space:
mode:
authorBrian Duddie <bduddie@google.com>2017-04-06 12:10:29 -0700
committerBrian Duddie <bduddie@google.com>2017-04-06 14:23:45 -0700
commit3d2336c8674fff457469e0749ab64f220eaa38ff (patch)
tree1d082aafedcfb29655b0cfcf8fb1bc8c500c1601 /apps/spammer
parent336b10aef923e8ee9041ee1cdbb258363b4ddf7a (diff)
downloadchre-3d2336c8674fff457469e0749ab64f220eaa38ff.tar.gz
Add test nanoapp that spams events and messages
To be used in app unload testing, etc. Test: run simulator Change-Id: Ia08c04d94abe2923d04a85b63c24f8b904496a45
Diffstat (limited to 'apps/spammer')
-rw-r--r--apps/spammer/spammer.cc123
-rw-r--r--apps/spammer/spammer.mk7
2 files changed, 130 insertions, 0 deletions
diff --git a/apps/spammer/spammer.cc b/apps/spammer/spammer.cc
new file mode 100644
index 00000000..523316bc
--- /dev/null
+++ b/apps/spammer/spammer.cc
@@ -0,0 +1,123 @@
+/*
+ * Copyright (C) 2017 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include <cinttypes>
+
+#include "chre_api/chre.h"
+#include "chre/platform/assert.h"
+#include "chre/platform/log.h"
+#include "chre/platform/static_nanoapp_init.h"
+#include "chre/util/nanoapp/app_id.h"
+
+/**
+ * @file
+ * A nanoapp exclusively for testing, which sends a constant stream of messages
+ * and events. Must only be compiled as a static/internal nanoapp.
+ */
+
+namespace chre {
+namespace {
+
+constexpr uint32_t kMessageType = 1234;
+uint8_t gMessageData[] = {1, 2, 3, 4, 5, 6, 7, 8};
+bool gRunning = false;
+uint64_t gTotalEventCount = 0;
+
+constexpr uint16_t kMessageSentEvent = CHRE_EVENT_FIRST_USER_VALUE;
+constexpr uint16_t kRepeatedEvent = kMessageSentEvent + 1;
+constexpr uint16_t kEmptyEvent = kRepeatedEvent + 2;
+
+void *kMessageSentEventData = reinterpret_cast<void *>(0x100);
+void *kRepeatedEventData = reinterpret_cast<void *>(0x200);
+
+void messageSentEventFreeCallback(uint16_t eventType, void *data) {
+ CHRE_ASSERT(gRunning);
+ CHRE_ASSERT(eventType == kMessageSentEvent);
+ CHRE_ASSERT(data == kMessageSentEventData);
+}
+
+void messageFreeCallback(void *message, size_t messageSize) {
+ CHRE_ASSERT(gRunning);
+ if (!chreSendEvent(kMessageSentEvent, kMessageSentEventData,
+ messageSentEventFreeCallback, chreGetInstanceId())) {
+ LOGE("Couldn't send event from message free callback");
+ }
+}
+
+void repeatedEventFreeCallback(uint16_t eventType, void *data) {
+ CHRE_ASSERT(gRunning);
+ CHRE_ASSERT(eventType == kRepeatedEvent);
+ CHRE_ASSERT(data == kRepeatedEventData);
+}
+
+bool nanoappStart() {
+ gRunning = true;
+ LOGI("Spammer started as instance %" PRIu32, chreGetInstanceId());
+
+ if (!chreSendMessageToHostEndpoint(
+ gMessageData, sizeof(gMessageData), kMessageType,
+ CHRE_HOST_ENDPOINT_BROADCAST, messageFreeCallback)) {
+ LOGE("Couldn't send message from start callback");
+ }
+
+ if (!chreSendEvent(kRepeatedEvent, kRepeatedEventData,
+ repeatedEventFreeCallback, chreGetInstanceId())) {
+ LOGE("Couldn't send first repeated event");
+ }
+ if (!chreSendEvent(kEmptyEvent, nullptr, nullptr, chreGetInstanceId())) {
+ LOGE("Couldn't send first empty event");
+ }
+
+ return true;
+}
+
+void nanoappHandleEvent(uint32_t senderInstanceId,
+ uint16_t eventType,
+ const void *eventData) {
+ CHRE_ASSERT(gRunning);
+ gTotalEventCount++;
+ if (eventType == kMessageSentEvent) {
+ CHRE_ASSERT(eventData == kMessageSentEventData);
+ if (!chreSendMessageToHostEndpoint(
+ gMessageData, sizeof(gMessageData), kMessageType,
+ CHRE_HOST_ENDPOINT_BROADCAST, messageFreeCallback)) {
+ // Note: commented out to prevent logspam because Linux simulator
+ // currently always returns false
+ //LOGE("Couldn't send message");
+ }
+ } else if (eventType == kRepeatedEvent) {
+ CHRE_ASSERT(eventData == kRepeatedEventData);
+ if (!chreSendEvent(kRepeatedEvent, kRepeatedEventData,
+ repeatedEventFreeCallback, chreGetInstanceId())) {
+ LOGE("Couldn't send repeated event");
+ }
+ } else if (eventType == kEmptyEvent) {
+ CHRE_ASSERT(eventData == nullptr);
+ if (!chreSendEvent(kEmptyEvent, nullptr, nullptr, chreGetInstanceId())) {
+ LOGE("Couldn't send empty event");
+ }
+ }
+}
+
+void nanoappEnd() {
+ LOGI("Stopped - handled %" PRIu64 " total events", gTotalEventCount);
+ gRunning = false;
+}
+
+} // anonymous namespace
+} // namespace chre
+
+CHRE_STATIC_NANOAPP_INIT(Spammer, chre::kSpammerAppId, 0);
diff --git a/apps/spammer/spammer.mk b/apps/spammer/spammer.mk
new file mode 100644
index 00000000..31618db3
--- /dev/null
+++ b/apps/spammer/spammer.mk
@@ -0,0 +1,7 @@
+#
+# Spammer Makefile
+#
+
+# Common Source Files ##########################################################
+
+COMMON_SRCS += apps/spammer/spammer.cc