001: /*******************************************************************************
002: * CruiseControl, a Continuous Integration Toolkit Copyright (c) 2001,
003: * ThoughtWorks, Inc. 200 E. Randolph, 25th Floor Chicago, IL 60601 USA All
004: * rights reserved.
005: *
006: * Redistribution and use in source and binary forms, with or without
007: * modification, are permitted provided that the following conditions are met:
008: * + Redistributions of source code must retain the above copyright notice,
009: * this list of conditions and the following disclaimer.
010: * + Redistributions in binary form must reproduce the above copyright notice,
011: * this list of conditions and the following disclaimer in the documentation
012: * and/or other materials provided with the distribution.
013: * + Neither the name of ThoughtWorks, Inc., CruiseControl, nor the names of
014: * its contributors may be used to endorse or promote products derived from this
015: * software without specific prior written permission.
016: *
017: * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
018: * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
019: * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
020: * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR
021: * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
022: * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
023: * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
024: * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
025: * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
026: * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
027: ******************************************************************************/package net.sourceforge.cruisecontrol.sourcecontrols;
028:
029: import java.util.Calendar;
030: import java.util.List;
031: import java.util.Date;
032:
033: import junit.framework.TestCase;
034: import net.sourceforge.cruisecontrol.CruiseControlException;
035: import net.sourceforge.cruisecontrol.Modification;
036:
037: /**
038: * @version $Id: TimeBuildTest.java 3115 2007-06-22 16:30:48Z pauljulius $
039: */
040: public class TimeBuildTest extends TestCase {
041:
042: public void testValidate() {
043: TimeBuild timeBuild = new TimeBuild();
044: try {
045: timeBuild.validate();
046: fail("TimeBuild should throw exceptions when required attributes are not set.");
047: } catch (CruiseControlException e) {
048: assertEquals("the 'time' attribute is mandatory", e
049: .getMessage());
050: }
051: }
052:
053: public void testTimes() {
054: Calendar calender1400 = Calendar.getInstance();
055: calender1400.set(2002, Calendar.DECEMBER, 23, 14, 00, 00);
056:
057: Calendar calender1600 = Calendar.getInstance();
058: calender1600.set(2002, Calendar.DECEMBER, 23, 16, 00, 00);
059:
060: Calendar calender1601 = Calendar.getInstance();
061: calender1601.set(2002, Calendar.DECEMBER, 23, 16, 01, 00);
062: calender1601.set(Calendar.MILLISECOND, 0);
063:
064: Calendar calender1602 = Calendar.getInstance();
065: calender1602.set(2002, Calendar.DECEMBER, 23, 16, 02, 00);
066:
067: Calendar calender1603 = Calendar.getInstance();
068: calender1603.set(2002, Calendar.DECEMBER, 23, 16, 03, 00);
069:
070: String modifierUserName = "epugh";
071: TimeBuild timeBuild = createTimeBuildForTime(modifierUserName,
072: "1601");
073:
074: assertSinceLastBuildNoModificationsAtTime(calender1400,
075: calender1600, timeBuild);
076: assertSinceLastBuildNoModificationsAtTime(calender1400,
077: calender1601, timeBuild);
078:
079: List modifications = timeBuild.getModifications(calender1400
080: .getTime(), calender1602.getTime());
081: assertHasSingleModificationThatMatchesNameAndTime(
082: modifications, modifierUserName, calender1601.getTime());
083:
084: assertSinceLastBuildNoModificationsAtTime(calender1602,
085: calender1603, timeBuild);
086: }
087:
088: private void assertSinceLastBuildNoModificationsAtTime(
089: Calendar lastBuild, Calendar now, TimeBuild timeBuild) {
090: List modifications = timeBuild.getModifications(lastBuild
091: .getTime(), now.getTime());
092: assertEquals(0, modifications.size());
093: }
094:
095: private TimeBuild createTimeBuildForTime(String userName,
096: String buildTime) {
097: TimeBuild timeBuild = new TimeBuild();
098: timeBuild.setTime(buildTime);
099: timeBuild.setUserName(userName);
100: return timeBuild;
101: }
102:
103: public void testTimeBuildWorksAcrossDays() {
104: Calendar calender1500Previousday = Calendar.getInstance();
105: calender1500Previousday.set(2002, Calendar.DECEMBER, 22, 15,
106: 00, 00);
107:
108: Calendar calender2000Previousday = Calendar.getInstance();
109: calender2000Previousday.set(2002, Calendar.DECEMBER, 22, 20,
110: 00, 00);
111:
112: Calendar calender1400 = Calendar.getInstance();
113: calender1400.set(2002, Calendar.DECEMBER, 23, 14, 00, 00);
114:
115: Calendar calender1600 = Calendar.getInstance();
116: calender1600.set(2002, Calendar.DECEMBER, 23, 16, 00, 00);
117: calender1600.set(Calendar.MILLISECOND, 0);
118:
119: Calendar calender1601 = Calendar.getInstance();
120: calender1601.set(2002, Calendar.DECEMBER, 23, 16, 01, 00);
121:
122: Calendar calender1603 = Calendar.getInstance();
123: calender1603.set(2002, Calendar.DECEMBER, 23, 16, 03, 00);
124:
125: // Schedule a timed build for 16:00
126: TimeBuild timeBuild = new TimeBuild();
127: timeBuild.setTime("1600");
128: timeBuild.setUserName("epugh");
129:
130: Date lastBuildEightPMYesterday = calender2000Previousday
131: .getTime();
132:
133: // No "modifications" at 14:00
134: List modifications = timeBuild.getModifications(
135: lastBuildEightPMYesterday, calender1400.getTime());
136: assertEquals(0, modifications.size());
137:
138: // No "modifications" at 16:00
139: modifications = timeBuild.getModifications(
140: lastBuildEightPMYesterday, calender1600.getTime());
141: assertEquals(0, modifications.size());
142:
143: // Should have one "modification" at 16:01 which is the TimedBuild
144: // modification for 16:00
145: modifications = timeBuild.getModifications(
146: lastBuildEightPMYesterday, calender1601.getTime());
147: assertEquals(1, modifications.size());
148: assertHasSingleModificationThatMatchesNameAndTime(
149: modifications, "epugh", calender1600.getTime());
150:
151: // No "modifications" from 16:01 to 16:03
152: modifications = timeBuild.getModifications(calender1601
153: .getTime(), calender1603.getTime());
154: assertEquals(0, modifications.size());
155:
156: Date lastBuildThreePMYesterday = calender1500Previousday
157: .getTime();
158:
159: // Should have one "modification" at 14:00 which is the TimedBuild
160: modifications = timeBuild.getModifications(
161: lastBuildThreePMYesterday, calender1400.getTime());
162: assertEquals(1, modifications.size());
163:
164: }
165:
166: private void assertHasSingleModificationThatMatchesNameAndTime(
167: List modifications, String userName,
168: Date expectedModifiedTime) {
169: assertEquals(1, modifications.size());
170: Modification modification = (Modification) modifications.get(0);
171: assertEquals(userName, modification.userName);
172: assertEquals(expectedModifiedTime, modification.modifiedTime);
173: }
174: }
|