- CXXTEST doesn't honor #ifdef/ifndef etc
see
http://cxxtest.tigris.org/ds/viewMessage.do?dsForumId=8401&dsMessageI...
At this point we decided to keep things less
magical and split up the unittests for sysconfig
keeping all common tests together and variant
specifics in their own test suite.
Signed-off-by: Adam Stokes <astokes(a)fedoraproject.org>
---
src/unittests/CMakeLists.txt | 4 +-
src/unittests/mh_api_sysconfig.h | 132 ------------------------------
src/unittests/mh_api_sysconfig_common.h | 58 +++++++++++++
src/unittests/mh_api_sysconfig_linux.h | 109 ++++++++++++++++++++++++
src/unittests/mh_api_sysconfig_windows.h | 42 ++++++++++
5 files changed, 212 insertions(+), 133 deletions(-)
delete mode 100644 src/unittests/mh_api_sysconfig.h
create mode 100644 src/unittests/mh_api_sysconfig_common.h
create mode 100644 src/unittests/mh_api_sysconfig_linux.h
create mode 100644 src/unittests/mh_api_sysconfig_windows.h
diff --git a/src/unittests/CMakeLists.txt b/src/unittests/CMakeLists.txt
index 331481b..0e1c389 100644
--- a/src/unittests/CMakeLists.txt
+++ b/src/unittests/CMakeLists.txt
@@ -5,13 +5,15 @@ if(CXXTEST_FOUND)
ENABLE_TESTING()
CXXTEST_ADD_TEST(mh_api_network_unittest network_unittest.cpp
${CMAKE_CURRENT_SOURCE_DIR}/mh_api_network.h)
CXXTEST_ADD_TEST(mh_api_host_unittest host_unittest.cpp
${CMAKE_CURRENT_SOURCE_DIR}/mh_api_host.h)
- CXXTEST_ADD_TEST(mh_api_sysconfig_unittest sysconfig_unittest.cpp
${CMAKE_CURRENT_SOURCE_DIR}/mh_api_sysconfig.h)
+ CXXTEST_ADD_TEST(mh_api_sysconfig_common_unittest sysconfig_common_unittest.cpp
${CMAKE_CURRENT_SOURCE_DIR}/mh_api_sysconfig_common.h)
+ CXXTEST_ADD_TEST(mh_api_sysconfig_unittest sysconfig_unittest.cpp
${CMAKE_CURRENT_SOURCE_DIR}/mh_api_sysconfig_${VARIANT}.h)
CXXTEST_ADD_TEST(mh_api_utilities_unittest utilities_unittest.cpp
${CMAKE_CURRENT_SOURCE_DIR}/mh_api_utilities.h)
CXXTEST_ADD_TEST(mh_hsa_unittest hsa_unittest.cpp
${CMAKE_CURRENT_SOURCE_DIR}/mh_hsa_${VARIANT}.h)
add_library(mh_tester SHARED test_utilities.c)
target_link_libraries(mh_tester ${pcre_LIBRARIES} mcommon mnetwork mhost msysconfig)
target_link_libraries(mh_api_network_unittest mh_tester)
target_link_libraries(mh_api_host_unittest mh_tester)
+ target_link_libraries(mh_api_sysconfig_common_unittest mh_tester)
target_link_libraries(mh_api_sysconfig_unittest mh_tester)
target_link_libraries(mh_api_utilities_unittest mh_tester)
target_link_libraries(mh_hsa_unittest mh_tester)
diff --git a/src/unittests/mh_api_sysconfig.h b/src/unittests/mh_api_sysconfig.h
deleted file mode 100644
index 8d9d512..0000000
--- a/src/unittests/mh_api_sysconfig.h
+++ /dev/null
@@ -1,132 +0,0 @@
-#ifndef __MH_API_NETWORK_UNITTEST_H
-#define __MH_API_NETWORK_UNITTEST_H
-#include <iostream>
-#include <cstring>
-#include <string>
-#include <sstream>
-#include <utility>
-#include <vector>
-#include <cstdlib>
-#include <cstdio>
-#include <sys/stat.h>
-#include <dirent.h>
-#include <cxxtest/TestSuite.h>
-
-extern "C" {
-#include <glib.h>
-
-#include "matahari/sysconfig.h"
-#include "matahari/sysconfig_internal.h"
-#include "matahari/utilities.h"
-#include "mh_test_utilities.h"
-};
-
-using namespace std;
-
-/**
- * Callback function, doesn't do anything
- */
-void f(void *, int)
-{
-}
-
-/**
- * Result from run_string and run_uri functions is in the form "query =
result\n"
- * This function will extract the "result"
- *
- * \note The return of this routine must be freed with free()
- */
-char *strip(const char *result)
-{
- char *stripped;
- // strip the "query = " part
- stripped = strdup(strstr(result, " = ") + 3);
- // and the line end
- stripped[strlen(stripped) - 1] = '\0';
- return stripped;
-}
-
-class MhApiSysconfigSuite : public CxxTest::TestSuite
-{
- public:
-
- void testIsConfigured(void)
- {
- const char key[] = "org.matahariproject.test.unittest"; // Unimportant
key defined
- const char *invalid_keys[3] = {"../etc/passwd",
- "./../etc/passwd#",
- "HAPPY#HAMMY,@"};
- char *key_res;
-
- mh_sysconfig_keys_dir_set("/tmp/matahari-sysconfig-keys/");
-
- TS_ASSERT((mh_sysconfig_set_configured(key, "OK")) == MH_RES_SUCCESS);
- TS_ASSERT(((key_res = mh_sysconfig_is_configured(key))) != NULL);
- TS_ASSERT(!strcmp("OK", key_res));
-
- free(key_res);
- for (int i = 0; i < DIMOF(invalid_keys); i++) {
- TS_ASSERT((mh_sysconfig_set_configured(invalid_keys[i], "OK")) ==
MH_RES_INVALID_ARGS);
- }
- }
-
- /**
- * This test compares result of mh_sysconfig_query, mh_sysconfig_run_string
- * and mh_sysconfig_run_uri commands. This test is linux-only (no augeas
- * on windows).
- */
-#ifndef WIN32
- void testAugeasQuery(void)
- {
- const char key[] = "org.matahariproject.test.unittest.augeas";
- const char query[] = "/files/etc/mtab/1/spec";
- const char command[] = "get /files/etc/mtab/1/spec";
- char tmp_file[] = "matahari-sysconfig-test_XXXXXX";
- char *query_result, *run_string_result, *run_string_result_stripped;
- char *run_uri_result, *run_uri_result_stripped;
- char *uri, *abs_path;
- int fd = mkstemp(tmp_file);
- TS_ASSERT(fd >= 0);
-
- // test query function
- query_result = mh_sysconfig_query(query, 0, "augeas");
- TS_ASSERT(query_result != NULL);
- TS_ASSERT(strlen(query_result) > 0);
-
- // test run_string function
- TS_ASSERT(mh_sysconfig_run_string(command, MH_SYSCONFIG_FLAG_FORCE,
"augeas", key, f, NULL) == MH_RES_SUCCESS);
- run_string_result = mh_sysconfig_is_configured(key);
- TS_ASSERT(run_string_result != NULL);
-
- run_string_result_stripped = strip(run_string_result);
- free(run_string_result);
-
- // test run_uri function
- write(fd, command, strlen(command));
- write(fd, "\n", 1);
- close(fd);
-
- abs_path = realpath(tmp_file, NULL);
- asprintf(&uri, "file://%s", abs_path);
- TS_ASSERT(mh_sysconfig_run_uri(uri, MH_SYSCONFIG_FLAG_FORCE, "augeas",
key, f, NULL) == MH_RES_SUCCESS);
- run_uri_result = mh_sysconfig_is_configured(key);
- TS_ASSERT(run_uri_result != NULL);
-
- run_uri_result_stripped = strip(run_uri_result);
- free(run_uri_result);
- unlink(tmp_file);
-
- // compare the results of all functions above
- TS_ASSERT(strcmp(query_result, run_string_result_stripped) == 0);
- TS_ASSERT(strcmp(query_result, run_uri_result_stripped) == 0);
-
- free(query_result);
- free(run_string_result_stripped);
- free(run_uri_result_stripped);
- free(abs_path);
- free(uri);
- }
-#endif
-};
-
-#endif
diff --git a/src/unittests/mh_api_sysconfig_common.h
b/src/unittests/mh_api_sysconfig_common.h
new file mode 100644
index 0000000..7efc63a
--- /dev/null
+++ b/src/unittests/mh_api_sysconfig_common.h
@@ -0,0 +1,58 @@
+#ifndef __MH_API_SYSCONFIG_COMMON_UNITTEST_H
+#define __MH_API_SYSCONFIG_COMMON_UNITTEST_H
+#include <iostream>
+#include <cstring>
+#include <string>
+#include <sstream>
+#include <utility>
+#include <vector>
+#include <cstdlib>
+#include <cstdio>
+#include <sys/stat.h>
+#include <dirent.h>
+#include <cxxtest/TestSuite.h>
+
+extern "C" {
+#include <glib.h>
+
+#include "matahari/sysconfig.h"
+#include "matahari/sysconfig_internal.h"
+#include "matahari/utilities.h"
+#include "mh_test_utilities.h"
+};
+
+using namespace std;
+
+/**
+ * Callback function, doesn't do anything
+ */
+void f(void *, int)
+{
+}
+
+class MhApiSysconfigCommonSuite : public CxxTest::TestSuite
+{
+ public:
+
+ void testIsConfigured(void)
+ {
+ const char key[] = "org.matahariproject.test.unittest"; // Unimportant
key defined
+ const char *invalid_keys[3] = {"../etc/passwd",
+ "./../etc/passwd#",
+ "HAPPY#HAMMY,@"};
+ char *key_res;
+
+ mh_sysconfig_keys_dir_set("/tmp/matahari-sysconfig-keys/");
+
+ TS_ASSERT((mh_sysconfig_set_configured(key, "OK")) == MH_RES_SUCCESS);
+ TS_ASSERT(((key_res = mh_sysconfig_is_configured(key))) != NULL);
+ TS_ASSERT(!strcmp("OK", key_res));
+
+ free(key_res);
+ for (int i = 0; i < DIMOF(invalid_keys); i++) {
+ TS_ASSERT((mh_sysconfig_set_configured(invalid_keys[i], "OK")) ==
MH_RES_INVALID_ARGS);
+ }
+ }
+};
+
+#endif
diff --git a/src/unittests/mh_api_sysconfig_linux.h
b/src/unittests/mh_api_sysconfig_linux.h
new file mode 100644
index 0000000..1020dbe
--- /dev/null
+++ b/src/unittests/mh_api_sysconfig_linux.h
@@ -0,0 +1,109 @@
+#ifndef __MH_API_SYSCONFIG_LINUX_UNITTEST_H
+#define __MH_API_SYSCONFIG_LINUX_UNITTEST_H
+#include <iostream>
+#include <cstring>
+#include <string>
+#include <sstream>
+#include <utility>
+#include <vector>
+#include <cstdlib>
+#include <cstdio>
+#include <sys/stat.h>
+#include <dirent.h>
+#include <cxxtest/TestSuite.h>
+
+extern "C" {
+#include <glib.h>
+
+#include "matahari/sysconfig.h"
+#include "matahari/sysconfig_internal.h"
+#include "matahari/utilities.h"
+#include "mh_test_utilities.h"
+};
+
+using namespace std;
+
+/**
+ * Callback function, doesn't do anything
+ */
+void f(void *, int)
+{
+}
+
+/**
+ * Result from run_string and run_uri functions is in the form "query =
result\n"
+ * This function will extract the "result"
+ *
+ * \note The return of this routine must be freed with free()
+ */
+char *strip(const char *result)
+{
+ char *stripped;
+ // strip the "query = " part
+ stripped = strdup(strstr(result, " = ") + 3);
+ // and the line end
+ stripped[strlen(stripped) - 1] = '\0';
+ return stripped;
+}
+
+class MhApiSysconfigLinuxSuite : public CxxTest::TestSuite
+{
+ public:
+ /**
+ * This test compares result of mh_sysconfig_query, mh_sysconfig_run_string
+ * and mh_sysconfig_run_uri commands. This test is linux-only (no augeas
+ * on windows).
+ */
+ void testAugeasQuery(void)
+ {
+ const char key[] = "org.matahariproject.test.unittest.augeas";
+ const char query[] = "/files/etc/mtab/1/spec";
+ const char command[] = "get /files/etc/mtab/1/spec";
+ char tmp_file[] = "matahari-sysconfig-test_XXXXXX";
+ char *query_result, *run_string_result, *run_string_result_stripped;
+ char *run_uri_result, *run_uri_result_stripped;
+ char *uri, *abs_path;
+ int fd = mkstemp(tmp_file);
+ TS_ASSERT(fd >= 0);
+
+ // test query function
+ query_result = mh_sysconfig_query(query, 0, "augeas");
+ TS_ASSERT(query_result != NULL);
+ TS_ASSERT(strlen(query_result) > 0);
+
+ // test run_string function
+ TS_ASSERT(mh_sysconfig_run_string(command, MH_SYSCONFIG_FLAG_FORCE,
"augeas", key, f, NULL) == MH_RES_SUCCESS);
+ run_string_result = mh_sysconfig_is_configured(key);
+ TS_ASSERT(run_string_result != NULL);
+
+ run_string_result_stripped = strip(run_string_result);
+ free(run_string_result);
+
+ // test run_uri function
+ write(fd, command, strlen(command));
+ write(fd, "\n", 1);
+ close(fd);
+
+ abs_path = realpath(tmp_file, NULL);
+ asprintf(&uri, "file://%s", abs_path);
+ TS_ASSERT(mh_sysconfig_run_uri(uri, MH_SYSCONFIG_FLAG_FORCE, "augeas",
key, f, NULL) == MH_RES_SUCCESS);
+ run_uri_result = mh_sysconfig_is_configured(key);
+ TS_ASSERT(run_uri_result != NULL);
+
+ run_uri_result_stripped = strip(run_uri_result);
+ free(run_uri_result);
+ unlink(tmp_file);
+
+ // compare the results of all functions above
+ TS_ASSERT(strcmp(query_result, run_string_result_stripped) == 0);
+ TS_ASSERT(strcmp(query_result, run_uri_result_stripped) == 0);
+
+ free(query_result);
+ free(run_string_result_stripped);
+ free(run_uri_result_stripped);
+ free(abs_path);
+ free(uri);
+ }
+};
+
+#endif
diff --git a/src/unittests/mh_api_sysconfig_windows.h
b/src/unittests/mh_api_sysconfig_windows.h
new file mode 100644
index 0000000..e65522b
--- /dev/null
+++ b/src/unittests/mh_api_sysconfig_windows.h
@@ -0,0 +1,42 @@
+#ifndef __MH_API_NETWORK_UNITTEST_H
+#define __MH_API_NETWORK_UNITTEST_H
+#include <iostream>
+#include <cstring>
+#include <string>
+#include <sstream>
+#include <utility>
+#include <vector>
+#include <cstdlib>
+#include <cstdio>
+#include <sys/stat.h>
+#include <dirent.h>
+#include <cxxtest/TestSuite.h>
+
+extern "C" {
+#include <glib.h>
+
+#include "matahari/sysconfig.h"
+#include "matahari/sysconfig_internal.h"
+#include "matahari/utilities.h"
+#include "mh_test_utilities.h"
+};
+
+using namespace std;
+
+/**
+ * Callback function, doesn't do anything
+ */
+void f(void *, int)
+{
+}
+
+class MhApiSysconfigWindowsSuite : public CxxTest::TestSuite
+{
+ public:
+ void testPlaceHolder(void)
+ {
+ TS_ASSERT( 1 + 1 > 1);
+ }
+};
+
+#endif
--
1.7.6.4