strerror-test.c 2.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778
  1. // SPDX-License-Identifier: GPL-2.0
  2. /*
  3. * KUnit test for strerror and strerror_r
  4. *
  5. * Copyright (C) 2019, Google LLC.
  6. * Author: Mike Krinkin <[email protected]>
  7. */
  8. #include <linux/err.h>
  9. #include <kunit/strerror.h>
  10. #include <kunit/test.h>
  11. static void test_strerror_returns_null_for_unknown_errors(struct kunit *test)
  12. {
  13. KUNIT_EXPECT_PTR_EQ(test, strerror_str(-1), NULL);
  14. KUNIT_EXPECT_PTR_EQ(test, strerror_str(MAX_ERRNO + 1), NULL);
  15. }
  16. static void test_strerror_r_returns_null_if_buflen_is_zero(struct kunit *test)
  17. {
  18. KUNIT_EXPECT_PTR_EQ(test, strerror_r(-1, NULL, 0), NULL);
  19. }
  20. static void test_strerror_returns_string(struct kunit *test)
  21. {
  22. const char *err;
  23. char buf[64];
  24. err = strerror_str(EAGAIN);
  25. KUNIT_ASSERT_PTR_NE(test, err, NULL);
  26. KUNIT_EXPECT_STREQ(test, err, "EAGAIN");
  27. err = strerror_r(EAGAIN, buf, sizeof(buf));
  28. KUNIT_ASSERT_PTR_NE(test, err, NULL);
  29. KUNIT_EXPECT_STREQ(test, err, "EAGAIN");
  30. }
  31. static void test_strerror_r_correctly_truncates_message_to_buffer_size(
  32. struct kunit *test)
  33. {
  34. const char *err;
  35. char buf[64];
  36. err = strerror_r(EAGAIN, buf, 1);
  37. KUNIT_ASSERT_PTR_NE(test, err, NULL);
  38. KUNIT_EXPECT_EQ(test, strlen(err), 0);
  39. err = strerror_r(EAGAIN, buf, 2);
  40. KUNIT_ASSERT_PTR_NE(test, err, NULL);
  41. KUNIT_EXPECT_EQ(test, strlen(err), 1);
  42. err = strerror_r(EAGAIN, buf, sizeof(buf));
  43. KUNIT_ASSERT_PTR_NE(test, err, NULL);
  44. KUNIT_EXPECT_STREQ(test, err, "EAGAIN");
  45. }
  46. static void test_strerror_r_returns_string_for_unknown_errors(struct kunit *test)
  47. {
  48. char buf[64];
  49. KUNIT_EXPECT_PTR_NE(test, strerror_r(-1, buf, sizeof(buf)), NULL);
  50. KUNIT_EXPECT_PTR_NE(test, strerror_r(MAX_ERRNO + 1, buf, sizeof(buf)), NULL);
  51. }
  52. static struct kunit_case strerror_test_cases[] = {
  53. KUNIT_CASE(test_strerror_returns_null_for_unknown_errors),
  54. KUNIT_CASE(test_strerror_r_returns_null_if_buflen_is_zero),
  55. KUNIT_CASE(test_strerror_returns_string),
  56. KUNIT_CASE(test_strerror_r_correctly_truncates_message_to_buffer_size),
  57. KUNIT_CASE(test_strerror_r_returns_string_for_unknown_errors),
  58. {},
  59. };
  60. static struct kunit_suite strerror_test_module = {
  61. .name = "strerror-test",
  62. .test_cases = strerror_test_cases,
  63. };
  64. kunit_test_suites(&strerror_test_module);