lkml.org 
[lkml]   [2019]   [Feb]   [14]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    Date
    Subject[RFC v4 10/17] kunit: test: add test managed resource tests
    From
    Tests how tests interact with test managed resources in their lifetime.

    Signed-off-by: Avinash Kondareddy <avikr@google.com>
    Signed-off-by: Brendan Higgins <brendanhiggins@google.com>
    ---
    kunit/test-test.c | 121 ++++++++++++++++++++++++++++++++++++++++++++++
    1 file changed, 121 insertions(+)

    diff --git a/kunit/test-test.c b/kunit/test-test.c
    index 0b4ad6690310d..bb34431398526 100644
    --- a/kunit/test-test.c
    +++ b/kunit/test-test.c
    @@ -127,3 +127,124 @@ static struct kunit_module kunit_try_catch_test_module = {
    .test_cases = kunit_try_catch_test_cases,
    };
    module_test(kunit_try_catch_test_module);
    +
    +/*
    + * Context for testing test managed resources
    + * is_resource_initialized is used to test arbitrary resources
    + */
    +struct kunit_test_resource_context {
    + struct kunit test;
    + bool is_resource_initialized;
    +};
    +
    +static int fake_resource_init(struct kunit_resource *res, void *context)
    +{
    + struct kunit_test_resource_context *ctx = context;
    +
    + res->allocation = &ctx->is_resource_initialized;
    + ctx->is_resource_initialized = true;
    + return 0;
    +}
    +
    +static void fake_resource_free(struct kunit_resource *res)
    +{
    + bool *is_resource_initialized = res->allocation;
    +
    + *is_resource_initialized = false;
    +}
    +
    +static void kunit_resource_test_init_resources(struct kunit *test)
    +{
    + struct kunit_test_resource_context *ctx = test->priv;
    +
    + kunit_init_test(&ctx->test, "testing_test_init_test");
    +
    + KUNIT_EXPECT_TRUE(test, list_empty(&ctx->test.resources));
    +}
    +
    +static void kunit_resource_test_alloc_resource(struct kunit *test)
    +{
    + struct kunit_test_resource_context *ctx = test->priv;
    + struct kunit_resource *res;
    + kunit_resource_free_t free = fake_resource_free;
    +
    + res = kunit_alloc_resource(&ctx->test,
    + fake_resource_init,
    + fake_resource_free,
    + ctx);
    +
    + KUNIT_ASSERT_NOT_ERR_OR_NULL(test, res);
    + KUNIT_EXPECT_EQ(test, &ctx->is_resource_initialized, res->allocation);
    + KUNIT_EXPECT_TRUE(test, list_is_last(&res->node, &ctx->test.resources));
    + KUNIT_EXPECT_EQ(test, free, res->free);
    +}
    +
    +static void kunit_resource_test_free_resource(struct kunit *test)
    +{
    + struct kunit_test_resource_context *ctx = test->priv;
    + struct kunit_resource *res = kunit_alloc_resource(&ctx->test,
    + fake_resource_init,
    + fake_resource_free,
    + ctx);
    +
    + kunit_free_resource(&ctx->test, res);
    +
    + KUNIT_EXPECT_EQ(test, false, ctx->is_resource_initialized);
    + KUNIT_EXPECT_TRUE(test, list_empty(&ctx->test.resources));
    +}
    +
    +#define KUNIT_RESOURCE_NUM 5
    +static void kunit_resource_test_cleanup_resources(struct kunit *test)
    +{
    + int i;
    + struct kunit_test_resource_context *ctx = test->priv;
    + struct kunit_resource *resources[KUNIT_RESOURCE_NUM];
    +
    + for (i = 0; i < KUNIT_RESOURCE_NUM; i++) {
    + resources[i] = kunit_alloc_resource(&ctx->test,
    + fake_resource_init,
    + fake_resource_free,
    + ctx);
    + }
    +
    + kunit_cleanup(&ctx->test);
    +
    + KUNIT_EXPECT_TRUE(test, list_empty(&ctx->test.resources));
    +}
    +
    +static int kunit_resource_test_init(struct kunit *test)
    +{
    + struct kunit_test_resource_context *ctx =
    + kzalloc(sizeof(*ctx), GFP_KERNEL);
    +
    + if (!ctx)
    + return -ENOMEM;
    + test->priv = ctx;
    +
    + kunit_init_test(&ctx->test, "test_test_context");
    + return 0;
    +}
    +
    +static void kunit_resource_test_exit(struct kunit *test)
    +{
    + struct kunit_test_resource_context *ctx = test->priv;
    +
    + kunit_cleanup(&ctx->test);
    + kfree(ctx);
    +}
    +
    +static struct kunit_case kunit_resource_test_cases[] = {
    + KUNIT_CASE(kunit_resource_test_init_resources),
    + KUNIT_CASE(kunit_resource_test_alloc_resource),
    + KUNIT_CASE(kunit_resource_test_free_resource),
    + KUNIT_CASE(kunit_resource_test_cleanup_resources),
    + {},
    +};
    +
    +static struct kunit_module kunit_resource_test_module = {
    + .name = "kunit-resource-test",
    + .init = kunit_resource_test_init,
    + .exit = kunit_resource_test_exit,
    + .test_cases = kunit_resource_test_cases,
    +};
    +module_test(kunit_resource_test_module);
    --
    2.21.0.rc0.258.g878e2cd30e-goog
    \
     
     \ /
      Last update: 2019-02-14 22:40    [W:4.198 / U:0.252 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site