Class TestData

java.lang.Object
com.launchdarkly.sdk.server.integrations.TestData
All Implemented Interfaces:
DataSourceFactory

public final class TestData
extends java.lang.Object
implements DataSourceFactory
A mechanism for providing dynamically updatable feature flag state in a simplified form to an SDK client in test scenarios.

Unlike FileData, this mechanism does not use any external resources. It provides only the data that the application has put into it using the update(FlagBuilder) method.


     TestData td = TestData.dataSource();
     td.update(testData.flag("flag-key-1").booleanFlag().variationForAllUsers(true));
     
     LDConfig config = new LDConfig.Builder()
         .dataSource(td)
         .build();
     LDClient client = new LDClient(sdkKey, config);
     
     // flags can be updated at any time:
     td.update(testData.flag("flag-key-2")
         .variationForUser("some-user-key", true)
         .fallthroughVariation(false));
 
The above example uses a simple boolean flag, but more complex configurations are possible using the methods of the TestData.FlagBuilder that is returned by flag(String). TestData.FlagBuilder supports many of the ways a flag can be configured on the LaunchDarkly dashboard, but does not currently support 1. rule operators other than "in" and "not in", or 2. percentage rollouts.

If the same TestData instance is used to configure multiple LDClient instances, any changes made to the data will propagate to all of the LDClients.

Since:
5.1.0
See Also:
FileData
  • Method Details

    • dataSource

      public static TestData dataSource()
      Creates a new instance of the test data source.

      See TestData for details.

      Returns:
      a new configurable test data source
    • flag

      public TestData.FlagBuilder flag​(java.lang.String key)
      Creates or copies a TestData.FlagBuilder for building a test flag configuration.

      If this flag key has already been defined in this TestData instance, then the builder starts with the same configuration that was last provided for this flag.

      Otherwise, it starts with a new default configuration in which the flag has true and false variations, is true for all users when targeting is turned on and false otherwise, and currently has targeting turned on. You can change any of those properties, and provide more complex behavior, using the TestData.FlagBuilder methods.

      Once you have set the desired configuration, pass the builder to update(FlagBuilder).

      Parameters:
      key - the flag key
      Returns:
      a flag configuration builder
      See Also:
      update(FlagBuilder)
    • update

      public TestData update​(TestData.FlagBuilder flagBuilder)
      Updates the test data with the specified flag configuration.

      This has the same effect as if a flag were added or modified on the LaunchDarkly dashboard. It immediately propagates the flag change to any LDClient instance(s) that you have already configured to use this TestData. If no LDClient has been started yet, it simply adds this flag to the test data which will be provided to any LDClient that you subsequently configure.

      Any subsequent changes to this TestData.FlagBuilder instance do not affect the test data, unless you call update(FlagBuilder) again.

      Parameters:
      flagBuilder - a flag configuration builder
      Returns:
      the same TestData instance
      See Also:
      flag(String)
    • updateStatus

      public TestData updateStatus​(DataSourceStatusProvider.State newState, DataSourceStatusProvider.ErrorInfo newError)
      Simulates a change in the data source status.

      Use this if you want to test the behavior of application code that uses LDClient.getDataSourceStatusProvider() to track whether the data source is having problems (for example, a network failure interruptsingthe streaming connection). It does not actually stop the TestData data source from working, so even if you have simulated an outage, calling update(FlagBuilder) will still send updates.

      Parameters:
      newState - one of the constants defined by DataSourceStatusProvider.State
      newError - an DataSourceStatusProvider.ErrorInfo instance, or null
      Returns:
      the same TestData instance
    • createDataSource

      public DataSource createDataSource​(ClientContext context, DataSourceUpdates dataSourceUpdates)
      Called internally by the SDK to associate this test data source with an LDClient instance. You do not need to call this method.
      Specified by:
      createDataSource in interface DataSourceFactory
      Parameters:
      context - allows access to the client configuration
      dataSourceUpdates - the component pushes data into the SDK via this interface
      Returns:
      an DataSource