Class AbstractJdbcTestResourceProvider<T extends org.testcontainers.containers.JdbcDatabaseContainer<? extends T>>

java.lang.Object
io.micronaut.testresources.testcontainers.AbstractTestContainersProvider<T>
io.micronaut.testresources.jdbc.AbstractJdbcTestResourceProvider<T>
Type Parameters:
T - the type of the container
All Implemented Interfaces:
io.micronaut.core.order.Ordered, TestResourcesResolver, ToggableTestResourcesResolver
Direct Known Subclasses:
MariaDBTestResourceProvider, MSSQLTestResourceProvider, MySQLTestResourceProvider, OracleFreeTestResourceProvider, OracleXETestResourceProvider, PostgreSQLTestResourceProvider

public abstract class AbstractJdbcTestResourceProvider<T extends org.testcontainers.containers.JdbcDatabaseContainer<? extends T>> extends AbstractTestContainersProvider<T>
Superclass for JDBC test containers providers.
  • Field Details

  • Constructor Details

    • AbstractJdbcTestResourceProvider

      public AbstractJdbcTestResourceProvider()
  • Method Details

    • getDbTypes

      protected List<String> getDbTypes()
      Returns the list of db-types supported by this provider.
      Returns:
      the list of db types
    • getResolvableProperties

      public List<String> getResolvableProperties(Map<String, Collection<String>> propertyEntries, Map<String,Object> testResourcesConfig)
      Description copied from interface: TestResourcesResolver
      Returns the list of properties that this resolver is able to support. The property entries map is a map which keys are the property entries retrieved from calling TestResourcesResolver.getRequiredPropertyEntries() and values are those property entries resolved.
      Parameters:
      propertyEntries - the property entries
      testResourcesConfig - the test resources configuration
      Returns:
      the list of properties
    • getRequiredPropertyEntries

      public List<String> getRequiredPropertyEntries()
    • getRequiredProperties

      public List<String> getRequiredProperties(String expression)
      Description copied from interface: TestResourcesResolver
      Returns the list of properties which should be read before resolving an expression: this can be used if the resolver itself needs some configuration properties.
      Parameters:
      expression - the expression which needs to be resolved.
      Returns:
      the list of configuration properties this resolver requires
    • shouldAnswer

      protected boolean shouldAnswer(String propertyName, Map<String,Object> requestedProperties, Map<String,Object> testResourcesConfig)
      Description copied from class: AbstractTestContainersProvider
      Determines if this resolver can resolve the requested property. It is used in order to make sure that a "Postgres" resolver wouldn't provide a value if the requested container type is for MySQL, for example.
      Overrides:
      shouldAnswer in class AbstractTestContainersProvider<T extends org.testcontainers.containers.JdbcDatabaseContainer<? extends T>>
      Parameters:
      propertyName - the property to resolve
      requestedProperties - the resolved properties
      testResourcesConfig - the test resources configuration
      Returns:
      if this resolver should answer
    • resolveProperty

      protected Optional<String> resolveProperty(String expression, T container)
      Specified by:
      resolveProperty in class AbstractTestContainersProvider<T extends org.testcontainers.containers.JdbcDatabaseContainer<? extends T>>
    • resolveProperty

      protected Optional<String> resolveProperty(String expression, T container, Map<String,Object> properties, Map<String,Object> testResourcesConfig)
      Description copied from class: AbstractTestContainersProvider
      Resolves the requested property from the started container with access to the full requested-property map and test-resources configuration. Subclasses may override when the resolved value depends on request metadata in addition to the container itself.
      Overrides:
      resolveProperty in class AbstractTestContainersProvider<T extends org.testcontainers.containers.JdbcDatabaseContainer<? extends T>>
      Parameters:
      expression - the property being resolved
      container - the started container
      properties - the resolved properties for the request
      testResourcesConfig - the test resources configuration
      Returns:
      the resolved value, if any
    • getContainerOwnerKey

      protected String getContainerOwnerKey(String propertyName, Map<String,Object> properties, Map<String,Object> testResourcesConfig)
      Description copied from class: AbstractTestContainersProvider
      Returns the owner key used to scope cached containers for this resolver. Subclasses may override to share a physical container across multiple logical consumers, but should keep the returned key stable for equivalent requests.
      Overrides:
      getContainerOwnerKey in class AbstractTestContainersProvider<T extends org.testcontainers.containers.JdbcDatabaseContainer<? extends T>>
      Parameters:
      propertyName - the property being resolved
      properties - the resolved properties for the request
      testResourcesConfig - the test resources configuration
      Returns:
      the owner key used for container reuse
    • getContainerQuery

      protected Map<String,Object> getContainerQuery(String propertyName, Map<String,Object> properties, Map<String,Object> testResourcesConfig)
      Description copied from class: AbstractTestContainersProvider
      Returns the query object used to look up or create a cached container. Subclasses may override to normalize request-specific properties into a stable physical-resource identity while preserving any keys needed for safe reuse.
      Overrides:
      getContainerQuery in class AbstractTestContainersProvider<T extends org.testcontainers.containers.JdbcDatabaseContainer<? extends T>>
      Parameters:
      propertyName - the property being resolved
      properties - the resolved properties for the request
      testResourcesConfig - the test resources configuration
      Returns:
      the container query used for cache lookup
    • prepareContainer

      protected void prepareContainer(String propertyName, T container, Map<String,Object> properties, Map<String,Object> testResourcesConfig)
      Overrides:
      prepareContainer in class AbstractTestContainersProvider<T extends org.testcontainers.containers.JdbcDatabaseContainer<? extends T>>
    • resolveDbSpecificProperty

      protected String resolveDbSpecificProperty(String propertyName, org.testcontainers.containers.JdbcDatabaseContainer<?> container)
      Given the started container, resolves properties which are specific to a particular JDBC implementation.
      Parameters:
      propertyName - the property to resolve
      container - the started container
      Returns:
      the resolved property, or null if not resolvable
    • resolveDbSpecificProperty

      protected String resolveDbSpecificProperty(String propertyName, org.testcontainers.containers.JdbcDatabaseContainer<?> container, Map<String,Object> properties, Map<String,Object> testResourcesConfig)
      Resolves vendor-specific properties using the started container plus the original requested-property map. Subclasses may override when the resolved value depends on request metadata in addition to the container state.
      Parameters:
      propertyName - the property to resolve
      container - the started container
      properties - the resolved properties for the request
      testResourcesConfig - the test resources configuration
      Returns:
      the resolved property, or null if not resolvable
    • configureContainer

      protected void configureContainer(T container, Map<String,Object> properties, Map<String,Object> testResourcesConfig)
      Overrides:
      configureContainer in class AbstractTestContainersProvider<T extends org.testcontainers.containers.JdbcDatabaseContainer<? extends T>>
    • isDatasourceExpression

      protected static boolean isDatasourceExpression(String expression)
    • datasourceNameFrom

      protected static String datasourceNameFrom(String expression)
    • datasourcePropertyFrom

      protected static String datasourcePropertyFrom(String expression)
    • datasourceExpressionOf

      protected static String datasourceExpressionOf(String datasource, String property)
    • supportsMultipleDatabases

      protected boolean supportsMultipleDatabases()
      Indicates whether this provider can create additional logical databases inside the same running container. Subclasses overriding this method must also implement the database-creation hooks consistently for the same container type.
      Returns:
      true when additional logical databases are supported
    • createAdditionalDatabase

      protected void createAdditionalDatabase(T container, String databaseName)
      Creates an additional logical database inside an already started container. This is only invoked when supportsMultipleDatabases() returns true, so subclasses overriding one hook should override the other as a matching pair.
      Parameters:
      container - the running container
      databaseName - the database to create
    • resolveJdbcUrl

      protected String resolveJdbcUrl(String expression, T container, Map<String,Object> properties)
      Resolves the JDBC URL for the requested datasource. Subclasses may override to customize how the requested logical database name maps onto the running container.
      Parameters:
      expression - the property expression being resolved
      container - the running container
      properties - the resolved properties for the request
      Returns:
      the JDBC URL to expose to the caller
    • jdbcUrlFor

      protected String jdbcUrlFor(T container, String databaseName)
      Builds a JDBC URL that targets the supplied logical database on the running container. Subclasses overriding this method should return a URL compatible with the driver exposed by the container.
      Parameters:
      container - the running container
      databaseName - the logical database name requested by the caller
      Returns:
      the JDBC URL for that database
    • findRequestedDatabaseName

      protected Optional<String> findRequestedDatabaseName(String propertyName, Map<String,Object> requestedProperties)
      Extracts the logical database name requested by the caller from the datasource property set. Subclasses may override when the provider supports alternative configuration keys for selecting databases.
      Parameters:
      propertyName - the property being resolved
      requestedProperties - the resolved properties for the request
      Returns:
      the requested logical database name, if present