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@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@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@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.");
rhq-commits@lists.fedorahosted.org