Issue #2224 Unit test now handles different time types and configuation changes.

Change-Id: I7f082b55ae112b1835ebdb516da85b2267e546e7

Former-commit-id: 9c06a5eb40 [formerly 539fc98c76 [formerly 7afd222c9c5d4293f977ceec1cb6356741844e79]]
Former-commit-id: 539fc98c76
Former-commit-id: f53ca5761b
This commit is contained in:
Roger Ferrel 2013-08-30 14:06:41 -05:00
parent 73907524e6
commit 824c06ffe7
2 changed files with 191 additions and 2 deletions

View file

@ -139,10 +139,43 @@
<name>Local</name>
<extRetentionHours>168</extRetentionHours>
<dataSet>
<dirPattern>(manual)/(\d{4})(\d{2})(\d{2})/(\d{2})</dirPattern>
<dirPattern>(manual)</dirPattern>
<filePattern>.*\.(\d{4})(\d{2})(\d{2})_(\d{2}).*</filePattern>
<displayLabel>{1}</displayLabel>
<dateGroupIndices>2,3,4,5</dateGroupIndices>
</dataSet>
<dataSet>
<dirPattern>(manual)</dirPattern>
<filePattern>.*_(\d{4})(\d{2})(\d{2})(\d{2})\..*</filePattern>
<displayLabel>{1}</displayLabel>
<dateGroupIndices>2,3,4,5</dateGroupIndices>
</dataSet>
<dataSet>
<dirPattern>(manual)</dirPattern>
<filePattern>.*-(\d{10})</filePattern>
<displayLabel>{1}</displayLabel>
<timeType>EpochSec</timeType>
<dateGroupIndices>2</dateGroupIndices>
</dataSet>
<dataSet>
<dirPattern>(manual)</dirPattern>
<filePattern>.*\.wan(\d{10})</filePattern>
<displayLabel>{1}</displayLabel>
<timeType>EpochSec</timeType>
<dateGroupIndices>2</dateGroupIndices>
</dataSet>
<dataSet>
<dirPattern>(manual)/mpe</dirPattern>
<filePattern>.*[^\d](\d{4})(\d{2})(\d{2})(\d{2})(z|\d{2}z).*</filePattern>
<displayLabel>{1}</displayLabel>
<dateGroupIndices>2,3,4,5</dateGroupIndices>
</dataSet>
<dataSet>
<dirPattern>(manual)</dirPattern>
<filePattern>.*\.\d{8}\.\d{3}</filePattern>
<displayLabel>{1}</displayLabel>
<timeType>File</timeType>
</dataSet>
</category>
<category>
<name>Model</name>

View file

@ -140,6 +140,8 @@ public class ArchiveConfigManagerTest {
// {6} file-dd
// {7} file-kk
// {8} file-mm
// {9} file-epochMS
// {10} file-epochSec
// **** grib1 ****
MessageFormat grib1Format_Raw = new MessageFormat(
@ -191,8 +193,42 @@ public class ArchiveConfigManagerTest {
createTestFiles(bufrsigwxFormat_Processed, archiveProcessed,
"Products", false, archiveStart, archiveEnd);
// *** manual ****
MessageFormat manualFormat_Raw1 = new MessageFormat(
"manual/mpe/ZETA98_BDHRMOSAIC{4}{5}{6}{7}{8}z_15180450.grib");
createTestFiles(manualFormat_Raw1, archiveRaw, "Local", false,
archiveStart, archiveEnd);
MessageFormat manualFormat_Raw2 = new MessageFormat(
"manual/mpe/ZETA98_{0}{1}{2}{3}z_16122536.grib");
createTestFiles(manualFormat_Raw2, archiveRaw, "Local", false,
archiveStart, archiveEnd);
MessageFormat manualFormat_RawE1 = new MessageFormat(
"manual/000-KOUNVFTOUN-NXUS98-KOUN-13{5}{6}{7}{8}-___-{10}");
createTestFiles(manualFormat_RawE1, archiveRaw, "Local", false,
archiveStart, archiveEnd);
MessageFormat manualFormat_RawE2 = new MessageFormat(
"manual/AQIOUN.wan{10}");
createTestFiles(manualFormat_RawE2, archiveRaw, "Local", false,
archiveStart, archiveEnd);
MessageFormat manualFormat_Raw3 = new MessageFormat(
"manual/wrf4nssl_{0}{1}{2}{3}.f00.OUN_subset.16122536");
createTestFiles(manualFormat_Raw3, archiveRaw, "Local", false,
archiveStart, archiveEnd);
MessageFormat manualFormat_Raw4 = new MessageFormat(
"manual/ZETA98.LAPS.{4}{5}{6}_{7}{8}");
createTestFiles(manualFormat_Raw4, archiveRaw, "Local", false,
archiveStart, archiveEnd);
// **** manual using file last modified time.
createModTestFiles("manual/FOUS74KTUA.16130407.100",
"manual/FOUS74KTUA.16130407.200",
"manual/FOUS74KTUA.16130407.300",
"manual/FOUS74KTUA.16130407.400", archiveRaw, "Local", false,
archiveStart, archiveEnd);
// create test archive data dir
archiveDir = new File(TEST_DIR, TEST_ARCHIVE_DIR);
}
private int getRetentionHours(ArchiveConfig archive, CategoryConfig category) {
@ -209,12 +245,20 @@ public class ArchiveConfigManagerTest {
break;
}
}
if (category == null) {
// This is part of setup and asserts will not give stack trace.
System.err.println(String.format("category: %s not in archive: %s",
categoryName, archive.getName()));
throw new IllegalArgumentException("bad category name: "
+ categoryName);
}
return category;
}
private void createTestFiles(MessageFormat fileNameFormat,
ArchiveConfig archive, String categoryName, boolean isSelected,
Calendar start, Calendar end) throws IOException {
CategoryConfig category = getCategory(archive, categoryName);
int retentionHours = getRetentionHours(archive, category);
String rootDir = archive.getRootDir();
@ -291,6 +335,88 @@ public class ArchiveConfigManagerTest {
.substring(rootDir.length()));
}
private void createModTestFiles(String newFilename, String oldFilename,
String purgeFilename, String outsideFilename,
ArchiveConfig archive, String categoryName, boolean isSelected,
Calendar start, Calendar end) throws IOException {
CategoryConfig category = getCategory(archive, categoryName);
int retentionHours = getRetentionHours(archive, category);
String rootDir = archive.getRootDir();
// create data file newer than purge time, within archive time, and
// isSelected
File dataFile = create_ModFile(end, newFilename, rootDir);
if (isSelected) {
ArchiveConfigManager manager = ArchiveConfigManager.getInstance();
archiveFiles.add(dataFile);
archiveSelectedDisplays.addAll(manager.getDisplayData(
archive.getName(), categoryName, true));
}
System.out
.println("{newer modTime than purge/within archive/}\n\tFor archive:"
+ archive.getName()
+ " category:"
+ categoryName
+ "\n\tcreated file: "
+ dataFile.getAbsolutePath()
.substring(rootDir.length()));
// create data file newer than purge time, within archive time, but not
// in selected
Calendar moreThanOneDayOld = (Calendar) referenceCalendar.clone();
moreThanOneDayOld.add(Calendar.DAY_OF_MONTH, -1);
dataFile = create_ModFile(moreThanOneDayOld, oldFilename, rootDir);
System.out
.println("{newer modTime than purge/within archive/Not Selected}\nFor archive:"
+ archive.getName()
+ " category:"
+ categoryName
+ "\n\tcreated file: "
+ dataFile.getAbsolutePath()
.substring(rootDir.length()));
// create data file older than purge time
Calendar lessThanExpiredCalendar = (Calendar) referenceCalendar.clone();
lessThanExpiredCalendar.add(Calendar.HOUR, (-1 * retentionHours - 1));
dataFile = create_ModFile(lessThanExpiredCalendar, purgeFilename,
rootDir);
purgeFiles.add(dataFile);
System.out.println("{older than purge}\nFor archive:"
+ archive.getName() + " category:" + categoryName
+ "\n\tcreated file: "
+ dataFile.getAbsolutePath().substring(rootDir.length()));
// // create data file newer than purge time, but in a directory that is
// // older than purge time, and outside of archive time frame
Calendar newerThanArchiveEnd = (Calendar) end.clone();
// newerThanArchiveEnd.add(Calendar.HOUR, 3);
// dataFile = create_DataFile(lessThanExpiredCalendar,
// newerThanArchiveEnd, fileNameFormat, rootDir);
// System.out
// .println("{newer than purge/in directory older than purge/outside of archive}\nFor archive:"
// + archive.getName()
// + " category:"
// + categoryName
// + "\n created file: " + dataFile.getAbsolutePath());
// create data file newer than purge time and outside of archive time
// frame
newerThanArchiveEnd = (Calendar) end.clone();
newerThanArchiveEnd.add(Calendar.HOUR, 3);
dataFile = create_ModFile(newerThanArchiveEnd, outsideFilename, rootDir);
System.out
.println("{newer modTime than purge/outside of archive}\nFor archive:"
+ archive.getName()
+ " category:"
+ categoryName
+ "\n\tcreated file: "
+ dataFile.getAbsolutePath()
.substring(rootDir.length()));
}
private void setupTimes() {
referenceCalendar = TimeUtil.newGmtCalendar();
referenceCalendar.set(Calendar.MINUTE, 0);
@ -330,8 +456,13 @@ public class ArchiveConfigManagerTest {
String file_dd = ddFormat.format(fileReferenceTime);
String file_kk = kkFormat.format(fileReferenceTime);
String file_mm = mmFormat.format(fileReferenceTime);
String file_epochMS = String.format("%013d",
fileReferenceTime.getTime());
String file_epochSec = String.format("%010d",
fileReferenceTime.getTime() / TimeUtil.MILLIS_PER_SECOND);
String[] formatArgs = new String[] { dir_yyyy, dir_MM, dir_dd, dir_kk,
file_yyyy, file_MM, file_dd, file_kk, file_mm };
file_yyyy, file_MM, file_dd, file_kk, file_mm, file_epochMS,
file_epochSec };
String filename = fileFormat.format(formatArgs, new StringBuffer(),
new FieldPosition(0)).toString();
@ -346,6 +477,22 @@ public class ArchiveConfigManagerTest {
return resultFile;
}
private File create_ModFile(Calendar fileReferenceCalendar,
String filename, String rootDir) throws IOException {
Date fileReferenceTime = fileReferenceCalendar.getTime();
File resultFile = new File(rootDir, filename);
String dirname = FilenameUtils
.getFullPath(resultFile.getAbsolutePath());
File dir = new File(dirname);
dir.mkdirs();
resultFile.createNewFile();
allFiles.add(resultFile);
resultFile.setLastModified(fileReferenceTime.getTime());
return resultFile;
}
private Collection<String> createFileNameListRemoveTestDir(
Collection<File> files) {
List<String> result = new ArrayList<String>(files.size());
@ -418,6 +565,15 @@ public class ArchiveConfigManagerTest {
filesFoundInPurge.add(file);
}
}
System.out.println("purgeCount: " + purgeCount + ", pureFiles.size:"
+ purgeFiles.size() + ", filesFoundInPurge.size(): "
+ filesFoundInPurge.size());
for (File file : purgeFiles) {
if (!filesFoundInPurge.contains(file)) {
System.out.println("not purged: " + file.getAbsolutePath());
}
}
assertEquals(
"The expected purge files and the files purged are not the same",