forked from torvalds/linux
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Add a test for string stream along with a simpler example. Signed-off-by: Brendan Higgins <[email protected]> Reviewed-by: Greg Kroah-Hartman <[email protected]> Reviewed-by: Logan Gunthorpe <[email protected]> Reviewed-by: Stephen Boyd <[email protected]> Signed-off-by: Shuah Khan <[email protected]>
- Loading branch information
Showing
4 changed files
with
167 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,3 +1,7 @@ | ||
obj-$(CONFIG_KUNIT) += test.o \ | ||
string-stream.o \ | ||
assert.o | ||
|
||
obj-$(CONFIG_KUNIT_TEST) += string-stream-test.o | ||
|
||
obj-$(CONFIG_KUNIT_EXAMPLE_TEST) += example-test.o |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,88 @@ | ||
// SPDX-License-Identifier: GPL-2.0 | ||
/* | ||
* Example KUnit test to show how to use KUnit. | ||
* | ||
* Copyright (C) 2019, Google LLC. | ||
* Author: Brendan Higgins <[email protected]> | ||
*/ | ||
|
||
#include <kunit/test.h> | ||
|
||
/* | ||
* This is the most fundamental element of KUnit, the test case. A test case | ||
* makes a set EXPECTATIONs and ASSERTIONs about the behavior of some code; if | ||
* any expectations or assertions are not met, the test fails; otherwise, the | ||
* test passes. | ||
* | ||
* In KUnit, a test case is just a function with the signature | ||
* `void (*)(struct kunit *)`. `struct kunit` is a context object that stores | ||
* information about the current test. | ||
*/ | ||
static void example_simple_test(struct kunit *test) | ||
{ | ||
/* | ||
* This is an EXPECTATION; it is how KUnit tests things. When you want | ||
* to test a piece of code, you set some expectations about what the | ||
* code should do. KUnit then runs the test and verifies that the code's | ||
* behavior matched what was expected. | ||
*/ | ||
KUNIT_EXPECT_EQ(test, 1 + 1, 2); | ||
} | ||
|
||
/* | ||
* This is run once before each test case, see the comment on | ||
* example_test_suite for more information. | ||
*/ | ||
static int example_test_init(struct kunit *test) | ||
{ | ||
kunit_info(test, "initializing\n"); | ||
|
||
return 0; | ||
} | ||
|
||
/* | ||
* Here we make a list of all the test cases we want to add to the test suite | ||
* below. | ||
*/ | ||
static struct kunit_case example_test_cases[] = { | ||
/* | ||
* This is a helper to create a test case object from a test case | ||
* function; its exact function is not important to understand how to | ||
* use KUnit, just know that this is how you associate test cases with a | ||
* test suite. | ||
*/ | ||
KUNIT_CASE(example_simple_test), | ||
{} | ||
}; | ||
|
||
/* | ||
* This defines a suite or grouping of tests. | ||
* | ||
* Test cases are defined as belonging to the suite by adding them to | ||
* `kunit_cases`. | ||
* | ||
* Often it is desirable to run some function which will set up things which | ||
* will be used by every test; this is accomplished with an `init` function | ||
* which runs before each test case is invoked. Similarly, an `exit` function | ||
* may be specified which runs after every test case and can be used to for | ||
* cleanup. For clarity, running tests in a test suite would behave as follows: | ||
* | ||
* suite.init(test); | ||
* suite.test_case[0](test); | ||
* suite.exit(test); | ||
* suite.init(test); | ||
* suite.test_case[1](test); | ||
* suite.exit(test); | ||
* ...; | ||
*/ | ||
static struct kunit_suite example_test_suite = { | ||
.name = "example", | ||
.init = example_test_init, | ||
.test_cases = example_test_cases, | ||
}; | ||
|
||
/* | ||
* This registers the above test suite telling KUnit that this is a suite of | ||
* tests that need to be run. | ||
*/ | ||
kunit_test_suite(example_test_suite); |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,52 @@ | ||
// SPDX-License-Identifier: GPL-2.0 | ||
/* | ||
* KUnit test for struct string_stream. | ||
* | ||
* Copyright (C) 2019, Google LLC. | ||
* Author: Brendan Higgins <[email protected]> | ||
*/ | ||
|
||
#include <kunit/string-stream.h> | ||
#include <kunit/test.h> | ||
#include <linux/slab.h> | ||
|
||
static void string_stream_test_empty_on_creation(struct kunit *test) | ||
{ | ||
struct string_stream *stream = alloc_string_stream(test, GFP_KERNEL); | ||
|
||
KUNIT_EXPECT_TRUE(test, string_stream_is_empty(stream)); | ||
} | ||
|
||
static void string_stream_test_not_empty_after_add(struct kunit *test) | ||
{ | ||
struct string_stream *stream = alloc_string_stream(test, GFP_KERNEL); | ||
|
||
string_stream_add(stream, "Foo"); | ||
|
||
KUNIT_EXPECT_FALSE(test, string_stream_is_empty(stream)); | ||
} | ||
|
||
static void string_stream_test_get_string(struct kunit *test) | ||
{ | ||
struct string_stream *stream = alloc_string_stream(test, GFP_KERNEL); | ||
char *output; | ||
|
||
string_stream_add(stream, "Foo"); | ||
string_stream_add(stream, " %s", "bar"); | ||
|
||
output = string_stream_get_string(stream); | ||
KUNIT_EXPECT_STREQ(test, output, "Foo bar"); | ||
} | ||
|
||
static struct kunit_case string_stream_test_cases[] = { | ||
KUNIT_CASE(string_stream_test_empty_on_creation), | ||
KUNIT_CASE(string_stream_test_not_empty_after_add), | ||
KUNIT_CASE(string_stream_test_get_string), | ||
{} | ||
}; | ||
|
||
static struct kunit_suite string_stream_test_suite = { | ||
.name = "string-stream-test", | ||
.test_cases = string_stream_test_cases | ||
}; | ||
kunit_test_suite(string_stream_test_suite); |