14d04a937b1bf7a949dfb00650b2640a9ed0c8acaArthur Ishiguro/* 24d04a937b1bf7a949dfb00650b2640a9ed0c8acaArthur Ishiguro * Copyright (C) 2016 The Android Open Source Project 34d04a937b1bf7a949dfb00650b2640a9ed0c8acaArthur Ishiguro * 44d04a937b1bf7a949dfb00650b2640a9ed0c8acaArthur Ishiguro * Licensed under the Apache License, Version 2.0 (the "License"); 54d04a937b1bf7a949dfb00650b2640a9ed0c8acaArthur Ishiguro * you may not use this file except in compliance with the License. 64d04a937b1bf7a949dfb00650b2640a9ed0c8acaArthur Ishiguro * You may obtain a copy of the License at 74d04a937b1bf7a949dfb00650b2640a9ed0c8acaArthur Ishiguro * 84d04a937b1bf7a949dfb00650b2640a9ed0c8acaArthur Ishiguro * http://www.apache.org/licenses/LICENSE-2.0 94d04a937b1bf7a949dfb00650b2640a9ed0c8acaArthur Ishiguro * 104d04a937b1bf7a949dfb00650b2640a9ed0c8acaArthur Ishiguro * Unless required by applicable law or agreed to in writing, software 114d04a937b1bf7a949dfb00650b2640a9ed0c8acaArthur Ishiguro * distributed under the License is distributed on an "AS IS" BASIS, 124d04a937b1bf7a949dfb00650b2640a9ed0c8acaArthur Ishiguro * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 134d04a937b1bf7a949dfb00650b2640a9ed0c8acaArthur Ishiguro * See the License for the specific language governing permissions and 144d04a937b1bf7a949dfb00650b2640a9ed0c8acaArthur Ishiguro * limitations under the License. 154d04a937b1bf7a949dfb00650b2640a9ed0c8acaArthur Ishiguro */ 164d04a937b1bf7a949dfb00650b2640a9ed0c8acaArthur Ishiguro 174d04a937b1bf7a949dfb00650b2640a9ed0c8acaArthur Ishiguro#include <general_test/send_event_test.h> 184d04a937b1bf7a949dfb00650b2640a9ed0c8acaArthur Ishiguro 194d04a937b1bf7a949dfb00650b2640a9ed0c8acaArthur Ishiguro#include <cstddef> 204d04a937b1bf7a949dfb00650b2640a9ed0c8acaArthur Ishiguro 214d04a937b1bf7a949dfb00650b2640a9ed0c8acaArthur Ishiguro#include <shared/abort.h> 224d04a937b1bf7a949dfb00650b2640a9ed0c8acaArthur Ishiguro#include <shared/array_length.h> 234d04a937b1bf7a949dfb00650b2640a9ed0c8acaArthur Ishiguro#include <shared/send_message.h> 244d04a937b1bf7a949dfb00650b2640a9ed0c8acaArthur Ishiguro 254d04a937b1bf7a949dfb00650b2640a9ed0c8acaArthur Ishiguro#include <chre.h> 264d04a937b1bf7a949dfb00650b2640a9ed0c8acaArthur Ishiguro 274d04a937b1bf7a949dfb00650b2640a9ed0c8acaArthur Ishigurousing nanoapp_testing::sendFatalFailureToHost; 284d04a937b1bf7a949dfb00650b2640a9ed0c8acaArthur Ishigurousing nanoapp_testing::sendSuccessToHost; 294d04a937b1bf7a949dfb00650b2640a9ed0c8acaArthur Ishiguro 304d04a937b1bf7a949dfb00650b2640a9ed0c8acaArthur Ishiguro/* 314d04a937b1bf7a949dfb00650b2640a9ed0c8acaArthur Ishiguro * In a properly running test, we'll invoke chreSendEvent() a total of 12 times. 324d04a937b1bf7a949dfb00650b2640a9ed0c8acaArthur Ishiguro * We initially send eight events upon startup. And then for each of our four 334d04a937b1bf7a949dfb00650b2640a9ed0c8acaArthur Ishiguro * events which has a non-nullptr completeCallback, we call chreSendEvent() 344d04a937b1bf7a949dfb00650b2640a9ed0c8acaArthur Ishiguro * from that callback. 354d04a937b1bf7a949dfb00650b2640a9ed0c8acaArthur Ishiguro * 364d04a937b1bf7a949dfb00650b2640a9ed0c8acaArthur Ishiguro * For our first eight events, they will either be kEventType0 or kEventType1. 374d04a937b1bf7a949dfb00650b2640a9ed0c8acaArthur Ishiguro * They will either use completeCallback0 or completeCallback1. They have 384d04a937b1bf7a949dfb00650b2640a9ed0c8acaArthur Ishiguro * various data. This table describes them all: 394d04a937b1bf7a949dfb00650b2640a9ed0c8acaArthur Ishiguro * 404d04a937b1bf7a949dfb00650b2640a9ed0c8acaArthur Ishiguro * num | eventType | data | Callback 414d04a937b1bf7a949dfb00650b2640a9ed0c8acaArthur Ishiguro * ----|-----------|------------|--------- 424d04a937b1bf7a949dfb00650b2640a9ed0c8acaArthur Ishiguro * 0 | 0 | ptr to num | 0 434d04a937b1bf7a949dfb00650b2640a9ed0c8acaArthur Ishiguro * 1 | 0 | ptr to num | 1 444d04a937b1bf7a949dfb00650b2640a9ed0c8acaArthur Ishiguro * 2 | 1 | ptr to num | 0 454d04a937b1bf7a949dfb00650b2640a9ed0c8acaArthur Ishiguro * 3 | 1 | ptr to num | 1 464d04a937b1bf7a949dfb00650b2640a9ed0c8acaArthur Ishiguro * 4 | 0 | ptr to num | nullptr 474d04a937b1bf7a949dfb00650b2640a9ed0c8acaArthur Ishiguro * 5 | 1 | ptr to num | nullptr 484d04a937b1bf7a949dfb00650b2640a9ed0c8acaArthur Ishiguro * 6 | 0 | nullptr | nullptr 494d04a937b1bf7a949dfb00650b2640a9ed0c8acaArthur Ishiguro * 7 | 1 | kOddData | nullptr 504d04a937b1bf7a949dfb00650b2640a9ed0c8acaArthur Ishiguro * 514d04a937b1bf7a949dfb00650b2640a9ed0c8acaArthur Ishiguro * The other four events are all kEventTypeCallback with nullptr data and 524d04a937b1bf7a949dfb00650b2640a9ed0c8acaArthur Ishiguro * nullptr callback. 534d04a937b1bf7a949dfb00650b2640a9ed0c8acaArthur Ishiguro */ 544d04a937b1bf7a949dfb00650b2640a9ed0c8acaArthur Ishiguro 554d04a937b1bf7a949dfb00650b2640a9ed0c8acaArthur Ishiguroconstexpr uint16_t kEventType0 = CHRE_EVENT_FIRST_USER_VALUE + 0; 564d04a937b1bf7a949dfb00650b2640a9ed0c8acaArthur Ishiguroconstexpr uint16_t kEventType1 = CHRE_EVENT_FIRST_USER_VALUE + 1; 574d04a937b1bf7a949dfb00650b2640a9ed0c8acaArthur Ishiguroconstexpr uint16_t kEventTypeCallback = CHRE_EVENT_FIRST_USER_VALUE + 2; 584d04a937b1bf7a949dfb00650b2640a9ed0c8acaArthur Ishiguro 594d04a937b1bf7a949dfb00650b2640a9ed0c8acaArthur Ishiguro// NOTE: This is not allowed to be constexpr, even if some version of g++/clang 604d04a937b1bf7a949dfb00650b2640a9ed0c8acaArthur Ishiguro// allow it. 614d04a937b1bf7a949dfb00650b2640a9ed0c8acaArthur Ishigurostatic void *kOddData = reinterpret_cast<void*>(-1); 624d04a937b1bf7a949dfb00650b2640a9ed0c8acaArthur Ishiguro 634d04a937b1bf7a949dfb00650b2640a9ed0c8acaArthur Ishiguronamespace general_test { 644d04a937b1bf7a949dfb00650b2640a9ed0c8acaArthur Ishiguro 654d04a937b1bf7a949dfb00650b2640a9ed0c8acaArthur Ishigurobool SendEventTest::sInMethod = false; 664d04a937b1bf7a949dfb00650b2640a9ed0c8acaArthur Ishigurouint8_t SendEventTest::sCallbacksInvoked = 0; 674d04a937b1bf7a949dfb00650b2640a9ed0c8acaArthur Ishiguro 684d04a937b1bf7a949dfb00650b2640a9ed0c8acaArthur Ishigurotemplate<uint8_t kCallbackIndex> 694d04a937b1bf7a949dfb00650b2640a9ed0c8acaArthur Ishigurovoid SendEventTest::completeCallback(uint16_t eventType, void *data) { 704d04a937b1bf7a949dfb00650b2640a9ed0c8acaArthur Ishiguro if (sInMethod) { 714d04a937b1bf7a949dfb00650b2640a9ed0c8acaArthur Ishiguro sendFatalFailureToHost("completeCallback called while another nanoapp " 724d04a937b1bf7a949dfb00650b2640a9ed0c8acaArthur Ishiguro "method is running."); 734d04a937b1bf7a949dfb00650b2640a9ed0c8acaArthur Ishiguro } 744d04a937b1bf7a949dfb00650b2640a9ed0c8acaArthur Ishiguro sInMethod = true; 754d04a937b1bf7a949dfb00650b2640a9ed0c8acaArthur Ishiguro if ((data == nullptr) || (data == kOddData)) { 764d04a937b1bf7a949dfb00650b2640a9ed0c8acaArthur Ishiguro sendFatalFailureToHost( 774d04a937b1bf7a949dfb00650b2640a9ed0c8acaArthur Ishiguro "completeCallback called with nullptr or odd data."); 784d04a937b1bf7a949dfb00650b2640a9ed0c8acaArthur Ishiguro } 794d04a937b1bf7a949dfb00650b2640a9ed0c8acaArthur Ishiguro uint32_t num = *(reinterpret_cast<uint32_t*>(data)); 804d04a937b1bf7a949dfb00650b2640a9ed0c8acaArthur Ishiguro uint16_t expectedEventType = 0xFFFF; 814d04a937b1bf7a949dfb00650b2640a9ed0c8acaArthur Ishiguro uint8_t expectedCallbackIndex = 0xFF; 824d04a937b1bf7a949dfb00650b2640a9ed0c8acaArthur Ishiguro switch (num) { 834d04a937b1bf7a949dfb00650b2640a9ed0c8acaArthur Ishiguro case 0: 844d04a937b1bf7a949dfb00650b2640a9ed0c8acaArthur Ishiguro expectedEventType = kEventType0; 854d04a937b1bf7a949dfb00650b2640a9ed0c8acaArthur Ishiguro expectedCallbackIndex = 0; 864d04a937b1bf7a949dfb00650b2640a9ed0c8acaArthur Ishiguro break; 874d04a937b1bf7a949dfb00650b2640a9ed0c8acaArthur Ishiguro case 1: 884d04a937b1bf7a949dfb00650b2640a9ed0c8acaArthur Ishiguro expectedEventType = kEventType0; 894d04a937b1bf7a949dfb00650b2640a9ed0c8acaArthur Ishiguro expectedCallbackIndex = 1; 904d04a937b1bf7a949dfb00650b2640a9ed0c8acaArthur Ishiguro break; 914d04a937b1bf7a949dfb00650b2640a9ed0c8acaArthur Ishiguro case 2: 924d04a937b1bf7a949dfb00650b2640a9ed0c8acaArthur Ishiguro expectedEventType = kEventType1; 934d04a937b1bf7a949dfb00650b2640a9ed0c8acaArthur Ishiguro expectedCallbackIndex = 0; 944d04a937b1bf7a949dfb00650b2640a9ed0c8acaArthur Ishiguro break; 954d04a937b1bf7a949dfb00650b2640a9ed0c8acaArthur Ishiguro case 3: 964d04a937b1bf7a949dfb00650b2640a9ed0c8acaArthur Ishiguro expectedEventType = kEventType1; 974d04a937b1bf7a949dfb00650b2640a9ed0c8acaArthur Ishiguro expectedCallbackIndex = 1; 984d04a937b1bf7a949dfb00650b2640a9ed0c8acaArthur Ishiguro break; 994d04a937b1bf7a949dfb00650b2640a9ed0c8acaArthur Ishiguro default: 1004d04a937b1bf7a949dfb00650b2640a9ed0c8acaArthur Ishiguro sendFatalFailureToHost("completeCallback given bad data.", &num); 1014d04a937b1bf7a949dfb00650b2640a9ed0c8acaArthur Ishiguro } 1024d04a937b1bf7a949dfb00650b2640a9ed0c8acaArthur Ishiguro if (expectedEventType != eventType) { 1034d04a937b1bf7a949dfb00650b2640a9ed0c8acaArthur Ishiguro sendFatalFailureToHost("completeCallback bad/eventType mismatch."); 1044d04a937b1bf7a949dfb00650b2640a9ed0c8acaArthur Ishiguro } 1054d04a937b1bf7a949dfb00650b2640a9ed0c8acaArthur Ishiguro if (expectedCallbackIndex != kCallbackIndex) { 1064d04a937b1bf7a949dfb00650b2640a9ed0c8acaArthur Ishiguro sendFatalFailureToHost("Incorrect callback function called."); 1074d04a937b1bf7a949dfb00650b2640a9ed0c8acaArthur Ishiguro } 1084d04a937b1bf7a949dfb00650b2640a9ed0c8acaArthur Ishiguro uint8_t mask = 1 << num; 1094d04a937b1bf7a949dfb00650b2640a9ed0c8acaArthur Ishiguro if ((sCallbacksInvoked & mask) != 0) { 1104d04a937b1bf7a949dfb00650b2640a9ed0c8acaArthur Ishiguro sendFatalFailureToHost("Complete callback invoked multiple times for ", 1114d04a937b1bf7a949dfb00650b2640a9ed0c8acaArthur Ishiguro &num); 1124d04a937b1bf7a949dfb00650b2640a9ed0c8acaArthur Ishiguro } 1134d04a937b1bf7a949dfb00650b2640a9ed0c8acaArthur Ishiguro sCallbacksInvoked |= mask; 1144d04a937b1bf7a949dfb00650b2640a9ed0c8acaArthur Ishiguro 1154d04a937b1bf7a949dfb00650b2640a9ed0c8acaArthur Ishiguro if (!chreSendEvent(kEventTypeCallback, nullptr, nullptr, 1164d04a937b1bf7a949dfb00650b2640a9ed0c8acaArthur Ishiguro chreGetInstanceId())) { 1174d04a937b1bf7a949dfb00650b2640a9ed0c8acaArthur Ishiguro sendFatalFailureToHost("Failed chreSendEvent in callback."); 1184d04a937b1bf7a949dfb00650b2640a9ed0c8acaArthur Ishiguro } 1194d04a937b1bf7a949dfb00650b2640a9ed0c8acaArthur Ishiguro sInMethod = false; 1204d04a937b1bf7a949dfb00650b2640a9ed0c8acaArthur Ishiguro} 1214d04a937b1bf7a949dfb00650b2640a9ed0c8acaArthur Ishiguro 1224d04a937b1bf7a949dfb00650b2640a9ed0c8acaArthur Ishigurovoid SendEventTest::completeCallback0(uint16_t eventType, void *data) { 1234d04a937b1bf7a949dfb00650b2640a9ed0c8acaArthur Ishiguro completeCallback<0>(eventType, data); 1244d04a937b1bf7a949dfb00650b2640a9ed0c8acaArthur Ishiguro} 1254d04a937b1bf7a949dfb00650b2640a9ed0c8acaArthur Ishiguro 1264d04a937b1bf7a949dfb00650b2640a9ed0c8acaArthur Ishigurovoid SendEventTest::completeCallback1(uint16_t eventType, void *data) { 1274d04a937b1bf7a949dfb00650b2640a9ed0c8acaArthur Ishiguro completeCallback<1>(eventType, data); 1284d04a937b1bf7a949dfb00650b2640a9ed0c8acaArthur Ishiguro} 1294d04a937b1bf7a949dfb00650b2640a9ed0c8acaArthur Ishiguro 1304d04a937b1bf7a949dfb00650b2640a9ed0c8acaArthur IshiguroSendEventTest::SendEventTest() 1314d04a937b1bf7a949dfb00650b2640a9ed0c8acaArthur Ishiguro : Test(CHRE_API_VERSION_1_0) , mNextNum(0) { 1324d04a937b1bf7a949dfb00650b2640a9ed0c8acaArthur Ishiguro} 1334d04a937b1bf7a949dfb00650b2640a9ed0c8acaArthur Ishiguro 1344d04a937b1bf7a949dfb00650b2640a9ed0c8acaArthur Ishigurovoid SendEventTest::setUp(uint32_t messageSize, const void * /* message */) { 1354d04a937b1bf7a949dfb00650b2640a9ed0c8acaArthur Ishiguro sInMethod = true; 1364d04a937b1bf7a949dfb00650b2640a9ed0c8acaArthur Ishiguro if (messageSize != 0) { 1374d04a937b1bf7a949dfb00650b2640a9ed0c8acaArthur Ishiguro sendFatalFailureToHost( 1384d04a937b1bf7a949dfb00650b2640a9ed0c8acaArthur Ishiguro "SendEvent message expects 0 additional bytes, got ", 1394d04a937b1bf7a949dfb00650b2640a9ed0c8acaArthur Ishiguro &messageSize); 1404d04a937b1bf7a949dfb00650b2640a9ed0c8acaArthur Ishiguro } 1414d04a937b1bf7a949dfb00650b2640a9ed0c8acaArthur Ishiguro 1424d04a937b1bf7a949dfb00650b2640a9ed0c8acaArthur Ishiguro const uint32_t id = chreGetInstanceId(); 1434d04a937b1bf7a949dfb00650b2640a9ed0c8acaArthur Ishiguro for (uint32_t i = 0; i < arrayLength(mData); i++) { 1444d04a937b1bf7a949dfb00650b2640a9ed0c8acaArthur Ishiguro mData[i] = i; 1454d04a937b1bf7a949dfb00650b2640a9ed0c8acaArthur Ishiguro } 1464d04a937b1bf7a949dfb00650b2640a9ed0c8acaArthur Ishiguro 1474d04a937b1bf7a949dfb00650b2640a9ed0c8acaArthur Ishiguro // num: 0 1484d04a937b1bf7a949dfb00650b2640a9ed0c8acaArthur Ishiguro if (!chreSendEvent(kEventType0, &mData[0], completeCallback0, id)) { 1494d04a937b1bf7a949dfb00650b2640a9ed0c8acaArthur Ishiguro sendFatalFailureToHost("Failed chreSendEvent num 0"); 1504d04a937b1bf7a949dfb00650b2640a9ed0c8acaArthur Ishiguro } 1514d04a937b1bf7a949dfb00650b2640a9ed0c8acaArthur Ishiguro 1524d04a937b1bf7a949dfb00650b2640a9ed0c8acaArthur Ishiguro // num: 1 1534d04a937b1bf7a949dfb00650b2640a9ed0c8acaArthur Ishiguro if (!chreSendEvent(kEventType0, &mData[1], completeCallback1, id)) { 1544d04a937b1bf7a949dfb00650b2640a9ed0c8acaArthur Ishiguro sendFatalFailureToHost("Failed chreSendEvent num 1"); 1554d04a937b1bf7a949dfb00650b2640a9ed0c8acaArthur Ishiguro } 1564d04a937b1bf7a949dfb00650b2640a9ed0c8acaArthur Ishiguro 1574d04a937b1bf7a949dfb00650b2640a9ed0c8acaArthur Ishiguro // num: 2 1584d04a937b1bf7a949dfb00650b2640a9ed0c8acaArthur Ishiguro if (!chreSendEvent(kEventType1, &mData[2], completeCallback0, id)) { 1594d04a937b1bf7a949dfb00650b2640a9ed0c8acaArthur Ishiguro sendFatalFailureToHost("Failed chreSendEvent num 2"); 1604d04a937b1bf7a949dfb00650b2640a9ed0c8acaArthur Ishiguro } 1614d04a937b1bf7a949dfb00650b2640a9ed0c8acaArthur Ishiguro 1624d04a937b1bf7a949dfb00650b2640a9ed0c8acaArthur Ishiguro // num: 3 1634d04a937b1bf7a949dfb00650b2640a9ed0c8acaArthur Ishiguro if (!chreSendEvent(kEventType1, &mData[3], completeCallback1, id)) { 1644d04a937b1bf7a949dfb00650b2640a9ed0c8acaArthur Ishiguro sendFatalFailureToHost("Failed chreSendEvent num 3"); 1654d04a937b1bf7a949dfb00650b2640a9ed0c8acaArthur Ishiguro } 1664d04a937b1bf7a949dfb00650b2640a9ed0c8acaArthur Ishiguro 1674d04a937b1bf7a949dfb00650b2640a9ed0c8acaArthur Ishiguro // num: 4 1684d04a937b1bf7a949dfb00650b2640a9ed0c8acaArthur Ishiguro if (!chreSendEvent(kEventType0, &mData[4], nullptr, id)) { 1694d04a937b1bf7a949dfb00650b2640a9ed0c8acaArthur Ishiguro sendFatalFailureToHost("Failed chreSendEvent num 4"); 1704d04a937b1bf7a949dfb00650b2640a9ed0c8acaArthur Ishiguro } 1714d04a937b1bf7a949dfb00650b2640a9ed0c8acaArthur Ishiguro 1724d04a937b1bf7a949dfb00650b2640a9ed0c8acaArthur Ishiguro // num: 5 1734d04a937b1bf7a949dfb00650b2640a9ed0c8acaArthur Ishiguro if (!chreSendEvent(kEventType1, &mData[5], nullptr, id)) { 1744d04a937b1bf7a949dfb00650b2640a9ed0c8acaArthur Ishiguro sendFatalFailureToHost("Failed chreSendEvent num 5"); 1754d04a937b1bf7a949dfb00650b2640a9ed0c8acaArthur Ishiguro } 1764d04a937b1bf7a949dfb00650b2640a9ed0c8acaArthur Ishiguro 1774d04a937b1bf7a949dfb00650b2640a9ed0c8acaArthur Ishiguro // num: 6 1784d04a937b1bf7a949dfb00650b2640a9ed0c8acaArthur Ishiguro if (!chreSendEvent(kEventType0, nullptr, nullptr, id)) { 1794d04a937b1bf7a949dfb00650b2640a9ed0c8acaArthur Ishiguro sendFatalFailureToHost("Failed chreSendEvent num 6"); 1804d04a937b1bf7a949dfb00650b2640a9ed0c8acaArthur Ishiguro } 1814d04a937b1bf7a949dfb00650b2640a9ed0c8acaArthur Ishiguro 1824d04a937b1bf7a949dfb00650b2640a9ed0c8acaArthur Ishiguro // num: 7 1834d04a937b1bf7a949dfb00650b2640a9ed0c8acaArthur Ishiguro if (!chreSendEvent(kEventType1, kOddData, nullptr, id)) { 1844d04a937b1bf7a949dfb00650b2640a9ed0c8acaArthur Ishiguro sendFatalFailureToHost("Failed chreSendEvent num 7"); 1854d04a937b1bf7a949dfb00650b2640a9ed0c8acaArthur Ishiguro } 1864d04a937b1bf7a949dfb00650b2640a9ed0c8acaArthur Ishiguro 1874d04a937b1bf7a949dfb00650b2640a9ed0c8acaArthur Ishiguro sInMethod = false; 1884d04a937b1bf7a949dfb00650b2640a9ed0c8acaArthur Ishiguro} 1894d04a937b1bf7a949dfb00650b2640a9ed0c8acaArthur Ishiguro 1904d04a937b1bf7a949dfb00650b2640a9ed0c8acaArthur Ishigurovoid SendEventTest::handleEvent(uint32_t senderInstanceId, 1914d04a937b1bf7a949dfb00650b2640a9ed0c8acaArthur Ishiguro uint16_t eventType, const void* eventData) { 1924d04a937b1bf7a949dfb00650b2640a9ed0c8acaArthur Ishiguro if (sInMethod) { 1934d04a937b1bf7a949dfb00650b2640a9ed0c8acaArthur Ishiguro sendFatalFailureToHost("handleEvent invoked while another nanoapp " 1944d04a937b1bf7a949dfb00650b2640a9ed0c8acaArthur Ishiguro "method is running"); 1954d04a937b1bf7a949dfb00650b2640a9ed0c8acaArthur Ishiguro } 1964d04a937b1bf7a949dfb00650b2640a9ed0c8acaArthur Ishiguro sInMethod = true; 1974d04a937b1bf7a949dfb00650b2640a9ed0c8acaArthur Ishiguro if (senderInstanceId != chreGetInstanceId()) { 1984d04a937b1bf7a949dfb00650b2640a9ed0c8acaArthur Ishiguro sendFatalFailureToHost("handleEvent got event from unexpected sender:", 1994d04a937b1bf7a949dfb00650b2640a9ed0c8acaArthur Ishiguro &senderInstanceId); 2004d04a937b1bf7a949dfb00650b2640a9ed0c8acaArthur Ishiguro } 2014d04a937b1bf7a949dfb00650b2640a9ed0c8acaArthur Ishiguro 2024d04a937b1bf7a949dfb00650b2640a9ed0c8acaArthur Ishiguro if (mNextNum < 8) { 2034d04a937b1bf7a949dfb00650b2640a9ed0c8acaArthur Ishiguro void *expectedData; 2044d04a937b1bf7a949dfb00650b2640a9ed0c8acaArthur Ishiguro if (mNextNum < 6) { 2054d04a937b1bf7a949dfb00650b2640a9ed0c8acaArthur Ishiguro expectedData = &mData[mNextNum]; 2064d04a937b1bf7a949dfb00650b2640a9ed0c8acaArthur Ishiguro } else if (mNextNum == 6) { 2074d04a937b1bf7a949dfb00650b2640a9ed0c8acaArthur Ishiguro expectedData = nullptr; 2084d04a937b1bf7a949dfb00650b2640a9ed0c8acaArthur Ishiguro } else { 2094d04a937b1bf7a949dfb00650b2640a9ed0c8acaArthur Ishiguro expectedData = kOddData; 2104d04a937b1bf7a949dfb00650b2640a9ed0c8acaArthur Ishiguro } 2114d04a937b1bf7a949dfb00650b2640a9ed0c8acaArthur Ishiguro 2124d04a937b1bf7a949dfb00650b2640a9ed0c8acaArthur Ishiguro uint16_t expectedEventType = 0xFFFF; 2134d04a937b1bf7a949dfb00650b2640a9ed0c8acaArthur Ishiguro switch (mNextNum) { 2144d04a937b1bf7a949dfb00650b2640a9ed0c8acaArthur Ishiguro case 0: 2154d04a937b1bf7a949dfb00650b2640a9ed0c8acaArthur Ishiguro case 1: 2164d04a937b1bf7a949dfb00650b2640a9ed0c8acaArthur Ishiguro case 4: 2174d04a937b1bf7a949dfb00650b2640a9ed0c8acaArthur Ishiguro case 6: 2184d04a937b1bf7a949dfb00650b2640a9ed0c8acaArthur Ishiguro expectedEventType = kEventType0; 2194d04a937b1bf7a949dfb00650b2640a9ed0c8acaArthur Ishiguro break; 2204d04a937b1bf7a949dfb00650b2640a9ed0c8acaArthur Ishiguro case 2: 2214d04a937b1bf7a949dfb00650b2640a9ed0c8acaArthur Ishiguro case 3: 2224d04a937b1bf7a949dfb00650b2640a9ed0c8acaArthur Ishiguro case 5: 2234d04a937b1bf7a949dfb00650b2640a9ed0c8acaArthur Ishiguro case 7: 2244d04a937b1bf7a949dfb00650b2640a9ed0c8acaArthur Ishiguro expectedEventType = kEventType1; 2254d04a937b1bf7a949dfb00650b2640a9ed0c8acaArthur Ishiguro break; 2264d04a937b1bf7a949dfb00650b2640a9ed0c8acaArthur Ishiguro } 2274d04a937b1bf7a949dfb00650b2640a9ed0c8acaArthur Ishiguro 2284d04a937b1bf7a949dfb00650b2640a9ed0c8acaArthur Ishiguro if (expectedEventType != eventType) { 2294d04a937b1bf7a949dfb00650b2640a9ed0c8acaArthur Ishiguro sendFatalFailureToHost("Incorrect event type sent for num ", 2304d04a937b1bf7a949dfb00650b2640a9ed0c8acaArthur Ishiguro &mNextNum); 2314d04a937b1bf7a949dfb00650b2640a9ed0c8acaArthur Ishiguro } 2324d04a937b1bf7a949dfb00650b2640a9ed0c8acaArthur Ishiguro if (expectedData != eventData) { 2334d04a937b1bf7a949dfb00650b2640a9ed0c8acaArthur Ishiguro sendFatalFailureToHost("Incorrect data sent for num ", &mNextNum); 2344d04a937b1bf7a949dfb00650b2640a9ed0c8acaArthur Ishiguro } 2354d04a937b1bf7a949dfb00650b2640a9ed0c8acaArthur Ishiguro 2364d04a937b1bf7a949dfb00650b2640a9ed0c8acaArthur Ishiguro } else { 2374d04a937b1bf7a949dfb00650b2640a9ed0c8acaArthur Ishiguro if (eventType != kEventTypeCallback) { 2384d04a937b1bf7a949dfb00650b2640a9ed0c8acaArthur Ishiguro sendFatalFailureToHost("Unexpected event type for num ", &mNextNum); 2394d04a937b1bf7a949dfb00650b2640a9ed0c8acaArthur Ishiguro } 2404d04a937b1bf7a949dfb00650b2640a9ed0c8acaArthur Ishiguro if (mNextNum == 11) { 2414d04a937b1bf7a949dfb00650b2640a9ed0c8acaArthur Ishiguro // This was our last callback. Everything is good. 2424d04a937b1bf7a949dfb00650b2640a9ed0c8acaArthur Ishiguro sendSuccessToHost(); 2434d04a937b1bf7a949dfb00650b2640a9ed0c8acaArthur Ishiguro } 2444d04a937b1bf7a949dfb00650b2640a9ed0c8acaArthur Ishiguro } 2454d04a937b1bf7a949dfb00650b2640a9ed0c8acaArthur Ishiguro 2464d04a937b1bf7a949dfb00650b2640a9ed0c8acaArthur Ishiguro mNextNum++; 2474d04a937b1bf7a949dfb00650b2640a9ed0c8acaArthur Ishiguro sInMethod = false; 2484d04a937b1bf7a949dfb00650b2640a9ed0c8acaArthur Ishiguro} 2494d04a937b1bf7a949dfb00650b2640a9ed0c8acaArthur Ishiguro 2504d04a937b1bf7a949dfb00650b2640a9ed0c8acaArthur Ishiguro} // namespace general_test 251