aboutsummaryrefslogtreecommitdiffstats
path: root/config-model/src/test/java/com/yahoo/vespa/model/application/validation
diff options
context:
space:
mode:
authorBjørn Christian Seime <bjorncs@verizonmedia.com>2022-01-12 18:00:11 +0100
committerBjørn Christian Seime <bjorncs@verizonmedia.com>2022-01-12 18:00:11 +0100
commitd4c30771a13f9f3df9edf234fe324ca4dad8b3cb (patch)
tree6aafc24da0898b08c97a6cdab927e9653804b716 /config-model/src/test/java/com/yahoo/vespa/model/application/validation
parent582d355f5a81c3fc85a319a8194cc7d467391304 (diff)
Create test jars in unit test instead of using pre-made
Unpack checked-in test JARs and package to JARs in test case instead. Don't use full path in produced warning/error messages.
Diffstat (limited to 'config-model/src/test/java/com/yahoo/vespa/model/application/validation')
-rw-r--r--config-model/src/test/java/com/yahoo/vespa/model/application/validation/BundleValidatorTest.java48
1 files changed, 37 insertions, 11 deletions
diff --git a/config-model/src/test/java/com/yahoo/vespa/model/application/validation/BundleValidatorTest.java b/config-model/src/test/java/com/yahoo/vespa/model/application/validation/BundleValidatorTest.java
index e2eae30d78d..ae508c6a388 100644
--- a/config-model/src/test/java/com/yahoo/vespa/model/application/validation/BundleValidatorTest.java
+++ b/config-model/src/test/java/com/yahoo/vespa/model/application/validation/BundleValidatorTest.java
@@ -3,36 +3,41 @@ package com.yahoo.vespa.model.application.validation;
import com.yahoo.config.application.api.DeployLogger;
import com.yahoo.config.model.application.provider.BaseDeployLogger;
+import org.junit.Rule;
import org.junit.Test;
+import org.junit.rules.TemporaryFolder;
-import java.io.File;
import java.io.IOException;
import java.nio.file.Files;
+import java.nio.file.Path;
import java.nio.file.Paths;
+import java.util.jar.JarEntry;
import java.util.jar.JarFile;
-import java.util.jar.Manifest;
+import java.util.jar.JarOutputStream;
+import static com.yahoo.yolean.Exceptions.uncheck;
import static org.assertj.core.api.Assertions.assertThat;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertTrue;
public class BundleValidatorTest {
- private static final String JARS_DIR = "src/test/cfg/application/validation/testjars/";
+ @Rule
+ public TemporaryFolder tempDir = new TemporaryFolder();
@Test
public void basicBundleValidation() throws Exception {
// Valid jar file
- JarFile ok = new JarFile(new File(JARS_DIR + "ok.jar"));
+ JarFile ok = createTemporaryJarFile("ok");
BundleValidator bundleValidator = new BundleValidator();
bundleValidator.validateJarFile(new BaseDeployLogger(), ok);
// No manifest
- validateWithException("nomanifest.jar", "Non-existing or invalid manifest in " + JARS_DIR + "nomanifest.jar");
+ validateWithException("nomanifest", "Non-existing or invalid manifest in nomanifest.jar");
}
private void validateWithException(String jarName, String exceptionMessage) throws IOException {
try {
- JarFile jarFile = new JarFile(JARS_DIR + jarName);
+ JarFile jarFile = createTemporaryJarFile(jarName);
BundleValidator bundleValidator = new BundleValidator();
bundleValidator.validateJarFile(new BaseDeployLogger(), jarFile);
assert (false);
@@ -46,8 +51,8 @@ public class BundleValidatorTest {
final StringBuffer buffer = new StringBuffer();
DeployLogger logger = createDeployLogger(buffer);
-
- new BundleValidator().validateJarFile(logger, new JarFile(JARS_DIR + "snapshot_bundle.jar"));
+ JarFile jarFile = createTemporaryJarFile("snapshot_bundle");
+ new BundleValidator().validateJarFile(logger, jarFile);
assertTrue(buffer.toString().contains("Deploying snapshot bundle"));
}
@@ -56,14 +61,35 @@ public class BundleValidatorTest {
final StringBuffer buffer = new StringBuffer();
DeployLogger logger = createDeployLogger(buffer);
BundleValidator validator = new BundleValidator();
- Manifest manifest = new Manifest(Files.newInputStream(Paths.get(JARS_DIR + "/manifest-producing-import-warnings.MF")));
- validator.validateManifest(logger, "my-app-bundle.jar", manifest);
+ JarFile jarFile = createTemporaryJarFile("import-warnings");
+ validator.validateJarFile(logger, jarFile);
assertThat(buffer.toString())
- .contains("For JAR file 'my-app-bundle.jar': \n" +
+ .contains("For JAR file 'import-warnings.jar': \n" +
"Manifest imports the following Java packages from 'org.json:json': [org.json]. \n" +
"The org.json library will no longer provided by jdisc runtime on Vespa 8. See https://docs.vespa.ai/en/vespa8-release-notes.html#container-runtime.");
}
+ private JarFile createTemporaryJarFile(String testArtifact) throws IOException {
+ Path jarFile = tempDir.newFile(testArtifact + ".jar").toPath();
+ Path artifactDirectory = Paths.get("src/test/cfg/application/validation/testjars/" + testArtifact);
+ try (JarOutputStream out = new JarOutputStream(Files.newOutputStream(jarFile))) {
+ Files.walk(artifactDirectory).forEach(path -> {
+ Path relativePath = artifactDirectory.relativize(path);
+ String zipName = relativePath.toString();
+ uncheck(() -> {
+ if (Files.isDirectory(path)) {
+ out.putNextEntry(new JarEntry(zipName + "/"));
+ } else {
+ out.putNextEntry(new JarEntry(zipName));
+ out.write(Files.readAllBytes(path));
+ }
+ out.closeEntry();
+ });
+ });
+ }
+ return new JarFile(jarFile.toFile());
+ }
+
private DeployLogger createDeployLogger(StringBuffer buffer) {
return (__, message) -> buffer.append(message).append('\n');
}