blob: 759c2ad376664641fdd89edbc33f53fee2e6fb96 [file] [log] [blame]
#include <stdlib.h>
#include <stdio.h>
#include <setjmp.h>
#include <cmocka.h>
#include <sapi/tpm20.h>
extern TSS2_RC GetCommands( TSS2_SYS_CONTEXT *resMgrSysContext, TPML_CCA **supportedCommands );
void*
__wrap_malloc (size_t size)
{
return (void*) mock ();
}
TPM_RC
__wrap_Tss2_Sys_GetCapability (TSS2_SYS_CONTEXT *sys_ctx,
TSS2_SYS_CMD_AUTHS const *cmdAuthArray,
TPM_CAP capability,
UINT32 property,
UINT32 propertyCount,
TPMI_YES_NO *moreData,
TPMS_CAPABILITY_DATA *capabilityData,
TSS2_SYS_RSP_AUTHS *rspAuthsArray)
{
capabilityData->capability = TPM_CAP_TPM_PROPERTIES;
capabilityData->data.tpmProperties.count = 1;
capabilityData->data.tpmProperties.tpmProperty[0].property = TPM_PT_TOTAL_COMMANDS;
capabilityData->data.tpmProperties.tpmProperty[0].value = 0;
return (TSS2_RC) mock ();
}
/* This test forces a failure in the call to malloc in GetCommands. To do
* this we must mock both Tss2_Sys_GetCapability and malloc. Mocking the
* Tss2 function is required to get to the malloc call where we're forcing
* the filure. This test ensures that when malloc fails, GetCommands returns
* the right error layer / level and the right INSUFFICIENT_BUFFER code.
*/
static void
getcommand_malloc_fail (void **state)
{
TSS2_SYS_CONTEXT *sys_ctx = NULL;
TPML_CCA *commands;
TSS2_RC ret, ret_expected = TSS2_BASE_RC_INSUFFICIENT_BUFFER + TSS2_RESMGR_ERROR_LEVEL;
/* Return value for Tss2_Sys_GetCapability.
* The calling function (GetCommands) will pass it a valid
* TPMS_CAPABILITY_DATA structure and that's the only parameter we need.
*/
will_return (__wrap_Tss2_Sys_GetCapability, TPM_RC_SUCCESS);
/* Return value for malloc: this causes the error condition we're
* testing
*/
will_return (__wrap_malloc, NULL);
ret = GetCommands (sys_ctx, &commands);
assert_int_equal (ret, ret_expected);
}
int
main (int argc, char* argv[])
{
const UnitTest tests[] = {
unit_test (getcommand_malloc_fail),
};
return run_tests (tests);
}