001: /********************************************************************************
002: * CruiseControl, a Continuous Integration Toolkit
003: * Copyright (c) 2001, ThoughtWorks, Inc.
004: * 200 E. Randolph, 25th Floor
005: * Chicago, IL 60601 USA
006: * All rights reserved.
007: *
008: * Redistribution and use in source and binary forms, with or without
009: * modification, are permitted provided that the following conditions
010: * are met:
011: *
012: * + Redistributions of source code must retain the above copyright
013: * notice, this list of conditions and the following disclaimer.
014: *
015: * + Redistributions in binary form must reproduce the above
016: * copyright notice, this list of conditions and the following
017: * disclaimer in the documentation and/or other materials provided
018: * with the distribution.
019: *
020: * + Neither the name of ThoughtWorks, Inc., CruiseControl, nor the
021: * names of its contributors may be used to endorse or promote
022: * products derived from this software without specific prior
023: * written permission.
024: *
025: * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
026: * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
027: * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
028: * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR
029: * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
030: * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
031: * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
032: * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
033: * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
034: * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
035: * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
036: ********************************************************************************/package net.sourceforge.cruisecontrol.sourcecontrols;
037:
038: import java.io.File;
039: import java.io.IOException;
040: import java.util.Date;
041: import java.util.GregorianCalendar;
042: import java.util.List;
043: import java.util.Map;
044:
045: import junit.framework.TestCase;
046: import net.sourceforge.cruisecontrol.CruiseControlException;
047: import net.sourceforge.cruisecontrol.Modification;
048: import net.sourceforge.cruisecontrol.testutil.TestUtil.FilesToDelete;
049: import net.sourceforge.cruisecontrol.util.IO;
050:
051: public class FileSystemTest extends TestCase {
052: private FileSystem fs;
053: private File tempDirectory;
054: private File tempFile;
055: private final FilesToDelete filesToDelete = new FilesToDelete();
056:
057: protected void setUp() throws Exception {
058: fs = new FileSystem();
059:
060: File javaTempDir = new File(System
061: .getProperty("java.io.tmpdir"));
062: tempDirectory = new File(javaTempDir, "filesystemtest"
063: + System.currentTimeMillis());
064: filesToDelete.add(tempDirectory);
065: tempDirectory.mkdir();
066:
067: fs.setFolder(tempDirectory.getAbsolutePath());
068: }
069:
070: protected void tearDown() {
071: filesToDelete.delete();
072: fs = null;
073: }
074:
075: public void testValidateFailsWhenFolderNotSet() {
076: fs = new FileSystem();
077:
078: try {
079: fs.validate();
080: fail("FileSystem should throw exceptions when required attributes are not set.");
081: } catch (CruiseControlException e) {
082: assertEquals("'folder' is required for FileSystem", e
083: .getMessage());
084: }
085: }
086:
087: public void testValidateFailsWhenFolderDoesNotExist() {
088: assertTrue("problem deleting tempDir", tempDirectory.delete());
089:
090: try {
091: fs.validate();
092: fail("FileSystem should throw exceptions when folder doesn't exist.");
093: } catch (CruiseControlException e) {
094: assertTrue(e.getMessage().indexOf("must exist") > -1);
095: }
096: }
097:
098: public void testValidatePasssWhenFolderSetAndExists()
099: throws CruiseControlException {
100: fs.validate();
101: }
102:
103: public void testGettingModifications() throws Exception {
104:
105: // Check for modifications...there shouldn't be any
106: Date startTime = new GregorianCalendar(2000, 0, 1).getTime();
107: Date timeOne = new Date(startTime.getTime() + 2000);
108: Date timeTwo = new Date(timeOne.getTime() + 2000);
109: Date timeThree = new Date(timeTwo.getTime() + 2000);
110: List mods = fs.getModifications(startTime, timeOne);
111: assertNotNull(mods);
112: assertEquals(0, mods.size());
113: assertEquals(0, fs.getProperties().size());
114:
115: writeNewFile(timeOne, "testing");
116: writeNewFile(timeOne, "testing2");
117:
118: // Check for mods...there should be some, one for each file written.
119: mods = fs.getModifications(startTime, timeOne);
120: assertNotNull(mods);
121: assertEquals(2, mods.size());
122: assertEquals(0, fs.getProperties().size());
123:
124: writeNewFile(timeTwo, "testing3");
125: writeNewFile(timeTwo, "testing4");
126: writeNewFile(timeTwo, "testing5");
127:
128: // Checking for mods again should turn up only the new files.
129: fs.setProperty("property");
130: mods = fs.getModifications(timeOne, timeTwo);
131: assertNotNull(mods);
132: assertEquals(3, mods.size());
133: Map properties = fs.getProperties();
134: assertEquals(1, properties.size());
135: assertTrue(properties.containsKey("property"));
136:
137: writeNewFile(timeThree, "testing6");
138:
139: // Checking for mods again should turn up only the one file
140: mods = fs.getModifications(timeTwo, timeThree);
141: assertNotNull(mods);
142: assertEquals(1, mods.size());
143:
144: // Using this one mod, check the modification information for
145: // correctness.
146: Modification modification = (Modification) mods.get(0);
147: assertEquals(tempFile.getName(), modification.getFileName());
148: assertEquals(tempFile.getParent(), modification.getFolderName());
149: assertEquals(tempFile.lastModified(), modification.modifiedTime
150: .getTime());
151: }
152:
153: private void writeNewFile(Date modifiedTime, String content)
154: throws IOException, CruiseControlException {
155: tempFile = File.createTempFile("CruiseControl", "TEST",
156: tempDirectory);
157: filesToDelete.add(tempFile);
158: IO.write(tempFile, content);
159: tempFile.setLastModified(modifiedTime.getTime());
160: }
161: }
|