107 lines
2.1 KiB
C
107 lines
2.1 KiB
C
// SPDX-License-Identifier: GPL-2.0
|
|
/* Copyright (c) 2023 Meta Platforms, Inc. and affiliates. */
|
|
|
|
#include <test_progs.h>
|
|
|
|
#include "iters.skel.h"
|
|
#include "iters_state_safety.skel.h"
|
|
#include "iters_looping.skel.h"
|
|
#include "iters_num.skel.h"
|
|
#include "iters_testmod_seq.skel.h"
|
|
|
|
static void subtest_num_iters(void)
|
|
{
|
|
struct iters_num *skel;
|
|
int err;
|
|
|
|
skel = iters_num__open_and_load();
|
|
if (!ASSERT_OK_PTR(skel, "skel_open_and_load"))
|
|
return;
|
|
|
|
err = iters_num__attach(skel);
|
|
if (!ASSERT_OK(err, "skel_attach"))
|
|
goto cleanup;
|
|
|
|
usleep(1);
|
|
iters_num__detach(skel);
|
|
|
|
#define VALIDATE_CASE(case_name) \
|
|
ASSERT_EQ(skel->bss->res_##case_name, \
|
|
skel->rodata->exp_##case_name, \
|
|
#case_name)
|
|
|
|
VALIDATE_CASE(empty_zero);
|
|
VALIDATE_CASE(empty_int_min);
|
|
VALIDATE_CASE(empty_int_max);
|
|
VALIDATE_CASE(empty_minus_one);
|
|
|
|
VALIDATE_CASE(simple_sum);
|
|
VALIDATE_CASE(neg_sum);
|
|
VALIDATE_CASE(very_neg_sum);
|
|
VALIDATE_CASE(neg_pos_sum);
|
|
|
|
VALIDATE_CASE(invalid_range);
|
|
VALIDATE_CASE(max_range);
|
|
VALIDATE_CASE(e2big_range);
|
|
|
|
VALIDATE_CASE(succ_elem_cnt);
|
|
VALIDATE_CASE(overfetched_elem_cnt);
|
|
VALIDATE_CASE(fail_elem_cnt);
|
|
|
|
#undef VALIDATE_CASE
|
|
|
|
cleanup:
|
|
iters_num__destroy(skel);
|
|
}
|
|
|
|
static void subtest_testmod_seq_iters(void)
|
|
{
|
|
struct iters_testmod_seq *skel;
|
|
int err;
|
|
|
|
if (!env.has_testmod) {
|
|
test__skip();
|
|
return;
|
|
}
|
|
|
|
skel = iters_testmod_seq__open_and_load();
|
|
if (!ASSERT_OK_PTR(skel, "skel_open_and_load"))
|
|
return;
|
|
|
|
err = iters_testmod_seq__attach(skel);
|
|
if (!ASSERT_OK(err, "skel_attach"))
|
|
goto cleanup;
|
|
|
|
usleep(1);
|
|
iters_testmod_seq__detach(skel);
|
|
|
|
#define VALIDATE_CASE(case_name) \
|
|
ASSERT_EQ(skel->bss->res_##case_name, \
|
|
skel->rodata->exp_##case_name, \
|
|
#case_name)
|
|
|
|
VALIDATE_CASE(empty);
|
|
VALIDATE_CASE(full);
|
|
VALIDATE_CASE(truncated);
|
|
|
|
#undef VALIDATE_CASE
|
|
|
|
cleanup:
|
|
iters_testmod_seq__destroy(skel);
|
|
}
|
|
|
|
void test_iters(void)
|
|
{
|
|
RUN_TESTS(iters_state_safety);
|
|
RUN_TESTS(iters_looping);
|
|
RUN_TESTS(iters);
|
|
|
|
if (env.has_testmod)
|
|
RUN_TESTS(iters_testmod_seq);
|
|
|
|
if (test__start_subtest("num"))
|
|
subtest_num_iters();
|
|
if (test__start_subtest("testmod_seq"))
|
|
subtest_testmod_seq_iters();
|
|
}
|