|
@@ -31,27 +31,80 @@ public class VersionTests extends ESTestCase {
|
|
|
assertEquals("Invalid version format [7.1]", err.getMessage());
|
|
|
}
|
|
|
|
|
|
- public void testVersionFromJarInJar() throws IOException {
|
|
|
+
|
|
|
+ private static final String JAR_PATH_SEPARATOR = "!/";
|
|
|
+
|
|
|
+ private static String versionString(byte[] parts) {
|
|
|
+ StringBuffer version = new StringBuffer();
|
|
|
+ for (byte part : parts) {
|
|
|
+ version.append(".");
|
|
|
+ version.append(part);
|
|
|
+ }
|
|
|
+ return version.substring(1);
|
|
|
+ }
|
|
|
+
|
|
|
+ private static byte[] randomVersion() {
|
|
|
+ byte[] parts = new byte[3];
|
|
|
+ for (int i = 0; i < parts.length; i ++) {
|
|
|
+ parts[i] = (byte) randomIntBetween(0, SqlVersion.REVISION_MULTIPLIER);
|
|
|
+ }
|
|
|
+ return parts;
|
|
|
+ }
|
|
|
+
|
|
|
+ private static Path createDriverJar(byte[] parts) throws IOException {
|
|
|
final String JDBC_JAR_NAME = "es-sql-jdbc.jar";
|
|
|
- final String JAR_PATH_SEPARATOR = "!/";
|
|
|
|
|
|
Path dir = createTempDir();
|
|
|
- Path jarPath = dir.resolve("uberjar.jar"); // simulated uberjar containing the jdbc driver
|
|
|
- Path innerJarPath = dir.resolve(JDBC_JAR_NAME); // simulated ES JDBC driver file
|
|
|
+ Path jarPath = dir.resolve(JDBC_JAR_NAME); // simulated ES JDBC driver file
|
|
|
|
|
|
Manifest jdbcJarManifest = new Manifest();
|
|
|
Attributes attributes = jdbcJarManifest.getMainAttributes();
|
|
|
attributes.put(Attributes.Name.MANIFEST_VERSION, "1.0.0");
|
|
|
attributes.put(new Attributes.Name("Change"), "abc");
|
|
|
- attributes.put(new Attributes.Name("X-Compile-Elasticsearch-Version"), "1.2.3");
|
|
|
+ attributes.put(new Attributes.Name("X-Compile-Elasticsearch-Version"), versionString(parts));
|
|
|
|
|
|
// create the jdbc driver file
|
|
|
- try (JarOutputStream jdbc = new JarOutputStream(Files.newOutputStream(innerJarPath, StandardOpenOption.CREATE), jdbcJarManifest)) {}
|
|
|
+ try (JarOutputStream __ = new JarOutputStream(Files.newOutputStream(jarPath, StandardOpenOption.CREATE), jdbcJarManifest)) {}
|
|
|
+
|
|
|
+ return jarPath;
|
|
|
+ }
|
|
|
+
|
|
|
+ public void testVersionFromFileJar() throws IOException {
|
|
|
+ byte[] parts = randomVersion();
|
|
|
+ Path jarPath = createDriverJar(parts);
|
|
|
+
|
|
|
+ URL fileUrl = new URL(jarPath.toUri().toURL().toString());
|
|
|
+ SqlVersion version = ClientVersion.extractVersion(fileUrl);
|
|
|
+
|
|
|
+ assertEquals(parts[0], version.major);
|
|
|
+ assertEquals(parts[1], version.minor);
|
|
|
+ assertEquals(parts[2], version.revision);
|
|
|
+ assertEquals(versionString(parts), version.version);
|
|
|
+ }
|
|
|
+
|
|
|
+ public void testVersionFromJar() throws IOException {
|
|
|
+ byte[] parts = randomVersion();
|
|
|
+ Path jarPath = createDriverJar(parts);
|
|
|
+
|
|
|
+ URL jarUrl = new URL("jar:" + jarPath.toUri().toURL().toString() + JAR_PATH_SEPARATOR);
|
|
|
+ SqlVersion version = ClientVersion.extractVersion(jarUrl);
|
|
|
+
|
|
|
+ assertEquals(parts[0], version.major);
|
|
|
+ assertEquals(parts[1], version.minor);
|
|
|
+ assertEquals(parts[2], version.revision);
|
|
|
+ assertEquals(versionString(parts), version.version);
|
|
|
+ }
|
|
|
+
|
|
|
+ public void testVersionFromJarInJar() throws IOException {
|
|
|
+ byte[] parts = randomVersion();
|
|
|
+ Path dir = createTempDir();
|
|
|
+ Path jarPath = dir.resolve("uberjar.jar"); // simulated uberjar containing the jdbc driver
|
|
|
+ Path innerJarPath = createDriverJar(parts);
|
|
|
|
|
|
// create the uberjar and embed the jdbc driver one into it
|
|
|
try (BufferedInputStream in = new BufferedInputStream(Files.newInputStream(innerJarPath));
|
|
|
JarOutputStream out = new JarOutputStream(Files.newOutputStream(jarPath, StandardOpenOption.CREATE), new Manifest())) {
|
|
|
- JarEntry entry = new JarEntry(JDBC_JAR_NAME + JAR_PATH_SEPARATOR);
|
|
|
+ JarEntry entry = new JarEntry(innerJarPath.getFileName() + JAR_PATH_SEPARATOR);
|
|
|
out.putNextEntry(entry);
|
|
|
|
|
|
byte[] buffer = new byte[1024];
|
|
@@ -63,13 +116,14 @@ public class VersionTests extends ESTestCase {
|
|
|
out.write(buffer, 0, count);
|
|
|
}
|
|
|
}
|
|
|
-
|
|
|
- URL jarInJar = new URL("jar:" + jarPath.toUri().toURL().toString() + JAR_PATH_SEPARATOR + JDBC_JAR_NAME + JAR_PATH_SEPARATOR);
|
|
|
+
|
|
|
+ URL jarInJar = new URL("jar:" + jarPath.toUri().toURL().toString() + JAR_PATH_SEPARATOR + innerJarPath.getFileName() +
|
|
|
+ JAR_PATH_SEPARATOR);
|
|
|
|
|
|
SqlVersion version = ClientVersion.extractVersion(jarInJar);
|
|
|
- assertEquals(1, version.major);
|
|
|
- assertEquals(2, version.minor);
|
|
|
- assertEquals(3, version.revision);
|
|
|
- assertEquals("1.2.3", version.version);
|
|
|
+ assertEquals(parts[0], version.major);
|
|
|
+ assertEquals(parts[1], version.minor);
|
|
|
+ assertEquals(parts[2], version.revision);
|
|
|
+ assertEquals(versionString(parts), version.version);
|
|
|
}
|
|
|
}
|