blob: 1a18e829c454369c248d7d87395005794c5a8ab7 [file] [log] [blame]
Andres Morales6c9fe692015-02-23 10:44:41 -08001/*
2 * Copyright (C) 2015 The Android Open Source Project
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 * http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 */
16
17#include <gtest/gtest.h>
18#include <string.h>
19#include <stdlib.h>
20#include <stdio.h>
21
Andres Morales7d0f0402015-03-19 18:02:55 -070022#include <gatekeeper/gatekeeper_messages.h>
Andres Morales6c9fe692015-02-23 10:44:41 -080023
Andres Morales7d0f0402015-03-19 18:02:55 -070024using ::gatekeeper::SizedBuffer;
Andres Morales6c9fe692015-02-23 10:44:41 -080025using ::testing::Test;
Andres Morales7d0f0402015-03-19 18:02:55 -070026using ::gatekeeper::EnrollRequest;
27using ::gatekeeper::EnrollResponse;
28using ::gatekeeper::VerifyRequest;
29using ::gatekeeper::VerifyResponse;
Andres Morales6c9fe692015-02-23 10:44:41 -080030using std::cout;
31using std::endl;
32
Andres Moralesac808182015-02-26 14:11:04 -080033static const uint32_t USER_ID = 3857;
34
Andres Morales11ed52a2015-03-30 16:47:47 -070035static SizedBuffer *make_buffer(uint32_t size) {
Andres Morales6c9fe692015-02-23 10:44:41 -080036 SizedBuffer *result = new SizedBuffer;
37 result->length = size;
38 uint8_t *buffer = new uint8_t[size];
39 srand(size);
40
Andres Morales11ed52a2015-03-30 16:47:47 -070041 for (uint32_t i = 0; i < size; i++) {
Andres Morales6c9fe692015-02-23 10:44:41 -080042 buffer[i] = rand();
43 }
44
45 result->buffer.reset(buffer);
46 return result;
47}
48
Andres Moralesedd3e3d2015-03-12 13:30:15 -070049TEST(RoundTripTest, EnrollRequestNullEnrolledNullHandle) {
Andres Morales11ed52a2015-03-30 16:47:47 -070050 const uint32_t password_size = 512;
Andres Morales6c9fe692015-02-23 10:44:41 -080051 SizedBuffer *provided_password = make_buffer(password_size);
52 const SizedBuffer *deserialized_password;
53 // create request, serialize, deserialize, and validate
Andres Morales175eea92015-03-25 18:01:05 -070054 EnrollRequest msg(USER_ID, NULL, provided_password, NULL);
55 SizedBuffer serialized_msg(msg.GetSerializedSize());
56 msg.Serialize(serialized_msg.buffer.get(), serialized_msg.buffer.get() + serialized_msg.length);
Andres Morales8add7e22015-03-24 11:10:42 -070057
Andres Morales175eea92015-03-25 18:01:05 -070058 EnrollRequest deserialized_msg;
59 deserialized_msg.Deserialize(serialized_msg.buffer.get(), serialized_msg.buffer.get()
60 + serialized_msg.length);
Andres Morales6c9fe692015-02-23 10:44:41 -080061
Andres Morales7d0f0402015-03-19 18:02:55 -070062 ASSERT_EQ(gatekeeper::gatekeeper_error_t::ERROR_NONE,
Andres Morales175eea92015-03-25 18:01:05 -070063 deserialized_msg.error);
Andres Morales6c9fe692015-02-23 10:44:41 -080064
Andres Morales175eea92015-03-25 18:01:05 -070065 deserialized_password = &deserialized_msg.provided_password;
66 ASSERT_EQ(USER_ID, deserialized_msg.user_id);
Andres Morales6c9fe692015-02-23 10:44:41 -080067 ASSERT_EQ((uint32_t) password_size, deserialized_password->length);
Andres Morales175eea92015-03-25 18:01:05 -070068 ASSERT_EQ(0, memcmp(msg.provided_password.buffer.get(), deserialized_password->buffer.get(), password_size));
Andres Morales11ed52a2015-03-30 16:47:47 -070069 ASSERT_EQ((uint32_t) 0, deserialized_msg.enrolled_password.length);
Andres Morales175eea92015-03-25 18:01:05 -070070 ASSERT_EQ(NULL, deserialized_msg.enrolled_password.buffer.get());
Andres Morales11ed52a2015-03-30 16:47:47 -070071 ASSERT_EQ((uint32_t) 0, deserialized_msg.password_handle.length);
Andres Morales175eea92015-03-25 18:01:05 -070072 ASSERT_EQ(NULL, deserialized_msg.password_handle.buffer.get());
Andres Moralesb2abaa82015-03-03 09:09:18 -080073 delete provided_password;
Andres Morales6c9fe692015-02-23 10:44:41 -080074}
75
Andres Moralesedd3e3d2015-03-12 13:30:15 -070076TEST(RoundTripTest, EnrollRequestEmptyEnrolledEmptyHandle) {
Andres Morales11ed52a2015-03-30 16:47:47 -070077 const uint32_t password_size = 512;
Andres Moralesedd3e3d2015-03-12 13:30:15 -070078 SizedBuffer *provided_password = make_buffer(password_size);
79 SizedBuffer enrolled;
80 SizedBuffer handle;
81 const SizedBuffer *deserialized_password;
82 // create request, serialize, deserialize, and validate
Andres Morales175eea92015-03-25 18:01:05 -070083 EnrollRequest msg(USER_ID, &handle, provided_password, &enrolled);
84 SizedBuffer serialized_msg(msg.GetSerializedSize());
85 msg.Serialize(serialized_msg.buffer.get(), serialized_msg.buffer.get() + serialized_msg.length);
Andres Morales8add7e22015-03-24 11:10:42 -070086
Andres Morales175eea92015-03-25 18:01:05 -070087 EnrollRequest deserialized_msg;
88 deserialized_msg.Deserialize(serialized_msg.buffer.get(), serialized_msg.buffer.get()
89 + serialized_msg.length);
Andres Moralesedd3e3d2015-03-12 13:30:15 -070090
Andres Morales7d0f0402015-03-19 18:02:55 -070091 ASSERT_EQ(gatekeeper::gatekeeper_error_t::ERROR_NONE,
Andres Morales175eea92015-03-25 18:01:05 -070092 deserialized_msg.error);
Andres Moralesedd3e3d2015-03-12 13:30:15 -070093
Andres Morales175eea92015-03-25 18:01:05 -070094 deserialized_password = &deserialized_msg.provided_password;
95 ASSERT_EQ(USER_ID, deserialized_msg.user_id);
Andres Moralesedd3e3d2015-03-12 13:30:15 -070096 ASSERT_EQ((uint32_t) password_size, deserialized_password->length);
Andres Morales175eea92015-03-25 18:01:05 -070097 ASSERT_EQ(0, memcmp(msg.provided_password.buffer.get(), deserialized_password->buffer.get(), password_size));
Andres Morales11ed52a2015-03-30 16:47:47 -070098 ASSERT_EQ((uint32_t) 0, deserialized_msg.enrolled_password.length);
Andres Morales175eea92015-03-25 18:01:05 -070099 ASSERT_EQ(NULL, deserialized_msg.enrolled_password.buffer.get());
Andres Morales11ed52a2015-03-30 16:47:47 -0700100 ASSERT_EQ((uint32_t) 0, deserialized_msg.password_handle.length);
Andres Morales175eea92015-03-25 18:01:05 -0700101 ASSERT_EQ(NULL, deserialized_msg.password_handle.buffer.get());
Andres Moralesedd3e3d2015-03-12 13:30:15 -0700102 delete provided_password;
103}
104
105TEST(RoundTripTest, EnrollRequestNonNullEnrolledOrHandle) {
Andres Morales11ed52a2015-03-30 16:47:47 -0700106 const uint32_t password_size = 512;
Andres Moralesedd3e3d2015-03-12 13:30:15 -0700107 SizedBuffer *provided_password = make_buffer(password_size);
108 SizedBuffer *enrolled_password = make_buffer(password_size);
109 SizedBuffer *password_handle = make_buffer(password_size);
110 const SizedBuffer *deserialized_password;
111 const SizedBuffer *deserialized_enrolled;
112 const SizedBuffer *deserialized_handle;
113 // create request, serialize, deserialize, and validate
Andres Morales175eea92015-03-25 18:01:05 -0700114 EnrollRequest msg(USER_ID, password_handle, provided_password, enrolled_password);
115 SizedBuffer serialized_msg(msg.GetSerializedSize());
116 msg.Serialize(serialized_msg.buffer.get(), serialized_msg.buffer.get() + serialized_msg.length);
Andres Morales8add7e22015-03-24 11:10:42 -0700117
Andres Morales175eea92015-03-25 18:01:05 -0700118 EnrollRequest deserialized_msg;
119 deserialized_msg.Deserialize(serialized_msg.buffer.get(), serialized_msg.buffer.get()
120 + serialized_msg.length);
Andres Moralesedd3e3d2015-03-12 13:30:15 -0700121
Andres Morales7d0f0402015-03-19 18:02:55 -0700122 ASSERT_EQ(gatekeeper::gatekeeper_error_t::ERROR_NONE,
Andres Morales175eea92015-03-25 18:01:05 -0700123 deserialized_msg.error);
Andres Moralesedd3e3d2015-03-12 13:30:15 -0700124
Andres Morales175eea92015-03-25 18:01:05 -0700125 deserialized_password = &deserialized_msg.provided_password;
126 deserialized_enrolled = &deserialized_msg.enrolled_password;
127 deserialized_handle = &deserialized_msg.password_handle;
128 ASSERT_EQ(USER_ID, deserialized_msg.user_id);
Andres Moralesedd3e3d2015-03-12 13:30:15 -0700129 ASSERT_EQ((uint32_t) password_size, deserialized_password->length);
Andres Morales175eea92015-03-25 18:01:05 -0700130 ASSERT_EQ(0, memcmp(msg.provided_password.buffer.get(), deserialized_password->buffer.get(), password_size));
Andres Moralesedd3e3d2015-03-12 13:30:15 -0700131 ASSERT_EQ((uint32_t) password_size, deserialized_enrolled->length);
Andres Morales175eea92015-03-25 18:01:05 -0700132 ASSERT_EQ(0, memcmp(msg.enrolled_password.buffer.get(), deserialized_enrolled->buffer.get(), password_size));
Andres Moralesedd3e3d2015-03-12 13:30:15 -0700133 ASSERT_EQ((uint32_t) password_size, deserialized_handle->length);
Andres Morales175eea92015-03-25 18:01:05 -0700134 ASSERT_EQ(0, memcmp(msg.password_handle.buffer.get(), deserialized_handle->buffer.get(), password_size));
Andres Moralesedd3e3d2015-03-12 13:30:15 -0700135 delete provided_password;
136 delete enrolled_password;
137 delete password_handle;
138}
139
140
Andres Morales6c9fe692015-02-23 10:44:41 -0800141TEST(RoundTripTest, EnrollResponse) {
Andres Morales11ed52a2015-03-30 16:47:47 -0700142 const uint32_t password_size = 512;
Andres Morales6c9fe692015-02-23 10:44:41 -0800143 SizedBuffer *enrolled_password = make_buffer(password_size);
144 const SizedBuffer *deserialized_password;
145 // create request, serialize, deserialize, and validate
Andres Morales175eea92015-03-25 18:01:05 -0700146 EnrollResponse msg(USER_ID, enrolled_password);
147 SizedBuffer serialized_msg(msg.GetSerializedSize());
148 msg.Serialize(serialized_msg.buffer.get(), serialized_msg.buffer.get() + serialized_msg.length);
Andres Morales8add7e22015-03-24 11:10:42 -0700149
Andres Morales175eea92015-03-25 18:01:05 -0700150 EnrollResponse deserialized_msg;
151 deserialized_msg.Deserialize(serialized_msg.buffer.get(), serialized_msg.buffer.get()
152 + serialized_msg.length);
Andres Morales6c9fe692015-02-23 10:44:41 -0800153
Andres Morales7d0f0402015-03-19 18:02:55 -0700154 ASSERT_EQ(gatekeeper::gatekeeper_error_t::ERROR_NONE,
Andres Morales175eea92015-03-25 18:01:05 -0700155 deserialized_msg.error);
Andres Morales6c9fe692015-02-23 10:44:41 -0800156
Andres Morales175eea92015-03-25 18:01:05 -0700157 deserialized_password = &deserialized_msg.enrolled_password_handle;
158 ASSERT_EQ(USER_ID, deserialized_msg.user_id);
Andres Morales6c9fe692015-02-23 10:44:41 -0800159 ASSERT_EQ((uint32_t) password_size, deserialized_password->length);
Andres Morales175eea92015-03-25 18:01:05 -0700160 ASSERT_EQ(0, memcmp(msg.enrolled_password_handle.buffer.get(),
Andres Moralesb2abaa82015-03-03 09:09:18 -0800161 deserialized_password->buffer.get(), password_size));
Andres Morales6c9fe692015-02-23 10:44:41 -0800162}
163
164TEST(RoundTripTest, VerifyRequest) {
Andres Morales11ed52a2015-03-30 16:47:47 -0700165 const uint32_t password_size = 512;
Andres Morales6c9fe692015-02-23 10:44:41 -0800166 SizedBuffer *provided_password = make_buffer(password_size),
167 *password_handle = make_buffer(password_size);
168 const SizedBuffer *deserialized_password;
169 // create request, serialize, deserialize, and validate
Andres Morales175eea92015-03-25 18:01:05 -0700170 VerifyRequest msg(USER_ID, password_handle, provided_password);
171 SizedBuffer serialized_msg(msg.GetSerializedSize());
172 msg.Serialize(serialized_msg.buffer.get(), serialized_msg.buffer.get() + serialized_msg.length);
Andres Morales8add7e22015-03-24 11:10:42 -0700173
Andres Morales175eea92015-03-25 18:01:05 -0700174 VerifyRequest deserialized_msg;
175 deserialized_msg.Deserialize(serialized_msg.buffer.get(), serialized_msg.buffer.get()
176 + serialized_msg.length);
Andres Morales6c9fe692015-02-23 10:44:41 -0800177
Andres Morales7d0f0402015-03-19 18:02:55 -0700178 ASSERT_EQ(gatekeeper::gatekeeper_error_t::ERROR_NONE,
Andres Morales175eea92015-03-25 18:01:05 -0700179 deserialized_msg.error);
Andres Morales6c9fe692015-02-23 10:44:41 -0800180
Andres Morales175eea92015-03-25 18:01:05 -0700181 ASSERT_EQ(USER_ID, deserialized_msg.user_id);
182 deserialized_password = &deserialized_msg.password_handle;
Andres Morales6c9fe692015-02-23 10:44:41 -0800183 ASSERT_EQ((uint32_t) password_size, deserialized_password->length);
Andres Morales175eea92015-03-25 18:01:05 -0700184 ASSERT_EQ(0, memcmp(msg.provided_password.buffer.get(), deserialized_password->buffer.get(),
Andres Moralesb2abaa82015-03-03 09:09:18 -0800185 password_size));
Andres Morales6c9fe692015-02-23 10:44:41 -0800186
Andres Morales175eea92015-03-25 18:01:05 -0700187 deserialized_password = &deserialized_msg.password_handle;
Andres Morales6c9fe692015-02-23 10:44:41 -0800188 ASSERT_EQ((uint32_t) password_size, deserialized_password->length);
Andres Morales175eea92015-03-25 18:01:05 -0700189 ASSERT_EQ(0, memcmp(msg.password_handle.buffer.get(), deserialized_password->buffer.get(),
Andres Moralesb2abaa82015-03-03 09:09:18 -0800190 password_size));
Andres Morales6c9fe692015-02-23 10:44:41 -0800191}
192
193TEST(RoundTripTest, VerifyResponse) {
Andres Morales11ed52a2015-03-30 16:47:47 -0700194 const uint32_t password_size = 512;
Andres Moralesedd3e3d2015-03-12 13:30:15 -0700195 SizedBuffer *auth_token = make_buffer(password_size);
Andres Morales6c9fe692015-02-23 10:44:41 -0800196 const SizedBuffer *deserialized_password;
197 // create request, serialize, deserialize, and validate
Andres Morales175eea92015-03-25 18:01:05 -0700198 VerifyResponse msg(USER_ID, auth_token);
199 SizedBuffer serialized_msg(msg.GetSerializedSize());
200 msg.Serialize(serialized_msg.buffer.get(), serialized_msg.buffer.get() + serialized_msg.length);
Andres Morales8add7e22015-03-24 11:10:42 -0700201
Andres Morales175eea92015-03-25 18:01:05 -0700202 VerifyResponse deserialized_msg;
203 deserialized_msg.Deserialize(serialized_msg.buffer.get(), serialized_msg.buffer.get()
204 + serialized_msg.length);
Andres Morales6c9fe692015-02-23 10:44:41 -0800205
Andres Morales7d0f0402015-03-19 18:02:55 -0700206 ASSERT_EQ(gatekeeper::gatekeeper_error_t::ERROR_NONE,
Andres Morales175eea92015-03-25 18:01:05 -0700207 deserialized_msg.error);
Andres Morales6c9fe692015-02-23 10:44:41 -0800208
Andres Morales175eea92015-03-25 18:01:05 -0700209 ASSERT_EQ(USER_ID, deserialized_msg.user_id);
210 deserialized_password = &deserialized_msg.auth_token;
Andres Morales6c9fe692015-02-23 10:44:41 -0800211 ASSERT_EQ((uint32_t) password_size, deserialized_password->length);
Andres Morales175eea92015-03-25 18:01:05 -0700212 ASSERT_EQ(0, memcmp(msg.auth_token.buffer.get(), deserialized_password->buffer.get(),
Andres Moralesb2abaa82015-03-03 09:09:18 -0800213 password_size));
Andres Morales6c9fe692015-02-23 10:44:41 -0800214}
215
Andres Morales175eea92015-03-25 18:01:05 -0700216TEST(RoundTripTest, VerifyResponseError) {
217 VerifyResponse msg;
218 msg.error = gatekeeper::gatekeeper_error_t::ERROR_INVALID;
219 SizedBuffer serialized_msg(msg.GetSerializedSize());
220 msg.Serialize(serialized_msg.buffer.get(), serialized_msg.buffer.get() + serialized_msg.length);
221 VerifyResponse deserialized_msg;
222 deserialized_msg.Deserialize(serialized_msg.buffer.get(), serialized_msg.buffer.get() + serialized_msg.length);
223 ASSERT_EQ(gatekeeper::gatekeeper_error_t::ERROR_INVALID,
224 deserialized_msg.error);
225}
226
227TEST(RoundTripTest, VerifyRequestError) {
228 VerifyRequest msg;
229 msg.error = gatekeeper::gatekeeper_error_t::ERROR_INVALID;
230 SizedBuffer serialized_msg(msg.GetSerializedSize());
231 msg.Serialize(serialized_msg.buffer.get(), serialized_msg.buffer.get() + serialized_msg.length);
232 VerifyRequest deserialized_msg;
233 deserialized_msg.Deserialize(serialized_msg.buffer.get(), serialized_msg.buffer.get() + serialized_msg.length);
234 ASSERT_EQ(gatekeeper::gatekeeper_error_t::ERROR_INVALID,
235 deserialized_msg.error);
236}
237
238TEST(RoundTripTest, EnrollResponseError) {
239 EnrollResponse msg;
240 msg.error = gatekeeper::gatekeeper_error_t::ERROR_INVALID;
241 SizedBuffer serialized_msg(msg.GetSerializedSize());
242 msg.Serialize(serialized_msg.buffer.get(), serialized_msg.buffer.get() + serialized_msg.length);
243 EnrollResponse deserialized_msg;
244 deserialized_msg.Deserialize(serialized_msg.buffer.get(), serialized_msg.buffer.get() + serialized_msg.length);
245 ASSERT_EQ(gatekeeper::gatekeeper_error_t::ERROR_INVALID,
246 deserialized_msg.error);
247}
248
249TEST(RoundTripTest, EnrollRequestError) {
250 EnrollRequest msg;
251 msg.error = gatekeeper::gatekeeper_error_t::ERROR_INVALID;
252 SizedBuffer serialized_msg(msg.GetSerializedSize());
253 msg.Serialize(serialized_msg.buffer.get(), serialized_msg.buffer.get() + serialized_msg.length);
254 EnrollRequest deserialized_msg;
255 deserialized_msg.Deserialize(serialized_msg.buffer.get(), serialized_msg.buffer.get() + serialized_msg.length);
256 ASSERT_EQ(gatekeeper::gatekeeper_error_t::ERROR_INVALID,
257 deserialized_msg.error);
258}
259
Andres Morales6c9fe692015-02-23 10:44:41 -0800260uint8_t msgbuf[] = {
261 220, 88, 183, 255, 71, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
262 0, 173, 0, 0, 0, 228, 174, 98, 187, 191, 135, 253, 200, 51, 230, 114, 247, 151, 109,
263 237, 79, 87, 32, 94, 5, 204, 46, 154, 30, 91, 6, 103, 148, 254, 129, 65, 171, 228,
264 167, 224, 163, 9, 15, 206, 90, 58, 11, 205, 55, 211, 33, 87, 178, 149, 91, 28, 236,
265 218, 112, 231, 34, 82, 82, 134, 103, 137, 115, 27, 156, 102, 159, 220, 226, 89, 42, 25,
266 37, 9, 84, 239, 76, 161, 198, 72, 167, 163, 39, 91, 148, 191, 17, 191, 87, 169, 179,
267 136, 10, 194, 154, 4, 40, 107, 109, 61, 161, 20, 176, 247, 13, 214, 106, 229, 45, 17,
268 5, 60, 189, 64, 39, 166, 208, 14, 57, 25, 140, 148, 25, 177, 246, 189, 43, 181, 88,
269 204, 29, 126, 224, 100, 143, 93, 60, 57, 249, 55, 0, 87, 83, 227, 224, 166, 59, 214,
270 81, 144, 129, 58, 6, 57, 46, 254, 232, 41, 220, 209, 230, 167, 138, 158, 94, 180, 125,
271 247, 26, 162, 116, 238, 202, 187, 100, 65, 13, 180, 44, 245, 159, 83, 161, 176, 58, 72,
272 236, 109, 105, 160, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
273 0, 11, 0, 0, 0, 98, 0, 0, 0, 1, 0, 0, 32, 2, 0, 0, 0, 1, 0,
274 0, 32, 3, 0, 0, 0, 2, 0, 0, 16, 1, 0, 0, 0, 3, 0, 0, 48, 0,
275 1, 0, 0, 200, 0, 0, 80, 3, 0, 0, 0, 0, 0, 0, 0, 244, 1, 0, 112,
276 1, 246, 1, 0, 112, 1, 189, 2, 0, 96, 144, 178, 236, 250, 255, 255, 255, 255, 145,
277 1, 0, 96, 144, 226, 33, 60, 222, 2, 0, 0, 189, 2, 0, 96, 0, 0, 0, 0,
278 0, 0, 0, 0, 190, 2, 0, 16, 1, 0, 0, 0, 12, 0, 0, 0, 0, 0, 0,
279 0, 0, 0, 0, 0, 0, 0, 0, 0, 110, 0, 0, 0, 0, 0, 0, 0, 11, 0,
280 0, 0, 98, 0, 0, 0, 1, 0, 0, 32, 2, 0, 0, 0, 1, 0, 0, 32, 3,
281 0, 0, 0, 2, 0, 0, 16, 1, 0, 0, 0, 3, 0, 0, 48, 0, 1, 0, 0,
282 200, 0, 0, 80, 3, 0, 0, 0, 0, 0, 0, 0, 244, 1, 0, 112, 1, 246, 1,
283 0, 112, 1, 189, 2, 0, 96, 144, 178, 236, 250, 255, 255, 255, 255, 145, 1, 0, 96,
284 144, 226, 33, 60, 222, 2, 0, 0, 189, 2, 0, 96, 0, 0, 0, 0, 0, 0, 0,
285 0, 190, 2, 0, 16, 1, 0, 0, 0,
286};
287
288
289/*
290 * These tests don't have any assertions or expectations. They just try to parse garbage, to see if
291 * the result will be a crash. This is especially informative when run under Valgrind memcheck.
292 */
293
294template <typename Message> void parse_garbage() {
295 Message msg;
Andres Morales11ed52a2015-03-30 16:47:47 -0700296 uint32_t array_length = sizeof(msgbuf) / sizeof(msgbuf[0]);
Andres Morales6c9fe692015-02-23 10:44:41 -0800297 const uint8_t* end = msgbuf + array_length;
Andres Morales11ed52a2015-03-30 16:47:47 -0700298 for (uint32_t i = 0; i < array_length; ++i) {
Andres Morales6c9fe692015-02-23 10:44:41 -0800299 const uint8_t* begin = msgbuf + i;
300 const uint8_t* p = begin;
301 msg.Deserialize(p, end);
302 }
303}
304
305#define GARBAGE_TEST(Message) \
306 TEST(GarbageTest, Message) { parse_garbage<Message>(); }
307
308GARBAGE_TEST(VerifyRequest);
309GARBAGE_TEST(VerifyResponse);
310GARBAGE_TEST(EnrollRequest);
311GARBAGE_TEST(EnrollResponse);