]> git.ipfire.org Git - thirdparty/systemd.git/blame - src/libsystemd-bus/test-bus-signature.c
bus: add API calls to escape string components of objects paths
[thirdparty/systemd.git] / src / libsystemd-bus / test-bus-signature.c
CommitLineData
de1c301e
LP
1/*-*- Mode: C; c-basic-offset: 8; indent-tabs-mode: nil -*-*/
2
3/***
4 This file is part of systemd.
5
6 Copyright 2013 Lennart Poettering
7
8 systemd is free software; you can redistribute it and/or modify it
9 under the terms of the GNU Lesser General Public License as published by
10 the Free Software Foundation; either version 2.1 of the License, or
11 (at your option) any later version.
12
13 systemd is distributed in the hope that it will be useful, but
14 WITHOUT ANY WARRANTY; without even the implied warranty of
15 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
16 Lesser General Public License for more details.
17
18 You should have received a copy of the GNU Lesser General Public License
19 along with systemd; If not, see <http://www.gnu.org/licenses/>.
20***/
21
22#include <assert.h>
23#include <stdlib.h>
24
25#include "log.h"
26#include "bus-signature.h"
392d5b37 27#include "bus-internal.h"
de1c301e
LP
28
29int main(int argc, char *argv[]) {
92e189e5
LP
30 char prefix[256];
31 int r;
de1c301e 32
29ddb38f
LP
33 assert_se(signature_is_single("y", false));
34 assert_se(signature_is_single("u", false));
35 assert_se(signature_is_single("v", false));
36 assert_se(signature_is_single("as", false));
37 assert_se(signature_is_single("(ss)", false));
38 assert_se(signature_is_single("()", false));
39 assert_se(signature_is_single("(()()()()())", false));
40 assert_se(signature_is_single("(((())))", false));
41 assert_se(signature_is_single("((((s))))", false));
42 assert_se(signature_is_single("{ss}", true));
43 assert_se(signature_is_single("a{ss}", false));
44 assert_se(!signature_is_single("uu", false));
45 assert_se(!signature_is_single("", false));
46 assert_se(!signature_is_single("(", false));
47 assert_se(!signature_is_single(")", false));
48 assert_se(!signature_is_single("())", false));
49 assert_se(!signature_is_single("((())", false));
50 assert_se(!signature_is_single("{)", false));
51 assert_se(!signature_is_single("{}", true));
52 assert_se(!signature_is_single("{sss}", true));
53 assert_se(!signature_is_single("{s}", true));
54 assert_se(!signature_is_single("{ss}", false));
55 assert_se(!signature_is_single("{ass}", true));
56 assert_se(!signature_is_single("a}", true));
de1c301e
LP
57
58 assert_se(signature_is_pair("yy"));
59 assert_se(signature_is_pair("ss"));
60 assert_se(signature_is_pair("sas"));
61 assert_se(signature_is_pair("sv"));
62 assert_se(signature_is_pair("sa(vs)"));
63 assert_se(!signature_is_pair(""));
64 assert_se(!signature_is_pair("va"));
65 assert_se(!signature_is_pair("sss"));
66 assert_se(!signature_is_pair("{s}ss"));
67
68 assert_se(signature_is_valid("ssa{ss}sssub", true));
69 assert_se(signature_is_valid("ssa{ss}sssub", false));
70 assert_se(signature_is_valid("{ss}", true));
71 assert_se(!signature_is_valid("{ss}", false));
72 assert_se(signature_is_valid("", true));
73 assert_se(signature_is_valid("", false));
74
75 assert_se(signature_is_valid("sssusa(uuubbba(uu)uuuu)a{u(uuuvas)}", false));
76
813a4f93
LP
77 assert_se(!signature_is_valid("a", false));
78 assert_se(signature_is_valid("as", false));
79 assert_se(signature_is_valid("aas", false));
80 assert_se(signature_is_valid("aaas", false));
81 assert_se(signature_is_valid("aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaad", false));
82 assert_se(signature_is_valid("aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaas", false));
83 assert_se(!signature_is_valid("aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaau", false));
84
85 assert_se(signature_is_valid("(((((((((((((((((((((((((((((((())))))))))))))))))))))))))))))))", false));
86 assert_se(!signature_is_valid("((((((((((((((((((((((((((((((((()))))))))))))))))))))))))))))))))", false));
87
392d5b37
LP
88 assert_se(namespace_complex_pattern("", ""));
89 assert_se(namespace_complex_pattern("foobar", "foobar"));
90 assert_se(namespace_complex_pattern("foobar.waldo", "foobar.waldo"));
91 assert_se(namespace_complex_pattern("foobar.", "foobar.waldo"));
92 assert_se(namespace_complex_pattern("foobar.waldo", "foobar."));
93 assert_se(!namespace_complex_pattern("foobar.waldo", "foobar"));
94 assert_se(!namespace_complex_pattern("foobar", "foobar.waldo"));
95 assert_se(!namespace_complex_pattern("", "foo"));
96 assert_se(!namespace_complex_pattern("foo", ""));
97 assert_se(!namespace_complex_pattern("foo.", ""));
98
99 assert_se(path_complex_pattern("", ""));
100 assert_se(path_complex_pattern("", "/"));
101 assert_se(path_complex_pattern("/", ""));
102 assert_se(path_complex_pattern("/", "/"));
103 assert_se(path_complex_pattern("/foobar/", "/"));
104 assert_se(path_complex_pattern("/foobar/", "/foobar"));
105 assert_se(path_complex_pattern("/foobar", "/foobar"));
106 assert_se(path_complex_pattern("/foobar", "/foobar/"));
107 assert_se(!path_complex_pattern("/foobar", "/foobar/waldo"));
108 assert_se(path_complex_pattern("/foobar/", "/foobar/waldo"));
109
110 assert_se(namespace_simple_pattern("", ""));
111 assert_se(namespace_simple_pattern("foobar", "foobar"));
112 assert_se(namespace_simple_pattern("foobar.waldo", "foobar.waldo"));
113 assert_se(namespace_simple_pattern("foobar", "foobar.waldo"));
114 assert_se(!namespace_simple_pattern("foobar.waldo", "foobar"));
115 assert_se(!namespace_simple_pattern("", "foo"));
116 assert_se(!namespace_simple_pattern("foo", ""));
117
29ddb38f
LP
118 assert_se(streq(object_path_startswith("/foo/bar", "/foo"), "bar"));
119 assert_se(streq(object_path_startswith("/foo", "/foo"), ""));
120 assert_se(streq(object_path_startswith("/foo", "/"), "foo"));
121 assert_se(streq(object_path_startswith("/", "/"), ""));
122 assert_se(!object_path_startswith("/foo", "/bar"));
123 assert_se(!object_path_startswith("/", "/bar"));
124 assert_se(!object_path_startswith("/foo", ""));
125
126 assert_se(object_path_is_valid("/foo/bar"));
127 assert_se(object_path_is_valid("/foo"));
128 assert_se(object_path_is_valid("/"));
129 assert_se(object_path_is_valid("/foo5"));
130 assert_se(object_path_is_valid("/foo_5"));
131 assert_se(!object_path_is_valid(""));
132 assert_se(!object_path_is_valid("/foo/"));
133 assert_se(!object_path_is_valid("//"));
134 assert_se(!object_path_is_valid("//foo"));
135 assert_se(!object_path_is_valid("/foo//bar"));
136 assert_se(!object_path_is_valid("/foo/aaaäöä"));
137
92e189e5
LP
138 OBJECT_PATH_FOREACH_PREFIX(prefix, "/") {
139 log_info("<%s>", prefix);
140 assert_not_reached("???");
141 }
142
143 r = 0;
144 OBJECT_PATH_FOREACH_PREFIX(prefix, "/xxx") {
145 log_info("<%s>", prefix);
146 assert_se(streq(prefix, "/"));
147 assert_se(r == 0);
148 r++;
149 }
150 assert_se(r == 1);
151
152 r = 0;
153 OBJECT_PATH_FOREACH_PREFIX(prefix, "/xxx/yyy/zzz") {
154 log_info("<%s>", prefix);
155 assert_se(r != 0 || streq(prefix, "/xxx/yyy"));
156 assert_se(r != 1 || streq(prefix, "/xxx"));
157 assert_se(r != 2 || streq(prefix, "/"));
158 r++;
159 }
160 assert_se(r == 3);
161
de1c301e
LP
162 return 0;
163}