From abcc4270ee97a872bbfc9315a166f5d9a148041d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Edd=C3=BA=20Mel=C3=A9ndez?= Date: Wed, 4 Sep 2024 21:01:18 -0600 Subject: [PATCH] Generate test application when spring ai oracle is selected Add support for Testcontainers and Docker Compose. --- .../OracleProjectGenerationConfiguration.java | 29 ++++++++++++++----- .../TestcontainersModuleRegistry.java | 2 +- ...leProjectGenerationConfigurationTests.java | 8 +++++ ...rsProjectGenerationConfigurationTests.java | 1 + 4 files changed, 31 insertions(+), 9 deletions(-) diff --git a/start-site/src/main/java/io/spring/start/site/extension/dependency/oracle/OracleProjectGenerationConfiguration.java b/start-site/src/main/java/io/spring/start/site/extension/dependency/oracle/OracleProjectGenerationConfiguration.java index ac7f70ec28a..7310d312fb5 100644 --- a/start-site/src/main/java/io/spring/start/site/extension/dependency/oracle/OracleProjectGenerationConfiguration.java +++ b/start-site/src/main/java/io/spring/start/site/extension/dependency/oracle/OracleProjectGenerationConfiguration.java @@ -1,5 +1,5 @@ /* - * Copyright 2012-2023 the original author or authors. + * Copyright 2012-2024 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -16,6 +16,7 @@ package io.spring.start.site.extension.dependency.oracle; +import io.spring.initializr.generator.buildsystem.Build; import io.spring.initializr.generator.condition.ConditionalOnRequestedDependency; import io.spring.start.site.container.ComposeFileCustomizer; import io.spring.start.site.container.DockerServiceResolver; @@ -30,26 +31,38 @@ * * @author Moritz Halbritter * @author Stephane Nicoll + * @author Eddú Meléndez */ @Configuration(proxyBeanMethods = false) -@ConditionalOnRequestedDependency("oracle") class OracleProjectGenerationConfiguration { private static final String TESTCONTAINERS_CLASS_NAME = "org.testcontainers.oracle.OracleContainer"; @Bean @ConditionalOnRequestedDependency("testcontainers") - ServiceConnectionsCustomizer oracleServiceConnectionsCustomizer(DockerServiceResolver serviceResolver) { - return (serviceConnections) -> serviceResolver.doWith("oracleFree", - (service) -> serviceConnections.addServiceConnection( + ServiceConnectionsCustomizer oracleServiceConnectionsCustomizer(Build build, + DockerServiceResolver serviceResolver) { + return (serviceConnections) -> { + if (isOracleEnabled(build)) { + serviceResolver.doWith("oracleFree", (service) -> serviceConnections.addServiceConnection( ServiceConnection.ofContainer("oracleFree", service, TESTCONTAINERS_CLASS_NAME, false))); + } + }; } @Bean @ConditionalOnRequestedDependency("docker-compose") - ComposeFileCustomizer oracleComposeFileCustomizer(DockerServiceResolver serviceResolver) { - return (composeFile) -> serviceResolver.doWith("oracleFree", (service) -> composeFile.services() - .add("oracle", service.andThen((builder) -> builder.environment("ORACLE_PASSWORD", "secret")))); + ComposeFileCustomizer oracleComposeFileCustomizer(Build build, DockerServiceResolver serviceResolver) { + return (composeFile) -> { + if (isOracleEnabled(build)) { + serviceResolver.doWith("oracleFree", (service) -> composeFile.services() + .add("oracle", service.andThen((builder) -> builder.environment("ORACLE_PASSWORD", "secret")))); + } + }; + } + + private boolean isOracleEnabled(Build build) { + return build.dependencies().has("oracle") || build.dependencies().has("spring-ai-vectordb-oracle"); } } diff --git a/start-site/src/main/java/io/spring/start/site/extension/dependency/testcontainers/TestcontainersModuleRegistry.java b/start-site/src/main/java/io/spring/start/site/extension/dependency/testcontainers/TestcontainersModuleRegistry.java index 7917ecd839e..35cdfff1fbe 100644 --- a/start-site/src/main/java/io/spring/start/site/extension/dependency/testcontainers/TestcontainersModuleRegistry.java +++ b/start-site/src/main/java/io/spring/start/site/extension/dependency/testcontainers/TestcontainersModuleRegistry.java @@ -78,7 +78,7 @@ static Iterable create(Version platformVersion) { .customizeHelpDocument(addReferenceLink("MariaDB Module", "databases/mariadb/"))); builders.add(onDependencies("mysql").customizeBuild(addModule("mysql")) .customizeHelpDocument(addReferenceLink("MySQL Module", "databases/mysql/"))); - builders.add(onDependencies("oracle").customizeBuild(addModule("oracle-free")) + builders.add(onDependencies("oracle", "spring-ai-vectordb-oracle").customizeBuild(addModule("oracle-free")) .customizeHelpDocument(addReferenceLink("Oracle-Free Module", "databases/oraclefree/"))); builders.add(onDependencies("postgresql", "spring-ai-vectordb-pgvector").customizeBuild(addModule("postgresql")) .customizeHelpDocument(addReferenceLink("Postgres Module", "databases/postgres/"))); diff --git a/start-site/src/test/java/io/spring/start/site/extension/dependency/oracle/OracleProjectGenerationConfigurationTests.java b/start-site/src/test/java/io/spring/start/site/extension/dependency/oracle/OracleProjectGenerationConfigurationTests.java index a1793037343..4ce6787f76a 100644 --- a/start-site/src/test/java/io/spring/start/site/extension/dependency/oracle/OracleProjectGenerationConfigurationTests.java +++ b/start-site/src/test/java/io/spring/start/site/extension/dependency/oracle/OracleProjectGenerationConfigurationTests.java @@ -29,6 +29,7 @@ * Tests for {@link OracleProjectGenerationConfiguration}. * * @author Moritz Halbritter + * @author Eddú Meléndez */ class OracleProjectGenerationConfigurationTests extends AbstractExtensionTests { @@ -48,6 +49,13 @@ void createsOracleFreeServiceWithBoot32() { assertThat(composeFile(request)).hasSameContentAs(new ClassPathResource("compose/oracle-free.yaml")); } + @Test + void createsOracleFreeServiceWithBoot32AndSpringAi() { + ProjectRequest request = createProjectRequest("docker-compose", "spring-ai-vectordb-oracle"); + request.setBootVersion(SPRING_BOOT_VERSION); + assertThat(composeFile(request)).hasSameContentAs(new ClassPathResource("compose/oracle-free.yaml")); + } + @Test void declaresOracleFreeContainerBeanWithBoot32() { ProjectRequest request = createProjectRequest("testcontainers", "oracle"); diff --git a/start-site/src/test/java/io/spring/start/site/extension/dependency/testcontainers/TestcontainersProjectGenerationConfigurationTests.java b/start-site/src/test/java/io/spring/start/site/extension/dependency/testcontainers/TestcontainersProjectGenerationConfigurationTests.java index a18c5e3bbca..722cb3d15d3 100644 --- a/start-site/src/test/java/io/spring/start/site/extension/dependency/testcontainers/TestcontainersProjectGenerationConfigurationTests.java +++ b/start-site/src/test/java/io/spring/start/site/extension/dependency/testcontainers/TestcontainersProjectGenerationConfigurationTests.java @@ -87,6 +87,7 @@ static Stream supportedEntriesBuild320() { Arguments.arguments("oracle", "oracle-free"), Arguments.arguments("pulsar", "pulsar"), Arguments.arguments("pulsar-reactive", "pulsar"), Arguments.arguments("solace", "solace"), Arguments.arguments("spring-ai-vectordb-neo4j", "neo4j"), + Arguments.arguments("spring-ai-vectordb-oracle", "oracle-free"), Arguments.arguments("spring-ai-vectordb-pgvector", "postgresql"), Arguments.arguments("sqlserver", "mssqlserver")); }