diff --git a/testing/trino-product-tests-launcher/src/main/java/io/trino/tests/product/launcher/env/EnvironmentModule.java b/testing/trino-product-tests-launcher/src/main/java/io/trino/tests/product/launcher/env/EnvironmentModule.java index 7781fe316088..5e6bc0e1b4ab 100644 --- a/testing/trino-product-tests-launcher/src/main/java/io/trino/tests/product/launcher/env/EnvironmentModule.java +++ b/testing/trino-product-tests-launcher/src/main/java/io/trino/tests/product/launcher/env/EnvironmentModule.java @@ -28,6 +28,8 @@ import io.trino.tests.product.launcher.env.common.KafkaSsl; import io.trino.tests.product.launcher.env.common.Kerberos; import io.trino.tests.product.launcher.env.common.Minio; +import io.trino.tests.product.launcher.env.common.OpenLdap; +import io.trino.tests.product.launcher.env.common.OpenLdapReferral; import io.trino.tests.product.launcher.env.common.Standard; import io.trino.tests.product.launcher.env.common.StandardMultinode; import io.trino.tests.product.launcher.env.common.TaskRetriesMultinode; @@ -86,6 +88,8 @@ public void configure(Binder binder) binder.bind(TaskRetriesMultinode.class).in(SINGLETON); binder.bind(Kerberos.class).in(SINGLETON); binder.bind(Minio.class).in(SINGLETON); + binder.bind(OpenLdap.class).in(SINGLETON); + binder.bind(OpenLdapReferral.class).in(SINGLETON); MapBinder environments = newMapBinder(binder, String.class, EnvironmentProvider.class); findEnvironmentsByBasePackage(ENVIRONMENT_PACKAGE).forEach(clazz -> environments.addBinding(nameForEnvironmentClass(clazz)).to(clazz).in(SINGLETON)); diff --git a/testing/trino-product-tests-launcher/src/main/java/io/trino/tests/product/launcher/env/common/OpenLdap.java b/testing/trino-product-tests-launcher/src/main/java/io/trino/tests/product/launcher/env/common/OpenLdap.java new file mode 100644 index 000000000000..bdf37cc0bce2 --- /dev/null +++ b/testing/trino-product-tests-launcher/src/main/java/io/trino/tests/product/launcher/env/common/OpenLdap.java @@ -0,0 +1,67 @@ +/* + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package io.trino.tests.product.launcher.env.common; + +import com.google.inject.Inject; +import io.trino.tests.product.launcher.env.DockerContainer; +import io.trino.tests.product.launcher.env.Environment; +import io.trino.tests.product.launcher.env.EnvironmentConfig; +import io.trino.tests.product.launcher.testcontainers.PortBinder; +import org.testcontainers.containers.startupcheck.IsRunningStartupCheckStrategy; + +import java.time.Duration; + +import static io.trino.tests.product.launcher.docker.ContainerUtil.forSelectedPorts; +import static io.trino.tests.product.launcher.env.EnvironmentContainers.LDAP; +import static io.trino.tests.product.launcher.env.EnvironmentContainers.TESTS; +import static io.trino.tests.product.launcher.env.EnvironmentContainers.isTrinoContainer; +import static java.lang.String.format; +import static java.util.Objects.requireNonNull; + +public class OpenLdap + implements EnvironmentExtender +{ + private static final int LDAP_PORT = 636; + + private final PortBinder portBinder; + private final String imagesVersion; + + @Inject + public OpenLdap(PortBinder portBinder, EnvironmentConfig environmentConfig) + { + this.portBinder = requireNonNull(portBinder, "portBinder is null"); + this.imagesVersion = environmentConfig.getImagesVersion(); + } + + @Override + public void extendEnvironment(Environment.Builder builder) + { + String baseImage = format("ghcr.io/trinodb/testing/almalinux9-oj17-openldap:%s", imagesVersion); + + builder.configureContainers(dockerContainer -> { + if (isTrinoContainer(dockerContainer.getLogicalName())) { + dockerContainer.setDockerImageName(baseImage); + } + }); + + builder.configureContainer(TESTS, dockerContainer -> dockerContainer.setDockerImageName(baseImage)); + + DockerContainer container = new DockerContainer(baseImage, LDAP) + .withStartupCheckStrategy(new IsRunningStartupCheckStrategy()) + .waitingFor(forSelectedPorts(LDAP_PORT)) + .withStartupTimeout(Duration.ofMinutes(5)); + portBinder.exposePort(container, LDAP_PORT); + builder.addContainer(container); + } +} diff --git a/testing/trino-product-tests-launcher/src/main/java/io/trino/tests/product/launcher/env/common/OpenLdapReferral.java b/testing/trino-product-tests-launcher/src/main/java/io/trino/tests/product/launcher/env/common/OpenLdapReferral.java new file mode 100644 index 000000000000..d80e9e178052 --- /dev/null +++ b/testing/trino-product-tests-launcher/src/main/java/io/trino/tests/product/launcher/env/common/OpenLdapReferral.java @@ -0,0 +1,62 @@ +/* + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package io.trino.tests.product.launcher.env.common; + +import com.google.common.collect.ImmutableList; +import com.google.inject.Inject; +import io.trino.tests.product.launcher.env.Environment; +import io.trino.tests.product.launcher.env.EnvironmentConfig; + +import java.util.List; + +import static io.trino.tests.product.launcher.env.EnvironmentContainers.LDAP; +import static io.trino.tests.product.launcher.env.EnvironmentContainers.TESTS; +import static io.trino.tests.product.launcher.env.EnvironmentContainers.isTrinoContainer; +import static java.lang.String.format; +import static java.util.Objects.requireNonNull; + +public class OpenLdapReferral + implements EnvironmentExtender +{ + private final OpenLdap openLdap; + private final String imagesVersion; + + @Inject + public OpenLdapReferral(OpenLdap openLdap, EnvironmentConfig environmentConfig) + { + this.openLdap = requireNonNull(openLdap, "openLdap is null"); + this.imagesVersion = environmentConfig.getImagesVersion(); + } + + @Override + public void extendEnvironment(Environment.Builder builder) + { + String baseImage = format("ghcr.io/trinodb/testing/almalinux9-oj17-openldap-referrals:%s", imagesVersion); + + builder.configureContainers(dockerContainer -> { + if (isTrinoContainer(dockerContainer.getLogicalName())) { + dockerContainer.setDockerImageName(baseImage); + } + }); + + builder.configureContainer(TESTS, dockerContainer -> dockerContainer.setDockerImageName(baseImage)); + builder.configureContainer(LDAP, dockerContainer -> dockerContainer.setDockerImageName(baseImage)); + } + + @Override + public List getDependencies() + { + return ImmutableList.of(openLdap); + } +} diff --git a/testing/trino-product-tests-launcher/src/main/java/io/trino/tests/product/launcher/env/environment/AbstractEnvSinglenodeLdap.java b/testing/trino-product-tests-launcher/src/main/java/io/trino/tests/product/launcher/env/environment/AbstractEnvSinglenodeLdap.java deleted file mode 100644 index db749667762f..000000000000 --- a/testing/trino-product-tests-launcher/src/main/java/io/trino/tests/product/launcher/env/environment/AbstractEnvSinglenodeLdap.java +++ /dev/null @@ -1,93 +0,0 @@ -/* - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package io.trino.tests.product.launcher.env.environment; - -import io.trino.tests.product.launcher.docker.DockerFiles; -import io.trino.tests.product.launcher.env.DockerContainer; -import io.trino.tests.product.launcher.env.Environment; -import io.trino.tests.product.launcher.env.EnvironmentConfig; -import io.trino.tests.product.launcher.env.EnvironmentProvider; -import io.trino.tests.product.launcher.env.common.EnvironmentExtender; -import io.trino.tests.product.launcher.testcontainers.PortBinder; -import org.testcontainers.containers.startupcheck.IsRunningStartupCheckStrategy; - -import java.time.Duration; -import java.util.List; - -import static io.trino.tests.product.launcher.docker.ContainerUtil.forSelectedPorts; -import static io.trino.tests.product.launcher.env.EnvironmentContainers.COORDINATOR; -import static io.trino.tests.product.launcher.env.EnvironmentContainers.LDAP; -import static io.trino.tests.product.launcher.env.EnvironmentContainers.TESTS; -import static io.trino.tests.product.launcher.env.common.Standard.CONTAINER_TEMPTO_PROFILE_CONFIG; -import static io.trino.tests.product.launcher.env.common.Standard.CONTAINER_TRINO_CONFIG_PROPERTIES; -import static java.lang.String.format; -import static java.util.Objects.requireNonNull; -import static org.testcontainers.utility.MountableFile.forHostPath; - -public abstract class AbstractEnvSinglenodeLdap - extends EnvironmentProvider -{ - protected final DockerFiles dockerFiles; - private final PortBinder portBinder; - private final String imagesVersion; - - private static final int LDAP_PORT = 636; - - protected AbstractEnvSinglenodeLdap(List bases, DockerFiles dockerFiles, PortBinder portBinder, EnvironmentConfig environmentConfig) - { - super(bases); - this.dockerFiles = requireNonNull(dockerFiles, "dockerFiles is null"); - this.portBinder = requireNonNull(portBinder, "portBinder is null"); - this.imagesVersion = environmentConfig.getImagesVersion(); - } - - @Override - public void extendEnvironment(Environment.Builder builder) - { - String baseImage = format("ghcr.io/trinodb/testing/%s:%s", getBaseImage(), imagesVersion); - - builder.addPasswordAuthenticator("ldap", forHostPath(dockerFiles.getDockerFilesHostPath(getPasswordAuthenticatorConfigPath()))); - builder.configureContainer(COORDINATOR, dockerContainer -> { - dockerContainer.setDockerImageName(baseImage); - - dockerContainer.withCopyFileToContainer( - forHostPath(dockerFiles.getDockerFilesHostPath("conf/environment/singlenode-ldap/config.properties")), - CONTAINER_TRINO_CONFIG_PROPERTIES); - - portBinder.exposePort(dockerContainer, 8443); - }); - - builder.configureContainer(TESTS, dockerContainer -> { - dockerContainer.setDockerImageName(baseImage); - dockerContainer.withCopyFileToContainer( - forHostPath(dockerFiles.getDockerFilesHostPath("conf/tempto/tempto-configuration-for-docker-ldap.yaml")), - CONTAINER_TEMPTO_PROFILE_CONFIG); - }); - - DockerContainer container = new DockerContainer(baseImage, LDAP) - .withStartupCheckStrategy(new IsRunningStartupCheckStrategy()) - .waitingFor(forSelectedPorts(LDAP_PORT)) - .withStartupTimeout(Duration.ofMinutes(5)); - portBinder.exposePort(container, LDAP_PORT); - - builder.addContainer(container); - } - - protected String getBaseImage() - { - return "almalinux9-oj17-openldap"; - } - - protected abstract String getPasswordAuthenticatorConfigPath(); -} diff --git a/testing/trino-product-tests-launcher/src/main/java/io/trino/tests/product/launcher/env/environment/EnvSinglenodeLdap.java b/testing/trino-product-tests-launcher/src/main/java/io/trino/tests/product/launcher/env/environment/EnvSinglenodeLdap.java index b8ae6d5ab357..081797ede7dc 100644 --- a/testing/trino-product-tests-launcher/src/main/java/io/trino/tests/product/launcher/env/environment/EnvSinglenodeLdap.java +++ b/testing/trino-product-tests-launcher/src/main/java/io/trino/tests/product/launcher/env/environment/EnvSinglenodeLdap.java @@ -13,28 +13,54 @@ */ package io.trino.tests.product.launcher.env.environment; -import com.google.common.collect.ImmutableList; import com.google.inject.Inject; import io.trino.tests.product.launcher.docker.DockerFiles; -import io.trino.tests.product.launcher.env.EnvironmentConfig; +import io.trino.tests.product.launcher.env.Environment; +import io.trino.tests.product.launcher.env.EnvironmentProvider; import io.trino.tests.product.launcher.env.common.Hadoop; +import io.trino.tests.product.launcher.env.common.OpenLdap; import io.trino.tests.product.launcher.env.common.Standard; import io.trino.tests.product.launcher.env.common.TestsEnvironment; import io.trino.tests.product.launcher.testcontainers.PortBinder; +import static io.trino.tests.product.launcher.env.EnvironmentContainers.COORDINATOR; +import static io.trino.tests.product.launcher.env.EnvironmentContainers.TESTS; +import static io.trino.tests.product.launcher.env.common.Standard.CONTAINER_TEMPTO_PROFILE_CONFIG; +import static io.trino.tests.product.launcher.env.common.Standard.CONTAINER_TRINO_CONFIG_PROPERTIES; +import static java.util.Objects.requireNonNull; +import static org.testcontainers.utility.MountableFile.forHostPath; + @TestsEnvironment public class EnvSinglenodeLdap - extends AbstractEnvSinglenodeLdap + extends EnvironmentProvider { + private final DockerFiles dockerFiles; + private final PortBinder portBinder; + @Inject - public EnvSinglenodeLdap(Standard standard, Hadoop hadoop, DockerFiles dockerFiles, PortBinder portBinder, EnvironmentConfig config) + public EnvSinglenodeLdap(Standard standard, Hadoop hadoop, OpenLdap openLdap, DockerFiles dockerFiles, PortBinder portBinder) { - super(ImmutableList.of(standard, hadoop), dockerFiles, portBinder, config); + super(standard, hadoop, openLdap); + this.dockerFiles = requireNonNull(dockerFiles, "dockerFiles is null"); + this.portBinder = requireNonNull(portBinder, "portBinder is null"); } @Override - protected String getPasswordAuthenticatorConfigPath() + public void extendEnvironment(Environment.Builder builder) { - return "conf/environment/singlenode-ldap/password-authenticator.properties"; + builder.addPasswordAuthenticator("ldap", forHostPath(dockerFiles.getDockerFilesHostPath("conf/environment/singlenode-ldap/password-authenticator.properties"))); + builder.configureContainer(COORDINATOR, dockerContainer -> { + dockerContainer.withCopyFileToContainer( + forHostPath(dockerFiles.getDockerFilesHostPath("conf/environment/singlenode-ldap/config.properties")), + CONTAINER_TRINO_CONFIG_PROPERTIES); + + portBinder.exposePort(dockerContainer, 8443); + }); + + builder.configureContainer(TESTS, dockerContainer -> { + dockerContainer.withCopyFileToContainer( + forHostPath(dockerFiles.getDockerFilesHostPath("conf/tempto/tempto-configuration-for-docker-ldap.yaml")), + CONTAINER_TEMPTO_PROFILE_CONFIG); + }); } } diff --git a/testing/trino-product-tests-launcher/src/main/java/io/trino/tests/product/launcher/env/environment/EnvSinglenodeLdapAndFile.java b/testing/trino-product-tests-launcher/src/main/java/io/trino/tests/product/launcher/env/environment/EnvSinglenodeLdapAndFile.java index 88e60c7ba291..830d1f78123e 100644 --- a/testing/trino-product-tests-launcher/src/main/java/io/trino/tests/product/launcher/env/environment/EnvSinglenodeLdapAndFile.java +++ b/testing/trino-product-tests-launcher/src/main/java/io/trino/tests/product/launcher/env/environment/EnvSinglenodeLdapAndFile.java @@ -13,38 +13,46 @@ */ package io.trino.tests.product.launcher.env.environment; -import com.google.common.collect.ImmutableList; import com.google.inject.Inject; import io.trino.tests.product.launcher.docker.DockerFiles; import io.trino.tests.product.launcher.docker.DockerFiles.ResourceProvider; import io.trino.tests.product.launcher.env.Environment; -import io.trino.tests.product.launcher.env.EnvironmentConfig; +import io.trino.tests.product.launcher.env.EnvironmentProvider; import io.trino.tests.product.launcher.env.common.Hadoop; +import io.trino.tests.product.launcher.env.common.OpenLdap; import io.trino.tests.product.launcher.env.common.Standard; import io.trino.tests.product.launcher.env.common.TestsEnvironment; import io.trino.tests.product.launcher.testcontainers.PortBinder; import static io.trino.tests.product.launcher.env.EnvironmentContainers.COORDINATOR; +import static io.trino.tests.product.launcher.env.EnvironmentContainers.TESTS; import static io.trino.tests.product.launcher.env.EnvironmentContainers.configureTempto; +import static io.trino.tests.product.launcher.env.common.Standard.CONTAINER_TEMPTO_PROFILE_CONFIG; import static io.trino.tests.product.launcher.env.common.Standard.CONTAINER_TRINO_CONFIG_PROPERTIES; import static io.trino.tests.product.launcher.env.common.Standard.CONTAINER_TRINO_ETC; +import static java.util.Objects.requireNonNull; import static org.testcontainers.utility.MountableFile.forHostPath; @TestsEnvironment public class EnvSinglenodeLdapAndFile - extends AbstractEnvSinglenodeLdap + extends EnvironmentProvider { + private final PortBinder portBinder; + private final DockerFiles dockerFiles; + @Inject - public EnvSinglenodeLdapAndFile(Standard standard, Hadoop hadoop, DockerFiles dockerFiles, PortBinder portBinder, EnvironmentConfig config) + public EnvSinglenodeLdapAndFile(Standard standard, Hadoop hadoop, OpenLdap openLdap, DockerFiles dockerFiles, PortBinder portBinder) { - super(ImmutableList.of(standard, hadoop), dockerFiles, portBinder, config); + super(standard, hadoop, openLdap); + this.dockerFiles = requireNonNull(dockerFiles, "dockerFiles is null"); + this.portBinder = requireNonNull(portBinder, "portBinder is null"); } @Override public void extendEnvironment(Environment.Builder builder) { - super.extendEnvironment(builder); ResourceProvider configDir = dockerFiles.getDockerFilesHostDirectory("conf/environment/singlenode-ldap-and-file"); + builder.addPasswordAuthenticator("ldap", forHostPath(configDir.getPath("password-authenticator.properties"))); builder.addPasswordAuthenticator( "file", forHostPath(configDir.getPath("file-authenticator.properties")), @@ -57,14 +65,15 @@ public void extendEnvironment(Environment.Builder builder) .withCopyFileToContainer( forHostPath(configDir.getPath("password.db")), CONTAINER_TRINO_ETC + "/password.db"); + portBinder.exposePort(dockerContainer, 8443); }); - configureTempto(builder, configDir); - } + builder.configureContainer(TESTS, dockerContainer -> { + dockerContainer.withCopyFileToContainer( + forHostPath(dockerFiles.getDockerFilesHostPath("conf/tempto/tempto-configuration-for-docker-ldap.yaml")), + CONTAINER_TEMPTO_PROFILE_CONFIG); + }); - @Override - protected String getPasswordAuthenticatorConfigPath() - { - return "conf/environment/singlenode-ldap/password-authenticator.properties"; + configureTempto(builder, configDir); } } diff --git a/testing/trino-product-tests-launcher/src/main/java/io/trino/tests/product/launcher/env/environment/EnvSinglenodeLdapBindDn.java b/testing/trino-product-tests-launcher/src/main/java/io/trino/tests/product/launcher/env/environment/EnvSinglenodeLdapBindDn.java index 242f88f4f75d..6ee41d93fe3f 100644 --- a/testing/trino-product-tests-launcher/src/main/java/io/trino/tests/product/launcher/env/environment/EnvSinglenodeLdapBindDn.java +++ b/testing/trino-product-tests-launcher/src/main/java/io/trino/tests/product/launcher/env/environment/EnvSinglenodeLdapBindDn.java @@ -13,28 +13,54 @@ */ package io.trino.tests.product.launcher.env.environment; -import com.google.common.collect.ImmutableList; import com.google.inject.Inject; import io.trino.tests.product.launcher.docker.DockerFiles; -import io.trino.tests.product.launcher.env.EnvironmentConfig; +import io.trino.tests.product.launcher.env.Environment; +import io.trino.tests.product.launcher.env.EnvironmentProvider; import io.trino.tests.product.launcher.env.common.Hadoop; +import io.trino.tests.product.launcher.env.common.OpenLdap; import io.trino.tests.product.launcher.env.common.Standard; import io.trino.tests.product.launcher.env.common.TestsEnvironment; import io.trino.tests.product.launcher.testcontainers.PortBinder; +import static io.trino.tests.product.launcher.env.EnvironmentContainers.COORDINATOR; +import static io.trino.tests.product.launcher.env.EnvironmentContainers.TESTS; +import static io.trino.tests.product.launcher.env.common.Standard.CONTAINER_TEMPTO_PROFILE_CONFIG; +import static io.trino.tests.product.launcher.env.common.Standard.CONTAINER_TRINO_CONFIG_PROPERTIES; +import static java.util.Objects.requireNonNull; +import static org.testcontainers.utility.MountableFile.forHostPath; + @TestsEnvironment public class EnvSinglenodeLdapBindDn - extends AbstractEnvSinglenodeLdap + extends EnvironmentProvider { + private final DockerFiles dockerFiles; + private final PortBinder portBinder; + @Inject - public EnvSinglenodeLdapBindDn(Standard standard, Hadoop hadoop, DockerFiles dockerFiles, PortBinder portBinder, EnvironmentConfig environmentConfig) + public EnvSinglenodeLdapBindDn(Standard standard, Hadoop hadoop, OpenLdap openLdap, DockerFiles dockerFiles, PortBinder portBinder) { - super(ImmutableList.of(standard, hadoop), dockerFiles, portBinder, environmentConfig); + super(standard, hadoop, openLdap); + this.dockerFiles = requireNonNull(dockerFiles, "dockerFiles is null"); + this.portBinder = requireNonNull(portBinder, "portBinder is null"); } @Override - protected String getPasswordAuthenticatorConfigPath() + public void extendEnvironment(Environment.Builder builder) { - return "conf/environment/singlenode-ldap-bind-dn/password-authenticator.properties"; + builder.addPasswordAuthenticator("ldap", forHostPath(dockerFiles.getDockerFilesHostPath("conf/environment/singlenode-ldap-bind-dn/password-authenticator.properties"))); + builder.configureContainer(COORDINATOR, dockerContainer -> { + dockerContainer.withCopyFileToContainer( + forHostPath(dockerFiles.getDockerFilesHostPath("conf/environment/singlenode-ldap/config.properties")), + CONTAINER_TRINO_CONFIG_PROPERTIES); + + portBinder.exposePort(dockerContainer, 8443); + }); + + builder.configureContainer(TESTS, dockerContainer -> { + dockerContainer.withCopyFileToContainer( + forHostPath(dockerFiles.getDockerFilesHostPath("conf/tempto/tempto-configuration-for-docker-ldap.yaml")), + CONTAINER_TEMPTO_PROFILE_CONFIG); + }); } } diff --git a/testing/trino-product-tests-launcher/src/main/java/io/trino/tests/product/launcher/env/environment/EnvSinglenodeLdapInsecure.java b/testing/trino-product-tests-launcher/src/main/java/io/trino/tests/product/launcher/env/environment/EnvSinglenodeLdapInsecure.java index 945cb497c551..1ee22b10aa34 100644 --- a/testing/trino-product-tests-launcher/src/main/java/io/trino/tests/product/launcher/env/environment/EnvSinglenodeLdapInsecure.java +++ b/testing/trino-product-tests-launcher/src/main/java/io/trino/tests/product/launcher/env/environment/EnvSinglenodeLdapInsecure.java @@ -13,41 +13,54 @@ */ package io.trino.tests.product.launcher.env.environment; -import com.google.common.collect.ImmutableList; import com.google.inject.Inject; import io.trino.tests.product.launcher.docker.DockerFiles; import io.trino.tests.product.launcher.env.Environment; -import io.trino.tests.product.launcher.env.EnvironmentConfig; +import io.trino.tests.product.launcher.env.EnvironmentProvider; import io.trino.tests.product.launcher.env.common.Hadoop; +import io.trino.tests.product.launcher.env.common.OpenLdap; import io.trino.tests.product.launcher.env.common.Standard; import io.trino.tests.product.launcher.env.common.TestsEnvironment; import io.trino.tests.product.launcher.testcontainers.PortBinder; +import static io.trino.tests.product.launcher.env.EnvironmentContainers.COORDINATOR; +import static io.trino.tests.product.launcher.env.EnvironmentContainers.TESTS; +import static io.trino.tests.product.launcher.env.common.Standard.CONTAINER_TEMPTO_PROFILE_CONFIG; +import static io.trino.tests.product.launcher.env.common.Standard.CONTAINER_TRINO_CONFIG_PROPERTIES; import static java.util.Objects.requireNonNull; +import static org.testcontainers.utility.MountableFile.forHostPath; @TestsEnvironment public class EnvSinglenodeLdapInsecure - extends AbstractEnvSinglenodeLdap + extends EnvironmentProvider { + protected final DockerFiles dockerFiles; private final PortBinder portBinder; @Inject - public EnvSinglenodeLdapInsecure(Standard standard, Hadoop hadoop, DockerFiles dockerFiles, PortBinder portBinder, EnvironmentConfig config) + public EnvSinglenodeLdapInsecure(Standard standard, Hadoop hadoop, OpenLdap openLdap, DockerFiles dockerFiles, PortBinder portBinder) { - super(ImmutableList.of(standard, hadoop), dockerFiles, portBinder, config); + super(standard, hadoop, openLdap); + this.dockerFiles = requireNonNull(dockerFiles, "dockerFiles is null"); this.portBinder = requireNonNull(portBinder, "portBinder is null"); } @Override public void extendEnvironment(Environment.Builder builder) { - super.extendEnvironment(builder); - builder.configureContainer("ldapserver", container -> portBinder.exposePort(container, 389)); - } + builder.addPasswordAuthenticator("ldap", forHostPath(dockerFiles.getDockerFilesHostPath("conf/environment/singlenode-ldap-without-ssl/password-authenticator.properties"))); + builder.configureContainer(COORDINATOR, dockerContainer -> { + dockerContainer.withCopyFileToContainer( + forHostPath(dockerFiles.getDockerFilesHostPath("conf/environment/singlenode-ldap/config.properties")), + CONTAINER_TRINO_CONFIG_PROPERTIES); - @Override - protected String getPasswordAuthenticatorConfigPath() - { - return "conf/environment/singlenode-ldap-without-ssl/password-authenticator.properties"; + portBinder.exposePort(dockerContainer, 8443); + }); + + builder.configureContainer(TESTS, dockerContainer -> { + dockerContainer.withCopyFileToContainer( + forHostPath(dockerFiles.getDockerFilesHostPath("conf/tempto/tempto-configuration-for-docker-ldap.yaml")), + CONTAINER_TEMPTO_PROFILE_CONFIG); + }); } } diff --git a/testing/trino-product-tests-launcher/src/main/java/io/trino/tests/product/launcher/env/environment/EnvSinglenodeLdapReferrals.java b/testing/trino-product-tests-launcher/src/main/java/io/trino/tests/product/launcher/env/environment/EnvSinglenodeLdapReferrals.java index 501ac56090ae..9e370e4a6678 100644 --- a/testing/trino-product-tests-launcher/src/main/java/io/trino/tests/product/launcher/env/environment/EnvSinglenodeLdapReferrals.java +++ b/testing/trino-product-tests-launcher/src/main/java/io/trino/tests/product/launcher/env/environment/EnvSinglenodeLdapReferrals.java @@ -13,34 +13,54 @@ */ package io.trino.tests.product.launcher.env.environment; -import com.google.common.collect.ImmutableList; import com.google.inject.Inject; import io.trino.tests.product.launcher.docker.DockerFiles; -import io.trino.tests.product.launcher.env.EnvironmentConfig; +import io.trino.tests.product.launcher.env.Environment; +import io.trino.tests.product.launcher.env.EnvironmentProvider; import io.trino.tests.product.launcher.env.common.Hadoop; +import io.trino.tests.product.launcher.env.common.OpenLdapReferral; import io.trino.tests.product.launcher.env.common.Standard; import io.trino.tests.product.launcher.env.common.TestsEnvironment; import io.trino.tests.product.launcher.testcontainers.PortBinder; +import static io.trino.tests.product.launcher.env.EnvironmentContainers.COORDINATOR; +import static io.trino.tests.product.launcher.env.EnvironmentContainers.TESTS; +import static io.trino.tests.product.launcher.env.common.Standard.CONTAINER_TEMPTO_PROFILE_CONFIG; +import static io.trino.tests.product.launcher.env.common.Standard.CONTAINER_TRINO_CONFIG_PROPERTIES; +import static java.util.Objects.requireNonNull; +import static org.testcontainers.utility.MountableFile.forHostPath; + @TestsEnvironment public class EnvSinglenodeLdapReferrals - extends AbstractEnvSinglenodeLdap + extends EnvironmentProvider { + private final DockerFiles dockerFiles; + private final PortBinder portBinder; + @Inject - public EnvSinglenodeLdapReferrals(Standard standard, Hadoop hadoop, DockerFiles dockerFiles, PortBinder portBinder, EnvironmentConfig config) + public EnvSinglenodeLdapReferrals(Standard standard, Hadoop hadoop, OpenLdapReferral openLdapReferral, DockerFiles dockerFiles, PortBinder portBinder) { - super(ImmutableList.of(standard, hadoop), dockerFiles, portBinder, config); + super(standard, hadoop, openLdapReferral); + this.dockerFiles = requireNonNull(dockerFiles, "dockerFiles is null"); + this.portBinder = requireNonNull(portBinder, "portBinder is null"); } @Override - protected String getPasswordAuthenticatorConfigPath() + public void extendEnvironment(Environment.Builder builder) { - return "conf/environment/singlenode-ldap-referrals/password-authenticator.properties"; - } + builder.addPasswordAuthenticator("ldap", forHostPath(dockerFiles.getDockerFilesHostPath("conf/environment/singlenode-ldap-referrals/password-authenticator.properties"))); + builder.configureContainer(COORDINATOR, dockerContainer -> { + dockerContainer.withCopyFileToContainer( + forHostPath(dockerFiles.getDockerFilesHostPath("conf/environment/singlenode-ldap/config.properties")), + CONTAINER_TRINO_CONFIG_PROPERTIES); - @Override - protected String getBaseImage() - { - return "almalinux9-oj17-openldap-referrals"; + portBinder.exposePort(dockerContainer, 8443); + }); + + builder.configureContainer(TESTS, dockerContainer -> { + dockerContainer.withCopyFileToContainer( + forHostPath(dockerFiles.getDockerFilesHostPath("conf/tempto/tempto-configuration-for-docker-ldap.yaml")), + CONTAINER_TEMPTO_PROFILE_CONFIG); + }); } } diff --git a/testing/trino-product-tests-launcher/src/main/resources/docker/presto-product-tests/conf/environment/singlenode-ldap-and-file/password-authenticator.properties b/testing/trino-product-tests-launcher/src/main/resources/docker/presto-product-tests/conf/environment/singlenode-ldap-and-file/password-authenticator.properties new file mode 100644 index 000000000000..18cd279b78f1 --- /dev/null +++ b/testing/trino-product-tests-launcher/src/main/resources/docker/presto-product-tests/conf/environment/singlenode-ldap-and-file/password-authenticator.properties @@ -0,0 +1,7 @@ +password-authenticator.name=ldap +ldap.url=ldaps://ldapserver:636 +ldap.ssl.keystore.path=/etc/openldap/certs/trino-coordinator-for-ldap.pem +ldap.ssl.truststore.path=/etc/openldap/certs/openldap-certificate.pem +ldap.user-bind-pattern=uid=${USER},ou=America,dc=trino,dc=testldap,dc=com:uid=${USER},ou=Asia,dc=trino,dc=testldap,dc=com +ldap.user-base-dn=dc=trino,dc=testldap,dc=com +ldap.group-auth-pattern=(&(objectClass=inetOrgPerson)(uid=${USER})(memberof=cn=DefaultGroup,ou=America,dc=trino,dc=testldap,dc=com))