From 42be3258feb0058929a98f3e225683295fc8b085 Mon Sep 17 00:00:00 2001 From: Yannick Welsch Date: Tue, 14 Aug 2018 11:07:09 +0200 Subject: [PATCH 1/2] [TEST] Select free port for Minio --- plugins/repository-s3/build.gradle | 27 ++++++++++++++++++++++++--- 1 file changed, 24 insertions(+), 3 deletions(-) diff --git a/plugins/repository-s3/build.gradle b/plugins/repository-s3/build.gradle index 6001ed570652e..a330b87fbf0e3 100644 --- a/plugins/repository-s3/build.gradle +++ b/plugins/repository-s3/build.gradle @@ -132,7 +132,7 @@ if (!s3TemporaryAccessKey && !s3TemporarySecretKey && !s3TemporaryBucket && !s3T final String minioVersion = 'RELEASE.2018-06-22T23-48-46Z' final String minioBinDir = "${buildDir}/minio/bin" final String minioDataDir = "${buildDir}/minio/data" -final String minioAddress = "127.0.0.1:60920" +final String minioAddress = "127.0.0.1" final String minioDistribution final String minioCheckSum @@ -187,15 +187,30 @@ if (useFixture && minioDistribution) { dependsOn installMinio ext.minioPid = 0L + ext.minioPort = 0 doLast { + // get free port + for (int port = 60920; port < 60940; port++) { + try { + javax.net.ServerSocketFactory.getDefault().createServerSocket(port, 1, InetAddress.getByName(minioAddress)).close() + minioPort = port + break + } catch (Exception e) { + logger.error("Failed to determine free port " + port + " for Minio process", e) + } + } + if (minioPort == 0) { + throw new GradleException("Could not find a free port for Minio") + } + new File("${minioDataDir}/${s3PermanentBucket}").mkdirs() // we skip these tests on Windows so we do no need to worry about compatibility here final ProcessBuilder minio = new ProcessBuilder( "${minioBinDir}/${minioFileName}", "server", "--address", - minioAddress, + minioAddress + ":" + minioPort, minioDataDir) minio.environment().put('MINIO_ACCESS_KEY', s3PermanentAccessKey) minio.environment().put('MINIO_SECRET_KEY', s3PermanentSecretKey) @@ -227,6 +242,7 @@ if (useFixture && minioDistribution) { final int index = line.lastIndexOf(":") assert index >= 0 httpPort = Integer.parseInt(line.substring(index + 1)) + assert httpPort == minioPort : "Port mismatch, expected ${minioPort} but was ${httpPort}" final File script = new File(project.buildDir, "minio/minio.killer.sh") script.setText( @@ -269,10 +285,15 @@ if (useFixture && minioDistribution) { project.afterEvaluate { ClusterConfiguration cluster = project.extensions.getByName('integTestMinioCluster') as ClusterConfiguration cluster.dependsOn(project.bundlePlugin) + cluster.dependsOn(startMinio) // otherwise we don't know the Minio port cluster.keystoreSetting 's3.client.integration_test_permanent.access_key', s3PermanentAccessKey cluster.keystoreSetting 's3.client.integration_test_permanent.secret_key', s3PermanentSecretKey - cluster.setting 's3.client.integration_test_permanent.endpoint', "http://${minioAddress}" + Closure minioAddressAndPort = { + assert startMinio.minioPort > 0 + return 'http://' + minioAddress + ':' + startMinio.minioPort + } + cluster.setting 's3.client.integration_test_permanent.endpoint', "${ -> minioAddressAndPort.call()}" Task restIntegTestTask = project.tasks.getByName('integTestMinio') restIntegTestTask.clusterConfig.plugin(project.path) From d4add8bb8f17211c26564601974a9452ec985fd3 Mon Sep 17 00:00:00 2001 From: Yannick Welsch Date: Tue, 14 Aug 2018 13:55:50 +0200 Subject: [PATCH 2/2] Use BindException and info logging --- plugins/repository-s3/build.gradle | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/plugins/repository-s3/build.gradle b/plugins/repository-s3/build.gradle index a330b87fbf0e3..7f0ca209db797 100644 --- a/plugins/repository-s3/build.gradle +++ b/plugins/repository-s3/build.gradle @@ -196,8 +196,8 @@ if (useFixture && minioDistribution) { javax.net.ServerSocketFactory.getDefault().createServerSocket(port, 1, InetAddress.getByName(minioAddress)).close() minioPort = port break - } catch (Exception e) { - logger.error("Failed to determine free port " + port + " for Minio process", e) + } catch (BindException e) { + logger.info("Port " + port + " for Minio process is already taken", e) } } if (minioPort == 0) {