Message ID | 20221102175959.2921063-1-rmoar@google.com (mailing list archive) |
---|---|
Headers | show |
Series | kunit: add macro to allow conditionally exposing static symbols to tests | expand |
sorry for the delay on this On 11/2/22 10:59, Rae Moar wrote: > Currently in order to test a static function, tests must be included in the > same translation unit as the function. However, this can cause issues with > including implementation and test code in the same file. As an alternative, And the issue is? An ugly include of C file that only happens if kunit is built. Also that you can't make the kunit code a module but is that really an issue? > the first patch in this series creates a macro that will set a function to > be static or not depending on whether CONFIG_KUNIT is enabled. This allows > the function to be visible during testing and static otherwise. > > As an example, the current status quo to test static functions is: > > === test.c === > > static void test_case(struct kunit *test) > { > KUNIT_EXPECT_EQ(test, my_func_to_test(), 2); > } > > Then the tests are included in the implementation file as a workaround to > the issue of testing static functions: > > === implementation.c === > > static int my_func_to_test() {...} > ... > #include "test.c" > > Instead, the function could be defined with this new macro: > > === implementation.c === > > VISIBLE_IF_KUNIT int my_func_to_test() {...} > > The first patch also creates a macro that will export a symbol into a kunit > testing namespace only if CONFIG_KUNIT is enabled. This follows the logic > above and allows symbols to be conditionally exported based on the testing > status. > > The second patch in the series updates the policy_unpack test in AppArmor > to show an example of how to use both of these macros in order to address > the issue of testing static functions. > > Rae Moar (2): > kunit: add macro to allow conditionally exposing static symbols to > tests > apparmor: test: make static symbols visible during kunit testing > > include/kunit/visibility.h | 32 ++++++++++ > security/apparmor/Kconfig | 4 +- > security/apparmor/Makefile | 2 + > security/apparmor/include/policy_unpack.h | 50 ++++++++++++++++ > security/apparmor/policy_unpack.c | 72 +++++++---------------- > security/apparmor/policy_unpack_test.c | 5 ++ > 6 files changed, 112 insertions(+), 53 deletions(-) > create mode 100644 include/kunit/visibility.h > > > base-commit: 11e76194937b506caf1b49512c42d5c2588681d7