@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); }
@Test public void emptyRuntimeConfigShouldResolveToDefaultConfig() { CassandraKeyValueServiceRuntimeConfig returnedConfig = new CassandraAtlasDbFactory() .preprocessKvsRuntimeConfig(Optional::empty) .get(); assertEquals("Empty config should resolve to default", DEFAULT_CKVS_RUNTIME_CONFIG, returnedConfig); }
@Test public void throwsWhenPreprocessingConfigWithKeyspaceAndDifferentNamespace() { assertThatThrownBy( () -> CassandraAtlasDbFactory.preprocessKvsConfig(CONFIG_WITH_KEYSPACE, Optional::empty, Optional.of(KEYSPACE_2))) .isInstanceOf(IllegalArgumentException.class); }
@Test public void throwsWhenPreprocessingNonCassandraKvsConfig() { assertThatThrownBy(() -> { KeyValueServiceConfigHelper keyValueServiceConfig = () -> "Fake KVS"; CassandraAtlasDbFactory.preprocessKvsConfig(keyValueServiceConfig, Optional::empty, Optional.empty()); }) .isInstanceOf(IllegalArgumentException.class); }
@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); }
@Test public void throwsWhenPreprocessingConfigWithNoKeyspaceAndNoNamespace() { assertThatThrownBy(() -> CassandraAtlasDbFactory.preprocessKvsConfig(CONFIG_WITHOUT_KEYSPACE, Optional::empty, Optional.empty())) .isInstanceOf(IllegalArgumentException.class); }
@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 resolvesConfigIfKeyspaceAndNamespaceProvidedAndMatch() { CassandraKeyValueServiceConfig newConfig = CassandraAtlasDbFactory.preprocessKvsConfig(CONFIG_WITH_KEYSPACE, Optional::empty, Optional.of(KEYSPACE)); assertThat(newConfig.getKeyspaceOrThrow()).isEqualTo(KEYSPACE); }
@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 resolvesConfigWithNamespaceIfNoKeyspaceProvided() { CassandraKeyValueServiceConfig newConfig = CassandraAtlasDbFactory.preprocessKvsConfig(CONFIG_WITHOUT_KEYSPACE, Optional::empty, Optional.of(KEYSPACE)); assertThat(newConfig.getKeyspaceOrThrow()).isEqualTo(KEYSPACE); }
@Test public void resolvesConfigWithOriginalKeyspaceIfNoNamespaceProvided() { CassandraKeyValueServiceConfig newConfig = CassandraAtlasDbFactory.preprocessKvsConfig(CONFIG_WITH_KEYSPACE, Optional::empty, Optional.empty()); assertThat(newConfig.getKeyspaceOrThrow()).isEqualTo(CONFIG_WITH_KEYSPACE.getKeyspaceOrThrow()); }
@Test public void preservesOtherPropertiesOnResolvedConfigWithNamespace() { CassandraKeyValueServiceConfig newConfig = CassandraAtlasDbFactory.preprocessKvsConfig(CONFIG_WITHOUT_KEYSPACE, Optional::empty, Optional.of(KEYSPACE)); assertThat(newConfig.servers()).isEqualTo(SERVERS); assertThat(newConfig.replicationFactor()).isEqualTo(1); }