From: Piotr Bartosiewicz Date: Fri, 9 Jan 2015 14:13:36 +0000 (+0100) Subject: Improve config tests X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=467ce343680c60bb9d7a368f06ef3b3ca428a7e9;p=platform%2Fcore%2Fsecurity%2Fvasum.git Improve config tests [Bug/Feature] N/A [Cause] N/A [Solution] N/A [Verification] Build, install, run tests Change-Id: I6fc7974d3379d4a96aa712e3e00b8798e6d90181 --- diff --git a/tests/unit_tests/config/testconfig-example.hpp b/tests/unit_tests/config/testconfig-example.hpp index 35e846e..c8563d0 100644 --- a/tests/unit_tests/config/testconfig-example.hpp +++ b/tests/unit_tests/config/testconfig-example.hpp @@ -122,6 +122,18 @@ struct TestConfig { ) }; +struct PartialTestConfig { + // a subset of TestConfig fields + std::string stringVal; + std::vector intVector; + + CONFIG_REGISTER + ( + stringVal, + intVector + ) +}; + /** * JSON string used in ConfigSuite test cases * For the purpose of these tests the order of this string diff --git a/tests/unit_tests/config/ut-configuration.cpp b/tests/unit_tests/config/ut-configuration.cpp index bbf9ed9..e014f68 100644 --- a/tests/unit_tests/config/ut-configuration.cpp +++ b/tests/unit_tests/config/ut-configuration.cpp @@ -27,19 +27,30 @@ #include "ut.hpp" #include "testconfig-example.hpp" #include "config/manager.hpp" +#include "utils/scoped-dir.hpp" #include #include #include -#include -namespace fs = boost::filesystem; +namespace { + using namespace config; -BOOST_AUTO_TEST_SUITE(ConfigurationSuite) +const std::string UT_PATH = "/tmp/ut-config/"; +const std::string DB_PATH = UT_PATH + "kvstore.db3"; +const std::string DB_PREFIX = "ut"; // Floating point tolerance as a number of rounding errors const int TOLERANCE = 1; +struct Fixture { + vasum::utils::ScopedDir mUTDirGuard; + Fixture() : mUTDirGuard(UT_PATH) {} +}; + +} // namespace + +BOOST_FIXTURE_TEST_SUITE(ConfigurationSuite, Fixture) BOOST_AUTO_TEST_CASE(FromStringTest) { @@ -249,17 +260,12 @@ BOOST_AUTO_TEST_CASE(FromToKVStoreTest) TestConfig config; loadFromJsonString(jsonTestString, config); - std::string dbPath = fs::unique_path("/tmp/kvstore-%%%%.db3").string(); - - saveToKVStore(dbPath, config, "prefix"); + saveToKVStore(DB_PATH, config, DB_PREFIX); TestConfig outConfig; - loadFromKVStore(dbPath, outConfig, "prefix"); + loadFromKVStore(DB_PATH, outConfig, DB_PREFIX); std::string out = saveToJsonString(outConfig); BOOST_CHECK_EQUAL(out, jsonTestString); - - fs::remove(dbPath); - fs::remove(dbPath + "-journal"); } BOOST_AUTO_TEST_CASE(FromToFDTest) @@ -267,7 +273,7 @@ BOOST_AUTO_TEST_CASE(FromToFDTest) TestConfig config; loadFromJsonString(jsonTestString, config); // Setup fd - std::string fifoPath = fs::unique_path("/tmp/fdstore-%%%%").string(); + std::string fifoPath = UT_PATH + "fdstore"; BOOST_CHECK(::mkfifo(fifoPath.c_str(), S_IWUSR | S_IRUSR) >= 0); int fd = ::open(fifoPath.c_str(), O_RDWR); BOOST_REQUIRE(fd >= 0); @@ -281,7 +287,73 @@ BOOST_AUTO_TEST_CASE(FromToFDTest) // Cleanup BOOST_CHECK(::close(fd) >= 0); - fs::remove(fifoPath); +} + +BOOST_AUTO_TEST_CASE(FromKVWithDefaultsTest) +{ + TestConfig config; + loadFromJsonString(jsonTestString, config); + + // nothing in db + TestConfig outConfig1; + loadFromKVStoreWithJson(DB_PATH, jsonTestString, outConfig1, DB_PREFIX); + + std::string out1 = saveToJsonString(outConfig1); + BOOST_CHECK_EQUAL(out1, jsonTestString); + + // all in db + saveToKVStore(DB_PATH, config, DB_PREFIX); + TestConfig outConfig2; + outConfig2.union1.set(0); + outConfig2.union2.set(0); + std::string emptyConfig = saveToJsonString(outConfig2); + loadFromKVStoreWithJson(DB_PATH, emptyConfig, outConfig2, DB_PREFIX); + + std::string out2 = saveToJsonString(outConfig2); + BOOST_CHECK_EQUAL(out2, jsonTestString); +} + +BOOST_AUTO_TEST_CASE(PartialConfigTest) +{ + // check if partial config is fully supported + TestConfig config; + loadFromJsonString(jsonTestString, config); + + // from string + { + PartialTestConfig partialConfig; + loadFromJsonString(jsonTestString, partialConfig); + + BOOST_CHECK_EQUAL(config.stringVal, partialConfig.stringVal); + BOOST_CHECK(config.intVector == partialConfig.intVector); + } + + // from kv + { + PartialTestConfig partialConfig; + saveToKVStore(DB_PATH, config, DB_PREFIX); + loadFromKVStore(DB_PATH, partialConfig, DB_PREFIX); + + BOOST_CHECK_EQUAL(config.stringVal, partialConfig.stringVal); + BOOST_CHECK(config.intVector == partialConfig.intVector); + } + + // from kv with defaults + { + PartialTestConfig partialConfig; + loadFromKVStoreWithJson(DB_PATH, jsonTestString, partialConfig, DB_PREFIX); + + BOOST_CHECK_EQUAL(config.stringVal, partialConfig.stringVal); + BOOST_CHECK(config.intVector == partialConfig.intVector); + } + + // save to kv + { + PartialTestConfig partialConfig; + partialConfig.stringVal = "partial"; + partialConfig.intVector = {7}; + config::saveToKVStore(DB_PATH, partialConfig, DB_PREFIX); + } } BOOST_AUTO_TEST_CASE(ConfigUnionTest) diff --git a/tests/unit_tests/config/ut-dynvisit.cpp b/tests/unit_tests/config/ut-dynvisit.cpp index dd782f3..2050def 100644 --- a/tests/unit_tests/config/ut-dynvisit.cpp +++ b/tests/unit_tests/config/ut-dynvisit.cpp @@ -26,31 +26,32 @@ #include "config.hpp" #include "ut.hpp" #include "testconfig-example.hpp" +#include "utils/scoped-dir.hpp" #include "config/manager.hpp" -#include #include "config/from-kvjson-visitor.hpp" +namespace { using namespace config; -namespace fs = boost::filesystem; + +const std::string UT_PATH = "/tmp/ut-config/"; struct Fixture { + vasum::utils::ScopedDir mUTDirGuard; std::string dbPath; std::string dbPrefix; Fixture() - : dbPath(fs::unique_path("/tmp/kvstore-%%%%.db3").string()) + : mUTDirGuard(UT_PATH) + , dbPath(UT_PATH + "kvstore.db3") , dbPrefix("conf") { - fs::remove(dbPath); - } - ~Fixture() - { - fs::remove(dbPath); } }; +} // namespace + BOOST_FIXTURE_TEST_SUITE(DynVisitSuite, Fixture) void checkJsonConfig(const TestConfig& cfg, const std::string& json) diff --git a/tests/unit_tests/config/ut-kvstore.cpp b/tests/unit_tests/config/ut-kvstore.cpp index ba95452..9855457 100644 --- a/tests/unit_tests/config/ut-kvstore.cpp +++ b/tests/unit_tests/config/ut-kvstore.cpp @@ -28,6 +28,7 @@ #include "config/kvstore.hpp" #include "config/exception.hpp" +#include "utils/scoped-dir.hpp" #include #include @@ -38,19 +39,18 @@ namespace fs = boost::filesystem; namespace { +const std::string UT_PATH = "/tmp/ut-config/"; + struct Fixture { + vasum::utils::ScopedDir mUTDirGuard; std::string dbPath; KVStore c; Fixture() - : dbPath(fs::unique_path("/tmp/kvstore-%%%%.db3").string()), - c(dbPath) - { - } - ~Fixture() + : mUTDirGuard(UT_PATH) + , dbPath(UT_PATH + "kvstore.db3") + , c(dbPath) { - fs::remove(dbPath); - fs::remove(dbPath + "-journal"); } }; @@ -97,7 +97,6 @@ const std::string KEY = "KEY"; BOOST_AUTO_TEST_CASE(SimpleConstructorDestructorTest) { - const std::string dbPath = fs::unique_path("/tmp/kvstore-%%%%.db3").string(); std::unique_ptr conPtr; BOOST_REQUIRE_NO_THROW(conPtr.reset(new KVStore(dbPath))); BOOST_CHECK(fs::exists(dbPath)); @@ -105,7 +104,6 @@ BOOST_AUTO_TEST_CASE(SimpleConstructorDestructorTest) BOOST_CHECK(fs::exists(dbPath)); BOOST_REQUIRE_NO_THROW(conPtr.reset()); BOOST_CHECK(fs::exists(dbPath)); - fs::remove(dbPath); } BOOST_AUTO_TEST_CASE(EscapedCharactersTest)