Blob Blame History Raw
From 21d39d66b9c2d827cbede4ace1fe0fc0b637992b Mon Sep 17 00:00:00 2001
From: David Lutterkort <lutter@redhat.com>
Date: Tue, 29 Jun 2010 15:01:03 -0700
Subject: [PATCH 5/9] * src/test-load.c (testLoadSave): work off a writable /etc/hosts

This addresses a FIXME that could lead to use not detecting incorrect behavior
---
 tests/test-load.c |   53 +++++++++++++++++++++++++++++++++++++----------------
 1 files changed, 37 insertions(+), 16 deletions(-)

diff --git a/tests/test-load.c b/tests/test-load.c
index e4dd38a..a8107a1 100644
--- a/tests/test-load.c
+++ b/tests/test-load.c
@@ -32,7 +32,8 @@
 #define CuAssertRetSuccess(tc, n) CuAssertTrue(tc, (n) == 0)
 
 static const char *abs_top_srcdir;
-static char *root;
+static const char *abs_top_builddir;
+static char *root = NULL;
 static char *loadpath;
 
 #define die(msg)                                                    \
@@ -41,6 +42,36 @@ static char *loadpath;
         exit(EXIT_FAILURE);                                         \
     } while(0)
 
+static struct augeas *setup_writable_hosts(CuTest *tc) {
+    char *etcdir, *build_root;
+    struct augeas *aug = NULL;
+    int r;
+
+    if (asprintf(&build_root, "%s/build/test-load/%s",
+                 abs_top_builddir, tc->name) < 0) {
+        CuFail(tc, "failed to set build_root");
+    }
+
+    if (asprintf(&etcdir, "%s/etc", build_root) < 0)
+        CuFail(tc, "asprintf etcdir failed");
+
+    run(tc, "test -d %s && chmod -R u+w %s || :", build_root, build_root);
+    run(tc, "rm -rf %s", build_root);
+    run(tc, "mkdir -p %s", etcdir);
+    run(tc, "cp -pr %s/etc/hosts %s", root, etcdir);
+    run(tc, "chmod -R u+w %s", build_root);
+
+    aug = aug_init(build_root, loadpath, AUG_NO_MODL_AUTOLOAD);
+    CuAssertPtrNotNull(tc, aug);
+
+    r = aug_set(aug, "/augeas/load/Hosts/lens", "Hosts.lns");
+    CuAssertRetSuccess(tc, r);
+
+    r = aug_set(aug, "/augeas/load/Hosts/incl", "/etc/hosts");
+    CuAssertRetSuccess(tc, r);
+
+    return aug;
+}
 
 static void testDefault(CuTest *tc) {
     augeas *aug = NULL;
@@ -162,21 +193,7 @@ static void testLoadSave(CuTest *tc) {
     augeas *aug = NULL;
     int r;
 
-    /* FIXME: This test behaves properly during distcheck, since srcdir
-     * is writeprotected, making an incorrect attempt to write
-     * /etc/hosts.augnew fail; during normal 'make check' the test will
-     * succeed.
-     * To address this, we should copy the files fro, tests/root into
-     * another directory and 'chmod a-w /etc' in that root
-     */
-    aug = aug_init(root, loadpath, AUG_NO_MODL_AUTOLOAD|AUG_SAVE_NOOP);
-    CuAssertPtrNotNull(tc, aug);
-
-    r = aug_set(aug, "/augeas/load/Hosts/lens", "Hosts.lns");
-    CuAssertRetSuccess(tc, r);
-
-    r = aug_set(aug, "/augeas/load/Hosts/incl", "/etc/hosts");
-    CuAssertRetSuccess(tc, r);
+    aug = setup_writable_hosts(tc);
 
     r = aug_load(aug);
     CuAssertRetSuccess(tc, r);
@@ -262,6 +279,10 @@ int main(void) {
     if (abs_top_srcdir == NULL)
         die("env var abs_top_srcdir must be set");
 
+    abs_top_builddir = getenv("abs_top_builddir");
+    if (abs_top_builddir == NULL)
+        die("env var abs_top_builddir must be set");
+
     if (asprintf(&root, "%s/tests/root", abs_top_srcdir) < 0) {
         die("failed to set root");
     }
-- 
1.6.6.1