123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193 |
- /* SPDX-License-Identifier: BSD-3-Clause */
- #include <stdbool.h>
- #include <stdio.h>
- #include <setjmp.h>
- #include <cmocka.h>
- #include "tpm2_hierarchy.h"
- #include "tpm2_util.h"
- static void test_tpm2_util_handle_from_optarg_NULL(void **state) {
- UNUSED(state);
- TPMI_RH_PROVISION h;
- bool result = tpm2_util_handle_from_optarg(NULL, &h,
- TPM2_HANDLE_FLAGS_ALL_HIERACHIES);
- assert_false(result);
- }
- static void test_tpm2_util_handle_from_optarg_empty(void **state) {
- UNUSED(state);
- TPMI_RH_PROVISION h;
- bool result = tpm2_util_handle_from_optarg("", &h,
- TPM2_HANDLE_FLAGS_ALL_HIERACHIES);
- assert_false(result);
- }
- static void test_tpm2_util_handle_from_optarg_invalid_id(void **state) {
- UNUSED(state);
- TPMI_RH_PROVISION h;
- bool result = tpm2_util_handle_from_optarg("q", &h,
- TPM2_HANDLE_FLAGS_ALL_HIERACHIES);
- assert_false(result);
- }
- static void test_tpm2_util_handle_from_optarg_invalid_str(void **state) {
- UNUSED(state);
- TPMI_RH_PROVISION h;
- bool result = tpm2_util_handle_from_optarg("nope", &h,
- TPM2_HANDLE_FLAGS_ALL_HIERACHIES);
- assert_false(result);
- }
- static void test_tpm2_util_handle_from_optarg_valid_ids(void **state) {
- UNUSED(state);
- TPMI_RH_PROVISION h;
- bool result = tpm2_util_handle_from_optarg("o", &h,
- TPM2_HANDLE_FLAGS_ALL_HIERACHIES);
- assert_true(result);
- assert_int_equal(h, TPM2_RH_OWNER);
- result = tpm2_util_handle_from_optarg("p", &h,
- TPM2_HANDLE_FLAGS_ALL_HIERACHIES);
- assert_true(result);
- assert_int_equal(h, TPM2_RH_PLATFORM);
- result = tpm2_util_handle_from_optarg("e", &h,
- TPM2_HANDLE_FLAGS_ALL_HIERACHIES);
- assert_true(result);
- assert_int_equal(h, TPM2_RH_ENDORSEMENT);
- result = tpm2_util_handle_from_optarg("n", &h,
- TPM2_HANDLE_FLAGS_ALL_HIERACHIES);
- assert_true(result);
- assert_int_equal(h, TPM2_RH_NULL);
- result = tpm2_util_handle_from_optarg("0x81010009", &h,
- TPM2_HANDLE_ALL_W_NV);
- assert_true(result);
- assert_int_equal(h, 0x81010009);
- }
- static void test_tpm2_util_handle_from_optarg_valid_ids_disabled(void **state) {
- UNUSED(state);
- TPMI_RH_PROVISION h;
- bool result = tpm2_util_handle_from_optarg("o", &h, TPM2_HANDLE_FLAGS_N);
- assert_false(result);
- result = tpm2_util_handle_from_optarg("p", &h, TPM2_HANDLE_FLAGS_O);
- assert_false(result);
- result = tpm2_util_handle_from_optarg("e", &h, TPM2_HANDLE_FLAGS_P);
- assert_false(result);
- result = tpm2_util_handle_from_optarg("n", &h, TPM2_HANDLE_FLAGS_E);
- assert_false(result);
- result = tpm2_util_handle_from_optarg("0x81010009", &h,
- TPM2_HANDLE_FLAGS_ALL_HIERACHIES);
- assert_false(result);
- }
- static void test_tpm2_util_handle_from_optarg_valid_ids_enabled(void **state) {
- UNUSED(state);
- TPMI_RH_PROVISION h;
- bool result = tpm2_util_handle_from_optarg("o", &h, TPM2_HANDLE_FLAGS_O);
- assert_true(result);
- assert_int_equal(h, TPM2_RH_OWNER);
- result = tpm2_util_handle_from_optarg("p", &h, TPM2_HANDLE_FLAGS_P);
- assert_true(result);
- assert_int_equal(h, TPM2_RH_PLATFORM);
- result = tpm2_util_handle_from_optarg("e", &h, TPM2_HANDLE_FLAGS_E);
- assert_true(result);
- assert_int_equal(h, TPM2_RH_ENDORSEMENT);
- result = tpm2_util_handle_from_optarg("n", &h, TPM2_HANDLE_FLAGS_N);
- assert_true(result);
- assert_int_equal(h, TPM2_RH_NULL);
- }
- static void test_tpm2_util_handle_from_optarg_nv_valid_range(void **state) {
- UNUSED(state);
- TPMI_RH_PROVISION h;
- /*
- * NV index specified as NV:offset
- */
- bool result = tpm2_util_handle_from_optarg("1", &h, TPM2_HANDLE_FLAGS_NV);
- assert_true(result);
- assert_int_equal(h, 0x01000001);
- /*
- * NV index specified as full raw handle
- */
- result = tpm2_util_handle_from_optarg("0x01000002", &h,
- TPM2_HANDLE_FLAGS_NV);
- assert_true(result);
- assert_int_equal(h, 0x01000002);
- }
- static void test_tpm2_util_handle_from_optarg_nv_invalid_offset(void **state) {
- UNUSED(state);
- TPMI_RH_PROVISION h;
- /*
- * No offset specified
- */
- bool result = tpm2_util_handle_from_optarg("", &h, TPM2_HANDLE_FLAGS_NV);
- assert_false(result);
- /*
- * Offset is non hex string
- */
- result = tpm2_util_handle_from_optarg("random", &h, TPM2_HANDLE_FLAGS_NV);
- assert_false(result);
- /*
- * Offset is larger than TPM2_HR_HANDLE_MASK
- */
- result = tpm2_util_handle_from_optarg("0x12345678", &h,
- TPM2_HANDLE_FLAGS_NV);
- assert_false(result);
- /*
- * Wrongly specify NV index as raw handle and disable NV in flags
- */
- result = tpm2_util_handle_from_optarg("0x01000001", &h,
- TPM2_HANDLE_FLAGS_O);
- assert_false(result);
- }
- /* link required symbol, but tpm2_tool.c declares it AND main, which
- * we have a main below for cmocka tests.
- */
- bool output_enabled = true;
- int main(int argc, char* argv[]) {
- (void) argc;
- (void) argv;
- const struct CMUnitTest tests[] = {
- cmocka_unit_test(test_tpm2_util_handle_from_optarg_NULL),
- cmocka_unit_test(test_tpm2_util_handle_from_optarg_empty),
- cmocka_unit_test(test_tpm2_util_handle_from_optarg_invalid_id),
- cmocka_unit_test(test_tpm2_util_handle_from_optarg_invalid_str),
- cmocka_unit_test(test_tpm2_util_handle_from_optarg_valid_ids),
- cmocka_unit_test(test_tpm2_util_handle_from_optarg_valid_ids_disabled),
- cmocka_unit_test(test_tpm2_util_handle_from_optarg_valid_ids_enabled),
- cmocka_unit_test(test_tpm2_util_handle_from_optarg_nv_valid_range),
- cmocka_unit_test(test_tpm2_util_handle_from_optarg_nv_invalid_offset),
- };
- return cmocka_run_group_tests(tests, NULL, NULL);
- }
|