X-Git-Url: https://git.carlh.net/gitweb/?a=blobdiff_plain;f=test%2Fconfig_test.cc;h=0e6a05ac04e384e420ecbc2d900ba3415e989cda;hb=72218f61297458b142e5a2397b01e482d2097270;hp=2fd6fe4aa8b6e1917fb395d3ee7a997b4cc3fb0b;hpb=9751270721fe4560eae0f53ac1e42ad0ebc80028;p=dcpomatic.git
diff --git a/test/config_test.cc b/test/config_test.cc
index 2fd6fe4aa..0e6a05ac0 100644
--- a/test/config_test.cc
+++ b/test/config_test.cc
@@ -26,78 +26,130 @@
using std::ofstream;
+using std::string;
+using boost::optional;
-static void
-rewrite_bad_config ()
+static string
+rewrite_bad_config (string filename, string extra_line)
{
+ using namespace boost::filesystem;
+
+ auto base = path("build/test/bad_config/2.16");
+ auto file = base / filename;
+
boost::system::error_code ec;
- boost::filesystem::remove ("build/test/bad_config/2.16/config.xml", ec);
+ remove (file, ec);
- Config::override_path = "build/test/bad_config";
- boost::filesystem::create_directories ("build/test/bad_config/2.16");
- ofstream f ("build/test/bad_config/2.16/config.xml");
+ boost::filesystem::create_directories (base);
+ std::ofstream f (file.string().c_str());
f << "\n"
<< "\n"
<< "\n"
+ << extra_line << "\n"
<< "\n";
f.close ();
+
+ return dcp::file_to_string (file);
}
BOOST_AUTO_TEST_CASE (config_backup_test)
{
- Config::override_path = "build/test/bad_config";
+ ConfigRestorer cr;
+ Config::override_path = "build/test/bad_config";
Config::drop();
-
boost::filesystem::remove_all ("build/test/bad_config");
- rewrite_bad_config();
+ /* Write an invalid config file to config.xml */
+ auto const first_write_xml = rewrite_bad_config("config.xml", "first write");
+ /* Load the config; this should fail, causing the bad config to be copied to config.xml.1
+ * and a new config.xml created in its place.
+ */
Config::instance();
BOOST_CHECK ( boost::filesystem::exists("build/test/bad_config/2.16/config.xml.1"));
+ BOOST_CHECK (dcp::file_to_string("build/test/bad_config/2.16/config.xml.1") == first_write_xml);
BOOST_CHECK (!boost::filesystem::exists("build/test/bad_config/2.16/config.xml.2"));
BOOST_CHECK (!boost::filesystem::exists("build/test/bad_config/2.16/config.xml.3"));
BOOST_CHECK (!boost::filesystem::exists("build/test/bad_config/2.16/config.xml.4"));
Config::drop();
- rewrite_bad_config();
+ auto const second_write_xml = rewrite_bad_config("config.xml", "second write");
Config::instance();
BOOST_CHECK ( boost::filesystem::exists("build/test/bad_config/2.16/config.xml.1"));
+ BOOST_CHECK (dcp::file_to_string("build/test/bad_config/2.16/config.xml.1") == first_write_xml);
BOOST_CHECK ( boost::filesystem::exists("build/test/bad_config/2.16/config.xml.2"));
+ BOOST_CHECK (dcp::file_to_string("build/test/bad_config/2.16/config.xml.2") == second_write_xml);
BOOST_CHECK (!boost::filesystem::exists("build/test/bad_config/2.16/config.xml.3"));
BOOST_CHECK (!boost::filesystem::exists("build/test/bad_config/2.16/config.xml.4"));
Config::drop();
- rewrite_bad_config();
+ auto const third_write_xml = rewrite_bad_config("config.xml", "third write");
Config::instance();
BOOST_CHECK ( boost::filesystem::exists("build/test/bad_config/2.16/config.xml.1"));
+ BOOST_CHECK (dcp::file_to_string("build/test/bad_config/2.16/config.xml.1") == first_write_xml);
BOOST_CHECK ( boost::filesystem::exists("build/test/bad_config/2.16/config.xml.2"));
+ BOOST_CHECK (dcp::file_to_string("build/test/bad_config/2.16/config.xml.2") == second_write_xml);
BOOST_CHECK ( boost::filesystem::exists("build/test/bad_config/2.16/config.xml.3"));
+ BOOST_CHECK (dcp::file_to_string("build/test/bad_config/2.16/config.xml.3") == third_write_xml);
BOOST_CHECK (!boost::filesystem::exists("build/test/bad_config/2.16/config.xml.4"));
Config::drop();
- rewrite_bad_config();
+ auto const fourth_write_xml = rewrite_bad_config("config.xml", "fourth write");
Config::instance();
BOOST_CHECK (boost::filesystem::exists("build/test/bad_config/2.16/config.xml.1"));
+ BOOST_CHECK (dcp::file_to_string("build/test/bad_config/2.16/config.xml.1") == first_write_xml);
BOOST_CHECK (boost::filesystem::exists("build/test/bad_config/2.16/config.xml.2"));
+ BOOST_CHECK (dcp::file_to_string("build/test/bad_config/2.16/config.xml.2") == second_write_xml);
BOOST_CHECK (boost::filesystem::exists("build/test/bad_config/2.16/config.xml.3"));
+ BOOST_CHECK (dcp::file_to_string("build/test/bad_config/2.16/config.xml.3") == third_write_xml);
BOOST_CHECK (boost::filesystem::exists("build/test/bad_config/2.16/config.xml.4"));
+ BOOST_CHECK (dcp::file_to_string("build/test/bad_config/2.16/config.xml.4") == fourth_write_xml);
+}
+
+
+BOOST_AUTO_TEST_CASE (config_backup_with_link_test)
+{
+ using namespace boost::filesystem;
- /* This test has called Config::set_defaults(), so take us back
- to the config that we want for our tests.
- */
- setup_test_config ();
+ ConfigRestorer cr;
+
+ auto base = path("build/test/bad_config");
+ auto version = base / "2.16";
+
+ Config::override_path = base;
+ Config::drop();
+
+ boost::filesystem::remove_all (base);
+
+ boost::filesystem::create_directories (version);
+ std::ofstream f (path(version / "config.xml").string().c_str());
+ f << "\n"
+ << "\n"
+ << "" << path(version / "actual.xml").string() << "\n"
+ << "\n";
+ f.close ();
+
+ Config::drop ();
+ /* Cause actual.xml to be backed up */
+ rewrite_bad_config ("actual.xml", "first write");
+ Config::instance ();
+
+ /* Make sure actual.xml was backed up to the right place */
+ BOOST_CHECK (boost::filesystem::exists(version / "actual.xml.1"));
}
BOOST_AUTO_TEST_CASE (config_write_utf8_test)
{
+ ConfigRestorer cr;
+
boost::filesystem::remove_all ("build/test/config.xml");
boost::filesystem::copy_file ("test/data/utf8_config.xml", "build/test/config.xml");
Config::override_path = "build/test";
@@ -105,16 +157,13 @@ BOOST_AUTO_TEST_CASE (config_write_utf8_test)
Config::instance()->write();
check_text_file ("test/data/utf8_config.xml", "build/test/config.xml");
-
- /* This test has called Config::set_defaults(), so take us back
- to the config that we want for our tests.
- */
- setup_test_config ();
}
BOOST_AUTO_TEST_CASE (config_upgrade_test)
{
+ ConfigRestorer cr;
+
boost::filesystem::path dir = "build/test/config_upgrade_test";
Config::override_path = dir;
Config::drop ();
@@ -131,10 +180,13 @@ BOOST_AUTO_TEST_CASE (config_upgrade_test)
check_xml (dir / "config.xml", "test/data/2.14.config.xml", {});
check_xml (dir / "cinemas.xml", "test/data/2.14.cinemas.xml", {});
+#ifdef DCPOMATIC_WINDOWS
+ /* This file has the windows path for dkdm_recipients.xml (with backslashes) */
+ check_xml (dir / "2.16" / "config.xml", "test/data/2.16.config.windows.xml", {});
+#else
check_xml (dir / "2.16" / "config.xml", "test/data/2.16.config.xml", {});
+#endif
/* cinemas.xml is not copied into 2.16 as its format has not changed */
BOOST_REQUIRE (!boost::filesystem::exists(dir / "2.16" / "cinemas.xml"));
-
- setup_test_config();
}