1*758e9fbaSOystein Eftevaag /* SPDX-License-Identifier: BSD-2-Clause */
2*758e9fbaSOystein Eftevaag /***********************************************************************
3*758e9fbaSOystein Eftevaag * Copyright (c) 2017-2018, Intel Corporation
4*758e9fbaSOystein Eftevaag *
5*758e9fbaSOystein Eftevaag * All rights reserved.
6*758e9fbaSOystein Eftevaag ***********************************************************************/
7*758e9fbaSOystein Eftevaag #ifdef HAVE_CONFIG_H
8*758e9fbaSOystein Eftevaag #include <config.h>
9*758e9fbaSOystein Eftevaag #endif
10*758e9fbaSOystein Eftevaag
11*758e9fbaSOystein Eftevaag #include <stdlib.h>
12*758e9fbaSOystein Eftevaag #include <stdio.h>
13*758e9fbaSOystein Eftevaag
14*758e9fbaSOystein Eftevaag #include <setjmp.h>
15*758e9fbaSOystein Eftevaag #include <cmocka.h>
16*758e9fbaSOystein Eftevaag
17*758e9fbaSOystein Eftevaag #include "tss2_sys.h"
18*758e9fbaSOystein Eftevaag #include "sysapi_util.h"
19*758e9fbaSOystein Eftevaag
20*758e9fbaSOystein Eftevaag #define MAX_SIZE_CTX 4096
21*758e9fbaSOystein Eftevaag
22*758e9fbaSOystein Eftevaag /**
23*758e9fbaSOystein Eftevaag * Pass CommonPreparePrologue a NULL TSS2_SYS_CONTEXT.
24*758e9fbaSOystein Eftevaag */
25*758e9fbaSOystein Eftevaag static void
CommonPreparePrologue_null_sys_context_unit(void ** state)26*758e9fbaSOystein Eftevaag CommonPreparePrologue_null_sys_context_unit (void **state)
27*758e9fbaSOystein Eftevaag {
28*758e9fbaSOystein Eftevaag TSS2_RC rc;
29*758e9fbaSOystein Eftevaag
30*758e9fbaSOystein Eftevaag rc = CommonPreparePrologue (NULL, 0);
31*758e9fbaSOystein Eftevaag assert_int_equal (rc, TSS2_SYS_RC_BAD_REFERENCE);
32*758e9fbaSOystein Eftevaag }
33*758e9fbaSOystein Eftevaag
34*758e9fbaSOystein Eftevaag /**
35*758e9fbaSOystein Eftevaag * Accessing the _TSS2_SYS_CONTEXT_BLOB directly like this isn't allowed
36*758e9fbaSOystein Eftevaag * in normal code. Use the opaque TSS2_SYS_CONTEXT in user space
37*758e9fbaSOystein Eftevaag * applications. In the test cases we do this to induce error conditions.
38*758e9fbaSOystein Eftevaag */
39*758e9fbaSOystein Eftevaag static int
CommonPreparePrologue_sys_setup(void ** state)40*758e9fbaSOystein Eftevaag CommonPreparePrologue_sys_setup (void **state)
41*758e9fbaSOystein Eftevaag {
42*758e9fbaSOystein Eftevaag _TSS2_SYS_CONTEXT_BLOB *sys_ctx;
43*758e9fbaSOystein Eftevaag UINT32 size_ctx;
44*758e9fbaSOystein Eftevaag
45*758e9fbaSOystein Eftevaag size_ctx = Tss2_Sys_GetContextSize (MAX_SIZE_CTX);
46*758e9fbaSOystein Eftevaag sys_ctx = calloc (1, size_ctx);
47*758e9fbaSOystein Eftevaag assert_non_null (sys_ctx);
48*758e9fbaSOystein Eftevaag
49*758e9fbaSOystein Eftevaag *state = sys_ctx;
50*758e9fbaSOystein Eftevaag return 0;
51*758e9fbaSOystein Eftevaag }
52*758e9fbaSOystein Eftevaag
53*758e9fbaSOystein Eftevaag static int
CommonPreparePrologue_sys_teardown(void ** state)54*758e9fbaSOystein Eftevaag CommonPreparePrologue_sys_teardown (void **state)
55*758e9fbaSOystein Eftevaag {
56*758e9fbaSOystein Eftevaag _TSS2_SYS_CONTEXT_BLOB *sys_ctx = (_TSS2_SYS_CONTEXT_BLOB*)*state;
57*758e9fbaSOystein Eftevaag
58*758e9fbaSOystein Eftevaag if (sys_ctx)
59*758e9fbaSOystein Eftevaag free (sys_ctx);
60*758e9fbaSOystein Eftevaag
61*758e9fbaSOystein Eftevaag return 0;
62*758e9fbaSOystein Eftevaag }
63*758e9fbaSOystein Eftevaag
64*758e9fbaSOystein Eftevaag /**
65*758e9fbaSOystein Eftevaag * CommonPrepareProlog must be passed a sys context with previousStage
66*758e9fbaSOystein Eftevaag * set to either CMD_STAGE_INITIALIZE, CMD_STAGE_RECEIVE_RESPONSE or
67*758e9fbaSOystein Eftevaag * CMD_STAGE_PREPARE.
68*758e9fbaSOystein Eftevaag */
69*758e9fbaSOystein Eftevaag static void
CommonPreparePrologue_previous_stage_initialize(void ** state)70*758e9fbaSOystein Eftevaag CommonPreparePrologue_previous_stage_initialize (void **state)
71*758e9fbaSOystein Eftevaag {
72*758e9fbaSOystein Eftevaag _TSS2_SYS_CONTEXT_BLOB *sys_ctx = (_TSS2_SYS_CONTEXT_BLOB*)*state;
73*758e9fbaSOystein Eftevaag TSS2_RC rc;
74*758e9fbaSOystein Eftevaag
75*758e9fbaSOystein Eftevaag sys_ctx->previousStage |= ~CMD_STAGE_INITIALIZE;
76*758e9fbaSOystein Eftevaag rc = CommonPreparePrologue (sys_ctx, 0);
77*758e9fbaSOystein Eftevaag assert_int_equal (rc, TSS2_SYS_RC_BAD_SEQUENCE);
78*758e9fbaSOystein Eftevaag }
79*758e9fbaSOystein Eftevaag static void
CommonPreparePrologue_previous_stage_prepare(void ** state)80*758e9fbaSOystein Eftevaag CommonPreparePrologue_previous_stage_prepare (void **state)
81*758e9fbaSOystein Eftevaag {
82*758e9fbaSOystein Eftevaag _TSS2_SYS_CONTEXT_BLOB *sys_ctx = (_TSS2_SYS_CONTEXT_BLOB*)*state;
83*758e9fbaSOystein Eftevaag TSS2_RC rc;
84*758e9fbaSOystein Eftevaag
85*758e9fbaSOystein Eftevaag sys_ctx->previousStage |= ~CMD_STAGE_RECEIVE_RESPONSE;
86*758e9fbaSOystein Eftevaag rc = CommonPreparePrologue (sys_ctx, 0);
87*758e9fbaSOystein Eftevaag assert_int_equal (rc, TSS2_SYS_RC_BAD_SEQUENCE);
88*758e9fbaSOystein Eftevaag }
89*758e9fbaSOystein Eftevaag static void
CommonPreparePrologue_previous_stage_response(void ** state)90*758e9fbaSOystein Eftevaag CommonPreparePrologue_previous_stage_response (void **state)
91*758e9fbaSOystein Eftevaag {
92*758e9fbaSOystein Eftevaag _TSS2_SYS_CONTEXT_BLOB *sys_ctx = (_TSS2_SYS_CONTEXT_BLOB*)*state;
93*758e9fbaSOystein Eftevaag TSS2_RC rc;
94*758e9fbaSOystein Eftevaag
95*758e9fbaSOystein Eftevaag sys_ctx->previousStage |= ~CMD_STAGE_PREPARE;
96*758e9fbaSOystein Eftevaag rc = CommonPreparePrologue (sys_ctx, 0);
97*758e9fbaSOystein Eftevaag assert_int_equal (rc, TSS2_SYS_RC_BAD_SEQUENCE);
98*758e9fbaSOystein Eftevaag }
99*758e9fbaSOystein Eftevaag int
main(int argc,char * arvg[])100*758e9fbaSOystein Eftevaag main (int argc, char* arvg[])
101*758e9fbaSOystein Eftevaag {
102*758e9fbaSOystein Eftevaag const struct CMUnitTest tests[] = {
103*758e9fbaSOystein Eftevaag cmocka_unit_test(CommonPreparePrologue_null_sys_context_unit),
104*758e9fbaSOystein Eftevaag cmocka_unit_test_setup_teardown (CommonPreparePrologue_previous_stage_initialize,
105*758e9fbaSOystein Eftevaag CommonPreparePrologue_sys_setup,
106*758e9fbaSOystein Eftevaag CommonPreparePrologue_sys_teardown),
107*758e9fbaSOystein Eftevaag cmocka_unit_test_setup_teardown (CommonPreparePrologue_previous_stage_prepare,
108*758e9fbaSOystein Eftevaag CommonPreparePrologue_sys_setup,
109*758e9fbaSOystein Eftevaag CommonPreparePrologue_sys_teardown),
110*758e9fbaSOystein Eftevaag cmocka_unit_test_setup_teardown (CommonPreparePrologue_previous_stage_response,
111*758e9fbaSOystein Eftevaag CommonPreparePrologue_sys_setup,
112*758e9fbaSOystein Eftevaag CommonPreparePrologue_sys_teardown),
113*758e9fbaSOystein Eftevaag };
114*758e9fbaSOystein Eftevaag return cmocka_run_group_tests (tests, NULL, NULL);
115*758e9fbaSOystein Eftevaag }
116