blob: 706bdb528066981543744877cc342e42516b51d9 [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 Morales60343092015-04-09 19:01:10 -0700170 VerifyRequest msg(USER_ID, 1, password_handle, provided_password);
Andres Morales175eea92015-03-25 18:01:05 -0700171 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);
Andres Morales60343092015-04-09 19:01:10 -0700182 ASSERT_EQ((uint64_t) 1, deserialized_msg.challenge);
Andres Morales175eea92015-03-25 18:01:05 -0700183 deserialized_password = &deserialized_msg.password_handle;
Andres Morales6c9fe692015-02-23 10:44:41 -0800184 ASSERT_EQ((uint32_t) password_size, deserialized_password->length);
Andres Morales175eea92015-03-25 18:01:05 -0700185 ASSERT_EQ(0, memcmp(msg.provided_password.buffer.get(), deserialized_password->buffer.get(),
Andres Moralesb2abaa82015-03-03 09:09:18 -0800186 password_size));
Andres Morales6c9fe692015-02-23 10:44:41 -0800187
Andres Morales175eea92015-03-25 18:01:05 -0700188 deserialized_password = &deserialized_msg.password_handle;
Andres Morales6c9fe692015-02-23 10:44:41 -0800189 ASSERT_EQ((uint32_t) password_size, deserialized_password->length);
Andres Morales175eea92015-03-25 18:01:05 -0700190 ASSERT_EQ(0, memcmp(msg.password_handle.buffer.get(), deserialized_password->buffer.get(),
Andres Moralesb2abaa82015-03-03 09:09:18 -0800191 password_size));
Andres Morales6c9fe692015-02-23 10:44:41 -0800192}
193
194TEST(RoundTripTest, VerifyResponse) {
Andres Morales11ed52a2015-03-30 16:47:47 -0700195 const uint32_t password_size = 512;
Andres Moralesedd3e3d2015-03-12 13:30:15 -0700196 SizedBuffer *auth_token = make_buffer(password_size);
Andres Morales6c9fe692015-02-23 10:44:41 -0800197 const SizedBuffer *deserialized_password;
198 // create request, serialize, deserialize, and validate
Andres Morales175eea92015-03-25 18:01:05 -0700199 VerifyResponse msg(USER_ID, auth_token);
200 SizedBuffer serialized_msg(msg.GetSerializedSize());
201 msg.Serialize(serialized_msg.buffer.get(), serialized_msg.buffer.get() + serialized_msg.length);
Andres Morales8add7e22015-03-24 11:10:42 -0700202
Andres Morales175eea92015-03-25 18:01:05 -0700203 VerifyResponse deserialized_msg;
204 deserialized_msg.Deserialize(serialized_msg.buffer.get(), serialized_msg.buffer.get()
205 + serialized_msg.length);
Andres Morales6c9fe692015-02-23 10:44:41 -0800206
Andres Morales7d0f0402015-03-19 18:02:55 -0700207 ASSERT_EQ(gatekeeper::gatekeeper_error_t::ERROR_NONE,
Andres Morales175eea92015-03-25 18:01:05 -0700208 deserialized_msg.error);
Andres Morales6c9fe692015-02-23 10:44:41 -0800209
Andres Morales175eea92015-03-25 18:01:05 -0700210 ASSERT_EQ(USER_ID, deserialized_msg.user_id);
211 deserialized_password = &deserialized_msg.auth_token;
Andres Morales6c9fe692015-02-23 10:44:41 -0800212 ASSERT_EQ((uint32_t) password_size, deserialized_password->length);
Andres Morales175eea92015-03-25 18:01:05 -0700213 ASSERT_EQ(0, memcmp(msg.auth_token.buffer.get(), deserialized_password->buffer.get(),
Andres Moralesb2abaa82015-03-03 09:09:18 -0800214 password_size));
Andres Morales6c9fe692015-02-23 10:44:41 -0800215}
216
Andres Morales175eea92015-03-25 18:01:05 -0700217TEST(RoundTripTest, VerifyResponseError) {
218 VerifyResponse msg;
219 msg.error = gatekeeper::gatekeeper_error_t::ERROR_INVALID;
220 SizedBuffer serialized_msg(msg.GetSerializedSize());
221 msg.Serialize(serialized_msg.buffer.get(), serialized_msg.buffer.get() + serialized_msg.length);
222 VerifyResponse deserialized_msg;
223 deserialized_msg.Deserialize(serialized_msg.buffer.get(), serialized_msg.buffer.get() + serialized_msg.length);
224 ASSERT_EQ(gatekeeper::gatekeeper_error_t::ERROR_INVALID,
225 deserialized_msg.error);
226}
227
228TEST(RoundTripTest, VerifyRequestError) {
229 VerifyRequest msg;
230 msg.error = gatekeeper::gatekeeper_error_t::ERROR_INVALID;
231 SizedBuffer serialized_msg(msg.GetSerializedSize());
232 msg.Serialize(serialized_msg.buffer.get(), serialized_msg.buffer.get() + serialized_msg.length);
233 VerifyRequest deserialized_msg;
234 deserialized_msg.Deserialize(serialized_msg.buffer.get(), serialized_msg.buffer.get() + serialized_msg.length);
235 ASSERT_EQ(gatekeeper::gatekeeper_error_t::ERROR_INVALID,
236 deserialized_msg.error);
237}
238
239TEST(RoundTripTest, EnrollResponseError) {
240 EnrollResponse msg;
241 msg.error = gatekeeper::gatekeeper_error_t::ERROR_INVALID;
242 SizedBuffer serialized_msg(msg.GetSerializedSize());
243 msg.Serialize(serialized_msg.buffer.get(), serialized_msg.buffer.get() + serialized_msg.length);
244 EnrollResponse deserialized_msg;
245 deserialized_msg.Deserialize(serialized_msg.buffer.get(), serialized_msg.buffer.get() + serialized_msg.length);
246 ASSERT_EQ(gatekeeper::gatekeeper_error_t::ERROR_INVALID,
247 deserialized_msg.error);
248}
249
250TEST(RoundTripTest, EnrollRequestError) {
251 EnrollRequest msg;
252 msg.error = gatekeeper::gatekeeper_error_t::ERROR_INVALID;
253 SizedBuffer serialized_msg(msg.GetSerializedSize());
254 msg.Serialize(serialized_msg.buffer.get(), serialized_msg.buffer.get() + serialized_msg.length);
255 EnrollRequest deserialized_msg;
256 deserialized_msg.Deserialize(serialized_msg.buffer.get(), serialized_msg.buffer.get() + serialized_msg.length);
257 ASSERT_EQ(gatekeeper::gatekeeper_error_t::ERROR_INVALID,
258 deserialized_msg.error);
259}
260
Andres Morales6c9fe692015-02-23 10:44:41 -0800261uint8_t msgbuf[] = {
262 220, 88, 183, 255, 71, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
263 0, 173, 0, 0, 0, 228, 174, 98, 187, 191, 135, 253, 200, 51, 230, 114, 247, 151, 109,
264 237, 79, 87, 32, 94, 5, 204, 46, 154, 30, 91, 6, 103, 148, 254, 129, 65, 171, 228,
265 167, 224, 163, 9, 15, 206, 90, 58, 11, 205, 55, 211, 33, 87, 178, 149, 91, 28, 236,
266 218, 112, 231, 34, 82, 82, 134, 103, 137, 115, 27, 156, 102, 159, 220, 226, 89, 42, 25,
267 37, 9, 84, 239, 76, 161, 198, 72, 167, 163, 39, 91, 148, 191, 17, 191, 87, 169, 179,
268 136, 10, 194, 154, 4, 40, 107, 109, 61, 161, 20, 176, 247, 13, 214, 106, 229, 45, 17,
269 5, 60, 189, 64, 39, 166, 208, 14, 57, 25, 140, 148, 25, 177, 246, 189, 43, 181, 88,
270 204, 29, 126, 224, 100, 143, 93, 60, 57, 249, 55, 0, 87, 83, 227, 224, 166, 59, 214,
271 81, 144, 129, 58, 6, 57, 46, 254, 232, 41, 220, 209, 230, 167, 138, 158, 94, 180, 125,
272 247, 26, 162, 116, 238, 202, 187, 100, 65, 13, 180, 44, 245, 159, 83, 161, 176, 58, 72,
273 236, 109, 105, 160, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
274 0, 11, 0, 0, 0, 98, 0, 0, 0, 1, 0, 0, 32, 2, 0, 0, 0, 1, 0,
275 0, 32, 3, 0, 0, 0, 2, 0, 0, 16, 1, 0, 0, 0, 3, 0, 0, 48, 0,
276 1, 0, 0, 200, 0, 0, 80, 3, 0, 0, 0, 0, 0, 0, 0, 244, 1, 0, 112,
277 1, 246, 1, 0, 112, 1, 189, 2, 0, 96, 144, 178, 236, 250, 255, 255, 255, 255, 145,
278 1, 0, 96, 144, 226, 33, 60, 222, 2, 0, 0, 189, 2, 0, 96, 0, 0, 0, 0,
279 0, 0, 0, 0, 190, 2, 0, 16, 1, 0, 0, 0, 12, 0, 0, 0, 0, 0, 0,
280 0, 0, 0, 0, 0, 0, 0, 0, 0, 110, 0, 0, 0, 0, 0, 0, 0, 11, 0,
281 0, 0, 98, 0, 0, 0, 1, 0, 0, 32, 2, 0, 0, 0, 1, 0, 0, 32, 3,
282 0, 0, 0, 2, 0, 0, 16, 1, 0, 0, 0, 3, 0, 0, 48, 0, 1, 0, 0,
283 200, 0, 0, 80, 3, 0, 0, 0, 0, 0, 0, 0, 244, 1, 0, 112, 1, 246, 1,
284 0, 112, 1, 189, 2, 0, 96, 144, 178, 236, 250, 255, 255, 255, 255, 145, 1, 0, 96,
285 144, 226, 33, 60, 222, 2, 0, 0, 189, 2, 0, 96, 0, 0, 0, 0, 0, 0, 0,
286 0, 190, 2, 0, 16, 1, 0, 0, 0,
287};
288
289
290/*
291 * These tests don't have any assertions or expectations. They just try to parse garbage, to see if
292 * the result will be a crash. This is especially informative when run under Valgrind memcheck.
293 */
294
295template <typename Message> void parse_garbage() {
296 Message msg;
Andres Morales11ed52a2015-03-30 16:47:47 -0700297 uint32_t array_length = sizeof(msgbuf) / sizeof(msgbuf[0]);
Andres Morales6c9fe692015-02-23 10:44:41 -0800298 const uint8_t* end = msgbuf + array_length;
Andres Morales11ed52a2015-03-30 16:47:47 -0700299 for (uint32_t i = 0; i < array_length; ++i) {
Andres Morales6c9fe692015-02-23 10:44:41 -0800300 const uint8_t* begin = msgbuf + i;
301 const uint8_t* p = begin;
302 msg.Deserialize(p, end);
303 }
304}
305
306#define GARBAGE_TEST(Message) \
307 TEST(GarbageTest, Message) { parse_garbage<Message>(); }
308
309GARBAGE_TEST(VerifyRequest);
310GARBAGE_TEST(VerifyResponse);
311GARBAGE_TEST(EnrollRequest);
312GARBAGE_TEST(EnrollResponse);