Line data Source code
1 : /**
2 : * @file
3 : *
4 : * @brief
5 : *
6 : * @copyright BSD License (see LICENSE.md or https://www.libelektra.org)
7 : */
8 :
9 : #include <tests_internal.h>
10 :
11 2 : static void test_process (void)
12 : {
13 2 : printf ("Test processing of plugin name\n");
14 :
15 2 : Key * k = keyNew ("system/elektra/#0name", KEY_END);
16 2 : int pluginNumber = -1;
17 2 : char * pluginName = 0;
18 2 : char * referenceName = 0;
19 :
20 2 : succeed_if (elektraProcessPlugin (k, &pluginNumber, &pluginName, &referenceName, 0) == 1, "process plugin error");
21 2 : succeed_if (pluginNumber == 0, "number not correct");
22 2 : succeed_if_same_string (pluginName, "name");
23 2 : succeed_if (referenceName == 0, "reference name not correct");
24 2 : elektraFree (pluginName);
25 2 : pluginName = 0;
26 :
27 2 : keySetName (k, "system/e/#2dump");
28 2 : succeed_if (elektraProcessPlugin (k, &pluginNumber, &pluginName, &referenceName, 0) == 1, "process plugin error");
29 2 : succeed_if (pluginNumber == 2, "number not correct");
30 2 : succeed_if_same_string (pluginName, "dump");
31 2 : succeed_if (referenceName == 0, "reference name not correct");
32 2 : elektraFree (pluginName);
33 2 : pluginName = 0;
34 :
35 2 : keySetName (k, "system/e/#9default");
36 2 : succeed_if (elektraProcessPlugin (k, &pluginNumber, &pluginName, &referenceName, 0) == 1, "process plugin error");
37 2 : succeed_if (pluginNumber == 9, "number not correct");
38 2 : succeed_if_same_string (pluginName, "default");
39 2 : succeed_if (referenceName == 0, "reference name not correct");
40 2 : elektraFree (pluginName);
41 2 : pluginName = 0;
42 :
43 2 : keySetName (k, "system/e/1default");
44 2 : succeed_if (elektraProcessPlugin (k, &pluginNumber, &pluginName, &referenceName, 0) == -1, "should be error");
45 :
46 2 : keySetName (k, "system/e/#xdefault");
47 2 : succeed_if (elektraProcessPlugin (k, &pluginNumber, &pluginName, &referenceName, 0) == -1, "should be error");
48 :
49 2 : keySetName (k, "system/e/#1#name");
50 2 : succeed_if (elektraProcessPlugin (k, &pluginNumber, &pluginName, &referenceName, 0) == 2, "process plugin error");
51 2 : succeed_if (pluginNumber == 1, "number not correct");
52 2 : succeed_if (pluginName == 0, "plugin name not correct");
53 2 : succeed_if_same_string (referenceName, "system/elektra/plugins/name");
54 2 : elektraFree (referenceName);
55 2 : referenceName = 0;
56 :
57 2 : keySetName (k, "system/e/#5#dump");
58 2 : succeed_if (elektraProcessPlugin (k, &pluginNumber, &pluginName, &referenceName, 0) == 2, "process plugin error");
59 2 : succeed_if (pluginNumber == 5, "number not correct");
60 2 : succeed_if (pluginName == 0, "plugin name not correct");
61 2 : succeed_if_same_string (referenceName, "system/elektra/plugins/dump");
62 2 : elektraFree (referenceName);
63 2 : referenceName = 0;
64 :
65 2 : keySetName (k, "system/e/#0#very_long_name with space");
66 2 : succeed_if (elektraProcessPlugin (k, &pluginNumber, &pluginName, &referenceName, 0) == 2, "process plugin error");
67 2 : succeed_if (pluginNumber == 0, "number not correct");
68 2 : succeed_if (pluginName == 0, "plugin name not correct");
69 2 : succeed_if_same_string (referenceName, "system/elektra/plugins/very_long_name with space");
70 2 : elektraFree (referenceName);
71 2 : referenceName = 0;
72 :
73 2 : keySetName (k, "system/e/#1#plugname#refname#");
74 2 : succeed_if (elektraProcessPlugin (k, &pluginNumber, &pluginName, &referenceName, 0) == 3, "process plugin error");
75 2 : succeed_if (pluginNumber == 1, "number not correct");
76 2 : succeed_if_same_string (pluginName, "plugname");
77 2 : succeed_if_same_string (referenceName, "system/elektra/plugins/refname");
78 2 : elektraFree (pluginName);
79 2 : pluginName = 0;
80 2 : elektraFree (referenceName);
81 2 : referenceName = 0;
82 :
83 2 : keySetName (k, "system/e/#0#dump#dumpy#");
84 2 : succeed_if (elektraProcessPlugin (k, &pluginNumber, &pluginName, &referenceName, 0) == 3, "process plugin error");
85 2 : succeed_if (pluginNumber == 0, "number not correct");
86 2 : succeed_if_same_string (pluginName, "dump");
87 2 : succeed_if_same_string (referenceName, "system/elektra/plugins/dumpy");
88 2 : elektraFree (pluginName);
89 2 : pluginName = 0;
90 2 : elektraFree (referenceName);
91 2 : referenceName = 0;
92 :
93 2 : keySetName (k, "system/e/#9#default#default#");
94 2 : succeed_if (elektraProcessPlugin (k, &pluginNumber, &pluginName, &referenceName, 0) == 3, "process plugin error");
95 2 : succeed_if (pluginNumber == 9, "number not correct");
96 2 : succeed_if_same_string (pluginName, "default");
97 2 : succeed_if_same_string (referenceName, "system/elektra/plugins/default");
98 2 : elektraFree (pluginName);
99 2 : pluginName = 0;
100 2 : elektraFree (referenceName);
101 2 : referenceName = 0;
102 :
103 2 : keySetName (k, "system/e/#8#a_very long name with $ sthg#also a long name_()#");
104 2 : succeed_if (elektraProcessPlugin (k, &pluginNumber, &pluginName, &referenceName, 0) == 3, "process plugin error");
105 2 : succeed_if (pluginNumber == 8, "number not correct");
106 2 : succeed_if_same_string (pluginName, "a_very long name with $ sthg");
107 2 : succeed_if_same_string (referenceName, "system/elektra/plugins/also a long name_()");
108 2 : elektraFree (pluginName);
109 2 : pluginName = 0;
110 2 : elektraFree (referenceName);
111 2 : referenceName = 0;
112 :
113 2 : keyDel (k);
114 2 : }
115 :
116 14 : KeySet * set_pluginconf (void)
117 : {
118 14 : return ksNew (10, keyNew ("system/anything", KEY_VALUE, "backend", KEY_END), keyNew ("system/more", KEY_END),
119 : keyNew ("system/more/config", KEY_END), keyNew ("system/more/config/below", KEY_END), keyNew ("system/path", KEY_END),
120 : keyNew ("user/anything", KEY_VALUE, "plugin", KEY_END), keyNew ("user/more", KEY_END),
121 : keyNew ("user/more/config", KEY_END), keyNew ("user/more/config/below", KEY_END), keyNew ("user/path", KEY_END),
122 : KS_END);
123 : }
124 :
125 2 : static void test_simple (void)
126 : {
127 2 : printf ("Test plugin\n");
128 :
129 2 : KeySet * modules = ksNew (0, KS_END);
130 2 : elektraModulesInit (modules, 0);
131 :
132 2 : Plugin * plugin = elektraPluginOpen (KDB_DEFAULT_STORAGE, modules, set_pluginconf (), 0);
133 2 : exit_if_fail (plugin, "KDB_DEFAULT_STORAGE: " KDB_DEFAULT_STORAGE " plugin could not be loaded");
134 :
135 2 : KeySet * test_config = set_pluginconf ();
136 2 : KeySet * config = elektraPluginGetConfig (plugin);
137 2 : succeed_if (config != 0, "there should be a config");
138 2 : compare_keyset (config, test_config);
139 2 : ksDel (test_config);
140 :
141 2 : succeed_if (plugin->kdbGet != 0, "no get pointer");
142 2 : succeed_if (plugin->kdbSet != 0, "no set pointer");
143 :
144 2 : elektraPluginClose (plugin, 0);
145 2 : elektraModulesClose (modules, 0);
146 2 : ksDel (modules);
147 2 : }
148 :
149 2 : static void test_name (void)
150 : {
151 2 : printf ("Test name\n");
152 2 : KeySet * modules = ksNew (0, KS_END);
153 2 : Key * errorKey = keyNew (0);
154 : ;
155 :
156 2 : succeed_if (elektraPluginOpen (0, modules, set_pluginconf (), errorKey) == 0, "should fail with no name");
157 2 : succeed_if (elektraPluginOpen ("", modules, set_pluginconf (), errorKey) == 0, "should fail with no name");
158 2 : succeed_if (elektraPluginOpen ("/", modules, set_pluginconf (), errorKey) == 0, "should fail with slashes only");
159 2 : succeed_if (elektraPluginOpen ("//", modules, set_pluginconf (), errorKey) == 0, "should fail with slashes only");
160 2 : succeed_if (elektraPluginOpen ("/////////////", modules, set_pluginconf (), errorKey) == 0, "should fail with slashes only");
161 : // output_errors (errorKey);
162 :
163 2 : keyDel (errorKey);
164 2 : ksDel (modules);
165 2 : }
166 :
167 2 : int main (int argc, char ** argv)
168 : {
169 2 : printf (" PLUGINS TESTS\n");
170 2 : printf ("====================\n\n");
171 :
172 2 : init (argc, argv);
173 :
174 2 : test_process ();
175 2 : test_simple ();
176 2 : test_name ();
177 :
178 2 : printf ("\ntest_plugin RESULTS: %d test(s) done. %d error(s).\n", nbTest, nbError);
179 :
180 2 : return nbError;
181 : }
|