Message ID | 20190404220652.19765-12-brendanhiggins@google.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | kunit: introduce KUnit, the Linux kernel unit testing framework | expand |
On Thu, Apr 04, 2019 at 03:06:46PM -0700, Brendan Higgins wrote: > From: Avinash Kondareddy <akndr41@gmail.com> > > Tests how tests interact with test managed resources in their lifetime. > > Signed-off-by: Avinash Kondareddy <akndr41@gmail.com> > Signed-off-by: Brendan Higgins <brendanhiggins@google.com> > --- > kunit/test-test.c | 122 ++++++++++++++++++++++++++++++++++++++++++++++ > 1 file changed, 122 insertions(+) > > diff --git a/kunit/test-test.c b/kunit/test-test.c > index 4bd7a34d0a6cb..54add8ca418a0 100644 > --- a/kunit/test-test.c > +++ b/kunit/test-test.c > @@ -135,3 +135,125 @@ 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_NOT_ERR_OR_NULL(test, res); Thanks! Masa
On Wed, Apr 24, 2019 at 12:00 PM Masayoshi Mizuma <msys.mizuma@gmail.com> wrote: > > On Thu, Apr 04, 2019 at 03:06:46PM -0700, Brendan Higgins wrote: > > From: Avinash Kondareddy <akndr41@gmail.com> > > > > Tests how tests interact with test managed resources in their lifetime. > > > > Signed-off-by: Avinash Kondareddy <akndr41@gmail.com> > > Signed-off-by: Brendan Higgins <brendanhiggins@google.com> > > --- > > kunit/test-test.c | 122 ++++++++++++++++++++++++++++++++++++++++++++++ > > 1 file changed, 122 insertions(+) > > > > diff --git a/kunit/test-test.c b/kunit/test-test.c > > index 4bd7a34d0a6cb..54add8ca418a0 100644 > > --- a/kunit/test-test.c > > +++ b/kunit/test-test.c > > @@ -135,3 +135,125 @@ 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_NOT_ERR_OR_NULL(test, res); See my reply to your email on the 14/17 patch.
diff --git a/kunit/test-test.c b/kunit/test-test.c index 4bd7a34d0a6cb..54add8ca418a0 100644 --- a/kunit/test-test.c +++ b/kunit/test-test.c @@ -135,3 +135,125 @@ 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)); +} + +static void kunit_resource_test_cleanup_resources(struct kunit *test) +{ + int i; + struct kunit_test_resource_context *ctx = test->priv; + struct kunit_resource *resources[5]; + + for (i = 0; i < ARRAY_SIZE(resources); 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);