source: mainline/uspace/lib/c/test/uuid.c@ d7f7a4a

Last change on this file since d7f7a4a was d7f7a4a, checked in by Jiří Zárevúcky <zarevucky.jiri@…>, 3 years ago

Replace some license headers with SPDX identifier

Headers are replaced using tools/transorm-copyright.sh only
when it can be matched verbatim with the license header used
throughout most of the codebase.

  • Property mode set to 100644
File size: 2.7 KB
Line 
1/*
2 * SPDX-FileCopyrightText: 2019 Matthieu Riolo
3 *
4 * SPDX-License-Identifier: BSD-3-Clause
5 */
6
7#include <pcut/pcut.h>
8#include <uuid.h>
9#include <stdbool.h>
10#include <stdio.h>
11#include <str.h>
12#include <ctype.h>
13
14static size_t MAX_SUB_TESTS = 10;
15static size_t uuids_len = 6;
16static const char *uuids[] = {
17 /* uppercase */
18 "F81163AE-299A-4DA2-BED1-0E096C59F3AB",
19 "4A0CE2A3-FD1C-4951-972E-AAA13A703078",
20 "69C7DB62-8309-4C58-831B-8C4E4161E8AC",
21
22 /* lower case */
23 "c511bf24-70cb-422e-933b-2a74ab699a56",
24 "7b1abd05-456f-4661-ab62-917685069343",
25 "5b00f76b-4a16-4dce-a1fc-b78c60324d89"
26};
27
28static bool uuid_valid(uuid_t uuid)
29{
30 if (!(uuid.b[6] & 0x40)) {
31 return false;
32 }
33
34 int f = (uuid.b[8] & 0x80) || (uuid.b[8] & 0x90);
35 f = f || (uuid.b[8] & 0xA0) || (uuid.b[8] & 0xB0);
36 if (!f) {
37 return false;
38 }
39
40 return true;
41}
42
43PCUT_INIT;
44
45PCUT_TEST_SUITE(uuid);
46
47PCUT_TEST(uuid_generate)
48{
49 uuid_t uuid;
50 size_t i;
51
52 for (i = 0; i < MAX_SUB_TESTS; i++) {
53 errno_t ret = uuid_generate(&uuid);
54 PCUT_ASSERT_ERRNO_VAL(EOK, ret);
55 PCUT_ASSERT_TRUE(uuid_valid(uuid));
56 }
57}
58
59PCUT_TEST(uuid_parse)
60{
61 uuid_t uuid;
62 errno_t ret;
63
64 for (size_t i = 0; i < uuids_len; i++) {
65 ret = uuid_parse(uuids[i], &uuid, NULL);
66 PCUT_ASSERT_ERRNO_VAL(EOK, ret);
67 PCUT_ASSERT_TRUE(uuid_valid(uuid));
68 }
69}
70
71PCUT_TEST(uuid_parse_in_text)
72{
73 uuid_t uuid;
74 errno_t ret;
75 const char *endptr;
76 const char *uuid_in_text = "7b1abd05-456f-4661-ab62-917685069343hello world!";
77
78 ret = uuid_parse(uuid_in_text, &uuid, &endptr);
79
80 PCUT_ASSERT_ERRNO_VAL(EOK, ret);
81 PCUT_ASSERT_TRUE(uuid_valid(uuid));
82 PCUT_ASSERT_STR_EQUALS("hello world!", endptr);
83}
84
85PCUT_TEST(uuid_format_generated)
86{
87 uuid_t uuid;
88 size_t i;
89 char *rstr;
90
91 for (i = 0; i < MAX_SUB_TESTS; i++) {
92 errno_t ret = uuid_generate(&uuid);
93 PCUT_ASSERT_ERRNO_VAL(EOK, ret);
94 PCUT_ASSERT_TRUE(uuid_valid(uuid));
95
96 ret = uuid_format(&uuid, &rstr, true);
97 PCUT_ASSERT_ERRNO_VAL(EOK, ret);
98 PCUT_ASSERT_INT_EQUALS('\0', rstr[37]);
99 PCUT_ASSERT_INT_EQUALS(36, str_length(rstr));
100 PCUT_ASSERT_INT_EQUALS('4', rstr[14]);
101
102 int f = rstr[19] == '8' || rstr[19] == '9';
103 f = f || toupper(rstr[19]) == 'A' || toupper(rstr[19]) == 'B';
104 PCUT_ASSERT_TRUE(f);
105
106 free(rstr);
107 }
108}
109
110PCUT_TEST(uuid_format_parsed)
111{
112 uuid_t uuid;
113 char *rstr;
114 errno_t ret;
115
116 for (size_t i = 0; i < uuids_len; i++) {
117 ret = uuid_parse(uuids[i], &uuid, NULL);
118 PCUT_ASSERT_ERRNO_VAL(EOK, ret);
119 PCUT_ASSERT_TRUE(uuid_valid(uuid));
120
121 ret = uuid_format(&uuid, &rstr, true);
122 PCUT_ASSERT_ERRNO_VAL(EOK, ret);
123 PCUT_ASSERT_INT_EQUALS('\0', rstr[37]);
124 PCUT_ASSERT_INT_EQUALS(36, str_length(rstr));
125 PCUT_ASSERT_INT_EQUALS(0, str_casecmp(uuids[i], rstr));
126
127 free(rstr);
128 }
129}
130
131PCUT_EXPORT(uuid);
Note: See TracBrowser for help on using the repository browser.