From: Russell Bryant <rbryant(a)redhat.com>
The sysconfig unit test needed to be able to write to
/var/lib/matahari/. This patch adds some code so that the test can
still work.
Signed-off-by: Russell Bryant <rbryant(a)redhat.com>
---
src/include/matahari/sysconfig.h | 13 +++++++++++++
src/lib/sysconfig.c | 33 +++++++++++++++++++++++++++++----
src/tests/mh_api_sysconfig.h | 3 +++
3 files changed, 45 insertions(+), 4 deletions(-)
diff --git a/src/include/matahari/sysconfig.h b/src/include/matahari/sysconfig.h
index aced3b4..0390528 100644
--- a/src/include/matahari/sysconfig.h
+++ b/src/include/matahari/sysconfig.h
@@ -94,4 +94,17 @@ mh_sysconfig_set_configured(const char *key);
extern gboolean
mh_sysconfig_is_configured(const char *key);
+/**
+ * Set the directory used to store data about keys
+ *
+ * This is primarily intended to be used in unit test code. It should not
+ * be needed by any production usage of this library.
+ *
+ * \param[in] path directory to store key info
+ *
+ * \return nothing
+ */
+extern void
+mh_sysconfig_keys_dir_set(const char *path);
+
#endif // __MH_SYSCONFIG_H__
diff --git a/src/lib/sysconfig.c b/src/lib/sysconfig.c
index 81d4ee9..1dc5753 100644
--- a/src/lib/sysconfig.c
+++ b/src/lib/sysconfig.c
@@ -33,18 +33,43 @@
MH_TRACE_INIT_DATA(mh_sysconfig);
#ifdef WIN32
-static const char keys_dir[] = "c:\\";
+static const char DEFAULT_KEYS_DIR[] = "c:\\";
#else
-static const char keys_dir[] = "/var/lib/matahari/";
+static const char DEFAULT_KEYS_DIR[] = "/var/lib/matahari/";
#endif
+/*!
+ * Directory to store sysconfig action keys
+ *
+ * Set with mh_sysconfig_keys_dir_set(), get with keys_dir_get().
+ */
+static char _keys_dir[PATH_MAX];
+
+static const char *
+keys_dir_get(void)
+{
+ if (!*_keys_dir) {
+ strncpy(_keys_dir, DEFAULT_KEYS_DIR, sizeof(_keys_dir) - 1);
+ _keys_dir[sizeof(_keys_dir) - 1] = '\0';
+ }
+
+ return _keys_dir;
+}
+
+void
+mh_sysconfig_keys_dir_set(const char *path)
+{
+ strncpy(_keys_dir, path, sizeof(_keys_dir) - 1);
+ _keys_dir[sizeof(_keys_dir) - 1] = '\0';
+}
+
static gboolean
set_key(const char *key)
{
char key_file[PATH_MAX];
const char contents[] = "ok";
- g_snprintf(key_file, sizeof(key_file), "%s%s", keys_dir, key);
+ g_snprintf(key_file, sizeof(key_file), "%s%s", keys_dir_get(), key);
if (!g_file_set_contents(key_file, contents, strlen(contents), NULL)) {
mh_err("Could not set file %s", key_file);
return FALSE;
@@ -59,7 +84,7 @@ get_key(const char *key)
char *contents;
size_t length;
- g_snprintf(key_file, sizeof(key_file), "%s%s", keys_dir, key);
+ g_snprintf(key_file, sizeof(key_file), "%s%s", keys_dir_get(), key);
if (g_file_test(key_file, G_FILE_TEST_EXISTS)) {
if(g_file_get_contents(key_file, &contents, &length, NULL)) {
if (strcmp(contents, "ok") == 0) {
diff --git a/src/tests/mh_api_sysconfig.h b/src/tests/mh_api_sysconfig.h
index 9351aef..879bb11 100644
--- a/src/tests/mh_api_sysconfig.h
+++ b/src/tests/mh_api_sysconfig.h
@@ -28,6 +28,9 @@ class MhApiSysconfigSuite : public CxxTest::TestSuite
const char *uri = "http://matahariproject.org/atom.xml"; // Test if
download succeeds
const char flags = 0;
const char key[] = "org.matahariproject.test.unittest"; // Unimportant
key defined
+
+ mh_sysconfig_keys_dir_set("/tmp/");
+
TS_ASSERT((mh_sysconfig_set_configured(key)) == TRUE);
TS_ASSERT((mh_sysconfig_is_configured(key)) == TRUE);
TS_ASSERT((mh_sysconfig_run_uri(uri, flags, "puppet", key)) != -1);
--
1.7.6
Show replies by date