| 1 | |
| 2 | |
| 3 | * KUnit tests for HFS string operations
|
| 4 | *
|
| 5 | * Copyright (C) 2025 Viacheslav Dubeyko <[email protected]>
|
| 6 |
|
| 7 |
|
| 8 | #include <kunit/test.h>
|
| 9 | #include <linux/dcache.h>
|
| 10 | #include "hfs_fs.h"
|
| 11 |
|
| 12 |
|
| 13 | static void hfs_strcmp_test(struct kunit *test)
|
| 14 | {
|
| 15 |
|
| 16 | KUNIT_EXPECT_EQ(test, 0, hfs_strcmp("hello", 5, "hello", 5));
|
| 17 | KUNIT_EXPECT_EQ(test, 0, hfs_strcmp("test", 4, "test", 4));
|
| 18 | KUNIT_EXPECT_EQ(test, 0, hfs_strcmp("", 0, "", 0));
|
| 19 |
|
| 20 |
|
| 21 | KUNIT_EXPECT_NE(test, 0, hfs_strcmp("hello", 5, "world", 5));
|
| 22 | KUNIT_EXPECT_NE(test, 0, hfs_strcmp("test", 4, "testing", 7));
|
| 23 |
|
| 24 |
|
| 25 | KUNIT_EXPECT_LT(test, hfs_strcmp("test", 4, "testing", 7), 0);
|
| 26 | KUNIT_EXPECT_GT(test, hfs_strcmp("testing", 7, "test", 4), 0);
|
| 27 |
|
| 28 |
|
| 29 | KUNIT_EXPECT_EQ(test, 0, hfs_strcmp("Test", 4, "TEST", 4));
|
| 30 | KUNIT_EXPECT_EQ(test, 0, hfs_strcmp("hello", 5, "HELLO", 5));
|
| 31 |
|
| 32 |
|
| 33 | KUNIT_EXPECT_EQ(test, 0, hfs_strcmp("file.txt", 8, "file.txt", 8));
|
| 34 | KUNIT_EXPECT_NE(test, 0, hfs_strcmp("file.txt", 8, "file.dat", 8));
|
| 35 |
|
| 36 |
|
| 37 | KUNIT_EXPECT_EQ(test, 0, hfs_strcmp("a", 1, "a", 1));
|
| 38 | KUNIT_EXPECT_NE(test, 0, hfs_strcmp("a", 1, "b", 1));
|
| 39 | }
|
| 40 |
|
| 41 |
|
| 42 | static void hfs_hash_dentry_test(struct kunit *test)
|
| 43 | {
|
| 44 | struct qstr test_name1, test_name2, test_name3;
|
| 45 | struct dentry dentry = {};
|
| 46 | char name1[] = "testfile";
|
| 47 | char name2[] = "TestFile";
|
| 48 | char name3[] = "different";
|
| 49 |
|
| 50 |
|
| 51 | test_name1.name = name1;
|
| 52 | test_name1.len = strlen(name1);
|
| 53 | test_name1.hash = 0;
|
| 54 |
|
| 55 | test_name2.name = name2;
|
| 56 | test_name2.len = strlen(name2);
|
| 57 | test_name2.hash = 0;
|
| 58 |
|
| 59 | test_name3.name = name3;
|
| 60 | test_name3.len = strlen(name3);
|
| 61 | test_name3.hash = 0;
|
| 62 |
|
| 63 |
|
| 64 | KUNIT_EXPECT_EQ(test, 0, hfs_hash_dentry(&dentry, &test_name1));
|
| 65 | KUNIT_EXPECT_EQ(test, 0, hfs_hash_dentry(&dentry, &test_name2));
|
| 66 | KUNIT_EXPECT_EQ(test, 0, hfs_hash_dentry(&dentry, &test_name3));
|
| 67 |
|
| 68 |
|
| 69 | KUNIT_EXPECT_EQ(test, test_name1.hash, test_name2.hash);
|
| 70 |
|
| 71 |
|
| 72 | KUNIT_EXPECT_NE(test, test_name1.hash, test_name3.hash);
|
| 73 | }
|
| 74 |
|
| 75 |
|
| 76 | static void hfs_compare_dentry_test(struct kunit *test)
|
| 77 | {
|
| 78 | struct qstr test_name;
|
| 79 | struct dentry dentry = {};
|
| 80 | char name[] = "TestFile";
|
| 81 |
|
| 82 | test_name.name = name;
|
| 83 | test_name.len = strlen(name);
|
| 84 |
|
| 85 |
|
| 86 | KUNIT_EXPECT_EQ(test, 0, hfs_compare_dentry(&dentry, 8,
|
| 87 | "TestFile", &test_name));
|
| 88 |
|
| 89 |
|
| 90 | KUNIT_EXPECT_EQ(test, 0, hfs_compare_dentry(&dentry, 8,
|
| 91 | "testfile", &test_name));
|
| 92 | KUNIT_EXPECT_EQ(test, 0, hfs_compare_dentry(&dentry, 8,
|
| 93 | "TESTFILE", &test_name));
|
| 94 |
|
| 95 |
|
| 96 | KUNIT_EXPECT_EQ(test, 1, hfs_compare_dentry(&dentry, 8,
|
| 97 | "DiffFile", &test_name));
|
| 98 |
|
| 99 |
|
| 100 | KUNIT_EXPECT_EQ(test, 1, hfs_compare_dentry(&dentry, 7,
|
| 101 | "TestFil", &test_name));
|
| 102 | KUNIT_EXPECT_EQ(test, 1, hfs_compare_dentry(&dentry, 9,
|
| 103 | "TestFiles", &test_name));
|
| 104 |
|
| 105 |
|
| 106 | test_name.name = "";
|
| 107 | test_name.len = 0;
|
| 108 | KUNIT_EXPECT_EQ(test, 0, hfs_compare_dentry(&dentry, 0, "", &test_name));
|
| 109 |
|
| 110 |
|
| 111 | test_name.name = "This_is_a_very_long_filename_that_exceeds_normal_limits";
|
| 112 | test_name.len = strlen(test_name.name);
|
| 113 | KUNIT_EXPECT_EQ(test, 0, hfs_compare_dentry(&dentry, HFS_NAMELEN,
|
| 114 | "This_is_a_very_long_filename_th", &test_name));
|
| 115 | }
|
| 116 |
|
| 117 | static struct kunit_case hfs_string_test_cases[] = {
|
| 118 | KUNIT_CASE(hfs_strcmp_test),
|
| 119 | KUNIT_CASE(hfs_hash_dentry_test),
|
| 120 | KUNIT_CASE(hfs_compare_dentry_test),
|
| 121 | {}
|
| 122 | };
|
| 123 |
|
| 124 | static struct kunit_suite hfs_string_test_suite = {
|
| 125 | .name = "hfs_string",
|
| 126 | .test_cases = hfs_string_test_cases,
|
| 127 | };
|
| 128 |
|
| 129 | kunit_test_suite(hfs_string_test_suite);
|
| 130 |
|
| 131 | MODULE_DESCRIPTION("KUnit tests for HFS string operations");
|
| 132 | MODULE_LICENSE("GPL");
|
| 133 | MODULE_IMPORT_NS("EXPORTED_FOR_KUNIT_TESTING");
|