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