modules/common/drift/src/main/java/org/rhq/common/drift/ChangeSetReader.java
| 2
modules/common/drift/src/main/java/org/rhq/common/drift/ChangeSetReaderImpl.java
| 39 ++
modules/common/drift/src/test/java/org/rhq/common/drift/ChangeSetReaderImplTest.java
| 75 +++
modules/core/plugin-container/src/test/java/org/rhq/core/pc/drift/DriftDetectorTest.java
| 188 +++++++---
modules/core/plugin-container/src/test/java/org/rhq/core/pc/drift/DriftFilesSenderTest.java
| 80 +---
modules/core/plugin-container/src/test/java/org/rhq/core/pc/drift/DriftTest.java
| 91 ++++
6 files changed, 373 insertions(+), 102 deletions(-)
New commits:
commit 5ecf1d7b1c9a02dc3967fe21ec6d844c09064531
Author: John Sanda <jsanda(a)redhat.com>
Date: Thu Jun 30 22:40:13 2011 -0400
Adding/updating tests
diff --git
a/modules/core/plugin-container/src/test/java/org/rhq/core/pc/drift/DriftDetectorTest.java
b/modules/core/plugin-container/src/test/java/org/rhq/core/pc/drift/DriftDetectorTest.java
index 13d6170..9481fa9 100644
---
a/modules/core/plugin-container/src/test/java/org/rhq/core/pc/drift/DriftDetectorTest.java
+++
b/modules/core/plugin-container/src/test/java/org/rhq/core/pc/drift/DriftDetectorTest.java
@@ -18,12 +18,20 @@ import org.rhq.common.drift.DirectoryEntry;
import org.rhq.core.domain.configuration.Configuration;
import org.rhq.core.domain.drift.DriftConfiguration;
+<<<<<<< Updated upstream
import static org.apache.commons.io.IOUtils.readLines;
import static org.rhq.core.domain.drift.DriftCategory.FILE_ADDED;
import static org.rhq.core.domain.drift.DriftChangeSetCategory.COVERAGE;
import static
org.rhq.core.domain.drift.DriftConfigurationDefinition.BaseDirValueContext.fileSystem;
import static org.testng.Assert.assertEquals;
import static org.testng.Assert.assertTrue;
+=======
+import static org.apache.commons.io.FileUtils.deleteDirectory;
+import static org.apache.commons.io.IOUtils.readLines;
+import static org.rhq.core.domain.drift.DriftChangeSetCategory.COVERAGE;
+import static
org.rhq.core.domain.drift.DriftConfigurationDefinition.BaseDirValueContext.fileSystem;
+import static org.testng.Assert.assertEquals;
+>>>>>>> Stashed changes
import static org.unitils.thirdparty.org.apache.commons.io.FileUtils.touch;
public class DriftDetectorTest extends DriftTest {
@@ -32,9 +40,24 @@ public class DriftDetectorTest extends DriftTest {
ScheduleQueue scheduleQueue;
DriftClientTestStub driftClient;
+<<<<<<< Updated upstream
+
+ DriftDetector detector;
+=======
DriftDetector detector;
+// @BeforeClass
+// public void initDetector() throws Exception {
+// File basedir = new File("target", getClass().getSimpleName());
+// deleteDirectory(basedir);
+// basedir.mkdir();
+//
+// changeSetsDir = mkdir(basedir, "changesets");
+// resourcesDir = mkdir(basedir, "resources");
+// }
+>>>>>>> Stashed changes
+
@BeforeMethod
public void initDetector() {
driftClient = new DriftClientTestStub();
@@ -50,12 +73,19 @@ public class DriftDetectorTest extends DriftTest {
@SuppressWarnings("unchecked")
@Test
+<<<<<<< Updated upstream
public void excludeEmptyDirsFromCoverageChangeSet() throws Exception {
File confDir = mkdir(resourceDir, "conf");
+=======
+ public void coverageChangeSetExcludesEmptyDirs() throws Exception {
+ File confDir = new File(resourceDir, "conf");
+ confDir.mkdir();
+>>>>>>> Stashed changes
touch(new File(confDir, "server.conf"));
DriftConfiguration driftConfig = driftConfiguration("coverage-test",
resourceDir.getAbsolutePath());
+<<<<<<< Updated upstream
scheduleQueue.enqueue(new DriftDetectionSchedule(resourceId(), driftConfig));
detector.run();
@@ -79,6 +109,14 @@ public class DriftDetectorTest extends DriftTest {
detector.run();
File changeSetDir = changeSetDir(driftConfig.getName());
+=======
+ DriftDetectionSchedule schedule = new DriftDetectionSchedule(resourceId(),
driftConfig);
+
+ scheduleQueue.enqueue(schedule);
+ detector.run();
+
+ File changeSetDir = new File(new File(changeSetsDir,
Integer.toString(resourceId())), "coverage-test");
+>>>>>>> Stashed changes
File changeSet = new File(changeSetDir, "changeset.txt");
List<String> lines = readLines(new BufferedInputStream(new
FileInputStream(changeSet)));
@@ -133,6 +171,7 @@ public class DriftDetectorTest extends DriftTest {
dirEntry = reader.readDirectoryEntry();
}
}
+<<<<<<< Updated upstream
// void assertChangeSetContainsDirEntry(List<String> changeSet, String...
dirEntry) {
// String dirEntryHeader = dirEntry[0];
@@ -164,4 +203,6 @@ public class DriftDetectorTest extends DriftTest {
return config;
}
+=======
+>>>>>>> Stashed changes
}
diff --git
a/modules/core/plugin-container/src/test/java/org/rhq/core/pc/drift/DriftFilesSenderTest.java
b/modules/core/plugin-container/src/test/java/org/rhq/core/pc/drift/DriftFilesSenderTest.java
index 454a6c3..80f48eb 100644
---
a/modules/core/plugin-container/src/test/java/org/rhq/core/pc/drift/DriftFilesSenderTest.java
+++
b/modules/core/plugin-container/src/test/java/org/rhq/core/pc/drift/DriftFilesSenderTest.java
@@ -43,7 +43,11 @@ public class DriftFilesSenderTest extends DriftTest {
touch(new File(confDir, "server-1.conf"));
touch(new File(confDir, "server-2.conf"));
+<<<<<<< Updated upstream
File changeSetDir = changeSetDir(driftConfigName);
+=======
+ File changeSetDir = createChangeSetDir(resourceId(), driftConfigName);
+>>>>>>> Stashed changes
// Each item in changeSet is listed by the line it will appear in the actual
file
// in an attemp to make it more self-documenting.
@@ -79,7 +83,11 @@ public class DriftFilesSenderTest extends DriftTest {
touch(new File(libDir, "server-1.jar"));
touch(new File(libDir, "server-2.jar"));
+<<<<<<< Updated upstream
File changeSetDir = changeSetDir(driftConfigName);
+=======
+ File changeSetDir = createChangeSetDir(resourceId(), driftConfigName);
+>>>>>>> Stashed changes
// Each item in changeSet is listed by the line it will appear in the actual
file
// in an attemp to make it more self-documenting.
@@ -127,6 +135,15 @@ public class DriftFilesSenderTest extends DriftTest {
contentDir.getPath() + ". The SHA-256 hash should be used as the file
name.");
}
+<<<<<<< Updated upstream
+=======
+ File createChangeSetDir(int resourceId, String driftConfigName) {
+ File dir = new File(new File(changeSetsDir, Integer.toString(resourceId)),
driftConfigName);
+ dir.mkdirs();
+ return dir;
+ }
+
+>>>>>>> Stashed changes
void writeChangeSet(File changeSetDir, List<String> changeSet) throws Exception
{
BufferedOutputStream stream = new BufferedOutputStream(new FileOutputStream(new
File(changeSetDir,
"changeset.txt")));
diff --git
a/modules/core/plugin-container/src/test/java/org/rhq/core/pc/drift/DriftTest.java
b/modules/core/plugin-container/src/test/java/org/rhq/core/pc/drift/DriftTest.java
index c65c7dc..9d499ad 100644
--- a/modules/core/plugin-container/src/test/java/org/rhq/core/pc/drift/DriftTest.java
+++ b/modules/core/plugin-container/src/test/java/org/rhq/core/pc/drift/DriftTest.java
@@ -1,6 +1,7 @@
package org.rhq.core.pc.drift;
import java.io.File;
+<<<<<<< Updated upstream
import java.io.IOException;
import org.apache.commons.io.FileUtils;
@@ -11,6 +12,12 @@ import org.testng.annotations.BeforeMethod;
import org.rhq.core.domain.drift.DriftConfiguration;
import org.rhq.core.util.MessageDigestGenerator;
+=======
+
+import org.testng.annotations.BeforeClass;
+import org.testng.annotations.BeforeMethod;
+
+>>>>>>> Stashed changes
import static org.apache.commons.io.FileUtils.deleteDirectory;
public class DriftTest {
@@ -25,8 +32,11 @@ public class DriftTest {
protected File resourceDir;
+<<<<<<< Updated upstream
private MessageDigestGenerator digestGenerator;
+=======
+>>>>>>> Stashed changes
@BeforeClass
public void initResourcesAndChangeSetsDirs() throws Exception {
File basedir = new File("target", getClass().getSimpleName());
@@ -35,8 +45,11 @@ public class DriftTest {
changeSetsDir = mkdir(basedir, "changesets");
resourcesDir = mkdir(basedir, "resources");
+<<<<<<< Updated upstream
digestGenerator = new MessageDigestGenerator(MessageDigestGenerator.SHA_256);
+=======
+>>>>>>> Stashed changes
}
@BeforeMethod
@@ -53,11 +66,16 @@ public class DriftTest {
return ++resourceId;
}
+<<<<<<< Updated upstream
protected File mkdir(File parent, String name) {
+=======
+ File mkdir(File parent, String name) {
+>>>>>>> Stashed changes
File dir = new File(parent, name);
dir.mkdirs();
return dir;
}
+<<<<<<< Updated upstream
protected File changeSetDir(String driftConfigName) {
File dir = new File(new File(changeSetsDir, Integer.toString(resourceId)),
driftConfigName);
@@ -68,4 +86,6 @@ public class DriftTest {
protected String sha256(File file) throws IOException {
return digestGenerator.calcDigestString(file);
}
+=======
+>>>>>>> Stashed changes
}
commit d70622d559c65662753bb5b41de4c547d7e4d825
Author: John Sanda <jsanda(a)redhat.com>
Date: Thu Jun 30 22:38:18 2011 -0400
Initial commit for DriftTest
Adding some more tests for DriftDetector and DriftFilesSender and
refactoring some common code into a common base class.
diff --git
a/modules/core/plugin-container/src/test/java/org/rhq/core/pc/drift/DriftDetectorTest.java
b/modules/core/plugin-container/src/test/java/org/rhq/core/pc/drift/DriftDetectorTest.java
index efa504b..13d6170 100644
---
a/modules/core/plugin-container/src/test/java/org/rhq/core/pc/drift/DriftDetectorTest.java
+++
b/modules/core/plugin-container/src/test/java/org/rhq/core/pc/drift/DriftDetectorTest.java
@@ -1,12 +1,5 @@
package org.rhq.core.pc.drift;
-import static org.apache.commons.io.FileUtils.deleteDirectory;
-import static org.apache.commons.io.IOUtils.readLines;
-import static org.rhq.core.domain.drift.DriftChangeSetCategory.COVERAGE;
-import static
org.rhq.core.domain.drift.DriftConfigurationDefinition.BaseDirValueContext.fileSystem;
-import static org.testng.Assert.assertEquals;
-import static org.unitils.thirdparty.org.apache.commons.io.FileUtils.touch;
-
import java.io.BufferedInputStream;
import java.io.BufferedReader;
import java.io.File;
@@ -24,81 +17,103 @@ import org.rhq.common.drift.ChangeSetReaderImpl;
import org.rhq.common.drift.DirectoryEntry;
import org.rhq.core.domain.configuration.Configuration;
import org.rhq.core.domain.drift.DriftConfiguration;
-import org.rhq.core.domain.drift.DriftConfiguration.BaseDirectory;
-import org.rhq.test.JMockTest;
-
-public class DriftDetectorTest extends JMockTest {
- File changeSetsDir;
+import static org.apache.commons.io.IOUtils.readLines;
+import static org.rhq.core.domain.drift.DriftCategory.FILE_ADDED;
+import static org.rhq.core.domain.drift.DriftChangeSetCategory.COVERAGE;
+import static
org.rhq.core.domain.drift.DriftConfigurationDefinition.BaseDirValueContext.fileSystem;
+import static org.testng.Assert.assertEquals;
+import static org.testng.Assert.assertTrue;
+import static org.unitils.thirdparty.org.apache.commons.io.FileUtils.touch;
- File resourcesDir;
+public class DriftDetectorTest extends DriftTest {
- ChangeSetManager changeSetMgr;
ScheduleQueue scheduleQueue;
- @BeforeClass
- public void init() throws Exception {
- File basedir = new File("target", getClass().getSimpleName());
- deleteDirectory(basedir);
- basedir.mkdir();
-
- changeSetsDir = new File(basedir, "changesets");
- changeSetsDir.mkdir();
+ DriftClientTestStub driftClient;
- resourcesDir = new File(basedir, "resources");
- resourcesDir.mkdir();
- }
+ DriftDetector detector;
@BeforeMethod
- public void setUp() {
- changeSetMgr = new ChangeSetManagerImpl(changeSetsDir);
+ public void initDetector() {
+ driftClient = new DriftClientTestStub();
+ driftClient.setBaseDir(resourceDir);
+
scheduleQueue = new ScheduleQueueImpl();
+
+ detector = new DriftDetector();
+ detector.setDriftClient(driftClient);
+ detector.setChangeSetManager(changeSetMgr);
+ detector.setScheduleQueue(scheduleQueue);
}
@SuppressWarnings("unchecked")
@Test
- public void generateCoverageChangeSet() throws Exception {
- File server1Dir = new File(resourcesDir, "server-1");
- server1Dir.mkdir();
-
- File confDir = new File(server1Dir, "conf");
- confDir.mkdir();
-
+ public void excludeEmptyDirsFromCoverageChangeSet() throws Exception {
+ File confDir = mkdir(resourceDir, "conf");
touch(new File(confDir, "server.conf"));
- DriftConfiguration driftConfig = driftConfiguration("coverage-test",
server1Dir.getAbsolutePath());
+ DriftConfiguration driftConfig = driftConfiguration("coverage-test",
resourceDir.getAbsolutePath());
- int resourceId = 1;
- DriftDetectionSchedule schedule = new DriftDetectionSchedule(resourceId,
driftConfig);
+ scheduleQueue.enqueue(new DriftDetectionSchedule(resourceId(), driftConfig));
+ detector.run();
- scheduleQueue.enqueue(schedule);
+ File changeSetDir = changeSetDir(driftConfig.getName());
+ File changeSet = new File(changeSetDir, "changeset.txt");
+ List<String> lines = readLines(new BufferedInputStream(new
FileInputStream(changeSet)));
- DriftClientTestStub driftClient = new DriftClientTestStub();
- driftClient.setBaseDir(server1Dir);
+ assertHeaderEquals(lines, driftConfig.getName(),
driftConfig.getBasedir().getValueName(), COVERAGE.code());
+ assertThatChangeSetDoesNotContainEmptyDirs(changeSet);
+ }
- DriftDetector detector = new DriftDetector();
- detector.setDriftClient(driftClient);
- detector.setChangeSetManager(changeSetMgr);
- detector.setScheduleQueue(scheduleQueue);
+ @SuppressWarnings("unchecked")
+ @Test
+ public void usePeriodAsNameOfBasedirDirectoryEntry() throws Exception {
+ touch(new File(resourceDir, "data-1.txt"));
+ touch(new File(resourceDir, "data-2.txt"));
+ DriftConfiguration driftConfig =
driftConfiguration("basedir-entry-test", resourceDir.getAbsolutePath());
+
+ scheduleQueue.enqueue(new DriftDetectionSchedule(resourceId(), driftConfig));
detector.run();
- File changeSetDir = new File(new File(changeSetsDir,
Integer.toString(resourceId)), "coverage-test");
+ File changeSetDir = changeSetDir(driftConfig.getName());
File changeSet = new File(changeSetDir, "changeset.txt");
-
List<String> lines = readLines(new BufferedInputStream(new
FileInputStream(changeSet)));
- assertHeaderEquals(lines, driftConfig.getName(),
driftConfig.getBasedir().getValueName(), COVERAGE.code());
- assertThatChangeSetDoesNotContainEmptyDirs(changeSet);
+ assertEquals(lines.size(), 7, "Expected " + changeSet.getPath() +
" to have seven lines.");
+ assertEquals(". 2", lines.get(3), "The directory header name is
wrong for change set " +
+ changeSet.getAbsolutePath());
}
- DriftConfiguration driftConfiguration(String name, String basedir) {
- DriftConfiguration config = new DriftConfiguration(new Configuration());
- config.setName(name);
- config.setBasedir(new BaseDirectory(fileSystem, basedir));
+ @SuppressWarnings("unchecked")
+ @Test
+ public void includeNestedDirsInCoverageChangeSet() throws Exception {
+ File confDir = mkdir(resourceDir, "conf");
+ File server1Conf = new File(confDir, "server-1.conf");
+ touch(server1Conf);
- return config;
+ File subConfDir = mkdir(confDir, "subconf");
+ File server2Conf = new File(subConfDir, "server-2.conf");
+ touch(server2Conf);
+
+ DriftConfiguration config = driftConfiguration("nested-dirs-test",
resourceDir.getAbsolutePath());
+
+ scheduleQueue.enqueue(new DriftDetectionSchedule(resourceId(), config));
+ detector.run();
+
+ File changesetDir = changeSetDir(config.getName());
+ File changeSet = new File(changesetDir, "changeset.txt");
+ List<String> lines = readLines(new BufferedInputStream(new
FileInputStream(changeSet)));
+
+ assertEquals(lines.size(), 9, "Expected " + changeSet.getPath() +
" to have 9 lines");
+
+ assertHeaderEquals(lines, "nested-dirs-test",
resourceDir.getAbsolutePath(), "C");
+// assertChangeSetContainsDirEntry(lines,
+// "conf 1",
+// sha256(server1Conf) + " 0 " + server1Conf.getName() + "
" + FILE_ADDED
+// );
}
void assertHeaderEquals(List<String> lines, String... expected) {
@@ -119,4 +134,34 @@ public class DriftDetectorTest extends JMockTest {
}
}
+// void assertChangeSetContainsDirEntry(List<String> changeSet, String...
dirEntry) {
+// String dirEntryHeader = dirEntry[0];
+// int i = -1;
+// boolean found = false;
+//
+// for (String line : changeSet) {
+// if (line.equals(dirEntryHeader)) {
+// found = true;
+// }
+// ++i;
+// if (found) {
+// break;
+// }
+// }
+// }
+//
+// void assertChangeSetContainsDirEntry(File changeSet, String... dirEntry) throws
Exception {
+// ChangeSetReader reader = new ChangeSetReaderImpl(changeSet);
+// DirectoryEntry actualDirEntry = reader.readDirectoryEntry();
+//
+// while (dir)
+// }
+
+ DriftConfiguration driftConfiguration(String name, String basedir) {
+ DriftConfiguration config = new DriftConfiguration(new Configuration());
+ config.setName(name);
+ config.setBasedir(new DriftConfiguration.BaseDirectory(fileSystem, basedir));
+
+ return config;
+ }
}
diff --git
a/modules/core/plugin-container/src/test/java/org/rhq/core/pc/drift/DriftFilesSenderTest.java
b/modules/core/plugin-container/src/test/java/org/rhq/core/pc/drift/DriftFilesSenderTest.java
index 53233e5..454a6c3 100644
---
a/modules/core/plugin-container/src/test/java/org/rhq/core/pc/drift/DriftFilesSenderTest.java
+++
b/modules/core/plugin-container/src/test/java/org/rhq/core/pc/drift/DriftFilesSenderTest.java
@@ -6,7 +6,6 @@ import java.io.FileOutputStream;
import java.util.ArrayList;
import java.util.List;
-import org.testng.annotations.BeforeClass;
import org.testng.annotations.BeforeMethod;
import org.testng.annotations.Test;
@@ -14,57 +13,43 @@ import org.rhq.common.drift.Headers;
import org.rhq.core.domain.drift.DriftFile;
import static java.util.Arrays.asList;
-import static org.apache.commons.io.FileUtils.deleteDirectory;
import static org.apache.commons.io.FileUtils.touch;
import static org.apache.commons.io.IOUtils.writeLines;
import static org.rhq.core.domain.drift.DriftChangeSetCategory.COVERAGE;
import static org.testng.Assert.assertEquals;
import static org.testng.Assert.assertTrue;
-public class DriftFilesSenderTest {
+public class DriftFilesSenderTest extends DriftTest {
- File changeSetsDir;
+ DriftClient driftClient;
- File resourcesDir;
-
- ChangeSetManager changeSetMgr;
-
- String driftConfigName = "test";
-
- File server1Dir;
-
- @BeforeClass
- public void init() throws Exception {
- File basedir = new File("target", getClass().getSimpleName());
- deleteDirectory(basedir);
- basedir.mkdir();
-
- changeSetsDir = mkdir(basedir, "changesets");
- resourcesDir = mkdir(basedir, "resources");
- }
+ DriftFilesSender sender;
@BeforeMethod
- public void setUp() {
- changeSetMgr = new ChangeSetManagerImpl(changeSetsDir);
+ public void initSender() {
+ driftClient = new DriftClientTestStub();
+
+ sender = new DriftFilesSender();
+ sender.setDriftClient(driftClient);
+ sender.setChangeSetManager(changeSetMgr);
+ sender.setResourceId(resourceId());
}
@Test
public void sendFilesInOneDirectory() throws Exception {
String driftConfigName = "single-directory-test";
- File server1Dir = mkdir(resourcesDir, "server-1");
- File confDir = mkdir(server1Dir, "conf");
+ File confDir = mkdir(resourceDir, "conf");
touch(new File(confDir, "server-1.conf"));
touch(new File(confDir, "server-2.conf"));
- int resourceId = 1;
- File changeSetDir = createChangeSetDir(resourceId, driftConfigName);
+ File changeSetDir = changeSetDir(driftConfigName);
// Each item in changeSet is listed by the line it will appear in the actual
file
// in an attemp to make it more self-documenting.
writeChangeSet(changeSetDir, asList(
driftConfigName,
- server1Dir.getAbsolutePath(),
+ resourceDir.getAbsolutePath(),
COVERAGE.code(),
"conf 2",
"2e345df 0 server-1.conf A",
@@ -72,12 +57,8 @@ public class DriftFilesSenderTest {
""
));
- DriftFilesSender sender = new DriftFilesSender();
- sender.setDriftClient(new DriftClientTestStub());
- sender.setChangeSetManager(changeSetMgr);
- sender.setResourceId(resourceId);
sender.setDriftFiles(driftFiles("2e345df", "a5d8c3e"));
- sender.setHeaders(new Headers(driftConfigName, server1Dir.getAbsolutePath(),
COVERAGE));
+ sender.setHeaders(new Headers(driftConfigName, resourceDir.getAbsolutePath(),
COVERAGE));
sender.run();
File contentDir = mkdir(changeSetDir, "content");
@@ -91,22 +72,20 @@ public class DriftFilesSenderTest {
public void sendFilesInMultipleDirectories() throws Exception {
String driftConfigName = "multiple-directories-test";
- File server2Dir = mkdir(resourcesDir, "server-2");
- File confDir = mkdir(server2Dir, "conf");
- File libDir = mkdir(server2Dir, "lib");
+ File confDir = mkdir(resourceDir, "conf");
+ File libDir = mkdir(resourceDir, "lib");
touch(new File(confDir, "server-1.conf"));
touch(new File(confDir, "server-2.conf"));
touch(new File(libDir, "server-1.jar"));
touch(new File(libDir, "server-2.jar"));
- int resourceId = 2;
- File changeSetDir = createChangeSetDir(resourceId, driftConfigName);
+ File changeSetDir = changeSetDir(driftConfigName);
// Each item in changeSet is listed by the line it will appear in the actual
file
// in an attemp to make it more self-documenting.
writeChangeSet(changeSetDir, asList(
driftConfigName,
- server2Dir.getAbsolutePath(),
+ resourceDir.getAbsolutePath(),
COVERAGE.code(),
"conf 2",
"2e345df 0 server-1.conf A",
@@ -118,14 +97,10 @@ public class DriftFilesSenderTest {
""
));
- DriftFilesSender sender = new DriftFilesSender();
- sender.setDriftClient(new DriftClientTestStub());
- sender.setChangeSetManager(changeSetMgr);
- sender.setResourceId(resourceId);
// Note that the order of the drift files is random. When the server sends a
request
// for files we cannot assume that the files will be in any particular order.
sender.setDriftFiles(driftFiles("2e345df", "91d4abb",
"a5d8c3e", "92c4abb"));
- sender.setHeaders(new Headers(driftConfigName, server2Dir.getAbsolutePath(),
COVERAGE));
+ sender.setHeaders(new Headers(driftConfigName, resourceDir.getAbsolutePath(),
COVERAGE));
sender.run();
File contentDir = mkdir(changeSetDir, "content");
@@ -152,18 +127,6 @@ public class DriftFilesSenderTest {
contentDir.getPath() + ". The SHA-256 hash should be used as the file
name.");
}
- File mkdir(File parent, String name) {
- File dir = new File(parent, name);
- dir.mkdirs();
- return dir;
- }
-
- File createChangeSetDir(int resourceId, String driftConfigName) {
- File dir = new File(new File(changeSetsDir, Integer.toString(resourceId)),
driftConfigName);
- dir.mkdirs();
- return dir;
- }
-
void writeChangeSet(File changeSetDir, List<String> changeSet) throws Exception
{
BufferedOutputStream stream = new BufferedOutputStream(new FileOutputStream(new
File(changeSetDir,
"changeset.txt")));
diff --git
a/modules/core/plugin-container/src/test/java/org/rhq/core/pc/drift/DriftTest.java
b/modules/core/plugin-container/src/test/java/org/rhq/core/pc/drift/DriftTest.java
new file mode 100644
index 0000000..c65c7dc
--- /dev/null
+++ b/modules/core/plugin-container/src/test/java/org/rhq/core/pc/drift/DriftTest.java
@@ -0,0 +1,71 @@
+package org.rhq.core.pc.drift;
+
+import java.io.File;
+import java.io.IOException;
+
+import org.apache.commons.io.FileUtils;
+import org.apache.poi.util.IOUtils;
+import org.testng.annotations.BeforeClass;
+import org.testng.annotations.BeforeMethod;
+
+import org.rhq.core.domain.drift.DriftConfiguration;
+import org.rhq.core.util.MessageDigestGenerator;
+
+import static org.apache.commons.io.FileUtils.deleteDirectory;
+
+public class DriftTest {
+
+ protected File changeSetsDir;
+
+ protected File resourcesDir;
+
+ protected ChangeSetManager changeSetMgr;
+
+ private int resourceId;
+
+ protected File resourceDir;
+
+ private MessageDigestGenerator digestGenerator;
+
+ @BeforeClass
+ public void initResourcesAndChangeSetsDirs() throws Exception {
+ File basedir = new File("target", getClass().getSimpleName());
+ deleteDirectory(basedir);
+ basedir.mkdir();
+
+ changeSetsDir = mkdir(basedir, "changesets");
+ resourcesDir = mkdir(basedir, "resources");
+
+ digestGenerator = new MessageDigestGenerator(MessageDigestGenerator.SHA_256);
+ }
+
+ @BeforeMethod
+ public void setUp() {
+ resourceDir = mkdir(resourcesDir, "resource-" + nextResourceId());
+ changeSetMgr = new ChangeSetManagerImpl(changeSetsDir);
+ }
+
+ protected int resourceId() {
+ return resourceId;
+ }
+
+ protected int nextResourceId() {
+ return ++resourceId;
+ }
+
+ protected File mkdir(File parent, String name) {
+ File dir = new File(parent, name);
+ dir.mkdirs();
+ return dir;
+ }
+
+ protected File changeSetDir(String driftConfigName) {
+ File dir = new File(new File(changeSetsDir, Integer.toString(resourceId)),
driftConfigName);
+ dir.mkdirs();
+ return dir;
+ }
+
+ protected String sha256(File file) throws IOException {
+ return digestGenerator.calcDigestString(file);
+ }
+}
commit 54a3594808a16ec913eddfc25abab86d28d48ad6
Author: John Sanda <jsanda(a)redhat.com>
Date: Thu Jun 30 22:36:06 2011 -0400
Making ChangeSetReader iteratable
Now you can iterate over directory entries as follows:
ChangeSetReader reader = ...
for (DirectoryEntry dirEntry : reader) {
for (FileEntry fileEntry : dirEntry) {
....
}
}
diff --git a/modules/common/drift/src/main/java/org/rhq/common/drift/ChangeSetReader.java
b/modules/common/drift/src/main/java/org/rhq/common/drift/ChangeSetReader.java
index 93fe553..a39867a 100644
--- a/modules/common/drift/src/main/java/org/rhq/common/drift/ChangeSetReader.java
+++ b/modules/common/drift/src/main/java/org/rhq/common/drift/ChangeSetReader.java
@@ -2,7 +2,7 @@ package org.rhq.common.drift;
import java.io.IOException;
-public interface ChangeSetReader {
+public interface ChangeSetReader extends Iterable<DirectoryEntry> {
Headers getHeaders() throws IOException;
diff --git
a/modules/common/drift/src/main/java/org/rhq/common/drift/ChangeSetReaderImpl.java
b/modules/common/drift/src/main/java/org/rhq/common/drift/ChangeSetReaderImpl.java
index 7ebaabc..0d1e07e 100644
--- a/modules/common/drift/src/main/java/org/rhq/common/drift/ChangeSetReaderImpl.java
+++ b/modules/common/drift/src/main/java/org/rhq/common/drift/ChangeSetReaderImpl.java
@@ -7,6 +7,7 @@ import java.io.File;
import java.io.FileReader;
import java.io.IOException;
import java.io.Reader;
+import java.util.Iterator;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
@@ -78,4 +79,42 @@ public class ChangeSetReaderImpl implements ChangeSetReader {
public void close() throws IOException {
reader.close();
}
+
+ @Override
+ public Iterator<DirectoryEntry> iterator() {
+
+ return new Iterator<DirectoryEntry>() {
+
+ private DirectoryEntry next;
+
+ {
+ try {
+ next = readDirectoryEntry();
+ } catch (IOException e) {
+ throw new RuntimeException("Failed to create iterator: " +
e);
+ }
+ }
+
+ @Override
+ public boolean hasNext() {
+ return next != null;
+ }
+
+ @Override
+ public DirectoryEntry next() {
+ try {
+ DirectoryEntry previous = next;
+ next = readDirectoryEntry();
+ return previous;
+ } catch (IOException e) {
+ throw new RuntimeException("Failed to get next " +
DirectoryEntry.class.getName() + ": " + e);
+ }
+ }
+
+ @Override
+ public void remove() {
+ throw new UnsupportedOperationException();
+ }
+ };
+ }
}
diff --git
a/modules/common/drift/src/test/java/org/rhq/common/drift/ChangeSetReaderImplTest.java
b/modules/common/drift/src/test/java/org/rhq/common/drift/ChangeSetReaderImplTest.java
index d56c3c7..a953414 100644
---
a/modules/common/drift/src/test/java/org/rhq/common/drift/ChangeSetReaderImplTest.java
+++
b/modules/common/drift/src/test/java/org/rhq/common/drift/ChangeSetReaderImplTest.java
@@ -1,6 +1,8 @@
package org.rhq.common.drift;
import java.io.StringReader;
+import java.util.ArrayList;
+import java.util.List;
import org.testng.annotations.Test;
@@ -91,6 +93,79 @@ public class ChangeSetReaderImplTest {
assertFileEntryEquals(actualFileEntry, expectedFileEntry);
}
+ ////////////////////////////////////////////////////////
+ // Iterator tests //
+ ////////////////////////////////////////////////////////
+
+ // For iterator related tests we are only verifying the number of directory entries
+ // returned to make sure that the iteration logic is correct. The actual parsing is
+ // verified in other tests.
+ //
+ // jsanda
+
+ @Test
+ @SuppressWarnings("unchecked")
+ public void iterateOverChangeSetWithMultipledDirectoryEntries() throws Exception {
+ String changeset = "multiple-dir-entries-test\n" +
+ "myresource\n" +
+ "C\n" +
+ "conf 1\n" +
+ "abcd 0 resource.conf A\n" +
+ "\n" +
+ "lib 1\n" +
+ "1234 0 resource.jar A";
+
+ ChangeSetReaderImpl reader = new ChangeSetReaderImpl(new
StringReader(changeset));
+ int numDirEntries = 0;
+
+ for (DirectoryEntry dirEntry : reader) {
+ ++numDirEntries;
+ }
+
+ assertEquals(numDirEntries, 2, "Expected iterator to return two directory
entries");
+ }
+
+ @Test
+ @SuppressWarnings("unchecked")
+ public void iterateOverChangeSetOneDirectoryEntry() throws Exception {
+ String changeset = "single-dir-entry-test\n" +
+ "myresource\n" +
+ "C\n" +
+ "conf 1\n" +
+ "abcd 0 resource.conf A\n" +
+ "\n";
+
+ ChangeSetReaderImpl reader = new ChangeSetReaderImpl(new
StringReader(changeset));
+ int numDirEntries = 0;
+
+ for (DirectoryEntry dirEntry : reader) {
+ ++numDirEntries;
+ }
+
+ assertEquals(numDirEntries, 1, "Expected iterator to return one directory
entry");
+ }
+
+ @Test
+ @SuppressWarnings("unchecked")
+ public void iterateOverEmptyChangeSet() throws Exception {
+ // Note: We shouldn't ever be working with empty change set files (excluding
the
+ // header) but this test is here to make sure ChangeReaderImpl is robust in
handling
+ // edge cases.
+
+ String changeset = "empty-changeset-test\n" +
+ "myresouce\n" +
+ "C\n";
+
+ ChangeSetReaderImpl reader = new ChangeSetReaderImpl(new
StringReader(changeset));
+ int numDirEntries = 0;
+
+ for (DirectoryEntry dirEntry : reader) {
+ ++numDirEntries;
+ }
+
+ assertEquals(numDirEntries, 0, "Expected iterator to return zero directory
entries");
+ }
+
void assertHeadersEquals(Headers actual, Headers expected) {
assertEquals(actual.getDriftConfigurationName(),
expected.getDriftConfigurationName(),
"The drift configuration name, which should be the first header, is
wrong.");