blob: b7d0808560593e2a9a1128767829bf7528bdd380 [file] [log] [blame]
/*
* SPDX-License-Identifier: BSD-2-Clause
* Copyright 2018, Fraunhofer SIT sponsored by Infineon Technologies AG
* Copyright 2019, Intel Corporation
* All rights reserved.
*/
#ifdef HAVE_CONFIG_H
#include <config.h>
#endif
#include <stdio.h>
#include <stddef.h>
#include <stdlib.h>
#include <dlfcn.h>
#include <setjmp.h>
#include <cmocka.h>
#include "tss2_tcti.h"
#include "tss2-tcti/tctildr-interface.h"
#include "tss2-tcti/tctildr-nodl.h"
#define LOGMODULE test
#include "util/log.h"
TSS2_RC
__wrap_Tss2_Tcti_Device_Init(TSS2_TCTI_CONTEXT *tctiContext, size_t *size,
const char *config)
{
return TSS2_RC_SUCCESS;
}
TSS2_RC
__wrap_Tss2_Tcti_Mssim_Init(TSS2_TCTI_CONTEXT *tctiContext, size_t *size,
const char *config)
{
return TSS2_RC_SUCCESS;
}
TSS2_RC
__wrap_tcti_from_init(TSS2_TCTI_INIT_FUNC init,
const char* conf,
TSS2_TCTI_CONTEXT **tcti)
{
if (tcti != NULL)
*tcti = mock_type (TSS2_TCTI_CONTEXT*);
return mock_type (TSS2_RC);
}
void
test_tctildr_get_default_null_param (void **state)
{
TSS2_RC rc;
rc = tctildr_get_default (NULL, NULL);
assert_int_equal (rc, TSS2_TCTI_RC_BAD_REFERENCE);
}
void
test_tctildr_get_default_all_fail (void **state)
{
TSS2_RC rc;
TSS2_TCTI_CONTEXT *tcti_ctx = NULL;
#define TEST_RC 0x65203563
/* device:/dev/tpm0 */
will_return (__wrap_tcti_from_init, tcti_ctx);
will_return (__wrap_tcti_from_init, TEST_RC);
/* device:/dev/tpmrm0 */
will_return (__wrap_tcti_from_init, tcti_ctx);
will_return (__wrap_tcti_from_init, TEST_RC);
/* swtpm */
will_return (__wrap_tcti_from_init, tcti_ctx);
will_return (__wrap_tcti_from_init, TEST_RC);
#if defined (TCTI_MSSIM) && defined (TCTI_SWTPM)
/* second swtpm if enabled */
will_return (__wrap_tcti_from_init, tcti_ctx);
will_return (__wrap_tcti_from_init, TEST_RC);
#endif
rc = tctildr_get_default (&tcti_ctx, NULL);
assert_int_equal (rc, TSS2_TCTI_RC_IO_ERROR);
}
static TSS2_TCTI_CONTEXT_COMMON_V2 test_ctx = { 0, };
void
test_get_tcti_null_tcti (void **state)
{
TSS2_RC rc = tctildr_get_tcti (NULL, NULL, NULL, NULL);
assert_int_equal (rc, TSS2_TCTI_RC_BAD_REFERENCE);
}
void
test_get_tcti_default_success (void **state)
{
TSS2_RC rc;
TSS2_TCTI_CONTEXT *tcti_ctx = NULL;
will_return (__wrap_tcti_from_init, &test_ctx);
will_return (__wrap_tcti_from_init, TSS2_RC_SUCCESS);
rc = tctildr_get_tcti (NULL, NULL, &tcti_ctx, NULL);
assert_int_equal (rc, TSS2_RC_SUCCESS);
assert_ptr_equal (tcti_ctx, &test_ctx);
}
void
test_get_tcti_match_second (void **state)
{
TSS2_RC rc;
TSS2_TCTI_CONTEXT *tcti_ctx = NULL;
will_return (__wrap_tcti_from_init, &test_ctx);
will_return (__wrap_tcti_from_init, TSS2_RC_SUCCESS);
rc = tctildr_get_tcti ("libtss2-tcti-device.so", NULL, &tcti_ctx, NULL);
assert_int_equal (rc, TSS2_RC_SUCCESS);
assert_ptr_equal (tcti_ctx, &test_ctx);
}
void
test_get_tcti_match_none (void **state)
{
TSS2_RC rc;
TSS2_TCTI_CONTEXT *tcti_ctx = NULL;
rc = tctildr_get_tcti ("foo", NULL, &tcti_ctx, NULL);
assert_int_equal (rc, TSS2_TCTI_RC_IO_ERROR);
}
void
test_finalize_data (void **state)
{
tctildr_finalize_data (NULL);
}
void
test_get_info (void **state)
{
TSS2_RC rc = tctildr_get_info (NULL, NULL, NULL);
assert_int_equal (rc, TSS2_TCTI_RC_NOT_SUPPORTED);
}
int
main(void)
{
const struct CMUnitTest tests[] = {
cmocka_unit_test (test_tctildr_get_default_null_param),
cmocka_unit_test (test_tctildr_get_default_all_fail),
cmocka_unit_test (test_get_tcti_null_tcti),
cmocka_unit_test (test_get_tcti_default_success),
cmocka_unit_test (test_get_tcti_match_second),
cmocka_unit_test (test_get_tcti_match_none),
cmocka_unit_test (test_finalize_data),
cmocka_unit_test (test_get_info),
};
return cmocka_run_group_tests (tests, NULL, NULL);
}