blob: cf686ff54415984c63aa5baa408a9ad81af1df4b [file] [log] [blame]
Randall Spangler1cbf7052013-01-23 16:14:14 -08001/* Copyright (c) 2013 The Chromium OS Authors. All rights reserved.
Randall Spangler391b3102011-09-02 11:28:24 -07002 * Use of this source code is governed by a BSD-style license that can be
3 * found in the LICENSE file.
4 *
5 * Tests for vboot_api_init
6 */
7
8#include <stdio.h>
9#include <stdlib.h>
10
Bill Richardsonc8e4ff72011-11-10 13:31:39 -080011#include "gbb_header.h"
Randall Spangler391b3102011-09-02 11:28:24 -070012#include "host_common.h"
13#include "rollback_index.h"
14#include "test_common.h"
15#include "vboot_common.h"
16#include "vboot_nvstorage.h"
17#include "vboot_struct.h"
18
19/* Mock data */
20static VbCommonParams cparams;
21static VbInitParams iparams;
22static VbNvContext vnc;
23static uint8_t shared_data[VB_SHARED_DATA_MIN_SIZE];
Randall Spangler1cbf7052013-01-23 16:14:14 -080024static VbSharedDataHeader *shared = (VbSharedDataHeader *)shared_data;
Randall Spangler391b3102011-09-02 11:28:24 -070025static uint64_t mock_timer;
26static int rollback_s3_retval;
27static int nv_write_called;
Bill Richardsonc8e4ff72011-11-10 13:31:39 -080028static GoogleBinaryBlockHeader gbb;
Bill Richardsonec8df162012-06-07 04:21:14 -070029static int mock_virt_dev_sw;
Bill Richardsonb75d8ad2012-05-17 13:26:05 -070030static uint32_t mock_tpm_version;
31static uint32_t mock_rfs_retval;
Randall Spangler391b3102011-09-02 11:28:24 -070032
33/* Reset mock data (for use before each test) */
Randall Spangler1cbf7052013-01-23 16:14:14 -080034static void ResetMocks(void)
35{
36 Memset(&cparams, 0, sizeof(cparams));
37 cparams.shared_data_size = sizeof(shared_data);
38 cparams.shared_data_blob = shared_data;
39 cparams.gbb_data = &gbb;
Bill Richardsonc8e4ff72011-11-10 13:31:39 -080040
Randall Spangler1cbf7052013-01-23 16:14:14 -080041 Memset(&gbb, 0, sizeof(gbb));
42 gbb.major_version = GBB_MAJOR_VER;
43 gbb.minor_version = GBB_MINOR_VER;
44 gbb.flags = 0;
Randall Spangler391b3102011-09-02 11:28:24 -070045
Randall Spangler1cbf7052013-01-23 16:14:14 -080046 Memset(&iparams, 0, sizeof(iparams));
Randall Spangler391b3102011-09-02 11:28:24 -070047
Randall Spangler1cbf7052013-01-23 16:14:14 -080048 Memset(&vnc, 0, sizeof(vnc));
49 VbNvSetup(&vnc);
50 VbNvTeardown(&vnc); /* So CRC gets generated */
Randall Spangler391b3102011-09-02 11:28:24 -070051
Randall Spangler1cbf7052013-01-23 16:14:14 -080052 Memset(&shared_data, 0, sizeof(shared_data));
53 VbSharedDataInit(shared, sizeof(shared_data));
Randall Spangler391b3102011-09-02 11:28:24 -070054
Randall Spangler1cbf7052013-01-23 16:14:14 -080055 mock_timer = 10;
56 rollback_s3_retval = TPM_SUCCESS;
57 nv_write_called = 0;
Bill Richardsonb75d8ad2012-05-17 13:26:05 -070058
Randall Spangler1cbf7052013-01-23 16:14:14 -080059 mock_virt_dev_sw = 0;
60 mock_tpm_version = 0x10001;
61 mock_rfs_retval = 0;
Randall Spangler391b3102011-09-02 11:28:24 -070062}
63
64/****************************************************************************/
65/* Mocked verification functions */
66
Randall Spangler1cbf7052013-01-23 16:14:14 -080067VbError_t VbExNvStorageRead(uint8_t *buf)
68{
69 Memcpy(buf, vnc.raw, sizeof(vnc.raw));
70 return VBERROR_SUCCESS;
Randall Spangler391b3102011-09-02 11:28:24 -070071}
72
Randall Spangler1cbf7052013-01-23 16:14:14 -080073VbError_t VbExNvStorageWrite(const uint8_t *buf)
74{
75 nv_write_called = 1;
76 Memcpy(vnc.raw, buf, sizeof(vnc.raw));
77 return VBERROR_SUCCESS;
Randall Spangler391b3102011-09-02 11:28:24 -070078}
79
Randall Spangler1cbf7052013-01-23 16:14:14 -080080uint64_t VbExGetTimer(void)
81{
82 /*
83 * Exponential-ish rather than linear time, so that subtracting any
84 * two mock values will yield a unique result.
85 */
86 uint64_t new_timer = mock_timer * 2 + 1;
87 VbAssert(new_timer > mock_timer); /* Make sure we don't overflow */
88 mock_timer = new_timer;
89 return mock_timer;
Randall Spangler391b3102011-09-02 11:28:24 -070090}
91
Randall Spangler1cbf7052013-01-23 16:14:14 -080092uint32_t RollbackS3Resume(void)
93{
94 return rollback_s3_retval;
Randall Spangler391b3102011-09-02 11:28:24 -070095}
96
Bill Richardsonec8df162012-06-07 04:21:14 -070097uint32_t RollbackFirmwareSetup(int recovery_mode, int is_hw_dev,
98 int disable_dev_request,
Randall Spangler29e88072012-06-19 10:03:53 -070099 int clear_tpm_owner_request,
Bill Richardsonec8df162012-06-07 04:21:14 -0700100 /* two outputs on success */
Randall Spangler1cbf7052013-01-23 16:14:14 -0800101 int *is_virt_dev, uint32_t *version)
102{
103 *is_virt_dev = mock_virt_dev_sw;
104 *version = mock_tpm_version;
105 return mock_rfs_retval;
Bill Richardsonb75d8ad2012-05-17 13:26:05 -0700106}
107
Randall Spangler391b3102011-09-02 11:28:24 -0700108/****************************************************************************/
109/* Test VbInit() and check expected return value and recovery reason */
Randall Spangler391b3102011-09-02 11:28:24 -0700110
Randall Spangler1cbf7052013-01-23 16:14:14 -0800111static void TestVbInit(VbError_t expected_retval,
112 uint8_t expected_recovery, const char *desc)
113{
114 uint32_t rr = 256;
115
116 TEST_EQ(VbInit(&cparams, &iparams), expected_retval, desc);
117 VbNvGet(&vnc, VBNV_RECOVERY_REQUEST, &rr);
118 TEST_EQ(rr, expected_recovery, " (recovery request)");
Randall Spangler391b3102011-09-02 11:28:24 -0700119}
120
121/****************************************************************************/
122
Randall Spangler1cbf7052013-01-23 16:14:14 -0800123static void VbInitTest(void)
124{
125 uint32_t u;
Randall Spangler391b3102011-09-02 11:28:24 -0700126
Randall Spangler1cbf7052013-01-23 16:14:14 -0800127 /* Test passing in too small a shared data area */
128 ResetMocks();
129 cparams.shared_data_size = VB_SHARED_DATA_MIN_SIZE - 1;
130 TestVbInit(VBERROR_INIT_SHARED_DATA, 0, "Shared data too small");
Randall Spangler391b3102011-09-02 11:28:24 -0700131
Randall Spangler1cbf7052013-01-23 16:14:14 -0800132 /* Normal call; dev=0 rec=0 */
133 ResetMocks();
134 TestVbInit(0, 0, "Normal call");
135 TEST_EQ(shared->timer_vb_init_enter, 21, " time enter");
136 TEST_EQ(shared->timer_vb_init_exit, 43, " time exit");
137 TEST_EQ(shared->flags, 0, " shared flags");
138 TEST_EQ(iparams.out_flags, 0, " out flags");
139 TEST_EQ(nv_write_called, 0,
140 " NV write not called since nothing changed");
Randall Spangler391b3102011-09-02 11:28:24 -0700141
Randall Spangler1cbf7052013-01-23 16:14:14 -0800142 /* If NV data is trashed, we initialize it */
143 ResetMocks();
144 VbNvSet(&vnc, VBNV_RECOVERY_REQUEST, 123);
145 /*
146 * Note that we're not doing a VbNvTeardown(), so the CRC hasn't been
147 * regenerated yet. So VbInit() should ignore the corrupted recovery
148 * value and boot normally.
149 */
150 TestVbInit(0, 0, "NV data trashed");
151 TEST_EQ(nv_write_called, 1, " NV write called");
Randall Spangler391b3102011-09-02 11:28:24 -0700152
Randall Spangler1cbf7052013-01-23 16:14:14 -0800153 /*
154 * Test boot switch flags which are just passed through to shared
155 * flags, and don't have an effect on VbInit().
156 */
157 ResetMocks();
158 iparams.flags = VB_INIT_FLAG_WP_ENABLED;
159 TestVbInit(0, 0, "Flags test WP");
160 TEST_EQ(shared->flags, VBSD_BOOT_FIRMWARE_WP_ENABLED,
161 " shared flags WP");
Randall Spangler391b3102011-09-02 11:28:24 -0700162
Randall Spangler1cbf7052013-01-23 16:14:14 -0800163 ResetMocks();
164 iparams.flags = VB_INIT_FLAG_SW_WP_ENABLED;
165 TestVbInit(0, 0, "Flags test SW WP");
166 TEST_EQ(shared->flags, VBSD_BOOT_FIRMWARE_SW_WP_ENABLED,
167 " shared flags SW WP");
Bill Richardson9dc62172012-08-28 15:00:51 -0700168
Randall Spangler1cbf7052013-01-23 16:14:14 -0800169 ResetMocks();
170 iparams.flags = VB_INIT_FLAG_RO_NORMAL_SUPPORT;
171 TestVbInit(0, 0, " flags test RO normal");
172 TEST_EQ(shared->flags, VBSD_BOOT_RO_NORMAL_SUPPORT,
173 " shared flags RO normal");
Randall Spangler391b3102011-09-02 11:28:24 -0700174
Randall Spangler1cbf7052013-01-23 16:14:14 -0800175 /* S3 resume */
176 ResetMocks();
177 iparams.flags = VB_INIT_FLAG_S3_RESUME;
178 VbNvSet(&vnc, VBNV_RECOVERY_REQUEST, 123);
179 VbNvTeardown(&vnc);
180 /* S3 resume doesn't clear the recovery request (or act on it) */
181 TestVbInit(0, 123, "S3 resume");
182 TEST_EQ(shared->flags, VBSD_BOOT_S3_RESUME, " shared flags S3");
183 TEST_EQ(iparams.out_flags, 0, " out flags");
184 TEST_EQ(shared->recovery_reason, 0,
185 " S3 doesn't look at recovery request");
Randall Spangler391b3102011-09-02 11:28:24 -0700186
Randall Spangler1cbf7052013-01-23 16:14:14 -0800187 /* S3 resume with TPM resume error */
188 ResetMocks();
189 iparams.flags = VB_INIT_FLAG_S3_RESUME;
190 rollback_s3_retval = 1;
191 /* S3 resume doesn't clear the recovery request (or act on it) */
192 TestVbInit(VBERROR_TPM_S3_RESUME, 0, "S3 resume rollback error");
Randall Spangler391b3102011-09-02 11:28:24 -0700193
Randall Spangler1cbf7052013-01-23 16:14:14 -0800194 /*
195 * Normal boot doesn't care about TPM resume error because it doesn't
196 * call RollbackS3Resume().
197 */
198 ResetMocks();
199 rollback_s3_retval = 1;
200 TestVbInit(0, 0, "Normal doesn't S3 resume");
Randall Spangler391b3102011-09-02 11:28:24 -0700201
Randall Spangler1cbf7052013-01-23 16:14:14 -0800202 /* S3 resume with debug reset */
203 ResetMocks();
204 iparams.flags = VB_INIT_FLAG_S3_RESUME;
205 VbNvSet(&vnc, VBNV_DEBUG_RESET_MODE, 1);
206 VbNvTeardown(&vnc);
207 TestVbInit(0, 0, "S3 debug reset");
208 TEST_EQ(iparams.out_flags, VB_INIT_OUT_S3_DEBUG_BOOT, " out flags");
209 VbNvGet(&vnc, VBNV_DEBUG_RESET_MODE, &u);
210 TEST_EQ(u, 0, " S3 clears nv debug reset mode");
Randall Spangler391b3102011-09-02 11:28:24 -0700211
Randall Spangler1cbf7052013-01-23 16:14:14 -0800212 /* Normal boot clears S3 debug reset mode; doesn't set output flag */
213 ResetMocks();
214 VbNvSet(&vnc, VBNV_DEBUG_RESET_MODE, 1);
215 VbNvTeardown(&vnc);
216 TestVbInit(0, 0, "Normal with debug reset mode");
217 TEST_EQ(iparams.out_flags, 0, " out flags");
218 VbNvGet(&vnc, VBNV_DEBUG_RESET_MODE, &u);
219 TEST_EQ(u, 0, " normal clears nv debug reset mode");
Randall Spangler391b3102011-09-02 11:28:24 -0700220
Randall Spangler1cbf7052013-01-23 16:14:14 -0800221 /*
222 * S3 resume with debug reset is a normal boot, so doesn't resume the
223 * TPM.
224 */
225 ResetMocks();
226 iparams.flags = VB_INIT_FLAG_S3_RESUME;
227 rollback_s3_retval = 1;
228 VbNvSet(&vnc, VBNV_DEBUG_RESET_MODE, 1);
229 VbNvTeardown(&vnc);
230 TestVbInit(0, 0, "S3 debug reset rollback error");
Randall Spangler391b3102011-09-02 11:28:24 -0700231
Randall Spangler1cbf7052013-01-23 16:14:14 -0800232 /* Developer mode */
233 ResetMocks();
234 iparams.flags = VB_INIT_FLAG_DEV_SWITCH_ON;
235 TestVbInit(0, 0, "Dev mode on");
236 TEST_EQ(shared->recovery_reason, 0, " recovery reason");
237 TEST_EQ(iparams.out_flags,
238 VB_INIT_OUT_CLEAR_RAM |
239 VB_INIT_OUT_ENABLE_DISPLAY |
240 VB_INIT_OUT_ENABLE_USB_STORAGE |
241 VB_INIT_OUT_ENABLE_DEVELOPER |
242 VB_INIT_OUT_ENABLE_ALTERNATE_OS, " out flags");
243 TEST_EQ(shared->flags, VBSD_BOOT_DEV_SWITCH_ON, " shared flags");
Randall Spangler391b3102011-09-02 11:28:24 -0700244
Randall Spangler1cbf7052013-01-23 16:14:14 -0800245 /* Developer mode forced by GBB flag */
246 ResetMocks();
247 iparams.flags = 0;
248 gbb.flags = GBB_FLAG_FORCE_DEV_SWITCH_ON;
249 TestVbInit(0, 0, "Dev mode via GBB");
250 TEST_EQ(shared->recovery_reason, 0, " recovery reason");
251 TEST_EQ(iparams.out_flags,
252 VB_INIT_OUT_CLEAR_RAM |
253 VB_INIT_OUT_ENABLE_DISPLAY |
254 VB_INIT_OUT_ENABLE_USB_STORAGE |
255 VB_INIT_OUT_ENABLE_DEVELOPER |
256 VB_INIT_OUT_ENABLE_ALTERNATE_OS, " out flags");
257 TEST_EQ(shared->flags, VBSD_BOOT_DEV_SWITCH_ON, " shared flags");
Randall Spangleracd6f462012-06-13 16:43:59 -0700258
Randall Spangler1cbf7052013-01-23 16:14:14 -0800259 /* Recovery mode from NV storage */
260 ResetMocks();
261 VbNvSet(&vnc, VBNV_RECOVERY_REQUEST, 123);
262 VbNvTeardown(&vnc);
263 TestVbInit(0, 0, "Recovery mode - from nv");
264 TEST_EQ(shared->recovery_reason, 123, " recovery reason");
265 TEST_EQ(iparams.out_flags,
266 VB_INIT_OUT_ENABLE_RECOVERY |
267 VB_INIT_OUT_CLEAR_RAM |
268 VB_INIT_OUT_ENABLE_DISPLAY |
269 VB_INIT_OUT_ENABLE_USB_STORAGE, " out flags");
270 TEST_EQ(shared->flags, 0, " shared flags");
Randall Spangler391b3102011-09-02 11:28:24 -0700271
Randall Spangler1cbf7052013-01-23 16:14:14 -0800272 /* Recovery mode from recovery button */
273 ResetMocks();
274 iparams.flags = VB_INIT_FLAG_REC_BUTTON_PRESSED;
275 TestVbInit(0, 0, "Recovery mode - button");
276 TEST_EQ(shared->recovery_reason, VBNV_RECOVERY_RO_MANUAL,
277 " recovery reason");
278 TEST_EQ(iparams.out_flags,
279 VB_INIT_OUT_ENABLE_RECOVERY |
280 VB_INIT_OUT_CLEAR_RAM |
281 VB_INIT_OUT_ENABLE_DISPLAY |
282 VB_INIT_OUT_ENABLE_USB_STORAGE, " out flags");
283 TEST_EQ(shared->flags, VBSD_BOOT_REC_SWITCH_ON, " shared flags");
Randall Spangler391b3102011-09-02 11:28:24 -0700284
Randall Spangler1cbf7052013-01-23 16:14:14 -0800285 /* Recovery button reason supersedes NV reason */
286 ResetMocks();
287 iparams.flags = VB_INIT_FLAG_REC_BUTTON_PRESSED;
288 VbNvSet(&vnc, VBNV_RECOVERY_REQUEST, 123);
289 VbNvTeardown(&vnc);
290 TestVbInit(0, 0, "Recovery mode - button AND nv");
291 TEST_EQ(shared->recovery_reason, VBNV_RECOVERY_RO_MANUAL,
292 " recovery reason");
Randall Spangler391b3102011-09-02 11:28:24 -0700293
Randall Spangler1cbf7052013-01-23 16:14:14 -0800294 /* Recovery mode from previous boot fail */
295 ResetMocks();
296 iparams.flags = VB_INIT_FLAG_PREVIOUS_BOOT_FAIL;
297 TestVbInit(0, 0, "Recovery mode - previous boot fail");
298 TEST_EQ(shared->recovery_reason, VBNV_RECOVERY_RO_FIRMWARE,
299 " recovery reason");
300 TEST_EQ(iparams.out_flags,
301 VB_INIT_OUT_ENABLE_RECOVERY |
302 VB_INIT_OUT_CLEAR_RAM |
303 VB_INIT_OUT_ENABLE_DISPLAY |
304 VB_INIT_OUT_ENABLE_USB_STORAGE, " out flags");
305 TEST_EQ(shared->flags, 0, " shared flags");
Randall Spangler391b3102011-09-02 11:28:24 -0700306
Randall Spangler1cbf7052013-01-23 16:14:14 -0800307 /* Recovery mode from NV supersedes previous boot fail */
308 ResetMocks();
309 iparams.flags = VB_INIT_FLAG_PREVIOUS_BOOT_FAIL;
310 VbNvSet(&vnc, VBNV_RECOVERY_REQUEST, 123);
311 VbNvTeardown(&vnc);
312 TestVbInit(0, 0, "Recovery mode - previous boot fail AND nv");
313 TEST_EQ(shared->recovery_reason, 123, " recovery reason");
Randall Spangler391b3102011-09-02 11:28:24 -0700314
Randall Spangler1cbf7052013-01-23 16:14:14 -0800315 /* Dev + recovery = recovery */
316 ResetMocks();
317 iparams.flags = VB_INIT_FLAG_REC_BUTTON_PRESSED |
318 VB_INIT_FLAG_DEV_SWITCH_ON;
319 TestVbInit(0, 0, "Recovery mode - button");
320 TEST_EQ(shared->recovery_reason, VBNV_RECOVERY_RO_MANUAL,
321 " recovery reason");
322 TEST_EQ(iparams.out_flags,
323 VB_INIT_OUT_ENABLE_RECOVERY |
324 VB_INIT_OUT_CLEAR_RAM |
325 VB_INIT_OUT_ENABLE_DISPLAY |
326 VB_INIT_OUT_ENABLE_USB_STORAGE, " out flags");
327 TEST_EQ(shared->flags,
328 VBSD_BOOT_REC_SWITCH_ON | VBSD_BOOT_DEV_SWITCH_ON,
329 " shared flags");
Randall Spangler391b3102011-09-02 11:28:24 -0700330}
331
Randall Spangler1cbf7052013-01-23 16:14:14 -0800332static void VbInitTestTPM(void)
333{
334 /* Rollback setup needs to reboot */
335 ResetMocks();
336 mock_rfs_retval = TPM_E_MUST_REBOOT;
337 TestVbInit(VBERROR_TPM_REBOOT_REQUIRED, 0,
338 "Rollback TPM reboot (rec=0)");
339 ResetMocks();
340 mock_rfs_retval = TPM_E_MUST_REBOOT;
341 iparams.flags = VB_INIT_FLAG_REC_BUTTON_PRESSED;
342 TestVbInit(VBERROR_TPM_REBOOT_REQUIRED, VBNV_RECOVERY_RO_TPM_REBOOT,
343 "Rollback TPM reboot, in recovery, first time");
344 /* Ignore if we already tried rebooting */
345 ResetMocks();
346 mock_rfs_retval = TPM_E_MUST_REBOOT;
347 VbNvSet(&vnc, VBNV_RECOVERY_REQUEST, VBNV_RECOVERY_RO_TPM_REBOOT);
348 VbNvTeardown(&vnc);
349 TestVbInit(0, 0, "Rollback TPM reboot, in recovery, already retried");
350 TEST_EQ(shared->fw_version_tpm, 0x10001, " shared fw_version_tpm");
Bill Richardsonb75d8ad2012-05-17 13:26:05 -0700351
Randall Spangler1cbf7052013-01-23 16:14:14 -0800352 /* Other rollback setup errors */
353 ResetMocks();
354 mock_rfs_retval = TPM_E_IOERROR;
355 mock_tpm_version = 0x20002;
356 TestVbInit(VBERROR_TPM_FIRMWARE_SETUP, VBNV_RECOVERY_RO_TPM_S_ERROR,
357 "Rollback TPM setup error - not in recovery");
358 TEST_EQ(shared->fw_version_tpm, 0, " shared fw_version_tpm not set");
359 ResetMocks();
360 mock_rfs_retval = TPM_E_IOERROR;
361 VbNvSet(&vnc, VBNV_RECOVERY_REQUEST, VBNV_RECOVERY_US_TEST);
362 VbNvTeardown(&vnc);
363 TestVbInit(0, 0, "Rollback TPM setup error ignored in recovery");
364 TEST_EQ(shared->fw_version_tpm, 0x10001, " shared fw_version_tpm");
Bill Richardsonb75d8ad2012-05-17 13:26:05 -0700365
Randall Spangler1cbf7052013-01-23 16:14:14 -0800366 /* Virtual developer switch, but not enabled. */
367 ResetMocks();
368 iparams.flags = VB_INIT_FLAG_VIRTUAL_DEV_SWITCH;
369 TestVbInit(0, 0, "TPM Dev mode off");
370 TEST_EQ(shared->recovery_reason, 0, " recovery reason");
371 TEST_EQ(iparams.out_flags, 0, " out flags");
372 TEST_EQ(shared->flags, VBSD_HONOR_VIRT_DEV_SWITCH, " shared flags");
Bill Richardsonb75d8ad2012-05-17 13:26:05 -0700373
Randall Spangler1cbf7052013-01-23 16:14:14 -0800374 /* Virtual developer switch, enabled. */
375 ResetMocks();
376 iparams.flags = VB_INIT_FLAG_VIRTUAL_DEV_SWITCH;
377 mock_virt_dev_sw = 1;
378 TestVbInit(0, 0, "TPM Dev mode on");
379 TEST_EQ(shared->recovery_reason, 0, " recovery reason");
380 TEST_EQ(iparams.out_flags,
381 VB_INIT_OUT_CLEAR_RAM |
382 VB_INIT_OUT_ENABLE_DISPLAY |
383 VB_INIT_OUT_ENABLE_USB_STORAGE |
384 VB_INIT_OUT_ENABLE_DEVELOPER |
385 VB_INIT_OUT_ENABLE_ALTERNATE_OS, " out flags");
386 TEST_EQ(shared->flags,
387 VBSD_BOOT_DEV_SWITCH_ON | VBSD_HONOR_VIRT_DEV_SWITCH,
388 " shared flags");
Bill Richardsonb75d8ad2012-05-17 13:26:05 -0700389
Randall Spangler1cbf7052013-01-23 16:14:14 -0800390 /* Ignore virtual developer switch, even though enabled. */
391 ResetMocks();
392 mock_virt_dev_sw = 1;
393 TestVbInit(0, 0, "TPM Dev mode on but ignored");
394 TEST_EQ(shared->recovery_reason, 0, " recovery reason");
395 TEST_EQ(iparams.out_flags, 0, " out flags");
396 TEST_EQ(shared->flags, 0, " shared flags");
Bill Richardsonec8df162012-06-07 04:21:14 -0700397
Randall Spangler1cbf7052013-01-23 16:14:14 -0800398 /* HW dev switch on, no virtual developer switch */
399 ResetMocks();
400 iparams.flags = VB_INIT_FLAG_DEV_SWITCH_ON;
401 TestVbInit(0, 0, "HW Dev mode on");
402 TEST_EQ(shared->recovery_reason, 0, " recovery reason");
403 TEST_EQ(iparams.out_flags,
404 VB_INIT_OUT_CLEAR_RAM |
405 VB_INIT_OUT_ENABLE_DISPLAY |
406 VB_INIT_OUT_ENABLE_USB_STORAGE |
407 VB_INIT_OUT_ENABLE_DEVELOPER |
408 VB_INIT_OUT_ENABLE_ALTERNATE_OS, " out flags");
409 TEST_EQ(shared->flags, VBSD_BOOT_DEV_SWITCH_ON, " shared flags");
Bill Richardsonb75d8ad2012-05-17 13:26:05 -0700410}
411
Randall Spangler391b3102011-09-02 11:28:24 -0700412/* disable MSVC warnings on unused arguments */
413__pragma(warning (disable: 4100))
414
Randall Spangler1cbf7052013-01-23 16:14:14 -0800415int main(int argc, char *argv[])
416{
417 VbInitTest();
418 VbInitTestTPM();
Randall Spangler391b3102011-09-02 11:28:24 -0700419
Randall Spangler1cbf7052013-01-23 16:14:14 -0800420 return gTestSuccess ? 0 : 255;
Randall Spangler391b3102011-09-02 11:28:24 -0700421}