1*84e33947SAndroid Build Coastguard Worker /*
2*84e33947SAndroid Build Coastguard Worker * Copyright (C) 2021 The Android Open Source Project
3*84e33947SAndroid Build Coastguard Worker *
4*84e33947SAndroid Build Coastguard Worker * Licensed under the Apache License, Version 2.0 (the "License");
5*84e33947SAndroid Build Coastguard Worker * you may not use this file except in compliance with the License.
6*84e33947SAndroid Build Coastguard Worker * You may obtain a copy of the License at
7*84e33947SAndroid Build Coastguard Worker *
8*84e33947SAndroid Build Coastguard Worker * http://www.apache.org/licenses/LICENSE-2.0
9*84e33947SAndroid Build Coastguard Worker *
10*84e33947SAndroid Build Coastguard Worker * Unless required by applicable law or agreed to in writing, software
11*84e33947SAndroid Build Coastguard Worker * distributed under the License is distributed on an "AS IS" BASIS,
12*84e33947SAndroid Build Coastguard Worker * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13*84e33947SAndroid Build Coastguard Worker * See the License for the specific language governing permissions and
14*84e33947SAndroid Build Coastguard Worker * limitations under the License.
15*84e33947SAndroid Build Coastguard Worker */
16*84e33947SAndroid Build Coastguard Worker
17*84e33947SAndroid Build Coastguard Worker #include "app_timeout_test.h"
18*84e33947SAndroid Build Coastguard Worker
19*84e33947SAndroid Build Coastguard Worker #include <gtest/gtest.h>
20*84e33947SAndroid Build Coastguard Worker #include <string.h>
21*84e33947SAndroid Build Coastguard Worker #include <cstdint>
22*84e33947SAndroid Build Coastguard Worker #include <thread>
23*84e33947SAndroid Build Coastguard Worker
24*84e33947SAndroid Build Coastguard Worker #include "chpp/app.h"
25*84e33947SAndroid Build Coastguard Worker #include "chpp/clients.h"
26*84e33947SAndroid Build Coastguard Worker #include "chpp/clients/gnss.h"
27*84e33947SAndroid Build Coastguard Worker #include "chpp/clients/wifi.h"
28*84e33947SAndroid Build Coastguard Worker #include "chpp/clients/wwan.h"
29*84e33947SAndroid Build Coastguard Worker #include "chpp/macros.h"
30*84e33947SAndroid Build Coastguard Worker #include "chpp/memory.h"
31*84e33947SAndroid Build Coastguard Worker #include "chpp/platform/platform_link.h"
32*84e33947SAndroid Build Coastguard Worker #include "chpp/platform/utils.h"
33*84e33947SAndroid Build Coastguard Worker #include "chpp/services.h"
34*84e33947SAndroid Build Coastguard Worker #include "chpp/time.h"
35*84e33947SAndroid Build Coastguard Worker #include "chpp/transport.h"
36*84e33947SAndroid Build Coastguard Worker #include "chre/pal/wwan.h"
37*84e33947SAndroid Build Coastguard Worker
38*84e33947SAndroid Build Coastguard Worker namespace chre {
39*84e33947SAndroid Build Coastguard Worker namespace {
40*84e33947SAndroid Build Coastguard Worker
41*84e33947SAndroid Build Coastguard Worker #define TEST_UUID \
42*84e33947SAndroid Build Coastguard Worker { \
43*84e33947SAndroid Build Coastguard Worker 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, \
44*84e33947SAndroid Build Coastguard Worker 0x00, 0x00, 0x00, 0x12 \
45*84e33947SAndroid Build Coastguard Worker }
46*84e33947SAndroid Build Coastguard Worker
47*84e33947SAndroid Build Coastguard Worker // Number of requests supported by the client and the service.
48*84e33947SAndroid Build Coastguard Worker constexpr uint16_t kNumCommands = 3;
49*84e33947SAndroid Build Coastguard Worker
50*84e33947SAndroid Build Coastguard Worker struct ClientState {
51*84e33947SAndroid Build Coastguard Worker struct ChppEndpointState chppClientState;
52*84e33947SAndroid Build Coastguard Worker struct ChppOutgoingRequestState outReqStates[kNumCommands];
53*84e33947SAndroid Build Coastguard Worker };
54*84e33947SAndroid Build Coastguard Worker
55*84e33947SAndroid Build Coastguard Worker constexpr struct ChppClient kClient = {
56*84e33947SAndroid Build Coastguard Worker .descriptor.uuid = TEST_UUID,
57*84e33947SAndroid Build Coastguard Worker .descriptor.version.major = 1,
58*84e33947SAndroid Build Coastguard Worker .descriptor.version.minor = 0,
59*84e33947SAndroid Build Coastguard Worker .descriptor.version.patch = 0,
60*84e33947SAndroid Build Coastguard Worker .outReqCount = kNumCommands,
61*84e33947SAndroid Build Coastguard Worker .minLength = sizeof(struct ChppAppHeader),
62*84e33947SAndroid Build Coastguard Worker };
63*84e33947SAndroid Build Coastguard Worker
64*84e33947SAndroid Build Coastguard Worker struct ServiceState {
65*84e33947SAndroid Build Coastguard Worker struct ChppEndpointState chppServiceState;
66*84e33947SAndroid Build Coastguard Worker struct ChppOutgoingRequestState outReqStates[kNumCommands];
67*84e33947SAndroid Build Coastguard Worker };
68*84e33947SAndroid Build Coastguard Worker
69*84e33947SAndroid Build Coastguard Worker const struct ChppService kService = {
70*84e33947SAndroid Build Coastguard Worker .descriptor.uuid = TEST_UUID,
71*84e33947SAndroid Build Coastguard Worker .descriptor.name = "Test",
72*84e33947SAndroid Build Coastguard Worker .descriptor.version.major = 1,
73*84e33947SAndroid Build Coastguard Worker .descriptor.version.minor = 0,
74*84e33947SAndroid Build Coastguard Worker .descriptor.version.patch = 0,
75*84e33947SAndroid Build Coastguard Worker .outReqCount = kNumCommands,
76*84e33947SAndroid Build Coastguard Worker .minLength = sizeof(struct ChppAppHeader),
77*84e33947SAndroid Build Coastguard Worker };
78*84e33947SAndroid Build Coastguard Worker
ValidateClientStateAndReqState(struct ChppEndpointState * clientState,const struct ChppAppHeader * request)79*84e33947SAndroid Build Coastguard Worker void ValidateClientStateAndReqState(struct ChppEndpointState *clientState,
80*84e33947SAndroid Build Coastguard Worker const struct ChppAppHeader *request) {
81*84e33947SAndroid Build Coastguard Worker ASSERT_NE(clientState, nullptr);
82*84e33947SAndroid Build Coastguard Worker const uint8_t clientIdx = clientState->index;
83*84e33947SAndroid Build Coastguard Worker
84*84e33947SAndroid Build Coastguard Worker ASSERT_NE(clientState->appContext, nullptr);
85*84e33947SAndroid Build Coastguard Worker ASSERT_NE(clientState->appContext->registeredClients, nullptr);
86*84e33947SAndroid Build Coastguard Worker ASSERT_NE(clientState->appContext->registeredClients[clientIdx], nullptr);
87*84e33947SAndroid Build Coastguard Worker ASSERT_LT(request->command,
88*84e33947SAndroid Build Coastguard Worker clientState->appContext->registeredClients[clientIdx]->outReqCount);
89*84e33947SAndroid Build Coastguard Worker ASSERT_NE(clientState->appContext->registeredClientStates[clientIdx],
90*84e33947SAndroid Build Coastguard Worker nullptr);
91*84e33947SAndroid Build Coastguard Worker ASSERT_NE(
92*84e33947SAndroid Build Coastguard Worker clientState->appContext->registeredClientStates[clientIdx]->outReqStates,
93*84e33947SAndroid Build Coastguard Worker nullptr);
94*84e33947SAndroid Build Coastguard Worker ASSERT_NE(clientState->appContext->registeredClientStates[clientIdx]->context,
95*84e33947SAndroid Build Coastguard Worker nullptr);
96*84e33947SAndroid Build Coastguard Worker }
97*84e33947SAndroid Build Coastguard Worker
ValidateServiceStateAndReqState(struct ChppEndpointState * serviceState,const struct ChppAppHeader * request)98*84e33947SAndroid Build Coastguard Worker void ValidateServiceStateAndReqState(struct ChppEndpointState *serviceState,
99*84e33947SAndroid Build Coastguard Worker const struct ChppAppHeader *request) {
100*84e33947SAndroid Build Coastguard Worker ASSERT_NE(serviceState, nullptr);
101*84e33947SAndroid Build Coastguard Worker const uint8_t serviceIdx = serviceState->index;
102*84e33947SAndroid Build Coastguard Worker
103*84e33947SAndroid Build Coastguard Worker ASSERT_NE(serviceState->appContext, nullptr);
104*84e33947SAndroid Build Coastguard Worker ASSERT_NE(serviceState->appContext->registeredServices, nullptr);
105*84e33947SAndroid Build Coastguard Worker ASSERT_NE(serviceState->appContext->registeredServices[serviceIdx], nullptr);
106*84e33947SAndroid Build Coastguard Worker ASSERT_LT(
107*84e33947SAndroid Build Coastguard Worker request->command,
108*84e33947SAndroid Build Coastguard Worker serviceState->appContext->registeredServices[serviceIdx]->outReqCount);
109*84e33947SAndroid Build Coastguard Worker ASSERT_NE(serviceState->appContext->registeredServiceStates[serviceIdx],
110*84e33947SAndroid Build Coastguard Worker nullptr);
111*84e33947SAndroid Build Coastguard Worker ASSERT_NE(serviceState->appContext->registeredServiceStates[serviceIdx]
112*84e33947SAndroid Build Coastguard Worker ->outReqStates,
113*84e33947SAndroid Build Coastguard Worker nullptr);
114*84e33947SAndroid Build Coastguard Worker ASSERT_NE(
115*84e33947SAndroid Build Coastguard Worker serviceState->appContext->registeredServiceStates[serviceIdx]->context,
116*84e33947SAndroid Build Coastguard Worker nullptr);
117*84e33947SAndroid Build Coastguard Worker }
118*84e33947SAndroid Build Coastguard Worker
validateTimeout(uint64_t timeoutTimeNs,uint64_t expectedTimeNs)119*84e33947SAndroid Build Coastguard Worker void validateTimeout(uint64_t timeoutTimeNs, uint64_t expectedTimeNs) {
120*84e33947SAndroid Build Coastguard Worker constexpr uint64_t kJitterNs = 10 * CHPP_NSEC_PER_MSEC;
121*84e33947SAndroid Build Coastguard Worker
122*84e33947SAndroid Build Coastguard Worker if (expectedTimeNs == CHPP_TIME_MAX) {
123*84e33947SAndroid Build Coastguard Worker EXPECT_EQ(timeoutTimeNs, expectedTimeNs);
124*84e33947SAndroid Build Coastguard Worker } else {
125*84e33947SAndroid Build Coastguard Worker EXPECT_GE(timeoutTimeNs, expectedTimeNs);
126*84e33947SAndroid Build Coastguard Worker EXPECT_LE(timeoutTimeNs, expectedTimeNs + kJitterNs);
127*84e33947SAndroid Build Coastguard Worker }
128*84e33947SAndroid Build Coastguard Worker }
129*84e33947SAndroid Build Coastguard Worker
validateTimeoutResponse(const struct ChppAppHeader * request,const struct ChppAppHeader * response)130*84e33947SAndroid Build Coastguard Worker void validateTimeoutResponse(const struct ChppAppHeader *request,
131*84e33947SAndroid Build Coastguard Worker const struct ChppAppHeader *response) {
132*84e33947SAndroid Build Coastguard Worker ASSERT_NE(request, nullptr);
133*84e33947SAndroid Build Coastguard Worker ASSERT_NE(response, nullptr);
134*84e33947SAndroid Build Coastguard Worker
135*84e33947SAndroid Build Coastguard Worker EXPECT_EQ(response->handle, request->handle);
136*84e33947SAndroid Build Coastguard Worker
137*84e33947SAndroid Build Coastguard Worker EXPECT_EQ(response->type, request->type == CHPP_MESSAGE_TYPE_CLIENT_REQUEST
138*84e33947SAndroid Build Coastguard Worker ? CHPP_MESSAGE_TYPE_SERVICE_RESPONSE
139*84e33947SAndroid Build Coastguard Worker : CHPP_MESSAGE_TYPE_CLIENT_RESPONSE);
140*84e33947SAndroid Build Coastguard Worker EXPECT_EQ(response->transaction, request->transaction);
141*84e33947SAndroid Build Coastguard Worker EXPECT_EQ(response->error, CHPP_APP_ERROR_TIMEOUT);
142*84e33947SAndroid Build Coastguard Worker EXPECT_EQ(response->command, request->command);
143*84e33947SAndroid Build Coastguard Worker }
144*84e33947SAndroid Build Coastguard Worker
145*84e33947SAndroid Build Coastguard Worker /**
146*84e33947SAndroid Build Coastguard Worker * Test timeout for client and service side requests.
147*84e33947SAndroid Build Coastguard Worker *
148*84e33947SAndroid Build Coastguard Worker * The test parameter is:
149*84e33947SAndroid Build Coastguard Worker * - CHPP_MESSAGE_TYPE_CLIENT_REQUEST for client side requests
150*84e33947SAndroid Build Coastguard Worker * - CHPP_MESSAGE_TYPE_SERVICE_REQUEST for service side requests
151*84e33947SAndroid Build Coastguard Worker */
152*84e33947SAndroid Build Coastguard Worker class TimeoutParamTest : public testing::TestWithParam<ChppMessageType> {
153*84e33947SAndroid Build Coastguard Worker protected:
SetUp()154*84e33947SAndroid Build Coastguard Worker void SetUp() override {
155*84e33947SAndroid Build Coastguard Worker chppClearTotalAllocBytes();
156*84e33947SAndroid Build Coastguard Worker
157*84e33947SAndroid Build Coastguard Worker memset(&mClientLinkContext, 0, sizeof(mClientLinkContext));
158*84e33947SAndroid Build Coastguard Worker memset(&mServiceLinkContext, 0, sizeof(mServiceLinkContext));
159*84e33947SAndroid Build Coastguard Worker
160*84e33947SAndroid Build Coastguard Worker mServiceLinkContext.isLinkActive = true;
161*84e33947SAndroid Build Coastguard Worker mServiceLinkContext.remoteLinkState = &mClientLinkContext;
162*84e33947SAndroid Build Coastguard Worker mServiceLinkContext.rxInRemoteEndpointWorker = false;
163*84e33947SAndroid Build Coastguard Worker
164*84e33947SAndroid Build Coastguard Worker mClientLinkContext.isLinkActive = true;
165*84e33947SAndroid Build Coastguard Worker mClientLinkContext.remoteLinkState = &mServiceLinkContext;
166*84e33947SAndroid Build Coastguard Worker mClientLinkContext.rxInRemoteEndpointWorker = false;
167*84e33947SAndroid Build Coastguard Worker
168*84e33947SAndroid Build Coastguard Worker // No default clients/services.
169*84e33947SAndroid Build Coastguard Worker struct ChppClientServiceSet set;
170*84e33947SAndroid Build Coastguard Worker memset(&set, 0, sizeof(set));
171*84e33947SAndroid Build Coastguard Worker
172*84e33947SAndroid Build Coastguard Worker const struct ChppLinkApi *linkApi = getLinuxLinkApi();
173*84e33947SAndroid Build Coastguard Worker
174*84e33947SAndroid Build Coastguard Worker // Init client side.
175*84e33947SAndroid Build Coastguard Worker chppTransportInit(&mClientTransportContext, &mClientAppContext,
176*84e33947SAndroid Build Coastguard Worker &mClientLinkContext, linkApi);
177*84e33947SAndroid Build Coastguard Worker mClientTransportContext.resetState = CHPP_RESET_STATE_NONE;
178*84e33947SAndroid Build Coastguard Worker chppAppInitWithClientServiceSet(&mClientAppContext,
179*84e33947SAndroid Build Coastguard Worker &mClientTransportContext, set);
180*84e33947SAndroid Build Coastguard Worker
181*84e33947SAndroid Build Coastguard Worker // Init service side.
182*84e33947SAndroid Build Coastguard Worker chppTransportInit(&mServiceTransportContext, &mServiceAppContext,
183*84e33947SAndroid Build Coastguard Worker &mServiceLinkContext, linkApi);
184*84e33947SAndroid Build Coastguard Worker mServiceTransportContext.resetState = CHPP_RESET_STATE_NONE;
185*84e33947SAndroid Build Coastguard Worker chppAppInitWithClientServiceSet(&mServiceAppContext,
186*84e33947SAndroid Build Coastguard Worker &mServiceTransportContext, set);
187*84e33947SAndroid Build Coastguard Worker
188*84e33947SAndroid Build Coastguard Worker // Bring up the client
189*84e33947SAndroid Build Coastguard Worker memset(&mClientState, 0, sizeof(mClientState));
190*84e33947SAndroid Build Coastguard Worker chppRegisterClient(&mClientAppContext, &mClientState,
191*84e33947SAndroid Build Coastguard Worker &mClientState.chppClientState,
192*84e33947SAndroid Build Coastguard Worker &mClientState.outReqStates[0], &kClient);
193*84e33947SAndroid Build Coastguard Worker
194*84e33947SAndroid Build Coastguard Worker // Bring up the service
195*84e33947SAndroid Build Coastguard Worker memset(&mServiceState, 0, sizeof(mServiceState));
196*84e33947SAndroid Build Coastguard Worker chppRegisterService(&mServiceAppContext, &mServiceState,
197*84e33947SAndroid Build Coastguard Worker &mServiceState.chppServiceState,
198*84e33947SAndroid Build Coastguard Worker &mServiceState.outReqStates[0], &kService);
199*84e33947SAndroid Build Coastguard Worker
200*84e33947SAndroid Build Coastguard Worker mClientLinkContext.linkEstablished = true;
201*84e33947SAndroid Build Coastguard Worker mServiceLinkContext.linkEstablished = true;
202*84e33947SAndroid Build Coastguard Worker
203*84e33947SAndroid Build Coastguard Worker chppClientInit(&mClientState.chppClientState,
204*84e33947SAndroid Build Coastguard Worker CHPP_HANDLE_NEGOTIATED_RANGE_START);
205*84e33947SAndroid Build Coastguard Worker }
206*84e33947SAndroid Build Coastguard Worker
TearDown()207*84e33947SAndroid Build Coastguard Worker void TearDown() override {
208*84e33947SAndroid Build Coastguard Worker chppAppDeinit(&mClientAppContext);
209*84e33947SAndroid Build Coastguard Worker chppTransportDeinit(&mClientTransportContext);
210*84e33947SAndroid Build Coastguard Worker chppClientDeinit(&mClientState.chppClientState);
211*84e33947SAndroid Build Coastguard Worker
212*84e33947SAndroid Build Coastguard Worker chppAppDeinit(&mServiceAppContext);
213*84e33947SAndroid Build Coastguard Worker chppTransportDeinit(&mServiceTransportContext);
214*84e33947SAndroid Build Coastguard Worker
215*84e33947SAndroid Build Coastguard Worker EXPECT_EQ(chppGetTotalAllocBytes(), 0);
216*84e33947SAndroid Build Coastguard Worker }
217*84e33947SAndroid Build Coastguard Worker
AllocRequestCommand(uint16_t command)218*84e33947SAndroid Build Coastguard Worker struct ChppAppHeader *AllocRequestCommand(uint16_t command) {
219*84e33947SAndroid Build Coastguard Worker return GetParam() == CHPP_MESSAGE_TYPE_CLIENT_REQUEST
220*84e33947SAndroid Build Coastguard Worker ? chppAllocClientRequestCommand(&mClientState.chppClientState,
221*84e33947SAndroid Build Coastguard Worker command)
222*84e33947SAndroid Build Coastguard Worker : chppAllocServiceRequestCommand(&mServiceState.chppServiceState,
223*84e33947SAndroid Build Coastguard Worker command);
224*84e33947SAndroid Build Coastguard Worker }
225*84e33947SAndroid Build Coastguard Worker
TimestampOutgoingRequest(struct ChppAppHeader * request,uint64_t timeoutNs)226*84e33947SAndroid Build Coastguard Worker void TimestampOutgoingRequest(struct ChppAppHeader *request,
227*84e33947SAndroid Build Coastguard Worker uint64_t timeoutNs) {
228*84e33947SAndroid Build Coastguard Worker CHPP_NOT_NULL(request);
229*84e33947SAndroid Build Coastguard Worker
230*84e33947SAndroid Build Coastguard Worker const uint16_t command = request->command;
231*84e33947SAndroid Build Coastguard Worker
232*84e33947SAndroid Build Coastguard Worker if (GetParam() == CHPP_MESSAGE_TYPE_CLIENT_REQUEST) {
233*84e33947SAndroid Build Coastguard Worker chppTimestampOutgoingRequest(&mClientAppContext,
234*84e33947SAndroid Build Coastguard Worker &mClientState.outReqStates[command], request,
235*84e33947SAndroid Build Coastguard Worker timeoutNs);
236*84e33947SAndroid Build Coastguard Worker } else {
237*84e33947SAndroid Build Coastguard Worker chppTimestampOutgoingRequest(&mServiceAppContext,
238*84e33947SAndroid Build Coastguard Worker &mServiceState.outReqStates[command],
239*84e33947SAndroid Build Coastguard Worker request, timeoutNs);
240*84e33947SAndroid Build Coastguard Worker }
241*84e33947SAndroid Build Coastguard Worker }
242*84e33947SAndroid Build Coastguard Worker
TimestampIncomingResponse(struct ChppAppHeader * response)243*84e33947SAndroid Build Coastguard Worker bool TimestampIncomingResponse(struct ChppAppHeader *response) {
244*84e33947SAndroid Build Coastguard Worker CHPP_NOT_NULL(response);
245*84e33947SAndroid Build Coastguard Worker
246*84e33947SAndroid Build Coastguard Worker const uint16_t command = response->command;
247*84e33947SAndroid Build Coastguard Worker
248*84e33947SAndroid Build Coastguard Worker if (GetParam() == CHPP_MESSAGE_TYPE_CLIENT_REQUEST) {
249*84e33947SAndroid Build Coastguard Worker return chppTimestampIncomingResponse(
250*84e33947SAndroid Build Coastguard Worker &mClientAppContext, &mClientState.outReqStates[command], response);
251*84e33947SAndroid Build Coastguard Worker }
252*84e33947SAndroid Build Coastguard Worker return chppTimestampIncomingResponse(
253*84e33947SAndroid Build Coastguard Worker &mServiceAppContext, &mServiceState.outReqStates[command], response);
254*84e33947SAndroid Build Coastguard Worker }
255*84e33947SAndroid Build Coastguard Worker
GetNextRequestTimeoutNs(void)256*84e33947SAndroid Build Coastguard Worker uint64_t GetNextRequestTimeoutNs(void) {
257*84e33947SAndroid Build Coastguard Worker return GetParam() == CHPP_MESSAGE_TYPE_CLIENT_REQUEST
258*84e33947SAndroid Build Coastguard Worker ? mClientAppContext.nextClientRequestTimeoutNs
259*84e33947SAndroid Build Coastguard Worker : mServiceAppContext.nextServiceRequestTimeoutNs;
260*84e33947SAndroid Build Coastguard Worker }
261*84e33947SAndroid Build Coastguard Worker
GetTimeoutResponse(void)262*84e33947SAndroid Build Coastguard Worker struct ChppAppHeader *GetTimeoutResponse(void) {
263*84e33947SAndroid Build Coastguard Worker return GetParam() == CHPP_MESSAGE_TYPE_CLIENT_REQUEST
264*84e33947SAndroid Build Coastguard Worker ? chppTransportGetRequestTimeoutResponse(
265*84e33947SAndroid Build Coastguard Worker &mClientTransportContext, CHPP_ENDPOINT_CLIENT)
266*84e33947SAndroid Build Coastguard Worker : chppTransportGetRequestTimeoutResponse(
267*84e33947SAndroid Build Coastguard Worker &mServiceTransportContext, CHPP_ENDPOINT_SERVICE);
268*84e33947SAndroid Build Coastguard Worker }
269*84e33947SAndroid Build Coastguard Worker
ValidateRequestState(struct ChppAppHeader * request)270*84e33947SAndroid Build Coastguard Worker void ValidateRequestState(struct ChppAppHeader *request) {
271*84e33947SAndroid Build Coastguard Worker CHPP_NOT_NULL(request);
272*84e33947SAndroid Build Coastguard Worker if (GetParam() == CHPP_MESSAGE_TYPE_CLIENT_REQUEST) {
273*84e33947SAndroid Build Coastguard Worker ValidateClientStateAndReqState(&mClientState.chppClientState, request);
274*84e33947SAndroid Build Coastguard Worker } else {
275*84e33947SAndroid Build Coastguard Worker ValidateServiceStateAndReqState(&mServiceState.chppServiceState, request);
276*84e33947SAndroid Build Coastguard Worker }
277*84e33947SAndroid Build Coastguard Worker }
278*84e33947SAndroid Build Coastguard Worker
RegisterAndValidateRequestForTimeout(struct ChppAppHeader * request,uint64_t kTimeoutNs,uint64_t expectedTimeNs)279*84e33947SAndroid Build Coastguard Worker void RegisterAndValidateRequestForTimeout(struct ChppAppHeader *request,
280*84e33947SAndroid Build Coastguard Worker uint64_t kTimeoutNs,
281*84e33947SAndroid Build Coastguard Worker uint64_t expectedTimeNs) {
282*84e33947SAndroid Build Coastguard Worker CHPP_NOT_NULL(request);
283*84e33947SAndroid Build Coastguard Worker ValidateRequestState(request);
284*84e33947SAndroid Build Coastguard Worker TimestampOutgoingRequest(request, kTimeoutNs);
285*84e33947SAndroid Build Coastguard Worker
286*84e33947SAndroid Build Coastguard Worker validateTimeout(GetNextRequestTimeoutNs(), expectedTimeNs);
287*84e33947SAndroid Build Coastguard Worker }
288*84e33947SAndroid Build Coastguard Worker
RegisterAndValidateResponseForTimeout(struct ChppAppHeader * request,uint64_t expectedTimeNs)289*84e33947SAndroid Build Coastguard Worker void RegisterAndValidateResponseForTimeout(struct ChppAppHeader *request,
290*84e33947SAndroid Build Coastguard Worker uint64_t expectedTimeNs) {
291*84e33947SAndroid Build Coastguard Worker CHPP_NOT_NULL(request);
292*84e33947SAndroid Build Coastguard Worker
293*84e33947SAndroid Build Coastguard Worker struct ChppAppHeader *response =
294*84e33947SAndroid Build Coastguard Worker chppAllocResponse(request, sizeof(*request));
295*84e33947SAndroid Build Coastguard Worker
296*84e33947SAndroid Build Coastguard Worker ValidateRequestState(request);
297*84e33947SAndroid Build Coastguard Worker TimestampIncomingResponse(response);
298*84e33947SAndroid Build Coastguard Worker
299*84e33947SAndroid Build Coastguard Worker validateTimeout(GetNextRequestTimeoutNs(), expectedTimeNs);
300*84e33947SAndroid Build Coastguard Worker
301*84e33947SAndroid Build Coastguard Worker chppFree(response);
302*84e33947SAndroid Build Coastguard Worker }
303*84e33947SAndroid Build Coastguard Worker
304*84e33947SAndroid Build Coastguard Worker // Client side.
305*84e33947SAndroid Build Coastguard Worker ChppLinuxLinkState mClientLinkContext = {};
306*84e33947SAndroid Build Coastguard Worker ChppTransportState mClientTransportContext = {};
307*84e33947SAndroid Build Coastguard Worker ChppAppState mClientAppContext = {};
308*84e33947SAndroid Build Coastguard Worker ClientState mClientState;
309*84e33947SAndroid Build Coastguard Worker
310*84e33947SAndroid Build Coastguard Worker // Service side
311*84e33947SAndroid Build Coastguard Worker ChppLinuxLinkState mServiceLinkContext = {};
312*84e33947SAndroid Build Coastguard Worker ChppTransportState mServiceTransportContext = {};
313*84e33947SAndroid Build Coastguard Worker ChppAppState mServiceAppContext = {};
314*84e33947SAndroid Build Coastguard Worker ServiceState mServiceState;
315*84e33947SAndroid Build Coastguard Worker };
316*84e33947SAndroid Build Coastguard Worker
317*84e33947SAndroid Build Coastguard Worker // Simulates a request and a response.
318*84e33947SAndroid Build Coastguard Worker // There should be no error as the timeout is infinite.
TEST_P(TimeoutParamTest,RequestResponseTimestampValid)319*84e33947SAndroid Build Coastguard Worker TEST_P(TimeoutParamTest, RequestResponseTimestampValid) {
320*84e33947SAndroid Build Coastguard Worker struct ChppAppHeader *request = AllocRequestCommand(0 /* command */);
321*84e33947SAndroid Build Coastguard Worker ASSERT_NE(request, nullptr);
322*84e33947SAndroid Build Coastguard Worker TimestampOutgoingRequest(request, CHPP_REQUEST_TIMEOUT_INFINITE);
323*84e33947SAndroid Build Coastguard Worker
324*84e33947SAndroid Build Coastguard Worker struct ChppAppHeader *response = chppAllocResponse(request, sizeof(*request));
325*84e33947SAndroid Build Coastguard Worker EXPECT_TRUE(TimestampIncomingResponse(response));
326*84e33947SAndroid Build Coastguard Worker
327*84e33947SAndroid Build Coastguard Worker chppFree(request);
328*84e33947SAndroid Build Coastguard Worker chppFree(response);
329*84e33947SAndroid Build Coastguard Worker }
330*84e33947SAndroid Build Coastguard Worker
331*84e33947SAndroid Build Coastguard Worker // Simulates a single request with 2 responses.
TEST_P(TimeoutParamTest,RequestResponseTimestampDuplicate)332*84e33947SAndroid Build Coastguard Worker TEST_P(TimeoutParamTest, RequestResponseTimestampDuplicate) {
333*84e33947SAndroid Build Coastguard Worker struct ChppAppHeader *request = AllocRequestCommand(0 /* command */);
334*84e33947SAndroid Build Coastguard Worker ASSERT_NE(request, nullptr);
335*84e33947SAndroid Build Coastguard Worker TimestampOutgoingRequest(request, CHPP_REQUEST_TIMEOUT_INFINITE);
336*84e33947SAndroid Build Coastguard Worker
337*84e33947SAndroid Build Coastguard Worker struct ChppAppHeader *response = chppAllocResponse(request, sizeof(*request));
338*84e33947SAndroid Build Coastguard Worker
339*84e33947SAndroid Build Coastguard Worker // The first response has no error.
340*84e33947SAndroid Build Coastguard Worker EXPECT_TRUE(TimestampIncomingResponse(response));
341*84e33947SAndroid Build Coastguard Worker
342*84e33947SAndroid Build Coastguard Worker // The second response errors as one response has already been received.
343*84e33947SAndroid Build Coastguard Worker EXPECT_FALSE(TimestampIncomingResponse(response));
344*84e33947SAndroid Build Coastguard Worker
345*84e33947SAndroid Build Coastguard Worker chppFree(request);
346*84e33947SAndroid Build Coastguard Worker chppFree(response);
347*84e33947SAndroid Build Coastguard Worker }
348*84e33947SAndroid Build Coastguard Worker
349*84e33947SAndroid Build Coastguard Worker // Simulates a response to a request that has not been timestamped.
TEST_P(TimeoutParamTest,RequestResponseTimestampInvalidId)350*84e33947SAndroid Build Coastguard Worker TEST_P(TimeoutParamTest, RequestResponseTimestampInvalidId) {
351*84e33947SAndroid Build Coastguard Worker constexpr uint16_t command = 0;
352*84e33947SAndroid Build Coastguard Worker
353*84e33947SAndroid Build Coastguard Worker struct ChppAppHeader *request1 = AllocRequestCommand(command);
354*84e33947SAndroid Build Coastguard Worker ASSERT_NE(request1, nullptr);
355*84e33947SAndroid Build Coastguard Worker TimestampOutgoingRequest(request1, CHPP_REQUEST_TIMEOUT_INFINITE);
356*84e33947SAndroid Build Coastguard Worker
357*84e33947SAndroid Build Coastguard Worker struct ChppAppHeader *request2 = AllocRequestCommand(command);
358*84e33947SAndroid Build Coastguard Worker ASSERT_NE(request2, nullptr);
359*84e33947SAndroid Build Coastguard Worker
360*84e33947SAndroid Build Coastguard Worker // We expect a response for req but get a response for newReq.
361*84e33947SAndroid Build Coastguard Worker // That is an error (the transaction does not match).
362*84e33947SAndroid Build Coastguard Worker struct ChppAppHeader *response =
363*84e33947SAndroid Build Coastguard Worker chppAllocResponse(request2, sizeof(*request1));
364*84e33947SAndroid Build Coastguard Worker EXPECT_FALSE(TimestampIncomingResponse(response));
365*84e33947SAndroid Build Coastguard Worker
366*84e33947SAndroid Build Coastguard Worker chppFree(request1);
367*84e33947SAndroid Build Coastguard Worker chppFree(request2);
368*84e33947SAndroid Build Coastguard Worker chppFree(response);
369*84e33947SAndroid Build Coastguard Worker }
370*84e33947SAndroid Build Coastguard Worker
371*84e33947SAndroid Build Coastguard Worker // Make sure the request does not timeout right away.
TEST_P(TimeoutParamTest,RequestTimeoutAddRemoveSingle)372*84e33947SAndroid Build Coastguard Worker TEST_P(TimeoutParamTest, RequestTimeoutAddRemoveSingle) {
373*84e33947SAndroid Build Coastguard Worker EXPECT_EQ(GetNextRequestTimeoutNs(), CHPP_TIME_MAX);
374*84e33947SAndroid Build Coastguard Worker
375*84e33947SAndroid Build Coastguard Worker struct ChppAppHeader *request = AllocRequestCommand(1 /* command */);
376*84e33947SAndroid Build Coastguard Worker ASSERT_NE(request, nullptr);
377*84e33947SAndroid Build Coastguard Worker
378*84e33947SAndroid Build Coastguard Worker const uint64_t timeNs = chppGetCurrentTimeNs();
379*84e33947SAndroid Build Coastguard Worker constexpr uint64_t kTimeoutNs = 1000 * CHPP_NSEC_PER_MSEC;
380*84e33947SAndroid Build Coastguard Worker RegisterAndValidateRequestForTimeout(request, kTimeoutNs,
381*84e33947SAndroid Build Coastguard Worker timeNs + kTimeoutNs);
382*84e33947SAndroid Build Coastguard Worker
383*84e33947SAndroid Build Coastguard Worker // Timeout is not expired yet.
384*84e33947SAndroid Build Coastguard Worker EXPECT_EQ(GetTimeoutResponse(), nullptr);
385*84e33947SAndroid Build Coastguard Worker
386*84e33947SAndroid Build Coastguard Worker RegisterAndValidateResponseForTimeout(request, CHPP_TIME_MAX);
387*84e33947SAndroid Build Coastguard Worker
388*84e33947SAndroid Build Coastguard Worker chppFree(request);
389*84e33947SAndroid Build Coastguard Worker }
390*84e33947SAndroid Build Coastguard Worker
TEST_P(TimeoutParamTest,RequestTimeoutAddRemoveMultiple)391*84e33947SAndroid Build Coastguard Worker TEST_P(TimeoutParamTest, RequestTimeoutAddRemoveMultiple) {
392*84e33947SAndroid Build Coastguard Worker EXPECT_EQ(GetNextRequestTimeoutNs(), CHPP_TIME_MAX);
393*84e33947SAndroid Build Coastguard Worker
394*84e33947SAndroid Build Coastguard Worker struct ChppAppHeader *request1 = AllocRequestCommand(0 /* command */);
395*84e33947SAndroid Build Coastguard Worker struct ChppAppHeader *request2 = AllocRequestCommand(1 /* command */);
396*84e33947SAndroid Build Coastguard Worker struct ChppAppHeader *request3 = AllocRequestCommand(2 /* command */);
397*84e33947SAndroid Build Coastguard Worker ASSERT_NE(request1, nullptr);
398*84e33947SAndroid Build Coastguard Worker ASSERT_NE(request2, nullptr);
399*84e33947SAndroid Build Coastguard Worker ASSERT_NE(request3, nullptr);
400*84e33947SAndroid Build Coastguard Worker
401*84e33947SAndroid Build Coastguard Worker // kTimeout1Ns is the smallest so it will be the first timeout to expire
402*84e33947SAndroid Build Coastguard Worker // for all the requests.
403*84e33947SAndroid Build Coastguard Worker const uint64_t time1Ns = chppGetCurrentTimeNs();
404*84e33947SAndroid Build Coastguard Worker constexpr uint64_t kTimeout1Ns = 2000 * CHPP_NSEC_PER_MSEC;
405*84e33947SAndroid Build Coastguard Worker RegisterAndValidateRequestForTimeout(request1, kTimeout1Ns,
406*84e33947SAndroid Build Coastguard Worker time1Ns + kTimeout1Ns);
407*84e33947SAndroid Build Coastguard Worker
408*84e33947SAndroid Build Coastguard Worker const uint64_t time2Ns = chppGetCurrentTimeNs();
409*84e33947SAndroid Build Coastguard Worker constexpr uint64_t kTimeout2Ns = 4000 * CHPP_NSEC_PER_MSEC;
410*84e33947SAndroid Build Coastguard Worker RegisterAndValidateRequestForTimeout(request2, kTimeout2Ns,
411*84e33947SAndroid Build Coastguard Worker time1Ns + kTimeout1Ns);
412*84e33947SAndroid Build Coastguard Worker
413*84e33947SAndroid Build Coastguard Worker const uint64_t time3Ns = chppGetCurrentTimeNs();
414*84e33947SAndroid Build Coastguard Worker constexpr uint64_t kTimeout3Ns = 3000 * CHPP_NSEC_PER_MSEC;
415*84e33947SAndroid Build Coastguard Worker RegisterAndValidateRequestForTimeout(request3, kTimeout3Ns,
416*84e33947SAndroid Build Coastguard Worker time1Ns + kTimeout1Ns);
417*84e33947SAndroid Build Coastguard Worker
418*84e33947SAndroid Build Coastguard Worker RegisterAndValidateResponseForTimeout(request1, time3Ns + kTimeout3Ns);
419*84e33947SAndroid Build Coastguard Worker
420*84e33947SAndroid Build Coastguard Worker // Timeout is not expired yet.
421*84e33947SAndroid Build Coastguard Worker EXPECT_EQ(GetTimeoutResponse(), nullptr);
422*84e33947SAndroid Build Coastguard Worker
423*84e33947SAndroid Build Coastguard Worker // kTimeout4Ns is now the smallest timeout.
424*84e33947SAndroid Build Coastguard Worker const uint64_t time4Ns = chppGetCurrentTimeNs();
425*84e33947SAndroid Build Coastguard Worker constexpr uint64_t kTimeout4Ns = 1000 * CHPP_NSEC_PER_MSEC;
426*84e33947SAndroid Build Coastguard Worker RegisterAndValidateRequestForTimeout(request1, kTimeout4Ns,
427*84e33947SAndroid Build Coastguard Worker time4Ns + kTimeout4Ns);
428*84e33947SAndroid Build Coastguard Worker
429*84e33947SAndroid Build Coastguard Worker RegisterAndValidateResponseForTimeout(request1, time3Ns + kTimeout3Ns);
430*84e33947SAndroid Build Coastguard Worker
431*84e33947SAndroid Build Coastguard Worker RegisterAndValidateResponseForTimeout(request3, time2Ns + kTimeout2Ns);
432*84e33947SAndroid Build Coastguard Worker
433*84e33947SAndroid Build Coastguard Worker RegisterAndValidateResponseForTimeout(request2, CHPP_TIME_MAX);
434*84e33947SAndroid Build Coastguard Worker
435*84e33947SAndroid Build Coastguard Worker EXPECT_EQ(GetTimeoutResponse(), nullptr);
436*84e33947SAndroid Build Coastguard Worker
437*84e33947SAndroid Build Coastguard Worker chppFree(request1);
438*84e33947SAndroid Build Coastguard Worker chppFree(request2);
439*84e33947SAndroid Build Coastguard Worker chppFree(request3);
440*84e33947SAndroid Build Coastguard Worker }
441*84e33947SAndroid Build Coastguard Worker
TEST_P(TimeoutParamTest,DuplicateRequestTimeoutResponse)442*84e33947SAndroid Build Coastguard Worker TEST_P(TimeoutParamTest, DuplicateRequestTimeoutResponse) {
443*84e33947SAndroid Build Coastguard Worker // Sleep padding to make sure we timeout.
444*84e33947SAndroid Build Coastguard Worker constexpr auto kTimeoutPadding = std::chrono::milliseconds(50);
445*84e33947SAndroid Build Coastguard Worker
446*84e33947SAndroid Build Coastguard Worker EXPECT_EQ(GetNextRequestTimeoutNs(), CHPP_TIME_MAX);
447*84e33947SAndroid Build Coastguard Worker
448*84e33947SAndroid Build Coastguard Worker struct ChppAppHeader *request = AllocRequestCommand(1 /* command */);
449*84e33947SAndroid Build Coastguard Worker ASSERT_NE(request, nullptr);
450*84e33947SAndroid Build Coastguard Worker
451*84e33947SAndroid Build Coastguard Worker // Send the first request.
452*84e33947SAndroid Build Coastguard Worker constexpr uint64_t kTimeout1Ns = 20 * CHPP_NSEC_PER_MSEC;
453*84e33947SAndroid Build Coastguard Worker const uint64_t kShouldTimeout1AtNs = chppGetCurrentTimeNs() + kTimeout1Ns;
454*84e33947SAndroid Build Coastguard Worker RegisterAndValidateRequestForTimeout(request, kTimeout1Ns,
455*84e33947SAndroid Build Coastguard Worker kShouldTimeout1AtNs);
456*84e33947SAndroid Build Coastguard Worker
457*84e33947SAndroid Build Coastguard Worker // Override with a new request.
458*84e33947SAndroid Build Coastguard Worker constexpr uint64_t kTimeout2Ns = 400 * CHPP_NSEC_PER_MSEC;
459*84e33947SAndroid Build Coastguard Worker const uint64_t kShouldTimeout2AtNs = chppGetCurrentTimeNs() + kTimeout2Ns;
460*84e33947SAndroid Build Coastguard Worker RegisterAndValidateRequestForTimeout(request, kTimeout2Ns,
461*84e33947SAndroid Build Coastguard Worker kShouldTimeout2AtNs);
462*84e33947SAndroid Build Coastguard Worker
463*84e33947SAndroid Build Coastguard Worker std::this_thread::sleep_for(
464*84e33947SAndroid Build Coastguard Worker std::chrono::nanoseconds(kShouldTimeout1AtNs - chppGetCurrentTimeNs()) +
465*84e33947SAndroid Build Coastguard Worker kTimeoutPadding);
466*84e33947SAndroid Build Coastguard Worker // First request would have timed out but superseded by second request.
467*84e33947SAndroid Build Coastguard Worker EXPECT_GT(GetNextRequestTimeoutNs(), chppGetCurrentTimeNs());
468*84e33947SAndroid Build Coastguard Worker
469*84e33947SAndroid Build Coastguard Worker std::this_thread::sleep_for(
470*84e33947SAndroid Build Coastguard Worker std::chrono::nanoseconds(kShouldTimeout2AtNs - chppGetCurrentTimeNs()) +
471*84e33947SAndroid Build Coastguard Worker kTimeoutPadding);
472*84e33947SAndroid Build Coastguard Worker // Second request should have timed out - so we get a response.
473*84e33947SAndroid Build Coastguard Worker EXPECT_LT(GetNextRequestTimeoutNs(), chppGetCurrentTimeNs());
474*84e33947SAndroid Build Coastguard Worker
475*84e33947SAndroid Build Coastguard Worker struct ChppAppHeader *response = GetTimeoutResponse();
476*84e33947SAndroid Build Coastguard Worker ASSERT_NE(response, nullptr);
477*84e33947SAndroid Build Coastguard Worker validateTimeoutResponse(request, response);
478*84e33947SAndroid Build Coastguard Worker chppFree(response);
479*84e33947SAndroid Build Coastguard Worker
480*84e33947SAndroid Build Coastguard Worker RegisterAndValidateResponseForTimeout(request, CHPP_TIME_MAX);
481*84e33947SAndroid Build Coastguard Worker EXPECT_EQ(GetTimeoutResponse(), nullptr);
482*84e33947SAndroid Build Coastguard Worker
483*84e33947SAndroid Build Coastguard Worker chppFree(request);
484*84e33947SAndroid Build Coastguard Worker }
485*84e33947SAndroid Build Coastguard Worker
TEST_P(TimeoutParamTest,RequestTimeoutResponse)486*84e33947SAndroid Build Coastguard Worker TEST_P(TimeoutParamTest, RequestTimeoutResponse) {
487*84e33947SAndroid Build Coastguard Worker EXPECT_EQ(GetNextRequestTimeoutNs(), CHPP_TIME_MAX);
488*84e33947SAndroid Build Coastguard Worker
489*84e33947SAndroid Build Coastguard Worker struct ChppAppHeader *request1 = AllocRequestCommand(1 /* command */);
490*84e33947SAndroid Build Coastguard Worker struct ChppAppHeader *request2 = AllocRequestCommand(2 /* command */);
491*84e33947SAndroid Build Coastguard Worker ASSERT_NE(request1, nullptr);
492*84e33947SAndroid Build Coastguard Worker ASSERT_NE(request2, nullptr);
493*84e33947SAndroid Build Coastguard Worker
494*84e33947SAndroid Build Coastguard Worker const uint64_t time1Ns = chppGetCurrentTimeNs();
495*84e33947SAndroid Build Coastguard Worker constexpr uint64_t kTimeout1Ns = 200 * CHPP_NSEC_PER_MSEC;
496*84e33947SAndroid Build Coastguard Worker RegisterAndValidateRequestForTimeout(request1, kTimeout1Ns,
497*84e33947SAndroid Build Coastguard Worker time1Ns + kTimeout1Ns);
498*84e33947SAndroid Build Coastguard Worker
499*84e33947SAndroid Build Coastguard Worker std::this_thread::sleep_for(std::chrono::nanoseconds(kTimeout1Ns));
500*84e33947SAndroid Build Coastguard Worker ASSERT_LT(GetNextRequestTimeoutNs(), chppGetCurrentTimeNs());
501*84e33947SAndroid Build Coastguard Worker
502*84e33947SAndroid Build Coastguard Worker // No response in time, we then get a timeout response.
503*84e33947SAndroid Build Coastguard Worker struct ChppAppHeader *response = GetTimeoutResponse();
504*84e33947SAndroid Build Coastguard Worker validateTimeoutResponse(request1, response);
505*84e33947SAndroid Build Coastguard Worker chppFree(response);
506*84e33947SAndroid Build Coastguard Worker
507*84e33947SAndroid Build Coastguard Worker RegisterAndValidateResponseForTimeout(request1, CHPP_TIME_MAX);
508*84e33947SAndroid Build Coastguard Worker // No other request in timeout.
509*84e33947SAndroid Build Coastguard Worker EXPECT_EQ(GetTimeoutResponse(), nullptr);
510*84e33947SAndroid Build Coastguard Worker
511*84e33947SAndroid Build Coastguard Worker // Simulate a new timeout and make sure we have a timeout response.
512*84e33947SAndroid Build Coastguard Worker const uint64_t time2Ns = chppGetCurrentTimeNs();
513*84e33947SAndroid Build Coastguard Worker constexpr uint64_t kTimeout2Ns = 200 * CHPP_NSEC_PER_MSEC;
514*84e33947SAndroid Build Coastguard Worker RegisterAndValidateRequestForTimeout(request2, kTimeout2Ns,
515*84e33947SAndroid Build Coastguard Worker time2Ns + kTimeout2Ns);
516*84e33947SAndroid Build Coastguard Worker
517*84e33947SAndroid Build Coastguard Worker std::this_thread::sleep_for(std::chrono::nanoseconds(kTimeout2Ns));
518*84e33947SAndroid Build Coastguard Worker ASSERT_LT(GetNextRequestTimeoutNs(), chppGetCurrentTimeNs());
519*84e33947SAndroid Build Coastguard Worker
520*84e33947SAndroid Build Coastguard Worker response = GetTimeoutResponse();
521*84e33947SAndroid Build Coastguard Worker validateTimeoutResponse(request2, response);
522*84e33947SAndroid Build Coastguard Worker chppFree(response);
523*84e33947SAndroid Build Coastguard Worker
524*84e33947SAndroid Build Coastguard Worker chppFree(request1);
525*84e33947SAndroid Build Coastguard Worker chppFree(request2);
526*84e33947SAndroid Build Coastguard Worker }
527*84e33947SAndroid Build Coastguard Worker
528*84e33947SAndroid Build Coastguard Worker INSTANTIATE_TEST_SUITE_P(
529*84e33947SAndroid Build Coastguard Worker TimeoutTest, TimeoutParamTest,
530*84e33947SAndroid Build Coastguard Worker testing::Values(CHPP_MESSAGE_TYPE_CLIENT_REQUEST,
531*84e33947SAndroid Build Coastguard Worker CHPP_MESSAGE_TYPE_SERVICE_REQUEST),
__anon37ed931a0202(const testing::TestParamInfo<TimeoutParamTest::ParamType> &info) 532*84e33947SAndroid Build Coastguard Worker [](const testing::TestParamInfo<TimeoutParamTest::ParamType> &info) {
533*84e33947SAndroid Build Coastguard Worker return info.param == CHPP_MESSAGE_TYPE_CLIENT_REQUEST ? "ClientRequests"
534*84e33947SAndroid Build Coastguard Worker : "ServiceRequests";
535*84e33947SAndroid Build Coastguard Worker });
536*84e33947SAndroid Build Coastguard Worker
537*84e33947SAndroid Build Coastguard Worker } // namespace
538*84e33947SAndroid Build Coastguard Worker } // namespace chre