blob: 17704beeefee3a92093f903f8e3b85a91b6b17a0 [file] [log] [blame]
#include <check.h>
#include <stdio.h>
#include <stdlib.h>
#include "src/common/slurmdb_pack.h"
#include "src/common/xmalloc.h"
#include "src/common/slurm_protocol_common.h"
#include "src/common/slurm_protocol_defs.h"
#include "src/common/list.h"
#include "src/common/pack.h"
START_TEST(invalid_protocol)
{
int rc;
uint32_t x;
slurmdb_event_cond_t *cond_rec = xmalloc(sizeof(slurmdb_event_cond_t));
buf_t *buf = init_buf(1024);
pack32(22, buf);
set_buf_offset(buf, 0);
slurmdb_event_cond_t *acr;
slurmdb_pack_event_cond((void **)&cond_rec, 0, buf);
unpack32(&x, buf);
rc = slurmdb_unpack_event_cond((void **)&acr, 0, buf);
ck_assert_int_eq(rc, SLURM_ERROR);
ck_assert(x == 22);
free_buf(buf);
slurmdb_destroy_event_cond(cond_rec);
}
END_TEST
static void _init_event_cond(slurmdb_event_cond_t *pack)
{
pack->cpus_max = 1;
pack->cpus_min = 2;
pack->event_type = 3;
pack->period_end = 5;
pack->period_start = 6;
pack->node_list = xstrdup("node1,node2");
pack->cluster_list = list_create(xfree_ptr);
list_append(pack->cluster_list, "cluster1");
list_append(pack->cluster_list, "cluster2");
pack->format_list = list_create(xfree_ptr);
list_append(pack->format_list, "format1");
list_append(pack->format_list, "format2");
pack->reason_list = list_create(xfree_ptr);
list_append(pack->reason_list, "reason1");
list_append(pack->reason_list, "reason2");
pack->reason_uid_list = list_create(xfree_ptr);
list_append(pack->reason_uid_list, "uid1");
list_append(pack->reason_uid_list, "uid2");
pack->state_list = list_create(xfree_ptr);
list_append(pack->state_list, "state1");
list_append(pack->state_list, "state2");
}
static void _test_list_str_eq(list_t *a, list_t *b)
{
char *str;
if (!a && !b)
return;
ck_assert(a != NULL);
ck_assert(b != NULL);
ck_assert(list_count(a) == list_count(b));
list_itr_t *itr_a = list_iterator_create(a);
while ((str = list_next(itr_a)))
ck_assert(list_find_first(b, slurm_find_char_in_list, str)
!= NULL);
}
static void _test_cond_eq(uint16_t protocol_version,
slurmdb_event_cond_t *pack)
{
int rc;
buf_t *buf = init_buf(1024);
slurmdb_pack_event_cond(pack, protocol_version, buf);
set_buf_offset(buf, 0);
slurmdb_event_cond_t *unpack;
rc = slurmdb_unpack_event_cond((void **)&unpack, protocol_version, buf);
ck_assert(rc == SLURM_SUCCESS);
ck_assert(pack->cpus_max == unpack->cpus_max);
ck_assert(pack->cpus_min == unpack->cpus_min);
ck_assert(pack->event_type == unpack->event_type);
ck_assert(pack->period_end == unpack->period_end);
ck_assert(pack->period_start == unpack->period_start);
ck_assert_str_eq(pack->node_list, unpack->node_list);
_test_list_str_eq(pack->cluster_list, unpack->cluster_list);
/**
* The unpack for format_list actually won't create a list if there are
* 0 count in the list.
*/
_test_list_str_eq(pack->format_list, unpack->format_list);
_test_list_str_eq(pack->reason_list, unpack->reason_list);
_test_list_str_eq(pack->reason_uid_list, unpack->reason_uid_list);
_test_list_str_eq(pack->state_list, unpack->state_list);
free_buf(buf);
slurmdb_destroy_event_cond(unpack);
}
static void _run_test(uint16_t protocol_version)
{
slurmdb_event_cond_t pack = {0};
_init_event_cond(&pack);
_test_cond_eq(protocol_version, &pack);
}
START_TEST(pack_current_event_cond)
{
_run_test(SLURM_PROTOCOL_VERSION);
}
END_TEST
START_TEST(pack_last_event_cond)
{
_run_test(SLURM_ONE_BACK_PROTOCOL_VERSION);
}
END_TEST
START_TEST(pack_min_event_cond)
{
_run_test(SLURM_MIN_PROTOCOL_VERSION);
}
END_TEST
/*****************************************************************************
* TEST SUITE *
****************************************************************************/
Suite *suite(void)
{
Suite *s = suite_create("Pack slurmdb_event_cond_t");
TCase *tc_core = tcase_create("Pack slurmdb_event_cond_t");
tcase_add_test(tc_core, invalid_protocol);
tcase_add_test(tc_core, pack_current_event_cond);
tcase_add_test(tc_core, pack_last_event_cond);
tcase_add_test(tc_core, pack_min_event_cond);
suite_add_tcase(s, tc_core);
return s;
}
/*****************************************************************************
* TEST RUNNER *
****************************************************************************/
int main(void)
{
int number_failed;
SRunner *sr = srunner_create(suite());
//srunner_set_fork_status(sr, CK_NOFORK);
srunner_run_all(sr, CK_VERBOSE);
//srunner_run_all(sr, CK_NORMAL);
number_failed = srunner_ntests_failed(sr);
srunner_free(sr);
return (number_failed == 0) ? EXIT_SUCCESS : EXIT_FAILURE;
}