blob: 0a621a19ccd8fb3e998a7a338ef5dcb5c3dd2954 [file] [log] [blame]
package org.apache.cassandra.sidecar;
import java.io.IOException;
import java.net.URL;
import java.util.Objects;
import org.junit.jupiter.api.Test;
import org.apache.cassandra.sidecar.cluster.InstancesConfig;
import org.apache.cassandra.sidecar.cluster.instance.InstanceMetadata;
import org.apache.cassandra.sidecar.common.CassandraVersionProvider;
import org.apache.cassandra.sidecar.common.utils.ValidationConfiguration;
import static org.assertj.core.api.Assertions.assertThat;
import static org.mockito.Mockito.mock;
/**
* Tests reading Sidecar {@link Configuration} from YAML files
*/
class YAMLSidecarConfigurationTest
{
CassandraVersionProvider versionProvider = mock(CassandraVersionProvider.class);
@Test
public void testLegacySidecarYAMLFormatWithSingleInstance() throws IOException
{
Configuration configuration =
YAMLSidecarConfiguration.of(confPath("sidecar_single_instance.yaml"), versionProvider);
InstancesConfig instancesConfig = configuration.getInstancesConfig();
assertThat(instancesConfig.instances().size()).isEqualTo(1);
InstanceMetadata instanceMetadata = instancesConfig.instances().get(0);
assertThat(instanceMetadata.host()).isEqualTo("localhost");
assertThat(instanceMetadata.port()).isEqualTo(9042);
assertThat(instanceMetadata.session()).isNotNull();
assertThat(instanceMetadata.jmxClient()).isNotNull();
}
@Test
public void testReadingSingleInstanceSectionOverMultipleInstances() throws IOException
{
Configuration configuration =
YAMLSidecarConfiguration.of(confPath("sidecar_with_single_multiple_instances.yaml"),
versionProvider);
InstancesConfig instancesConfig = configuration.getInstancesConfig();
assertThat(instancesConfig.instances().size()).isEqualTo(1);
InstanceMetadata instanceMetadata = instancesConfig.instances().get(0);
assertThat(instanceMetadata.host()).isEqualTo("localhost");
assertThat(instanceMetadata.port()).isEqualTo(9042);
assertThat(instanceMetadata.session()).isNotNull();
assertThat(instanceMetadata.jmxClient()).isNotNull();
}
@Test
public void testReadingMultipleInstances() throws IOException
{
Configuration configuration =
YAMLSidecarConfiguration.of(confPath("sidecar_multiple_instances.yaml"),
versionProvider);
InstancesConfig instancesConfig = configuration.getInstancesConfig();
assertThat(instancesConfig.instances().size()).isEqualTo(2);
}
@Test
public void testReadingCassandraInputValidation() throws IOException
{
Configuration configuration =
YAMLSidecarConfiguration.of(confPath("sidecar_validation_configuration.yaml"),
versionProvider);
ValidationConfiguration validationConfiguration = configuration.getValidationConfiguration();
assertThat(validationConfiguration.getForbiddenKeyspaces()).contains("a", "b", "c");
assertThat(validationConfiguration.getAllowedPatternForDirectory()).isEqualTo("[a-z]+");
assertThat(validationConfiguration.getAllowedPatternForComponentName())
.isEqualTo("(.db|.cql|.json|.crc32|TOC.txt)");
assertThat(validationConfiguration.getAllowedPatternForRestrictedComponentName())
.isEqualTo("(.db|TOC.txt)");
}
private String confPath(String resourceName)
{
URL resource = getClass().getClassLoader().getResource(resourceName);
return Objects.requireNonNull(resource).toString();
}
}