Merge tag 'socfpga_dts_updates_for_v5.19' of git://git.kernel.org/pub/scm/linux/kerne...
[linux-2.6-microblaze.git] / lib / kunit / kunit-test.c
index 555601d..13d0bd8 100644 (file)
@@ -190,6 +190,40 @@ static void kunit_resource_test_destroy_resource(struct kunit *test)
        KUNIT_EXPECT_TRUE(test, list_empty(&ctx->test.resources));
 }
 
+static void kunit_resource_test_remove_resource(struct kunit *test)
+{
+       struct kunit_test_resource_context *ctx = test->priv;
+       struct kunit_resource *res = kunit_alloc_and_get_resource(
+                       &ctx->test,
+                       fake_resource_init,
+                       fake_resource_free,
+                       GFP_KERNEL,
+                       ctx);
+
+       /* The resource is in the list */
+       KUNIT_EXPECT_FALSE(test, list_empty(&ctx->test.resources));
+
+       /* Remove the resource. The pointer is still valid, but it can't be
+        * found.
+        */
+       kunit_remove_resource(test, res);
+       KUNIT_EXPECT_TRUE(test, list_empty(&ctx->test.resources));
+       /* We haven't been freed yet. */
+       KUNIT_EXPECT_TRUE(test, ctx->is_resource_initialized);
+
+       /* Removing the resource multiple times is valid. */
+       kunit_remove_resource(test, res);
+       KUNIT_EXPECT_TRUE(test, list_empty(&ctx->test.resources));
+       /* Despite having been removed twice (from only one reference), the
+        * resource still has not been freed.
+        */
+       KUNIT_EXPECT_TRUE(test, ctx->is_resource_initialized);
+
+       /* Free the resource. */
+       kunit_put_resource(res);
+       KUNIT_EXPECT_FALSE(test, ctx->is_resource_initialized);
+}
+
 static void kunit_resource_test_cleanup_resources(struct kunit *test)
 {
        int i;
@@ -387,6 +421,7 @@ 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_destroy_resource),
+       KUNIT_CASE(kunit_resource_test_remove_resource),
        KUNIT_CASE(kunit_resource_test_cleanup_resources),
        KUNIT_CASE(kunit_resource_test_proper_free_ordering),
        KUNIT_CASE(kunit_resource_test_static),
@@ -435,7 +470,7 @@ static void kunit_log_test(struct kunit *test)
        KUNIT_EXPECT_NOT_ERR_OR_NULL(test,
                                     strstr(suite.log, "along with this."));
 #else
-       KUNIT_EXPECT_PTR_EQ(test, test->log, (char *)NULL);
+       KUNIT_EXPECT_NULL(test, test->log);
 #endif
 }