diff mbox series

[2/2] fs: ext4: Modify inode-test.c to use KUnit parameterized testing feature

Message ID 20201010145544.61034-1-98.arpi@gmail.com
State New
Headers show
Series [1/2] kunit: Support for Parameterized Testing | expand

Commit Message

Arpitha Raghunandan Oct. 10, 2020, 2:55 p.m. UTC
Modifies fs/ext4/inode-test.c to use the parameterized testing
feature of KUnit.

Signed-off-by: Arpitha Raghunandan <98.arpi@gmail.com>
---
 fs/ext4/inode-test.c | 64 +++++++++++++++++++++++++-------------------
 1 file changed, 36 insertions(+), 28 deletions(-)

Comments

kernel test robot Oct. 11, 2020, 12:02 a.m. UTC | #1
Hi Arpitha,

Thank you for the patch! Perhaps something to improve:

[auto build test WARNING on ext4/dev]
[also build test WARNING on linus/master v5.9-rc8 next-20201009]
[cannot apply to tytso-fscrypt/master]
[If your patch is applied to the wrong git tree, kindly drop us a note.
And when submitting patch, we suggest to use '--base' as documented in
https://git-scm.com/docs/git-format-patch]

url:    https://github.com/0day-ci/linux/commits/Arpitha-Raghunandan/kunit-Support-for-Parameterized-Testing/20201011-051918
base:   https://git.kernel.org/pub/scm/linux/kernel/git/tytso/ext4.git dev
config: arm-randconfig-r031-20201011 (attached as .config)
compiler: clang version 12.0.0 (https://github.com/llvm/llvm-project 9b5b3050237db3642ed7ab1bdb3ffa2202511b99)
reproduce (this is a W=1 build):
        wget https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O ~/bin/make.cross
        chmod +x ~/bin/make.cross
        # install arm cross compiling tool for clang build
        # apt-get install binutils-arm-linux-gnueabi
        # https://github.com/0day-ci/linux/commit/0cd253a8f2af3fd4e88c9ec8d7327bb26302c1da
        git remote add linux-review https://github.com/0day-ci/linux
        git fetch --no-tags linux-review Arpitha-Raghunandan/kunit-Support-for-Parameterized-Testing/20201011-051918
        git checkout 0cd253a8f2af3fd4e88c9ec8d7327bb26302c1da
        # save the attached .config to linux build tree
        COMPILER_INSTALL_PATH=$HOME/0day COMPILER=clang make.cross ARCH=arm 

If you fix the issue, kindly add following tag as appropriate
Reported-by: kernel test robot <lkp@intel.com>

All warnings (new ones prefixed by >>):

>> fs/ext4/inode-test.c:133:31: warning: no previous prototype for function 'get_test_parameters' [-Wmissing-prototypes]
   struct timestamp_expectation *get_test_parameters(void)
                                 ^
   fs/ext4/inode-test.c:133:1: note: declare 'static' if the function is not intended to be used outside of this translation unit
   struct timestamp_expectation *get_test_parameters(void)
   ^
   static 
   1 warning generated.

vim +/get_test_parameters +133 fs/ext4/inode-test.c

   132	
 > 133	struct timestamp_expectation *get_test_parameters(void)
   134	{
   135		static struct timestamp_expectation test_data[] = {
   136			{
   137				.test_case_name = LOWER_BOUND_NEG_NO_EXTRA_BITS_CASE,
   138				.msb_set = true,
   139				.lower_bound = true,
   140				.extra_bits = 0,
   141				.expected = {.tv_sec = -0x80000000LL, .tv_nsec = 0L},
   142			},
   143	
   144			{
   145				.test_case_name = UPPER_BOUND_NEG_NO_EXTRA_BITS_CASE,
   146				.msb_set = true,
   147				.lower_bound = false,
   148				.extra_bits = 0,
   149				.expected = {.tv_sec = -1LL, .tv_nsec = 0L},
   150			},
   151	
   152			{
   153				.test_case_name = LOWER_BOUND_NONNEG_NO_EXTRA_BITS_CASE,
   154				.msb_set = false,
   155				.lower_bound = true,
   156				.extra_bits = 0,
   157				.expected = {0LL, 0L},
   158			},
   159	
   160			{
   161				.test_case_name = UPPER_BOUND_NONNEG_NO_EXTRA_BITS_CASE,
   162				.msb_set = false,
   163				.lower_bound = false,
   164				.extra_bits = 0,
   165				.expected = {.tv_sec = 0x7fffffffLL, .tv_nsec = 0L},
   166			},
   167	
   168			{
   169				.test_case_name = LOWER_BOUND_NEG_LO_1_CASE,
   170				.msb_set = true,
   171				.lower_bound = true,
   172				.extra_bits = 1,
   173				.expected = {.tv_sec = 0x80000000LL, .tv_nsec = 0L},
   174			},
   175	
   176			{
   177				.test_case_name = UPPER_BOUND_NEG_LO_1_CASE,
   178				.msb_set = true,
   179				.lower_bound = false,
   180				.extra_bits = 1,
   181				.expected = {.tv_sec = 0xffffffffLL, .tv_nsec = 0L},
   182			},
   183	
   184			{
   185				.test_case_name = LOWER_BOUND_NONNEG_LO_1_CASE,
   186				.msb_set = false,
   187				.lower_bound = true,
   188				.extra_bits = 1,
   189				.expected = {.tv_sec = 0x100000000LL, .tv_nsec = 0L},
   190			},
   191	
   192			{
   193				.test_case_name = UPPER_BOUND_NONNEG_LO_1_CASE,
   194				.msb_set = false,
   195				.lower_bound = false,
   196				.extra_bits = 1,
   197				.expected = {.tv_sec = 0x17fffffffLL, .tv_nsec = 0L},
   198			},
   199	
   200			{
   201				.test_case_name = LOWER_BOUND_NEG_HI_1_CASE,
   202				.msb_set = true,
   203				.lower_bound = true,
   204				.extra_bits =  2,
   205				.expected = {.tv_sec = 0x180000000LL, .tv_nsec = 0L},
   206			},
   207	
   208			{
   209				.test_case_name = UPPER_BOUND_NEG_HI_1_CASE,
   210				.msb_set = true,
   211				.lower_bound = false,
   212				.extra_bits = 2,
   213				.expected = {.tv_sec = 0x1ffffffffLL, .tv_nsec = 0L},
   214			},
   215	
   216			{
   217				.test_case_name = LOWER_BOUND_NONNEG_HI_1_CASE,
   218				.msb_set = false,
   219				.lower_bound = true,
   220				.extra_bits = 2,
   221				.expected = {.tv_sec = 0x200000000LL, .tv_nsec = 0L},
   222			},
   223	
   224			{
   225				.test_case_name = UPPER_BOUND_NONNEG_HI_1_CASE,
   226				.msb_set = false,
   227				.lower_bound = false,
   228				.extra_bits = 2,
   229				.expected = {.tv_sec = 0x27fffffffLL, .tv_nsec = 0L},
   230			},
   231	
   232			{
   233				.test_case_name = UPPER_BOUND_NONNEG_HI_1_NS_1_CASE,
   234				.msb_set = false,
   235				.lower_bound = false,
   236				.extra_bits = 6,
   237				.expected = {.tv_sec = 0x27fffffffLL, .tv_nsec = 1L},
   238			},
   239	
   240			{
   241				.test_case_name = LOWER_BOUND_NONNEG_HI_1_NS_MAX_CASE,
   242				.msb_set = false,
   243				.lower_bound = true,
   244				.extra_bits = 0xFFFFFFFF,
   245				.expected = {.tv_sec = 0x300000000LL,
   246					     .tv_nsec = MAX_NANOSECONDS},
   247			},
   248	
   249			{
   250				.test_case_name = LOWER_BOUND_NONNEG_EXTRA_BITS_1_CASE,
   251				.msb_set = false,
   252				.lower_bound = true,
   253				.extra_bits = 3,
   254				.expected = {.tv_sec = 0x300000000LL, .tv_nsec = 0L},
   255			},
   256	
   257			{
   258				.test_case_name = UPPER_BOUND_NONNEG_EXTRA_BITS_1_CASE,
   259				.msb_set = false,
   260				.lower_bound = false,
   261				.extra_bits = 3,
   262				.expected = {.tv_sec = 0x37fffffffLL, .tv_nsec = 0L},
   263			}
   264		};
   265		return test_data;
   266	}
   267	

---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/kbuild-all@lists.01.org
diff mbox series

Patch

diff --git a/fs/ext4/inode-test.c b/fs/ext4/inode-test.c
index d62d802c9c12..691ef0a4ffe1 100644
--- a/fs/ext4/inode-test.c
+++ b/fs/ext4/inode-test.c
@@ -72,6 +72,8 @@ 
 #define UPPER_BOUND_NONNEG_EXTRA_BITS_1_CASE\
 	"2446-05-10 Upper bound of 32bit >=0 timestamp. All extra sec bits on"
 
+#define NUMBER_OF_TESTCASES 16
+
 struct timestamp_expectation {
 	const char *test_case_name;
 	struct timespec64 expected;
@@ -101,7 +103,36 @@  static time64_t get_32bit_time(const struct timestamp_expectation * const test)
  */
 static void inode_test_xtimestamp_decoding(struct kunit *test)
 {
-	const struct timestamp_expectation test_data[] = {
+	struct timespec64 timestamp;
+
+	struct timestamp_expectation *test_data =
+		(struct timestamp_expectation *)get_test_case_parameters(test);
+
+	timestamp.tv_sec = get_32bit_time(test_data);
+	ext4_decode_extra_time(&timestamp,
+			       cpu_to_le32(test_data->extra_bits));
+
+	KUNIT_EXPECT_EQ_MSG(test,
+			    test_data->expected.tv_sec,
+			    timestamp.tv_sec,
+			    CASE_NAME_FORMAT,
+			    test_data->test_case_name,
+			    test_data->msb_set,
+			    test_data->lower_bound,
+			    test_data->extra_bits);
+	KUNIT_EXPECT_EQ_MSG(test,
+			    test_data->expected.tv_nsec,
+			    timestamp.tv_nsec,
+			    CASE_NAME_FORMAT,
+			    test_data->test_case_name,
+			    test_data->msb_set,
+			    test_data->lower_bound,
+			    test_data->extra_bits);
+}
+
+struct timestamp_expectation *get_test_parameters(void)
+{
+	static struct timestamp_expectation test_data[] = {
 		{
 			.test_case_name = LOWER_BOUND_NEG_NO_EXTRA_BITS_CASE,
 			.msb_set = true,
@@ -231,36 +262,13 @@  static void inode_test_xtimestamp_decoding(struct kunit *test)
 			.expected = {.tv_sec = 0x37fffffffLL, .tv_nsec = 0L},
 		}
 	};
-
-	struct timespec64 timestamp;
-	int i;
-
-	for (i = 0; i < ARRAY_SIZE(test_data); ++i) {
-		timestamp.tv_sec = get_32bit_time(&test_data[i]);
-		ext4_decode_extra_time(&timestamp,
-				       cpu_to_le32(test_data[i].extra_bits));
-
-		KUNIT_EXPECT_EQ_MSG(test,
-				    test_data[i].expected.tv_sec,
-				    timestamp.tv_sec,
-				    CASE_NAME_FORMAT,
-				    test_data[i].test_case_name,
-				    test_data[i].msb_set,
-				    test_data[i].lower_bound,
-				    test_data[i].extra_bits);
-		KUNIT_EXPECT_EQ_MSG(test,
-				    test_data[i].expected.tv_nsec,
-				    timestamp.tv_nsec,
-				    CASE_NAME_FORMAT,
-				    test_data[i].test_case_name,
-				    test_data[i].msb_set,
-				    test_data[i].lower_bound,
-				    test_data[i].extra_bits);
-	}
+	return test_data;
 }
 
 static struct kunit_case ext4_inode_test_cases[] = {
-	KUNIT_CASE(inode_test_xtimestamp_decoding),
+	KUNIT_CASE_PARAM(inode_test_xtimestamp_decoding,
+			get_test_parameters, NUMBER_OF_TESTCASES,
+			sizeof(struct timestamp_expectation)),
 	{}
 };