mirror of https://github.com/apache/druid.git
Merge pull request #1507 from rasahner/feature-IntTestConfig
integration-tests: add ability to get configuration information from a file
This commit is contained in:
commit
0655e61d61
|
@ -31,18 +31,49 @@ docker info
|
||||||
Running Integration tests
|
Running Integration tests
|
||||||
=========================
|
=========================
|
||||||
|
|
||||||
## Running tests using mvn
|
## Starting docker tests
|
||||||
|
|
||||||
To run all the tests using mvn run the following command -
|
To run all the tests using docker and mvn run the following command -
|
||||||
```
|
```
|
||||||
mvn verify -P integration-tests
|
mvn verify -P integration-tests
|
||||||
```
|
```
|
||||||
|
|
||||||
To run only a single test using mvn run following command -
|
To run only a single test using mvn run the following command -
|
||||||
```
|
```
|
||||||
mvn verify -P integration-tests -Dit.test=<test_name>
|
mvn verify -P integration-tests -Dit.test=<test_name>
|
||||||
```
|
```
|
||||||
|
|
||||||
|
## Configure and run integration tests using existing cluster
|
||||||
|
|
||||||
|
To run tests on any druid cluster that is already running, create a configuration file:
|
||||||
|
|
||||||
|
{
|
||||||
|
"broker_host": "<broker_ip>",
|
||||||
|
"broker_port": "<broker_port>",
|
||||||
|
"router_host": "<router_ip>",
|
||||||
|
"router_port": "<router_port>",
|
||||||
|
"indexer_host": "<indexer_ip>",
|
||||||
|
"indexer_port": "<indexer_port>",
|
||||||
|
"coordinator_host": "<coordinator_ip>",
|
||||||
|
"coordinator_port": "<coordinator_port>",
|
||||||
|
"middle_manager_host": "<middle_manager_ip>",
|
||||||
|
"zookeeper_hosts": "<comma-separated list of zookeeper_ip:zookeeper_port>",
|
||||||
|
}
|
||||||
|
|
||||||
|
Set the environment variable CONFIG_FILE to the name of the configuration file -
|
||||||
|
```
|
||||||
|
export CONFIG_FILE=<config file name>
|
||||||
|
```
|
||||||
|
|
||||||
|
To run all the tests using mvn run the following command -
|
||||||
|
```
|
||||||
|
mvn verify -P int-tests-config-file
|
||||||
|
```
|
||||||
|
|
||||||
|
To run only a single test using mvn run the following command -
|
||||||
|
```
|
||||||
|
mvn verify -P int-tests-config-file -Dit.test=<test_name>
|
||||||
|
```
|
||||||
|
|
||||||
Writing a New Test
|
Writing a New Test
|
||||||
===============
|
===============
|
||||||
|
|
|
@ -147,6 +147,39 @@
|
||||||
</plugins>
|
</plugins>
|
||||||
</build>
|
</build>
|
||||||
</profile>
|
</profile>
|
||||||
|
<profile>
|
||||||
|
<id>int-tests-config-file</id>
|
||||||
|
<build>
|
||||||
|
<plugins>
|
||||||
|
<plugin>
|
||||||
|
<groupId>org.apache.maven.plugins</groupId>
|
||||||
|
<artifactId>maven-failsafe-plugin</artifactId>
|
||||||
|
<executions>
|
||||||
|
<execution>
|
||||||
|
<id>integration-tests</id>
|
||||||
|
<phase>integration-test</phase>
|
||||||
|
<goals>
|
||||||
|
<goal>integration-test</goal>
|
||||||
|
<goal>verify</goal>
|
||||||
|
</goals>
|
||||||
|
</execution>
|
||||||
|
</executions>
|
||||||
|
<configuration>
|
||||||
|
<argLine>
|
||||||
|
-Duser.timezone=UTC
|
||||||
|
-Dfile.encoding=UTF-8
|
||||||
|
-Dtestrunfactory=org.testng.DruidTestRunnerFactory
|
||||||
|
-Ddruid.test.config.type=configFile
|
||||||
|
-Ddruid.test.config.configFile=${env.CONFIG_FILE}
|
||||||
|
</argLine>
|
||||||
|
<suiteXmlFiles>
|
||||||
|
<suiteXmlFile>src/test/resources/testng.xml</suiteXmlFile>
|
||||||
|
</suiteXmlFiles>
|
||||||
|
</configuration>
|
||||||
|
</plugin>
|
||||||
|
</plugins>
|
||||||
|
</build>
|
||||||
|
</profile>
|
||||||
</profiles>
|
</profiles>
|
||||||
|
|
||||||
</project>
|
</project>
|
||||||
|
|
|
@ -0,0 +1,112 @@
|
||||||
|
/*
|
||||||
|
* Licensed to Metamarkets Group Inc. (Metamarkets) under one
|
||||||
|
* or more contributor license agreements. See the NOTICE file
|
||||||
|
* distributed with this work for additional information
|
||||||
|
* regarding copyright ownership. Metamarkets licenses this file
|
||||||
|
* to you under the Apache License, Version 2.0 (the
|
||||||
|
* "License"); you may not use this file except in compliance
|
||||||
|
* with the License. You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing,
|
||||||
|
* software distributed under the License is distributed on an
|
||||||
|
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||||
|
* KIND, either express or implied. See the License for the
|
||||||
|
* specific language governing permissions and limitations
|
||||||
|
* under the License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package io.druid.testing;
|
||||||
|
|
||||||
|
import com.fasterxml.jackson.annotation.JsonCreator;
|
||||||
|
import com.fasterxml.jackson.annotation.JsonProperty;
|
||||||
|
|
||||||
|
import java.io.FileNotFoundException;
|
||||||
|
import java.io.File;
|
||||||
|
import java.io.IOException;
|
||||||
|
|
||||||
|
import com.fasterxml.jackson.core.type.TypeReference;
|
||||||
|
import com.fasterxml.jackson.databind.ObjectMapper;
|
||||||
|
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
|
public class ConfigFileConfigProvider implements IntegrationTestingConfigProvider
|
||||||
|
{
|
||||||
|
private String routerHost = "";
|
||||||
|
private String brokerHost = "";
|
||||||
|
private String coordinatorHost = "";
|
||||||
|
private String indexerHost = "";
|
||||||
|
private String middleManagerHost = "";
|
||||||
|
private String zookeeperHosts = "";
|
||||||
|
private Map<String, String> props = null;
|
||||||
|
|
||||||
|
@JsonCreator
|
||||||
|
ConfigFileConfigProvider(@JsonProperty("configFile") String configFile){
|
||||||
|
loadProperties(configFile);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void loadProperties(String configFile)
|
||||||
|
{
|
||||||
|
ObjectMapper jsonMapper = new ObjectMapper();
|
||||||
|
try {
|
||||||
|
props = jsonMapper.readValue(
|
||||||
|
new File(configFile), new TypeReference<Map<String, String>>()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
);
|
||||||
|
}
|
||||||
|
catch (IOException ex) {
|
||||||
|
throw new RuntimeException(ex);
|
||||||
|
}
|
||||||
|
routerHost = props.get("router_host") + ":" + props.get("router_port");
|
||||||
|
brokerHost = props.get("broker_host") + ":" + props.get("broker_port");
|
||||||
|
coordinatorHost = props.get("coordinator_host") + ":" + props.get("coordinator_port");
|
||||||
|
indexerHost = props.get("indexer_host") + ":" + props.get("indexer_port");
|
||||||
|
middleManagerHost = props.get("middle_manager_host");
|
||||||
|
zookeeperHosts = props.get("zookeeper_hosts");
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public IntegrationTestingConfig get()
|
||||||
|
{
|
||||||
|
return new IntegrationTestingConfig()
|
||||||
|
{
|
||||||
|
@Override
|
||||||
|
public String getCoordinatorHost()
|
||||||
|
{
|
||||||
|
return coordinatorHost;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String getIndexerHost()
|
||||||
|
{
|
||||||
|
return indexerHost;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String getRouterHost()
|
||||||
|
{
|
||||||
|
return routerHost;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String getBrokerHost()
|
||||||
|
{
|
||||||
|
return brokerHost;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String getMiddleManagerHost()
|
||||||
|
{
|
||||||
|
return middleManagerHost;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String getZookeeperHosts()
|
||||||
|
{
|
||||||
|
return zookeeperHosts;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
}
|
||||||
|
}
|
|
@ -63,6 +63,12 @@ public class DockerConfigProvider implements IntegrationTestingConfigProvider
|
||||||
{
|
{
|
||||||
return dockerIp;
|
return dockerIp;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String getZookeeperHosts()
|
||||||
|
{
|
||||||
|
return dockerIp + ":2181";
|
||||||
|
}
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -30,4 +30,6 @@ public interface IntegrationTestingConfig
|
||||||
public String getBrokerHost();
|
public String getBrokerHost();
|
||||||
|
|
||||||
public String getMiddleManagerHost();
|
public String getMiddleManagerHost();
|
||||||
|
|
||||||
|
public String getZookeeperHosts();
|
||||||
}
|
}
|
||||||
|
|
|
@ -23,7 +23,8 @@ import com.google.inject.Provider;
|
||||||
|
|
||||||
@JsonTypeInfo(use = JsonTypeInfo.Id.NAME, property = "type", defaultImpl = DockerConfigProvider.class)
|
@JsonTypeInfo(use = JsonTypeInfo.Id.NAME, property = "type", defaultImpl = DockerConfigProvider.class)
|
||||||
@JsonSubTypes(value = {
|
@JsonSubTypes(value = {
|
||||||
@JsonSubTypes.Type(name = "docker", value = DockerConfigProvider.class)
|
@JsonSubTypes.Type(name = "docker", value = DockerConfigProvider.class),
|
||||||
|
@JsonSubTypes.Type(name = "configFile", value = ConfigFileConfigProvider.class)
|
||||||
})
|
})
|
||||||
public interface IntegrationTestingConfigProvider extends Provider<IntegrationTestingConfig>
|
public interface IntegrationTestingConfigProvider extends Provider<IntegrationTestingConfig>
|
||||||
{
|
{
|
||||||
|
|
|
@ -0,0 +1,38 @@
|
||||||
|
/*
|
||||||
|
* Druid - a distributed column store.
|
||||||
|
*
|
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
* you may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package io.druid.testing.clients;
|
||||||
|
|
||||||
|
import com.google.inject.Inject;
|
||||||
|
import io.druid.testing.IntegrationTestingConfig;
|
||||||
|
|
||||||
|
public class ZookeeperTestClient
|
||||||
|
{
|
||||||
|
private final String hosts;
|
||||||
|
|
||||||
|
@Inject
|
||||||
|
ZookeeperTestClient(
|
||||||
|
IntegrationTestingConfig config
|
||||||
|
)
|
||||||
|
{
|
||||||
|
this.hosts = config.getZookeeperHosts();
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getZookeeperHosts()
|
||||||
|
{
|
||||||
|
return hosts;
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue