blob: 70228f1889ed67671fd5fce2a65461e7ac14350a [file] [log] [blame]
#include <stdlib.h>
#include <arpa/inet.h>
#include <stdio.h>
#include <setjmp.h>
#include <cmocka.h>
#include <tpm20.h>
#include "sys_api_marshalUnmarshal.h"
#include "sysapi_util.h"
typedef struct {
uint8_t *buffer;
size_t buffer_size;
uint16_t data_host;
uint16_t data_net;
TSS2_RC rc;
} marshal_uint16_data_t;
void
unmarshal_UINT16_setup (void **state)
{
marshal_uint16_data_t *data;
data = calloc (1, sizeof (marshal_uint16_data_t));
data->buffer = calloc (1, sizeof (uint16_t));
data->buffer_size = sizeof (uint16_t);
data->data_host = 0xdead;
data->data_net = htons (data->data_host);
data->rc = TSS2_RC_SUCCESS;
/**
* copy test data into the buffer in network byte order, this is what we
* will be unmarshalling
*/
memcpy (data->buffer, &data->data_net, sizeof (data->data_net));
*state = data;
}
void
unmarshal_UINT16_teardown (void **state)
{
marshal_uint16_data_t *data;
data = (marshal_uint16_data_t*)*state;
if (data) {
if (data->buffer)
free (data->buffer);
free (data);
}
}
/**
* Make a call to Unmarshal_UINT16 function that should succeed.
* The *_setup function has already copied a UINT16 into a data buffer in
* network byte order (marshalled form). This function uses the
* Unmarshal_UINT16 function to get this UINT16 back out of the data buffer
* and into the host by te order for comparison to the reference value
* in the 'data_host' field of the marshal_uint16_data_t structure.
*/
void
unmarshal_UINT16_good (void **state)
{
marshal_uint16_data_t *data;
uint16_t data_unmarshalled = 0;
data = (marshal_uint16_data_t*)*state;
uint8_t *nextData = data->buffer;
Unmarshal_UINT16 (data->buffer,
data->buffer_size,
&nextData,
&data_unmarshalled,
&data->rc);
/**
* uint16_t that was unmarshalled from the data buffer should be equal to
* the data_host member of the test data structure.
*/
assert_int_equal (data_unmarshalled, data->data_host);
/**
* The Unmarshal_* functions advance the 'nextData' parameter by the size of
* the marshalled data.
*/
assert_int_equal (data->buffer, nextData - sizeof (uint16_t));
/* Finally the return code should indicate success. */
assert_int_equal (data->rc, TSS2_RC_SUCCESS);
}
int
main (void)
{
const UnitTest tests [] = {
unit_test_setup_teardown (unmarshal_UINT16_good,
unmarshal_UINT16_setup,
unmarshal_UINT16_teardown),
};
return run_tests (tests);
}