xref: /aosp_15_r20/system/gatekeeper/tests/gatekeeper_messages_test.cpp (revision e582193eb076ba33b8e166dadabb22babbe4aebd)
1*e582193eSAndroid Build Coastguard Worker /*
2*e582193eSAndroid Build Coastguard Worker  * Copyright (C) 2015 The Android Open Source Project
3*e582193eSAndroid Build Coastguard Worker  *
4*e582193eSAndroid Build Coastguard Worker  * Licensed under the Apache License, Version 2.0 (the "License");
5*e582193eSAndroid Build Coastguard Worker  * you may not use this file except in compliance with the License.
6*e582193eSAndroid Build Coastguard Worker  * You may obtain a copy of the License at
7*e582193eSAndroid Build Coastguard Worker  *
8*e582193eSAndroid Build Coastguard Worker  *      http://www.apache.org/licenses/LICENSE-2.0
9*e582193eSAndroid Build Coastguard Worker  *
10*e582193eSAndroid Build Coastguard Worker  * Unless required by applicable law or agreed to in writing, software
11*e582193eSAndroid Build Coastguard Worker  * distributed under the License is distributed on an "AS IS" BASIS,
12*e582193eSAndroid Build Coastguard Worker  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13*e582193eSAndroid Build Coastguard Worker  * See the License for the specific language governing permissions and
14*e582193eSAndroid Build Coastguard Worker  * limitations under the License.
15*e582193eSAndroid Build Coastguard Worker  */
16*e582193eSAndroid Build Coastguard Worker 
17*e582193eSAndroid Build Coastguard Worker #include <gtest/gtest.h>
18*e582193eSAndroid Build Coastguard Worker #include <string.h>
19*e582193eSAndroid Build Coastguard Worker #include <stdlib.h>
20*e582193eSAndroid Build Coastguard Worker #include <stdio.h>
21*e582193eSAndroid Build Coastguard Worker 
22*e582193eSAndroid Build Coastguard Worker #include <gatekeeper/gatekeeper_messages.h>
23*e582193eSAndroid Build Coastguard Worker 
24*e582193eSAndroid Build Coastguard Worker #include <vector>
25*e582193eSAndroid Build Coastguard Worker 
26*e582193eSAndroid Build Coastguard Worker using ::gatekeeper::SizedBuffer;
27*e582193eSAndroid Build Coastguard Worker using ::testing::Test;
28*e582193eSAndroid Build Coastguard Worker using ::gatekeeper::EnrollRequest;
29*e582193eSAndroid Build Coastguard Worker using ::gatekeeper::EnrollResponse;
30*e582193eSAndroid Build Coastguard Worker using ::gatekeeper::VerifyRequest;
31*e582193eSAndroid Build Coastguard Worker using ::gatekeeper::VerifyResponse;
32*e582193eSAndroid Build Coastguard Worker using std::cout;
33*e582193eSAndroid Build Coastguard Worker using std::endl;
34*e582193eSAndroid Build Coastguard Worker 
35*e582193eSAndroid Build Coastguard Worker static const uint32_t USER_ID = 3857;
36*e582193eSAndroid Build Coastguard Worker 
make_buffer(uint32_t size)37*e582193eSAndroid Build Coastguard Worker static SizedBuffer make_buffer(uint32_t size) {
38*e582193eSAndroid Build Coastguard Worker     uint8_t *buffer = new uint8_t[size];
39*e582193eSAndroid Build Coastguard Worker     srand(size);
40*e582193eSAndroid Build Coastguard Worker 
41*e582193eSAndroid Build Coastguard Worker     for (uint32_t i = 0; i < size; i++) {
42*e582193eSAndroid Build Coastguard Worker         buffer[i] = rand();
43*e582193eSAndroid Build Coastguard Worker     }
44*e582193eSAndroid Build Coastguard Worker 
45*e582193eSAndroid Build Coastguard Worker     return { buffer, size };
46*e582193eSAndroid Build Coastguard Worker }
47*e582193eSAndroid Build Coastguard Worker 
TEST(RoundTripTest,EnrollRequestNullEnrolledNullHandle)48*e582193eSAndroid Build Coastguard Worker TEST(RoundTripTest, EnrollRequestNullEnrolledNullHandle) {
49*e582193eSAndroid Build Coastguard Worker     const uint32_t password_size = 512;
50*e582193eSAndroid Build Coastguard Worker     const SizedBuffer *deserialized_password;
51*e582193eSAndroid Build Coastguard Worker     // create request, serialize, deserialize, and validate
52*e582193eSAndroid Build Coastguard Worker     EnrollRequest msg(USER_ID, {}, make_buffer(password_size), {});
53*e582193eSAndroid Build Coastguard Worker 
54*e582193eSAndroid Build Coastguard Worker     std::vector<uint8_t> serialized_msg(msg.GetSerializedSize());
55*e582193eSAndroid Build Coastguard Worker     ASSERT_EQ(serialized_msg.size(), msg.Serialize(&*serialized_msg.begin(), &*serialized_msg.end()));
56*e582193eSAndroid Build Coastguard Worker 
57*e582193eSAndroid Build Coastguard Worker     EnrollRequest deserialized_msg;
58*e582193eSAndroid Build Coastguard Worker     ASSERT_EQ(gatekeeper::gatekeeper_error_t::ERROR_NONE,
59*e582193eSAndroid Build Coastguard Worker             deserialized_msg.Deserialize(&*serialized_msg.begin(), &*serialized_msg.end()));
60*e582193eSAndroid Build Coastguard Worker 
61*e582193eSAndroid Build Coastguard Worker     ASSERT_EQ(gatekeeper::gatekeeper_error_t::ERROR_NONE,
62*e582193eSAndroid Build Coastguard Worker             deserialized_msg.error);
63*e582193eSAndroid Build Coastguard Worker 
64*e582193eSAndroid Build Coastguard Worker     deserialized_password = &deserialized_msg.provided_password;
65*e582193eSAndroid Build Coastguard Worker     ASSERT_EQ(USER_ID, deserialized_msg.user_id);
66*e582193eSAndroid Build Coastguard Worker     ASSERT_EQ((uint32_t) password_size, deserialized_password->size());
67*e582193eSAndroid Build Coastguard Worker     ASSERT_EQ(0, memcmp(msg.provided_password.Data<uint8_t>(), deserialized_password->Data<uint8_t>(), password_size));
68*e582193eSAndroid Build Coastguard Worker     ASSERT_FALSE(deserialized_msg.enrolled_password);
69*e582193eSAndroid Build Coastguard Worker     ASSERT_FALSE(deserialized_msg.password_handle);
70*e582193eSAndroid Build Coastguard Worker }
71*e582193eSAndroid Build Coastguard Worker 
TEST(RoundTripTest,EnrollRequestEmptyEnrolledEmptyHandle)72*e582193eSAndroid Build Coastguard Worker TEST(RoundTripTest, EnrollRequestEmptyEnrolledEmptyHandle) {
73*e582193eSAndroid Build Coastguard Worker     const uint32_t password_size = 512;
74*e582193eSAndroid Build Coastguard Worker     const SizedBuffer *deserialized_password;
75*e582193eSAndroid Build Coastguard Worker     // create request, serialize, deserialize, and validate
76*e582193eSAndroid Build Coastguard Worker     EnrollRequest msg(USER_ID, {}, make_buffer(password_size), {});
77*e582193eSAndroid Build Coastguard Worker     std::vector<uint8_t> serialized_msg(msg.GetSerializedSize());
78*e582193eSAndroid Build Coastguard Worker     ASSERT_EQ(serialized_msg.size(), msg.Serialize(&*serialized_msg.begin(), &*serialized_msg.end()));
79*e582193eSAndroid Build Coastguard Worker 
80*e582193eSAndroid Build Coastguard Worker     EnrollRequest deserialized_msg;
81*e582193eSAndroid Build Coastguard Worker     ASSERT_EQ(gatekeeper::gatekeeper_error_t::ERROR_NONE,
82*e582193eSAndroid Build Coastguard Worker             deserialized_msg.Deserialize(&*serialized_msg.begin(), &*serialized_msg.end()));
83*e582193eSAndroid Build Coastguard Worker 
84*e582193eSAndroid Build Coastguard Worker     ASSERT_EQ(gatekeeper::gatekeeper_error_t::ERROR_NONE,
85*e582193eSAndroid Build Coastguard Worker             deserialized_msg.error);
86*e582193eSAndroid Build Coastguard Worker 
87*e582193eSAndroid Build Coastguard Worker     deserialized_password = &deserialized_msg.provided_password;
88*e582193eSAndroid Build Coastguard Worker     ASSERT_EQ(USER_ID, deserialized_msg.user_id);
89*e582193eSAndroid Build Coastguard Worker     ASSERT_EQ((uint32_t) password_size, deserialized_password->size());
90*e582193eSAndroid Build Coastguard Worker     ASSERT_EQ(0, memcmp(msg.provided_password.Data<uint8_t>(), deserialized_password->Data<uint8_t>(), password_size));
91*e582193eSAndroid Build Coastguard Worker     ASSERT_FALSE(deserialized_msg.enrolled_password);
92*e582193eSAndroid Build Coastguard Worker     ASSERT_FALSE(deserialized_msg.password_handle);
93*e582193eSAndroid Build Coastguard Worker }
94*e582193eSAndroid Build Coastguard Worker 
TEST(RoundTripTest,EnrollRequestNonNullEnrolledOrHandle)95*e582193eSAndroid Build Coastguard Worker TEST(RoundTripTest, EnrollRequestNonNullEnrolledOrHandle) {
96*e582193eSAndroid Build Coastguard Worker     const uint32_t password_size = 512;
97*e582193eSAndroid Build Coastguard Worker     SizedBuffer provided_password = make_buffer(password_size);
98*e582193eSAndroid Build Coastguard Worker     SizedBuffer enrolled_password = make_buffer(password_size);
99*e582193eSAndroid Build Coastguard Worker     SizedBuffer password_handle = make_buffer(password_size);
100*e582193eSAndroid Build Coastguard Worker     const SizedBuffer *deserialized_password;
101*e582193eSAndroid Build Coastguard Worker     const SizedBuffer *deserialized_enrolled;
102*e582193eSAndroid Build Coastguard Worker     const SizedBuffer *deserialized_handle;
103*e582193eSAndroid Build Coastguard Worker     // create request, serialize, deserialize, and validate
104*e582193eSAndroid Build Coastguard Worker     EnrollRequest msg(USER_ID, move(password_handle), move(provided_password), move(enrolled_password));
105*e582193eSAndroid Build Coastguard Worker     std::vector<uint8_t> serialized_msg(msg.GetSerializedSize());
106*e582193eSAndroid Build Coastguard Worker     ASSERT_EQ(serialized_msg.size(), msg.Serialize(&*serialized_msg.begin(), &*serialized_msg.end()));
107*e582193eSAndroid Build Coastguard Worker 
108*e582193eSAndroid Build Coastguard Worker     EnrollRequest deserialized_msg;
109*e582193eSAndroid Build Coastguard Worker     ASSERT_EQ(gatekeeper::gatekeeper_error_t::ERROR_NONE,
110*e582193eSAndroid Build Coastguard Worker             deserialized_msg.Deserialize(&*serialized_msg.begin(), &*serialized_msg.end()));
111*e582193eSAndroid Build Coastguard Worker 
112*e582193eSAndroid Build Coastguard Worker     ASSERT_EQ(gatekeeper::gatekeeper_error_t::ERROR_NONE,
113*e582193eSAndroid Build Coastguard Worker             deserialized_msg.error);
114*e582193eSAndroid Build Coastguard Worker 
115*e582193eSAndroid Build Coastguard Worker     deserialized_password = &deserialized_msg.provided_password;
116*e582193eSAndroid Build Coastguard Worker     deserialized_enrolled = &deserialized_msg.enrolled_password;
117*e582193eSAndroid Build Coastguard Worker     deserialized_handle = &deserialized_msg.password_handle;
118*e582193eSAndroid Build Coastguard Worker     ASSERT_EQ(USER_ID, deserialized_msg.user_id);
119*e582193eSAndroid Build Coastguard Worker     ASSERT_EQ((uint32_t) password_size, deserialized_password->size());
120*e582193eSAndroid Build Coastguard Worker     ASSERT_EQ(0, memcmp(msg.provided_password.Data<uint8_t>(), deserialized_password->Data<uint8_t>(), password_size));
121*e582193eSAndroid Build Coastguard Worker     ASSERT_EQ((uint32_t) password_size, deserialized_enrolled->size());
122*e582193eSAndroid Build Coastguard Worker     ASSERT_EQ(0, memcmp(msg.enrolled_password.Data<uint8_t>(), deserialized_enrolled->Data<uint8_t>(), password_size));
123*e582193eSAndroid Build Coastguard Worker     ASSERT_EQ((uint32_t) password_size, deserialized_handle->size());
124*e582193eSAndroid Build Coastguard Worker     ASSERT_EQ(0, memcmp(msg.password_handle.Data<uint8_t>(), deserialized_handle->Data<uint8_t>(), password_size));
125*e582193eSAndroid Build Coastguard Worker }
126*e582193eSAndroid Build Coastguard Worker 
127*e582193eSAndroid Build Coastguard Worker 
TEST(RoundTripTest,EnrollResponse)128*e582193eSAndroid Build Coastguard Worker TEST(RoundTripTest, EnrollResponse) {
129*e582193eSAndroid Build Coastguard Worker     const uint32_t password_size = 512;
130*e582193eSAndroid Build Coastguard Worker     const SizedBuffer *deserialized_password;
131*e582193eSAndroid Build Coastguard Worker     // create request, serialize, deserialize, and validate
132*e582193eSAndroid Build Coastguard Worker     EnrollResponse msg(USER_ID, make_buffer(password_size));
133*e582193eSAndroid Build Coastguard Worker     std::vector<uint8_t> serialized_msg(msg.GetSerializedSize());
134*e582193eSAndroid Build Coastguard Worker     ASSERT_EQ(serialized_msg.size(), msg.Serialize(&*serialized_msg.begin(), &*serialized_msg.end()));
135*e582193eSAndroid Build Coastguard Worker 
136*e582193eSAndroid Build Coastguard Worker     EnrollResponse deserialized_msg;
137*e582193eSAndroid Build Coastguard Worker     ASSERT_EQ(gatekeeper::gatekeeper_error_t::ERROR_NONE,
138*e582193eSAndroid Build Coastguard Worker             deserialized_msg.Deserialize(&*serialized_msg.begin(), &*serialized_msg.end()));
139*e582193eSAndroid Build Coastguard Worker 
140*e582193eSAndroid Build Coastguard Worker     ASSERT_EQ(gatekeeper::gatekeeper_error_t::ERROR_NONE,
141*e582193eSAndroid Build Coastguard Worker             deserialized_msg.error);
142*e582193eSAndroid Build Coastguard Worker 
143*e582193eSAndroid Build Coastguard Worker     deserialized_password = &deserialized_msg.enrolled_password_handle;
144*e582193eSAndroid Build Coastguard Worker     ASSERT_EQ(USER_ID, deserialized_msg.user_id);
145*e582193eSAndroid Build Coastguard Worker     ASSERT_EQ((uint32_t) password_size, deserialized_password->size());
146*e582193eSAndroid Build Coastguard Worker     ASSERT_EQ(0, memcmp(msg.enrolled_password_handle.Data<uint8_t>(),
147*e582193eSAndroid Build Coastguard Worker                 deserialized_password->Data<uint8_t>(), password_size));
148*e582193eSAndroid Build Coastguard Worker }
149*e582193eSAndroid Build Coastguard Worker 
TEST(RoundTripTest,VerifyRequest)150*e582193eSAndroid Build Coastguard Worker TEST(RoundTripTest, VerifyRequest) {
151*e582193eSAndroid Build Coastguard Worker     const uint32_t password_size = 512;
152*e582193eSAndroid Build Coastguard Worker     const SizedBuffer *deserialized_password;
153*e582193eSAndroid Build Coastguard Worker     // create request, serialize, deserialize, and validate
154*e582193eSAndroid Build Coastguard Worker     VerifyRequest msg(USER_ID, 1, make_buffer(password_size), make_buffer(password_size));
155*e582193eSAndroid Build Coastguard Worker     std::vector<uint8_t> serialized_msg(msg.GetSerializedSize());
156*e582193eSAndroid Build Coastguard Worker     ASSERT_EQ(serialized_msg.size(), msg.Serialize(&*serialized_msg.begin(), &*serialized_msg.end()));
157*e582193eSAndroid Build Coastguard Worker 
158*e582193eSAndroid Build Coastguard Worker     VerifyRequest deserialized_msg;
159*e582193eSAndroid Build Coastguard Worker     ASSERT_EQ(gatekeeper::gatekeeper_error_t::ERROR_NONE,
160*e582193eSAndroid Build Coastguard Worker             deserialized_msg.Deserialize(&*serialized_msg.begin(), &*serialized_msg.end()));
161*e582193eSAndroid Build Coastguard Worker 
162*e582193eSAndroid Build Coastguard Worker     ASSERT_EQ(gatekeeper::gatekeeper_error_t::ERROR_NONE,
163*e582193eSAndroid Build Coastguard Worker             deserialized_msg.error);
164*e582193eSAndroid Build Coastguard Worker 
165*e582193eSAndroid Build Coastguard Worker     ASSERT_EQ(USER_ID, deserialized_msg.user_id);
166*e582193eSAndroid Build Coastguard Worker     ASSERT_EQ((uint64_t) 1, deserialized_msg.challenge);
167*e582193eSAndroid Build Coastguard Worker     deserialized_password = &deserialized_msg.password_handle;
168*e582193eSAndroid Build Coastguard Worker     ASSERT_EQ((uint32_t) password_size, deserialized_password->size());
169*e582193eSAndroid Build Coastguard Worker     ASSERT_EQ(0, memcmp(msg.provided_password.Data<uint8_t>(), deserialized_password->Data<uint8_t>(),
170*e582193eSAndroid Build Coastguard Worker                 password_size));
171*e582193eSAndroid Build Coastguard Worker 
172*e582193eSAndroid Build Coastguard Worker     deserialized_password = &deserialized_msg.password_handle;
173*e582193eSAndroid Build Coastguard Worker     ASSERT_EQ((uint32_t) password_size, deserialized_password->size());
174*e582193eSAndroid Build Coastguard Worker     ASSERT_EQ(0, memcmp(msg.password_handle.Data<uint8_t>(), deserialized_password->Data<uint8_t>(),
175*e582193eSAndroid Build Coastguard Worker                 password_size));
176*e582193eSAndroid Build Coastguard Worker }
177*e582193eSAndroid Build Coastguard Worker 
TEST(RoundTripTest,VerifyResponse)178*e582193eSAndroid Build Coastguard Worker TEST(RoundTripTest, VerifyResponse) {
179*e582193eSAndroid Build Coastguard Worker     const uint32_t password_size = 512;
180*e582193eSAndroid Build Coastguard Worker     const SizedBuffer *deserialized_password;
181*e582193eSAndroid Build Coastguard Worker     // create request, serialize, deserialize, and validate
182*e582193eSAndroid Build Coastguard Worker     VerifyResponse msg(USER_ID, make_buffer(password_size));
183*e582193eSAndroid Build Coastguard Worker     std::vector<uint8_t> serialized_msg(msg.GetSerializedSize());
184*e582193eSAndroid Build Coastguard Worker     ASSERT_EQ(serialized_msg.size(), msg.Serialize(&*serialized_msg.begin(), &*serialized_msg.end()));
185*e582193eSAndroid Build Coastguard Worker 
186*e582193eSAndroid Build Coastguard Worker     VerifyResponse deserialized_msg;
187*e582193eSAndroid Build Coastguard Worker     ASSERT_EQ(gatekeeper::gatekeeper_error_t::ERROR_NONE,
188*e582193eSAndroid Build Coastguard Worker             deserialized_msg.Deserialize(&*serialized_msg.begin(), &*serialized_msg.end()));
189*e582193eSAndroid Build Coastguard Worker 
190*e582193eSAndroid Build Coastguard Worker     ASSERT_EQ(gatekeeper::gatekeeper_error_t::ERROR_NONE,
191*e582193eSAndroid Build Coastguard Worker             deserialized_msg.error);
192*e582193eSAndroid Build Coastguard Worker 
193*e582193eSAndroid Build Coastguard Worker     ASSERT_EQ(USER_ID, deserialized_msg.user_id);
194*e582193eSAndroid Build Coastguard Worker     deserialized_password = &deserialized_msg.auth_token;
195*e582193eSAndroid Build Coastguard Worker     ASSERT_EQ((uint32_t) password_size, deserialized_password->size());
196*e582193eSAndroid Build Coastguard Worker     ASSERT_EQ(0, memcmp(msg.auth_token.Data<uint8_t>(), deserialized_password->Data<uint8_t>(),
197*e582193eSAndroid Build Coastguard Worker                 password_size));
198*e582193eSAndroid Build Coastguard Worker }
199*e582193eSAndroid Build Coastguard Worker 
TEST(RoundTripTest,VerifyResponseError)200*e582193eSAndroid Build Coastguard Worker TEST(RoundTripTest, VerifyResponseError) {
201*e582193eSAndroid Build Coastguard Worker     VerifyResponse msg;
202*e582193eSAndroid Build Coastguard Worker     msg.error = gatekeeper::gatekeeper_error_t::ERROR_INVALID;
203*e582193eSAndroid Build Coastguard Worker     std::vector<uint8_t> serialized_msg(msg.GetSerializedSize());
204*e582193eSAndroid Build Coastguard Worker     ASSERT_EQ(serialized_msg.size(), msg.Serialize(&*serialized_msg.begin(), &*serialized_msg.end()));
205*e582193eSAndroid Build Coastguard Worker     VerifyResponse deserialized_msg;
206*e582193eSAndroid Build Coastguard Worker     ASSERT_EQ(gatekeeper::gatekeeper_error_t::ERROR_NONE,
207*e582193eSAndroid Build Coastguard Worker             deserialized_msg.Deserialize(&*serialized_msg.begin(), &*serialized_msg.end()));
208*e582193eSAndroid Build Coastguard Worker     ASSERT_EQ(gatekeeper::gatekeeper_error_t::ERROR_INVALID,
209*e582193eSAndroid Build Coastguard Worker             deserialized_msg.error);
210*e582193eSAndroid Build Coastguard Worker }
211*e582193eSAndroid Build Coastguard Worker 
TEST(RoundTripTest,VerifyRequestError)212*e582193eSAndroid Build Coastguard Worker TEST(RoundTripTest, VerifyRequestError) {
213*e582193eSAndroid Build Coastguard Worker     VerifyRequest msg;
214*e582193eSAndroid Build Coastguard Worker     msg.error = gatekeeper::gatekeeper_error_t::ERROR_INVALID;
215*e582193eSAndroid Build Coastguard Worker     std::vector<uint8_t> serialized_msg(msg.GetSerializedSize());
216*e582193eSAndroid Build Coastguard Worker     ASSERT_EQ(serialized_msg.size(), msg.Serialize(&*serialized_msg.begin(), &*serialized_msg.end()));
217*e582193eSAndroid Build Coastguard Worker     VerifyRequest deserialized_msg;
218*e582193eSAndroid Build Coastguard Worker     ASSERT_EQ(gatekeeper::gatekeeper_error_t::ERROR_NONE,
219*e582193eSAndroid Build Coastguard Worker             deserialized_msg.Deserialize(&*serialized_msg.begin(), &*serialized_msg.end()));
220*e582193eSAndroid Build Coastguard Worker     ASSERT_EQ(gatekeeper::gatekeeper_error_t::ERROR_INVALID,
221*e582193eSAndroid Build Coastguard Worker             deserialized_msg.error);
222*e582193eSAndroid Build Coastguard Worker }
223*e582193eSAndroid Build Coastguard Worker 
TEST(RoundTripTest,EnrollResponseError)224*e582193eSAndroid Build Coastguard Worker TEST(RoundTripTest, EnrollResponseError) {
225*e582193eSAndroid Build Coastguard Worker     EnrollResponse msg;
226*e582193eSAndroid Build Coastguard Worker     msg.error = gatekeeper::gatekeeper_error_t::ERROR_INVALID;
227*e582193eSAndroid Build Coastguard Worker     std::vector<uint8_t> serialized_msg(msg.GetSerializedSize());
228*e582193eSAndroid Build Coastguard Worker     ASSERT_EQ(serialized_msg.size(), msg.Serialize(&*serialized_msg.begin(), &*serialized_msg.end()));
229*e582193eSAndroid Build Coastguard Worker     EnrollResponse deserialized_msg;
230*e582193eSAndroid Build Coastguard Worker     ASSERT_EQ(gatekeeper::gatekeeper_error_t::ERROR_NONE,
231*e582193eSAndroid Build Coastguard Worker             deserialized_msg.Deserialize(&*serialized_msg.begin(), &*serialized_msg.end()));
232*e582193eSAndroid Build Coastguard Worker     ASSERT_EQ(gatekeeper::gatekeeper_error_t::ERROR_INVALID,
233*e582193eSAndroid Build Coastguard Worker             deserialized_msg.error);
234*e582193eSAndroid Build Coastguard Worker }
235*e582193eSAndroid Build Coastguard Worker 
TEST(RoundTripTest,EnrollRequestError)236*e582193eSAndroid Build Coastguard Worker TEST(RoundTripTest, EnrollRequestError) {
237*e582193eSAndroid Build Coastguard Worker     EnrollRequest msg;
238*e582193eSAndroid Build Coastguard Worker     msg.error = gatekeeper::gatekeeper_error_t::ERROR_INVALID;
239*e582193eSAndroid Build Coastguard Worker     std::vector<uint8_t> serialized_msg(msg.GetSerializedSize());
240*e582193eSAndroid Build Coastguard Worker     ASSERT_EQ(serialized_msg.size(), msg.Serialize(&*serialized_msg.begin(), &*serialized_msg.end()));
241*e582193eSAndroid Build Coastguard Worker     EnrollRequest deserialized_msg;
242*e582193eSAndroid Build Coastguard Worker     ASSERT_EQ(gatekeeper::gatekeeper_error_t::ERROR_NONE,
243*e582193eSAndroid Build Coastguard Worker             deserialized_msg.Deserialize(&*serialized_msg.begin(), &*serialized_msg.end()));
244*e582193eSAndroid Build Coastguard Worker     ASSERT_EQ(gatekeeper::gatekeeper_error_t::ERROR_INVALID,
245*e582193eSAndroid Build Coastguard Worker             deserialized_msg.error);
246*e582193eSAndroid Build Coastguard Worker }
247*e582193eSAndroid Build Coastguard Worker 
248*e582193eSAndroid Build Coastguard Worker uint8_t msgbuf[] = {
249*e582193eSAndroid Build Coastguard Worker     220, 88,  183, 255, 71,  1,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
250*e582193eSAndroid Build Coastguard Worker     0,   173, 0,   0,   0,   228, 174, 98,  187, 191, 135, 253, 200, 51,  230, 114, 247, 151, 109,
251*e582193eSAndroid Build Coastguard Worker     237, 79,  87,  32,  94,  5,   204, 46,  154, 30,  91,  6,   103, 148, 254, 129, 65,  171, 228,
252*e582193eSAndroid Build Coastguard Worker     167, 224, 163, 9,   15,  206, 90,  58,  11,  205, 55,  211, 33,  87,  178, 149, 91,  28,  236,
253*e582193eSAndroid Build Coastguard Worker     218, 112, 231, 34,  82,  82,  134, 103, 137, 115, 27,  156, 102, 159, 220, 226, 89,  42,  25,
254*e582193eSAndroid Build Coastguard Worker     37,  9,   84,  239, 76,  161, 198, 72,  167, 163, 39,  91,  148, 191, 17,  191, 87,  169, 179,
255*e582193eSAndroid Build Coastguard Worker     136, 10,  194, 154, 4,   40,  107, 109, 61,  161, 20,  176, 247, 13,  214, 106, 229, 45,  17,
256*e582193eSAndroid Build Coastguard Worker     5,   60,  189, 64,  39,  166, 208, 14,  57,  25,  140, 148, 25,  177, 246, 189, 43,  181, 88,
257*e582193eSAndroid Build Coastguard Worker     204, 29,  126, 224, 100, 143, 93,  60,  57,  249, 55,  0,   87,  83,  227, 224, 166, 59,  214,
258*e582193eSAndroid Build Coastguard Worker     81,  144, 129, 58,  6,   57,  46,  254, 232, 41,  220, 209, 230, 167, 138, 158, 94,  180, 125,
259*e582193eSAndroid Build Coastguard Worker     247, 26,  162, 116, 238, 202, 187, 100, 65,  13,  180, 44,  245, 159, 83,  161, 176, 58,  72,
260*e582193eSAndroid Build Coastguard Worker     236, 109, 105, 160, 0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
261*e582193eSAndroid Build Coastguard Worker     0,   11,  0,   0,   0,   98,  0,   0,   0,   1,   0,   0,   32,  2,   0,   0,   0,   1,   0,
262*e582193eSAndroid Build Coastguard Worker     0,   32,  3,   0,   0,   0,   2,   0,   0,   16,  1,   0,   0,   0,   3,   0,   0,   48,  0,
263*e582193eSAndroid Build Coastguard Worker     1,   0,   0,   200, 0,   0,   80,  3,   0,   0,   0,   0,   0,   0,   0,   244, 1,   0,   112,
264*e582193eSAndroid Build Coastguard Worker     1,   246, 1,   0,   112, 1,   189, 2,   0,   96,  144, 178, 236, 250, 255, 255, 255, 255, 145,
265*e582193eSAndroid Build Coastguard Worker     1,   0,   96,  144, 226, 33,  60,  222, 2,   0,   0,   189, 2,   0,   96,  0,   0,   0,   0,
266*e582193eSAndroid Build Coastguard Worker     0,   0,   0,   0,   190, 2,   0,   16,  1,   0,   0,   0,   12,  0,   0,   0,   0,   0,   0,
267*e582193eSAndroid Build Coastguard Worker     0,   0,   0,   0,   0,   0,   0,   0,   0,   110, 0,   0,   0,   0,   0,   0,   0,   11,  0,
268*e582193eSAndroid Build Coastguard Worker     0,   0,   98,  0,   0,   0,   1,   0,   0,   32,  2,   0,   0,   0,   1,   0,   0,   32,  3,
269*e582193eSAndroid Build Coastguard Worker     0,   0,   0,   2,   0,   0,   16,  1,   0,   0,   0,   3,   0,   0,   48,  0,   1,   0,   0,
270*e582193eSAndroid Build Coastguard Worker     200, 0,   0,   80,  3,   0,   0,   0,   0,   0,   0,   0,   244, 1,   0,   112, 1,   246, 1,
271*e582193eSAndroid Build Coastguard Worker     0,   112, 1,   189, 2,   0,   96,  144, 178, 236, 250, 255, 255, 255, 255, 145, 1,   0,   96,
272*e582193eSAndroid Build Coastguard Worker     144, 226, 33,  60,  222, 2,   0,   0,   189, 2,   0,   96,  0,   0,   0,   0,   0,   0,   0,
273*e582193eSAndroid Build Coastguard Worker     0,   190, 2,   0,   16,  1,   0,   0,   0,
274*e582193eSAndroid Build Coastguard Worker };
275*e582193eSAndroid Build Coastguard Worker 
276*e582193eSAndroid Build Coastguard Worker 
277*e582193eSAndroid Build Coastguard Worker /*
278*e582193eSAndroid Build Coastguard Worker  * These tests don't have any assertions or expectations. They just try to parse garbage, to see if
279*e582193eSAndroid Build Coastguard Worker  * the result will be a crash.  This is especially informative when run under Valgrind memcheck.
280*e582193eSAndroid Build Coastguard Worker  */
281*e582193eSAndroid Build Coastguard Worker 
parse_garbage()282*e582193eSAndroid Build Coastguard Worker template <typename Message> void parse_garbage() {
283*e582193eSAndroid Build Coastguard Worker     Message msg;
284*e582193eSAndroid Build Coastguard Worker     uint32_t array_length = sizeof(msgbuf) / sizeof(msgbuf[0]);
285*e582193eSAndroid Build Coastguard Worker     const uint8_t* end = msgbuf + array_length;
286*e582193eSAndroid Build Coastguard Worker     for (uint32_t i = 0; i < array_length; ++i) {
287*e582193eSAndroid Build Coastguard Worker         const uint8_t* begin = msgbuf + i;
288*e582193eSAndroid Build Coastguard Worker         const uint8_t* p = begin;
289*e582193eSAndroid Build Coastguard Worker         msg.Deserialize(p, end);
290*e582193eSAndroid Build Coastguard Worker     }
291*e582193eSAndroid Build Coastguard Worker }
292*e582193eSAndroid Build Coastguard Worker 
293*e582193eSAndroid Build Coastguard Worker #define GARBAGE_TEST(Message)                                                                      \
294*e582193eSAndroid Build Coastguard Worker     TEST(GarbageTest, Message) { parse_garbage<Message>(); }
295*e582193eSAndroid Build Coastguard Worker 
296*e582193eSAndroid Build Coastguard Worker GARBAGE_TEST(VerifyRequest);
297*e582193eSAndroid Build Coastguard Worker GARBAGE_TEST(VerifyResponse);
298*e582193eSAndroid Build Coastguard Worker GARBAGE_TEST(EnrollRequest);
299*e582193eSAndroid Build Coastguard Worker GARBAGE_TEST(EnrollResponse);
300