Line data Source code
1 : /**
2 : * @file
3 : *
4 : * @brief Tests for the plugindatabase class and implementations of it
5 : *
6 : * @copyright BSD License (see LICENSE.md or https://www.libelektra.org)
7 : *
8 : */
9 :
10 : #include <algorithm>
11 : #include <iostream>
12 :
13 : #include <kdbconfig.h>
14 : #include <plugindatabase.hpp>
15 :
16 : #include <gtest/gtest.h>
17 :
18 :
19 20 : TEST (PluginVariantsDatabase, listAllPlugins)
20 : {
21 : using namespace kdb;
22 : using namespace kdb::tools;
23 :
24 4 : KeySet conf (0, KS_END);
25 4 : PluginVariantDatabase db (conf);
26 4 : std::vector<std::string> plugins (db.listAllPlugins ());
27 :
28 4 : ModulesPluginDatabase refDb;
29 4 : std::vector<std::string> allPlugins (refDb.listAllPlugins ());
30 :
31 10 : ASSERT_EQ (allPlugins.size (), plugins.size ());
32 :
33 222 : for (auto & elem : allPlugins)
34 : {
35 1284 : ASSERT_TRUE (std::find (plugins.begin (), plugins.end (), elem) != plugins.end ());
36 : }
37 :
38 222 : for (auto & elem : plugins)
39 : {
40 1284 : ASSERT_TRUE (std::find (allPlugins.begin (), allPlugins.end (), elem) != allPlugins.end ());
41 : }
42 : }
43 :
44 20 : TEST (PluginVariantsDatabase, listAllPluginsWithDisabled)
45 : {
46 : using namespace kdb;
47 : using namespace kdb::tools;
48 :
49 4 : KeySet conf (2, *Key ("system/elektra/plugins/dump/disable", KEY_VALUE, "1", KEY_END),
50 10 : *Key ("system/elektra/plugins/simpleini/disable", KEY_VALUE, "1", KEY_END), KS_END);
51 4 : PluginVariantDatabase db (conf);
52 4 : std::vector<std::string> plugins (db.listAllPlugins ());
53 :
54 4 : ModulesPluginDatabase refDb;
55 4 : std::vector<std::string> allPlugins (refDb.listAllPlugins ());
56 :
57 : // only execute if plugins dump & simpleini is available
58 16 : if (std::find (allPlugins.begin (), allPlugins.end (), "dump") != allPlugins.end () &&
59 8 : std::find (allPlugins.begin (), allPlugins.end (), "simpleini") != allPlugins.end ())
60 : {
61 10 : ASSERT_EQ (allPlugins.size () - 2, plugins.size ());
62 12 : ASSERT_TRUE (std::find (plugins.begin (), plugins.end (), "dump") == plugins.end ());
63 12 : ASSERT_TRUE (std::find (plugins.begin (), plugins.end (), "simpleini") == plugins.end ());
64 : }
65 : }
66 :
67 20 : TEST (PluginVariantsDatabase, getPluginVariants)
68 : {
69 : using namespace kdb;
70 : using namespace kdb::tools;
71 :
72 4 : KeySet conf (0, KS_END);
73 4 : PluginVariantDatabase db (conf);
74 4 : std::vector<std::string> allPlugins (db.listAllPlugins ());
75 :
76 8 : if (std::find (allPlugins.begin (), allPlugins.end (), "dump") != allPlugins.end ())
77 : {
78 12 : PluginSpec dump ("dump");
79 4 : std::vector<PluginSpec> dump_variants (db.getPluginVariants (dump));
80 8 : ASSERT_EQ (0, dump_variants.size ());
81 : }
82 :
83 : #ifndef ENABLE_ASAN
84 : // ASAN reports memory leaks for the Augeas plugin on macOS: https://travis-ci.org/sanssecours/elektra/jobs/418524229
85 8 : if (std::find (allPlugins.begin (), allPlugins.end (), "augeas") != allPlugins.end ())
86 : {
87 12 : PluginSpec augeas ("augeas");
88 4 : std::vector<PluginSpec> augeas_variants (db.getPluginVariants (augeas));
89 8 : ASSERT_TRUE (augeas_variants.size () > 0);
90 : }
91 : #endif
92 6 : }
|