@Test public void firstConfigInvalidShouldResolveToDefault() { CassandraKeyValueServiceRuntimeConfig returnedConfig = new CassandraAtlasDbFactory() .preprocessKvsRuntimeConfig(() -> Optional.of(INVALID_CKVS_RUNTIME_CONFIG)) .get(); assertEquals("First invalid config should resolve to default", DEFAULT_CKVS_RUNTIME_CONFIG, returnedConfig); } }
@Test public void preservesValidRuntimeConfigIfFollowingLaterConfigIsNotValid() { AtomicBoolean first = new AtomicBoolean(true); Supplier<Optional<KeyValueServiceRuntimeConfig>> runtimeConfigSupplier = () -> { if (first.compareAndSet(true, false)) { return Optional.of(DEFAULT_CKVS_RUNTIME_CONFIG); } return Optional.of(INVALID_CKVS_RUNTIME_CONFIG); }; Supplier<CassandraKeyValueServiceRuntimeConfig> processedRuntimeConfig = new CassandraAtlasDbFactory() .preprocessKvsRuntimeConfig(runtimeConfigSupplier); CassandraKeyValueServiceRuntimeConfig firstReturnedConfig = processedRuntimeConfig.get(); CassandraKeyValueServiceRuntimeConfig secondReturnedConfig = processedRuntimeConfig.get(); assertEquals("First returned config should be valid", DEFAULT_CKVS_RUNTIME_CONFIG, firstReturnedConfig); assertEquals("Second invalid config should be ignored", DEFAULT_CKVS_RUNTIME_CONFIG, secondReturnedConfig); }
@Test public void emptyRuntimeConfigShouldResolveToDefaultConfig() { CassandraKeyValueServiceRuntimeConfig returnedConfig = new CassandraAtlasDbFactory() .preprocessKvsRuntimeConfig(Optional::empty) .get(); assertEquals("Empty config should resolve to default", DEFAULT_CKVS_RUNTIME_CONFIG, returnedConfig); }
@Override public KeyValueService createRawKeyValueService( MetricsManager metricsManager, KeyValueServiceConfig config, Supplier<Optional<KeyValueServiceRuntimeConfig>> runtimeConfig, Optional<LeaderConfig> leaderConfig, Optional<String> namespace, LongSupplier freshTimestampSource, boolean initializeAsync) { AtlasDbVersion.ensureVersionReported(); CassandraKeyValueServiceConfig preprocessedConfig = preprocessKvsConfig(config, runtimeConfig, namespace); Supplier<CassandraKeyValueServiceRuntimeConfig> cassandraRuntimeConfig = preprocessKvsRuntimeConfig( runtimeConfig); return CassandraKeyValueServiceImpl.create( metricsManager, preprocessedConfig, cassandraRuntimeConfig, leaderConfig, CassandraMutationTimestampProviders.singleLongSupplierBacked(freshTimestampSource), initializeAsync); }
@Override public KeyValueService createRawKeyValueService( MetricsManager metricsManager, KeyValueServiceConfig config, Supplier<Optional<KeyValueServiceRuntimeConfig>> runtimeConfig, Optional<LeaderConfig> leaderConfig, Optional<String> namespace, LongSupplier freshTimestampSource, boolean initializeAsync) { AtlasDbVersion.ensureVersionReported(); CassandraKeyValueServiceConfig preprocessedConfig = preprocessKvsConfig(config, runtimeConfig, namespace); Supplier<CassandraKeyValueServiceRuntimeConfig> cassandraRuntimeConfig = preprocessKvsRuntimeConfig( runtimeConfig); return CassandraKeyValueServiceImpl.create( metricsManager, preprocessedConfig, cassandraRuntimeConfig, leaderConfig, CassandraMutationTimestampProviders.singleLongSupplierBacked(freshTimestampSource), initializeAsync); }