Skip to content

Commit

Permalink
Cleanup (patch test refreshed)
Browse files Browse the repository at this point in the history
  • Loading branch information
trespasserw committed May 11, 2016
1 parent b5dfd13 commit 1b92825
Show file tree
Hide file tree
Showing 2 changed files with 79 additions and 122 deletions.
195 changes: 76 additions & 119 deletions updater/testSrc/com/intellij/updater/PatchTest.java
Original file line number Diff line number Diff line change
Expand Up @@ -16,57 +16,45 @@
package com.intellij.updater;

import com.intellij.openapi.util.io.FileUtil;
import org.junit.Before;
import org.junit.Test;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.nio.channels.FileLock;
import java.util.*;
import java.util.Arrays;
import java.util.Collections;
import java.util.Map;

import static org.assertj.core.api.Assertions.assertThat;
import static org.junit.Assert.assertEquals;

@SuppressWarnings("ResultOfMethodCallIgnored")
public class PatchTest extends PatchTestCase {
private Patch myPatch;

@Override
@Before
public void setUp() throws Exception {
super.setUp();
PatchSpec spec = new PatchSpec()
.setOldFolder(myOlderDir.getAbsolutePath())
.setNewFolder(myNewerDir.getAbsolutePath());
myPatch = new Patch(spec, TEST_UI);
}

@Test
public void testDigestFiles() throws Exception {
Map<String, Long> checkSums = myPatch.digestFiles(getDataDir(), Collections.emptyList(), false, TEST_UI);
Patch patch = createPatch();
Map<String, Long> checkSums = patch.digestFiles(getDataDir(), Collections.emptyList(), false, TEST_UI);
assertEquals(9, checkSums.size());
}

@Test
public void testBasics() throws Exception {
List<PatchAction> expectedActions = Arrays.asList(
new CreateAction(myPatch, "newDir/newFile.txt"),
new UpdateAction(myPatch, "Readme.txt", CHECKSUMS.README_TXT),
new UpdateZipAction(myPatch, "lib/annotations.jar",
Patch patch = createPatch();
assertThat(patch.getActions()).containsOnly(
new CreateAction(patch, "newDir/newFile.txt"),
new UpdateAction(patch, "Readme.txt", CHECKSUMS.README_TXT),
new UpdateZipAction(patch, "lib/annotations.jar",
Collections.singletonList("org/jetbrains/annotations/NewClass.class"),
Collections.singletonList("org/jetbrains/annotations/Nullable.class"),
Collections.singletonList("org/jetbrains/annotations/TestOnly.class"),
CHECKSUMS.ANNOTATIONS_JAR),
new UpdateZipAction(myPatch, "lib/bootstrap.jar",
new UpdateZipAction(patch, "lib/bootstrap.jar",
Collections.emptyList(),
Collections.emptyList(),
Collections.singletonList("com/intellij/ide/ClassloaderUtil.class"),
CHECKSUMS.BOOTSTRAP_JAR),
new DeleteAction(myPatch, "bin/idea.bat", CHECKSUMS.IDEA_BAT));
List<PatchAction> actualActions = new ArrayList<PatchAction>(myPatch.getActions());
Collections.sort(expectedActions, COMPARATOR);
Collections.sort(actualActions, COMPARATOR);
assertEquals(expectedActions, actualActions);
new DeleteAction(patch, "bin/idea.bat", CHECKSUMS.IDEA_BAT));
}

@Test
Expand All @@ -75,145 +63,114 @@ public void testCreatingWithIgnoredFiles() throws Exception {
.setOldFolder(myOlderDir.getAbsolutePath())
.setNewFolder(myNewerDir.getAbsolutePath())
.setIgnoredFiles(Arrays.asList("Readme.txt", "bin/idea.bat"));
myPatch = new Patch(spec, TEST_UI);
Patch patch = new Patch(spec, TEST_UI);

List<PatchAction> expectedActions = Arrays.asList(
new CreateAction(myPatch, "newDir/newFile.txt"),
new UpdateZipAction(myPatch, "lib/annotations.jar",
assertThat(patch.getActions()).containsOnly(
new CreateAction(patch, "newDir/newFile.txt"),
new UpdateZipAction(patch, "lib/annotations.jar",
Collections.singletonList("org/jetbrains/annotations/NewClass.class"),
Collections.singletonList("org/jetbrains/annotations/Nullable.class"),
Collections.singletonList("org/jetbrains/annotations/TestOnly.class"),
CHECKSUMS.ANNOTATIONS_JAR),
new UpdateZipAction(myPatch, "lib/bootstrap.jar",
new UpdateZipAction(patch, "lib/bootstrap.jar",
Collections.emptyList(),
Collections.emptyList(),
Collections.singletonList("com/intellij/ide/ClassloaderUtil.class"),
CHECKSUMS.BOOTSTRAP_JAR));
List<PatchAction> actualActions = new ArrayList<PatchAction>(myPatch.getActions());
Collections.sort(expectedActions, COMPARATOR);
Collections.sort(actualActions, COMPARATOR);
assertEquals(expectedActions, actualActions);
}

@Test
public void testValidation() throws Exception {
Patch patch = createPatch();
FileUtil.writeToFile(new File(myOlderDir, "bin/idea.bat"), "changed");
new File(myOlderDir, "extraDir").mkdirs();
new File(myOlderDir, "extraDir/extraFile.txt").createNewFile();
new File(myOlderDir, "newDir").mkdirs();
new File(myOlderDir, "newDir/newFile.txt").createNewFile();
FileUtil.createDirectory(new File(myOlderDir, "extraDir"));
FileUtil.writeToFile(new File(myOlderDir, "extraDir/extraFile.txt"), "");
FileUtil.createDirectory(new File(myOlderDir, "newDir"));
FileUtil.writeToFile(new File(myOlderDir, "newDir/newFile.txt"), "");
FileUtil.writeToFile(new File(myOlderDir, "Readme.txt"), "changed");
FileUtil.writeToFile(new File(myOlderDir, "lib/annotations.jar"), "changed");
FileUtil.delete(new File(myOlderDir, "lib/bootstrap.jar"));

assertEquals(
new HashSet<ValidationResult>(Arrays.asList(
new ValidationResult(ValidationResult.Kind.CONFLICT,
"newDir/newFile.txt",
ValidationResult.Action.CREATE,
ValidationResult.ALREADY_EXISTS_MESSAGE,
ValidationResult.Option.REPLACE, ValidationResult.Option.KEEP),
new ValidationResult(ValidationResult.Kind.ERROR,
"Readme.txt",
ValidationResult.Action.UPDATE,
ValidationResult.MODIFIED_MESSAGE,
ValidationResult.Option.IGNORE),
new ValidationResult(ValidationResult.Kind.ERROR,
"lib/annotations.jar",
ValidationResult.Action.UPDATE,
ValidationResult.MODIFIED_MESSAGE,
ValidationResult.Option.IGNORE),
new ValidationResult(ValidationResult.Kind.ERROR,
"lib/bootstrap.jar",
ValidationResult.Action.UPDATE,
ValidationResult.ABSENT_MESSAGE,
ValidationResult.Option.IGNORE),
new ValidationResult(ValidationResult.Kind.CONFLICT,
"bin/idea.bat",
ValidationResult.Action.DELETE,
ValidationResult.MODIFIED_MESSAGE,
ValidationResult.Option.DELETE, ValidationResult.Option.KEEP))),
new HashSet<ValidationResult>(myPatch.validate(myOlderDir, TEST_UI)));
assertThat(patch.validate(myOlderDir, TEST_UI)).containsOnly(
new ValidationResult(ValidationResult.Kind.CONFLICT,
"newDir/newFile.txt",
ValidationResult.Action.CREATE,
ValidationResult.ALREADY_EXISTS_MESSAGE,
ValidationResult.Option.REPLACE, ValidationResult.Option.KEEP),
new ValidationResult(ValidationResult.Kind.ERROR,
"Readme.txt",
ValidationResult.Action.UPDATE,
ValidationResult.MODIFIED_MESSAGE,
ValidationResult.Option.IGNORE),
new ValidationResult(ValidationResult.Kind.ERROR,
"lib/annotations.jar",
ValidationResult.Action.UPDATE,
ValidationResult.MODIFIED_MESSAGE,
ValidationResult.Option.IGNORE),
new ValidationResult(ValidationResult.Kind.ERROR,
"lib/bootstrap.jar",
ValidationResult.Action.UPDATE,
ValidationResult.ABSENT_MESSAGE,
ValidationResult.Option.IGNORE),
new ValidationResult(ValidationResult.Kind.CONFLICT,
"bin/idea.bat",
ValidationResult.Action.DELETE,
ValidationResult.MODIFIED_MESSAGE,
ValidationResult.Option.DELETE, ValidationResult.Option.KEEP));
}

@Test
public void testValidationWithOptionalFiles() throws Exception {
Patch patch1 = createPatch();
FileUtil.writeToFile(new File(myOlderDir, "lib/annotations.jar"), "changed");
assertEquals(new HashSet<ValidationResult>(Collections.singletonList(
assertThat(patch1.validate(myOlderDir, TEST_UI)).containsOnly(
new ValidationResult(ValidationResult.Kind.ERROR,
"lib/annotations.jar",
ValidationResult.Action.UPDATE,
ValidationResult.MODIFIED_MESSAGE,
ValidationResult.Option.IGNORE))),
new HashSet<ValidationResult>(myPatch.validate(myOlderDir, TEST_UI)));
ValidationResult.Option.IGNORE));

PatchSpec spec = new PatchSpec()
.setOldFolder(myOlderDir.getAbsolutePath())
.setNewFolder(myNewerDir.getAbsolutePath())
.setOptionalFiles(Collections.singletonList("lib/annotations.jar"));
myPatch = new Patch(spec, TEST_UI);
Patch patch2 = new Patch(spec, TEST_UI);
FileUtil.delete(new File(myOlderDir, "lib/annotations.jar"));
assertEquals(Collections.<ValidationResult>emptyList(),
myPatch.validate(myOlderDir, TEST_UI));
assertThat(patch2.validate(myOlderDir, TEST_UI)).isEmpty();
}

@Test
public void testValidatingNonAccessibleFiles() throws Exception {
Patch patch = createPatch();
File f = new File(myOlderDir, "Readme.txt");
FileOutputStream s = new FileOutputStream(f, true);
try {
FileLock lock = s.getChannel().lock();
try {
String message = UtilsTest.mIsWindows ? "Locked by: Java(TM) Platform SE binary" : ValidationResult.ACCESS_DENIED_MESSAGE;
ValidationResult.Option option = UtilsTest.mIsWindows ? ValidationResult.Option.KILL_PROCESS : ValidationResult.Option.IGNORE;
List<ValidationResult> result = myPatch.validate(myOlderDir, TEST_UI);
assertEquals(
new HashSet<ValidationResult>(Collections.singletonList(
new ValidationResult(ValidationResult.Kind.ERROR,
"Readme.txt",
ValidationResult.Action.UPDATE,
message,
option))),
new HashSet<ValidationResult>(result));
}
finally {
lock.release();
}
}
finally {
s.close();
try (FileOutputStream s = new FileOutputStream(f, true); FileLock ignored = s.getChannel().lock()) {
String message = UtilsTest.mIsWindows ? "Locked by: Java(TM) Platform SE binary" : ValidationResult.ACCESS_DENIED_MESSAGE;
ValidationResult.Option option = UtilsTest.mIsWindows ? ValidationResult.Option.KILL_PROCESS : ValidationResult.Option.IGNORE;
assertThat(patch.validate(myOlderDir, TEST_UI)).containsOnly(
new ValidationResult(ValidationResult.Kind.ERROR,
"Readme.txt",
ValidationResult.Action.UPDATE,
message,
option));
}
}

@Test
public void testSaveLoad() throws Exception {
Patch patch = createPatch();
File f = getTempFile("file");
try {
FileOutputStream out = new FileOutputStream(f);
try {
myPatch.write(out);
}
finally {
out.close();
}

FileInputStream in = new FileInputStream(f);
try {
assertEquals(myPatch.getActions(), new Patch(in).getActions());
}
finally {
in.close();
}
try (FileOutputStream out = new FileOutputStream(f)) {
patch.write(out);
}
finally {
f.delete();
try (FileInputStream in = new FileInputStream(f)) {
assertEquals(patch.getActions(), new Patch(in).getActions());
}
}

private static final Comparator<PatchAction> COMPARATOR = new Comparator<PatchAction>() {
@Override
public int compare(PatchAction o1, PatchAction o2) {
return o1.toString().compareTo(o2.toString());
}
};
private Patch createPatch() throws IOException, OperationCancelledException {
PatchSpec spec = new PatchSpec()
.setOldFolder(myOlderDir.getAbsolutePath())
.setNewFolder(myNewerDir.getAbsolutePath());
return new Patch(spec, TEST_UI);
}
}
6 changes: 3 additions & 3 deletions updater/updater.iml
Original file line number Diff line number Diff line change
Expand Up @@ -9,9 +9,9 @@
<orderEntry type="inheritedJdk" />
<orderEntry type="sourceFolder" forTests="false" />
<orderEntry type="library" name="Log4J" level="project" />
<orderEntry type="library" name="jna" level="project" />
<orderEntry type="module" module-name="testFramework" scope="TEST" />
<orderEntry type="library" scope="TEST" name="JUnit4" level="project" />
<orderEntry type="library" name="jna" level="project" />
<orderEntry type="library" scope="TEST" name="assertJ" level="project" />
</component>
</module>

</module>

0 comments on commit 1b92825

Please sign in to comment.