Class TestSystem

java.lang.Object
liquibase.extension.testing.testsystem.TestSystem
All Implemented Interfaces:
Plugin, org.junit.rules.TestRule
Direct Known Subclasses:
DatabaseTestSystem

public abstract class TestSystem extends Object implements org.junit.rules.TestRule, Plugin
TestSystem implementations define and manage a connection to an external system to test. Ideally the implementation can start and stop the test systems, but that is not necessary.

This implements TestRule so it can control start/stop of the TestSystem in JUnit, but that may be removed as tests get converted to spock.

Instances should not be created directly, but via TestSystemFactory
  • Constructor Details

  • Method Details

    • getEnabledTestSystems

      public static List<String> getEnabledTestSystems(String configuredTestSystems, String skippedTestSystems)
      Determine which test systems are considered enabled and should have tests run against them.
      Parameters:
      configuredTestSystems - the value of the "liquibase.sdk.testSystem.test" property
      skippedTestSystems - the value of the "liquibase.sdk.testSystem.skip" property
      Returns:
      the list of test system names that are enabled
    • getConfigurationKeys

      public SortedSet<String> getConfigurationKeys()
      Return configuration keys supported by this testSystem
    • apply

      public org.junit.runners.model.Statement apply(org.junit.runners.model.Statement base, org.junit.runner.Description description)
      Allows test system to be auto-controlled by JUnit tests.

      If the liquibase.sdk.testSystem.test configuration does NOT include the name of this test system, it skips the test.
      If the liquibase.sdk.testSystem.test configuration DOES include the name of the test system, it will connect to a matching system if available or will start it as possible. If it starts the system, it will not stop it until JVM shutdown.

      Example:

       \@Rule
       TestSystem testSystem = Scope.getCurrentScope().getSingleton(TestSystemFactory.class).getTestSystem("mysql")
       
      Specified by:
      apply in interface org.junit.rules.TestRule
    • getPriority

      public int getPriority(TestSystem.Definition definition)
      Default implementation returns PRIORITY_DEFAULT if the name matches the given definition, without taking any profiles etc. into account.
    • shouldTest

      public boolean shouldTest()
      Returns:
      true if this TestSystem should have automated tests run against it
    • getDefinition

      public TestSystem.Definition getDefinition()
      Return the definition of this test system.
    • getKeepRunning

      public boolean getKeepRunning()
      Return whether this testSystem should/will keep running after the JVM interacting with it exits. Default implementation returns the `keepRunning` test system configured value.
    • getConfiguredValue

      public <T> T getConfiguredValue(String propertyName, Class<T> type)
    • getConfiguredValue

      public <T> T getConfiguredValue(String propertyName, Class<T> type, boolean required)
    • getConfiguredValue

      public <T> T getConfiguredValue(String propertyName, ConfigurationValueConverter<T> converter, boolean required)
      Returns the configured value for the given propertyName. It will check (in priority order):
      1. properties set directly on this object
      2. liquibase.sdk.testSystem.[name].[profile(s)].propertyName in the order the profiles are set on this object
      3. liquibase.sdk.testSystem.[name].propertyName
      4. liquibase.sdk.testSystem.default.propertyName

      If a value is not found, it will return null or throw an UnexpectedLiquibaseException if 'required' is true.
    • start

      public abstract void start() throws Exception
      Starts the system if possible. Does not return until test system is reachable. If connecting to a running system, ensure the system can be reached. The lifetime of the started system should respect the getKeepRunning() configuration. If the keepRunning flag has an invalid value for this test system, throw an IllegalArgumentException.
      Throws:
      Exception - if the system cannot be started or reached.
    • stop

      public abstract void stop() throws Exception
      Stops the system if possible. Does not return until test system is down.
      Throws:
      Exception
    • toString

      public String toString()
      Overrides:
      toString in class Object