001: package com.mockrunner.test.consistency;
002:
003: import java.io.File;
004: import java.io.FileInputStream;
005: import java.io.FileOutputStream;
006: import java.io.IOException;
007: import java.nio.channels.FileChannel;
008: import java.util.ArrayList;
009: import java.util.Iterator;
010: import java.util.List;
011: import java.util.Map;
012: import java.util.Set;
013:
014: import junit.framework.TestCase;
015:
016: import com.kirkk.analyzer.Analyzer;
017: import com.kirkk.analyzer.framework.Jar;
018: import com.mockrunner.gen.jar.JarFileExtractor;
019: import com.mockrunner.gen.jar.MockrunnerJars;
020: import com.mockrunner.gen.jar.MockrunnerJars.Permission;
021:
022: public class JarFileDependenciesTest extends TestCase {
023: private MockrunnerJarTestConfiguration configuration;
024:
025: protected void setUp() throws Exception {
026: super .setUp();
027: configuration = new MockrunnerJarTestConfiguration();
028: }
029:
030: protected void tearDown() throws Exception {
031: super .tearDown();
032: configuration = null;
033: }
034:
035: public void testAllJarsReleased() {
036: List jdk13j2ee13Jars = configuration.getReleasedJars(
037: MockrunnerJarTestConfiguration.JDK13_DIR,
038: MockrunnerJarTestConfiguration.J2EE13_DIR);
039: List jdk14j2ee13Jars = configuration.getReleasedJars(
040: MockrunnerJarTestConfiguration.JDK14_DIR,
041: MockrunnerJarTestConfiguration.J2EE13_DIR);
042: List jdk14j2ee14Jars = configuration.getReleasedJars(
043: MockrunnerJarTestConfiguration.JDK14_DIR,
044: MockrunnerJarTestConfiguration.J2EE14_DIR);
045: List jdk15j2ee13Jars = configuration.getReleasedJars(
046: MockrunnerJarTestConfiguration.JDK15_DIR,
047: MockrunnerJarTestConfiguration.J2EE13_DIR);
048: List jdk15j2ee14Jars = configuration.getReleasedJars(
049: MockrunnerJarTestConfiguration.JDK15_DIR,
050: MockrunnerJarTestConfiguration.J2EE14_DIR);
051: List jdk15jee5Jars = configuration.getReleasedJars(
052: MockrunnerJarTestConfiguration.JDK15_DIR,
053: MockrunnerJarTestConfiguration.JEE5_DIR);
054: List jdk16j2ee13Jars = configuration.getReleasedJars(
055: MockrunnerJarTestConfiguration.JDK16_DIR,
056: MockrunnerJarTestConfiguration.J2EE13_DIR);
057: List jdk16j2ee14Jars = configuration.getReleasedJars(
058: MockrunnerJarTestConfiguration.JDK16_DIR,
059: MockrunnerJarTestConfiguration.J2EE14_DIR);
060: List jdk16jee5Jars = configuration.getReleasedJars(
061: MockrunnerJarTestConfiguration.JDK16_DIR,
062: MockrunnerJarTestConfiguration.JEE5_DIR);
063: doTestAllJarsReleased(jdk13j2ee13Jars, "JDK1.3, J2EE1.3");
064: doTestAllJarsReleased(jdk14j2ee13Jars, "JDK1.4, J2EE1.3");
065: doTestAllJarsReleased(jdk14j2ee14Jars, "JDK1.4, J2EE1.4");
066: doTestAllJarsReleased(jdk15j2ee13Jars, "JDK1.5, J2EE1.3");
067: doTestAllJarsReleased(jdk15j2ee14Jars, "JDK1.5, J2EE1.4");
068: doTestAllJarsReleased(jdk15jee5Jars, "JDK1.5, JEE5");
069: doTestAllJarsReleased(jdk16j2ee13Jars, "JDK1.6, J2EE1.3");
070: doTestAllJarsReleased(jdk16j2ee14Jars, "JDK1.6, J2EE1.4");
071: doTestAllJarsReleased(jdk16jee5Jars, "JDK1.6, JEE5");
072: }
073:
074: private void doTestAllJarsReleased(List jarFiles, String message) {
075: List mockrunnerJars = MockrunnerJars.getMockrunnerJars();
076: List jarFileNames = new ArrayList();
077: for (int ii = 0; ii < jarFiles.size(); ii++) {
078: jarFileNames.add(((File) jarFiles.get(ii)).getName());
079: }
080: boolean ok = true;
081: for (int ii = 0; ii < mockrunnerJars.size(); ii++) {
082: if (!jarFileNames.contains(mockrunnerJars.get(ii))) {
083: System.out.println("Missing jar in release " + message
084: + ": " + mockrunnerJars.get(ii));
085: ok = false;
086: }
087: }
088: assertTrue("There are missing jars in the release", ok);
089: }
090:
091: public void testJarFileDependencies() throws Exception {
092: List jdk13j2ee13Jars = configuration.getReleasedJars(
093: MockrunnerJarTestConfiguration.JDK13_DIR,
094: MockrunnerJarTestConfiguration.J2EE13_DIR);
095: List jdk14j2ee13Jars = configuration.getReleasedJars(
096: MockrunnerJarTestConfiguration.JDK14_DIR,
097: MockrunnerJarTestConfiguration.J2EE13_DIR);
098: List jdk14j2ee14Jars = configuration.getReleasedJars(
099: MockrunnerJarTestConfiguration.JDK14_DIR,
100: MockrunnerJarTestConfiguration.J2EE14_DIR);
101: List jdk15j2ee13Jars = configuration.getReleasedJars(
102: MockrunnerJarTestConfiguration.JDK15_DIR,
103: MockrunnerJarTestConfiguration.J2EE13_DIR);
104: List jdk15j2ee14Jars = configuration.getReleasedJars(
105: MockrunnerJarTestConfiguration.JDK15_DIR,
106: MockrunnerJarTestConfiguration.J2EE14_DIR);
107: List jdk15jee5Jars = configuration.getReleasedJars(
108: MockrunnerJarTestConfiguration.JDK15_DIR,
109: MockrunnerJarTestConfiguration.JEE5_DIR);
110: List jdk16j2ee13Jars = configuration.getReleasedJars(
111: MockrunnerJarTestConfiguration.JDK16_DIR,
112: MockrunnerJarTestConfiguration.J2EE13_DIR);
113: List jdk16j2ee14Jars = configuration.getReleasedJars(
114: MockrunnerJarTestConfiguration.JDK16_DIR,
115: MockrunnerJarTestConfiguration.J2EE14_DIR);
116: List jdk16jee5Jars = configuration.getReleasedJars(
117: MockrunnerJarTestConfiguration.JDK16_DIR,
118: MockrunnerJarTestConfiguration.JEE5_DIR);
119: List thirdPartyJ2EE13Jars = configuration
120: .getThirdPartyJarsJ2EE13();
121: List thirdPartyJ2EE14Jars = configuration
122: .getThirdPartyJarsJ2EE14();
123: List thirdPartyJEE5Jars = configuration.getThirdPartyJarsJEE5();
124: doTestJarFileDependencies(jdk13j2ee13Jars,
125: thirdPartyJ2EE13Jars, "JDK1.3, J2EE1.3");
126: doTestJarFileDependencies(jdk14j2ee13Jars,
127: thirdPartyJ2EE13Jars, "JDK1.4, J2EE1.3");
128: doTestJarFileDependencies(jdk14j2ee14Jars,
129: thirdPartyJ2EE14Jars, "JDK1.4, J2EE1.4");
130: doTestJarFileDependencies(jdk15j2ee13Jars,
131: thirdPartyJ2EE13Jars, "JDK1.5, J2EE1.3");
132: doTestJarFileDependencies(jdk15j2ee14Jars,
133: thirdPartyJ2EE14Jars, "JDK1.5, J2EE1.4");
134: doTestJarFileDependencies(jdk15jee5Jars, thirdPartyJEE5Jars,
135: "JDK1.5, JEE5");
136: doTestJarFileDependencies(jdk16j2ee13Jars,
137: thirdPartyJ2EE13Jars, "JDK1.6, J2EE1.3");
138: doTestJarFileDependencies(jdk16j2ee14Jars,
139: thirdPartyJ2EE14Jars, "JDK1.6, J2EE1.4");
140: doTestJarFileDependencies(jdk16jee5Jars, thirdPartyJEE5Jars,
141: "JDK1.6, JEE5");
142: }
143:
144: private void doTestJarFileDependencies(List releasedJars,
145: List thirdpartyJars, String message) throws Exception {
146: File tempDir = new File("temp");
147: delete(tempDir);
148: tempDir.mkdir();
149: List allJars = new ArrayList();
150: allJars.addAll(releasedJars);
151: allJars.addAll(thirdpartyJars);
152: copyFiles(tempDir, allJars);
153: boolean failure = doFilesContainIllegalDependencies(tempDir);
154: delete(tempDir);
155: if (failure) {
156: System.out
157: .println("There are illegal dependencies in release "
158: + message);
159: fail("There are illegal dependencies");
160: } else {
161: System.out.println("Dependencies for " + message + " ok");
162: }
163: }
164:
165: private boolean doFilesContainIllegalDependencies(File srcDir)
166: throws Exception {
167: Analyzer analyzer = new Analyzer();
168: Jar jars[] = analyzer.analyze(srcDir);
169: JarFileExtractor extractor = new JarFileExtractor(
170: MockrunnerJars.getMockrunnerJars(), MockrunnerJars
171: .getStandardInterfaceJars());
172: Map dependencyMap = extractor.createDependencies(jars);
173: Iterator jarNames = dependencyMap.keySet().iterator();
174: boolean failure = false;
175: while (jarNames.hasNext()) {
176: String nextJarName = (String) jarNames.next();
177: if (!isJarOk(dependencyMap, nextJarName)) {
178: failure = true;
179: }
180: }
181: Jar filteredJars[] = extractor.filter(jars);
182: for (int ii = 0; ii < filteredJars.length; ii++) {
183: Jar currentJar = filteredJars[ii];
184: List extRefList = currentJar
185: .getAllUnidentifiableExternallyReferencedPackages();
186: if (null != extRefList && !extRefList.isEmpty()) {
187: System.out.println("Unidentifiable dependencies for "
188: + currentJar.getJarFileName());
189: for (int yy = 0; yy < extRefList.size(); yy++) {
190: System.out.println("Unidentifiable dependency: "
191: + extRefList.get(yy));
192: }
193: System.out.println();
194: failure = true;
195: }
196: }
197: return failure;
198: }
199:
200: private boolean isJarOk(Map dependencyMap, String nextJarName) {
201: Set nextJarSet = (Set) dependencyMap.get(nextJarName);
202: Permission permission = MockrunnerJars
203: .getPermission(nextJarName);
204: Set prohibited = permission.getProhibited(nextJarSet);
205: if (!prohibited.isEmpty()) {
206: System.out.println("Illegal dependencies for "
207: + nextJarName);
208: Iterator iterator = prohibited.iterator();
209: while (iterator.hasNext()) {
210: System.out.println("Illegal dependency: "
211: + iterator.next());
212: }
213: System.out.println();
214: return false;
215: }
216: return true;
217: }
218:
219: private void copyFiles(File tempDir, List allJars)
220: throws IOException {
221: for (int ii = 0; ii < allJars.size(); ii++) {
222: File nextFile = (File) allJars.get(ii);
223: File nextCopyFile = new File(tempDir, nextFile.getName());
224: copyFile(nextFile, nextCopyFile);
225: }
226: }
227:
228: private void copyFile(File source, File destination)
229: throws IOException {
230: FileChannel sourceChannel = new FileInputStream(source)
231: .getChannel();
232: FileChannel destinationChannel = new FileOutputStream(
233: destination).getChannel();
234: destinationChannel.transferFrom(sourceChannel, 0, sourceChannel
235: .size());
236: sourceChannel.close();
237: destinationChannel.close();
238: }
239:
240: private void delete(File file) {
241: if (!file.isDirectory()) {
242: file.delete();
243: } else {
244: File[] files = file.listFiles();
245: for (int ii = 0; ii < files.length; ii++) {
246: delete(files[ii]);
247: }
248: file.delete();
249: }
250: }
251: }
|