Move tests to elasticsearch test framework

Move tests to elasticsearch test framework.
In addition to this, we want to refactor some package names to prepare next snapshot/restore feature (see #2).

Closes #3.
This commit is contained in:
David Pilato 2014-01-06 23:28:22 +01:00
parent 41de615eb2
commit 316a1411d0
16 changed files with 355 additions and 192 deletions

131
pom.xml
View File

@ -42,16 +42,30 @@ governing permissions and limitations under the License. -->
</parent> </parent>
<properties> <properties>
<elasticsearch.version>0.90.6</elasticsearch.version> <elasticsearch.version>1.0.0.RC1-SNAPSHOT</elasticsearch.version>
<lucene.version>4.6.0</lucene.version>
<tests.output>onerror</tests.output>
<tests.jvms>1</tests.jvms>
<tests.shuffle>true</tests.shuffle>
<tests.output>onerror</tests.output>
<tests.client.ratio></tests.client.ratio>
<tests.jvm.argline></tests.jvm.argline>
<es.logger.level>INFO</es.logger.level>
</properties> </properties>
<dependencies> <dependencies>
<dependency>
<groupId>org.apache.lucene</groupId>
<artifactId>lucene-test-framework</artifactId>
<version>${lucene.version}</version>
<scope>test</scope>
</dependency>
<dependency> <dependency>
<groupId>org.elasticsearch</groupId> <groupId>org.elasticsearch</groupId>
<artifactId>elasticsearch</artifactId> <artifactId>elasticsearch</artifactId>
<version>${elasticsearch.version}</version> <version>${elasticsearch.version}</version>
</dependency> </dependency>
<dependency> <dependency>
<groupId>log4j</groupId> <groupId>log4j</groupId>
<artifactId>log4j</artifactId> <artifactId>log4j</artifactId>
@ -59,12 +73,24 @@ governing permissions and limitations under the License. -->
<scope>test</scope> <scope>test</scope>
</dependency> </dependency>
<dependency> <dependency>
<groupId>junit</groupId> <groupId>org.elasticsearch</groupId>
<artifactId>junit</artifactId> <artifactId>elasticsearch</artifactId>
<version>4.11</version> <version>${elasticsearch.version}</version>
<type>test-jar</type>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.hamcrest</groupId>
<artifactId>hamcrest-core</artifactId>
<version>1.3.RC2</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.hamcrest</groupId>
<artifactId>hamcrest-library</artifactId>
<version>1.3.RC2</version>
<scope>test</scope> <scope>test</scope>
</dependency> </dependency>
</dependencies> </dependencies>
<build> <build>
@ -91,10 +117,103 @@ governing permissions and limitations under the License. -->
<target>1.6</target> <target>1.6</target>
</configuration> </configuration>
</plugin> </plugin>
<plugin>
<groupId>com.carrotsearch.randomizedtesting</groupId>
<artifactId>junit4-maven-plugin</artifactId>
<version>2.0.14</version>
<executions>
<execution>
<id>tests</id>
<phase>test</phase>
<goals>
<goal>junit4</goal>
</goals>
<configuration>
<heartbeat>20</heartbeat>
<jvmOutputAction>pipe,warn</jvmOutputAction>
<leaveTemporary>true</leaveTemporary>
<listeners>
<report-ant-xml mavenExtensions="true"
dir="${project.build.directory}/surefire-reports"/>
<report-text
showThrowable="true"
showStackTraces="true"
showOutput="${tests.output}"
showStatusOk="false"
showStatusError="true"
showStatusFailure="true"
showStatusIgnored="true"
showSuiteSummary="true"
timestamps="false"/>
<report-execution-times file="${basedir}/.local-execution-hints.log"/>
</listeners>
<assertions>
<enable/>
</assertions>
<parallelism>${tests.jvms}</parallelism>
<balancers>
<execution-times>
<fileset dir="${basedir}" includes=".local-execution-hints.log"/>
</execution-times>
</balancers>
<includes>
<include>**/*Tests.class</include>
<include>**/*Test.class</include>
</includes>
<excludes>
<exclude>**/Abstract*.class</exclude>
<exclude>**/*StressTest.class</exclude>
</excludes>
<argLine>
${tests.jvm.argline}
</argLine>
<jvmArgs>
<param>-Xmx512m</param>
<param>-Xss256k</param>
<param>-XX:MaxDirectMemorySize=512m</param>
<param>-Des.logger.prefix=</param>
</jvmArgs>
<shuffleOnSlave>${tests.shuffle}</shuffleOnSlave>
<sysouts>${tests.verbose}</sysouts>
<seed>${tests.seed}</seed>
<haltOnFailure>${tests.failfast}</haltOnFailure>
<systemProperties>
<!-- RandomizedTesting library system properties -->
<tests.jvm.argline>${tests.jvm.argline}</tests.jvm.argline>
<tests.iters>${tests.iters}</tests.iters>
<tests.maxfailures>${tests.maxfailures}</tests.maxfailures>
<tests.failfast>${tests.failfast}</tests.failfast>
<tests.class>${tests.class}</tests.class>
<tests.method>${tests.method}</tests.method>
<tests.nightly>${tests.nightly}</tests.nightly>
<tests.badapples>${tests.badapples}</tests.badapples>
<tests.weekly>${tests.weekly}</tests.weekly>
<tests.slow>${tests.slow}</tests.slow>
<tests.azure>${tests.azure}</tests.azure>
<tests.awaitsfix>${tests.awaitsfix}</tests.awaitsfix>
<tests.slow>${tests.slow}</tests.slow>
<tests.timeoutSuite>${tests.timeoutSuite}</tests.timeoutSuite>
<tests.showSuccess>${tests.showSuccess}</tests.showSuccess>
<tests.integration>${tests.integration}</tests.integration>
<tests.cluster_seed>${tests.cluster_seed}</tests.cluster_seed>
<tests.client.ratio>${tests.client.ratio}</tests.client.ratio>
<es.node.local>${env.ES_TEST_LOCAL}</es.node.local>
<es.node.mode>${es.node.mode}</es.node.mode>
<es.config>${es.config}</es.config>
<es.logger.level>${es.logger.level}</es.logger.level>
<java.awt.headless>true</java.awt.headless>
</systemProperties>
</configuration>
</execution>
</executions>
</plugin>
<plugin> <plugin>
<groupId>org.apache.maven.plugins</groupId> <groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId> <artifactId>maven-surefire-plugin</artifactId>
<version>2.13</version> <version>2.13</version>
<configuration>
<skip>true</skip>
</configuration>
</plugin> </plugin>
<plugin> <plugin>
<groupId>org.apache.maven.plugins</groupId> <groupId>org.apache.maven.plugins</groupId>

View File

@ -21,23 +21,49 @@ package org.elasticsearch.cloud.azure;
import org.elasticsearch.common.inject.AbstractModule; import org.elasticsearch.common.inject.AbstractModule;
import org.elasticsearch.common.inject.Inject; import org.elasticsearch.common.inject.Inject;
import org.elasticsearch.common.logging.ESLogger;
import org.elasticsearch.common.logging.Loggers;
import org.elasticsearch.common.settings.Settings; import org.elasticsearch.common.settings.Settings;
import org.elasticsearch.discovery.azure.AzureDiscovery;
/** /**
* Azure Module
* *
* <ul>
* <li>If needed this module will bind azure discovery service by default
* to AzureComputeServiceImpl.</li>
* </ul>
*
* @see org.elasticsearch.cloud.azure.AzureComputeServiceImpl
*/ */
public class AzureModule extends AbstractModule { public class AzureModule extends AbstractModule {
protected final ESLogger logger;
private Settings settings; private Settings settings;
@Inject @Inject
public AzureModule(Settings settings) { public AzureModule(Settings settings) {
this.settings = settings; this.settings = settings;
this.logger = Loggers.getLogger(getClass(), settings);
} }
@Override @Override
protected void configure() { protected void configure() {
logger.debug("starting azure services");
// If we have set discovery to azure, let's start the azure compute service
if (isDiscoveryReady(settings)) {
logger.debug("starting azure discovery service");
bind(AzureComputeService.class) bind(AzureComputeService.class)
.to(settings.getAsClass("cloud.azure.api.impl", AzureComputeServiceImpl.class)) .to(settings.getAsClass("cloud.azure.api.impl", AzureComputeServiceImpl.class))
.asEagerSingleton(); .asEagerSingleton();
}
}
/**
* Check if discovery is meant to start
* @return true if we can start discovery features
*/
public static boolean isDiscoveryReady(Settings settings) {
return (AzureDiscovery.AZURE.equalsIgnoreCase(settings.get("discovery.type")));
} }
} }

View File

@ -23,15 +23,16 @@ import org.elasticsearch.common.settings.ImmutableSettings;
import org.elasticsearch.common.settings.SettingsFilter; import org.elasticsearch.common.settings.SettingsFilter;
/** /**
* * Filtering cloud.azure.* settings
*/ */
public class AzureSettingsFilter implements SettingsFilter.Filter { public class AzureSettingsFilter implements SettingsFilter.Filter {
@Override @Override
public void filter(ImmutableSettings.Builder settings) { public void filter(ImmutableSettings.Builder settings) {
settings.remove("cloud.private_key"); // Cloud settings
settings.remove("cloud.certificate"); settings.remove("cloud.certificate");
settings.remove("cloud.azure.password"); settings.remove("cloud.azure.password");
settings.remove("cloud.azure.subscription_id"); settings.remove("cloud.azure.subscription_id");
settings.remove("cloud.azure.service_name");
} }
} }

View File

@ -41,6 +41,8 @@ import org.elasticsearch.transport.TransportService;
*/ */
public class AzureDiscovery extends ZenDiscovery { public class AzureDiscovery extends ZenDiscovery {
public static final String AZURE = "azure";
@Inject @Inject
public AzureDiscovery(Settings settings, ClusterName clusterName, ThreadPool threadPool, TransportService transportService, public AzureDiscovery(Settings settings, ClusterName clusterName, ThreadPool threadPool, TransportService transportService,
ClusterService clusterService, NodeSettingsService nodeSettingsService, ZenPingService pingService, ClusterService clusterService, NodeSettingsService nodeSettingsService, ZenPingService pingService,

View File

@ -19,6 +19,11 @@
package org.elasticsearch.discovery.azure; package org.elasticsearch.discovery.azure;
import org.elasticsearch.cloud.azure.AzureModule;
import org.elasticsearch.common.inject.Inject;
import org.elasticsearch.common.logging.ESLogger;
import org.elasticsearch.common.logging.Loggers;
import org.elasticsearch.common.settings.Settings;
import org.elasticsearch.discovery.Discovery; import org.elasticsearch.discovery.Discovery;
import org.elasticsearch.discovery.zen.ZenDiscoveryModule; import org.elasticsearch.discovery.zen.ZenDiscoveryModule;
@ -27,8 +32,21 @@ import org.elasticsearch.discovery.zen.ZenDiscoveryModule;
*/ */
public class AzureDiscoveryModule extends ZenDiscoveryModule { public class AzureDiscoveryModule extends ZenDiscoveryModule {
protected final ESLogger logger;
private Settings settings;
@Inject
public AzureDiscoveryModule(Settings settings) {
super();
this.logger = Loggers.getLogger(getClass(), settings);
this.settings = settings;
}
@Override @Override
protected void bindDiscovery() { protected void bindDiscovery() {
if (AzureModule.isDiscoveryReady(settings)) {
bind(Discovery.class).to(AzureDiscovery.class).asEagerSingleton(); bind(Discovery.class).to(AzureDiscovery.class).asEagerSingleton();
} else {
logger.debug("disabling azure discovery features");
}
} }
} }

View File

@ -18,20 +18,40 @@
*/ */
package org.elasticsearch.azure.itest; package org.elasticsearch.azure.itest;
import org.elasticsearch.action.admin.cluster.state.ClusterStateResponse;
import org.elasticsearch.cloud.azure.AbstractAzureTest;
import org.elasticsearch.common.settings.ImmutableSettings; import org.elasticsearch.common.settings.ImmutableSettings;
import org.elasticsearch.node.NodeBuilder; import org.elasticsearch.common.settings.Settings;
import org.junit.Ignore; import org.elasticsearch.test.ElasticsearchIntegrationTest;
import org.hamcrest.Matchers;
import org.junit.Test; import org.junit.Test;
public class AzureSimpleITest { /**
* This test needs Azure to run and -Dtests.azure=true to be set
* and -Des.config=/path/to/elasticsearch.yml
* @see org.elasticsearch.cloud.azure.AbstractAzureTest
*/
@AbstractAzureTest.AzureTest
@ElasticsearchIntegrationTest.ClusterScope(
scope = ElasticsearchIntegrationTest.Scope.TEST,
numNodes = 1,
transportClientRatio = 0.0)
public class AzureSimpleITest extends AbstractAzureTest {
@Test @Ignore @Test
public void one_node_should_run() { public void one_node_should_run() {
ImmutableSettings.Builder builder = ImmutableSettings.settingsBuilder() // Do nothing... Just start :-)
//.put("gateway.type", "local") // but let's check that we have at least 1 node (local node)
.put("path.data", "./target/es/data") ClusterStateResponse clusterState = client().admin().cluster().prepareState().execute().actionGet();
.put("path.logs", "./target/es/logs")
.put("path.work", "./target/es/work"); assertThat(clusterState.getState().getNodes().getSize(), Matchers.greaterThanOrEqualTo(1));
NodeBuilder.nodeBuilder().settings(builder).node(); }
@Override
public Settings indexSettings() {
// During restore we frequently restore index to exactly the same state it was before, that might cause the same
// checksum file to be written twice during restore operation
return ImmutableSettings.builder().put(super.indexSettings())
.build();
} }
} }

View File

@ -1,144 +0,0 @@
/*
* Licensed to ElasticSearch under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. ElasticSearch 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 org.elasticsearch.azure.test;
import org.elasticsearch.action.admin.cluster.node.info.NodesInfoResponse;
import org.elasticsearch.client.Client;
import org.elasticsearch.client.transport.NoNodeAvailableException;
import org.elasticsearch.client.transport.TransportClient;
import org.elasticsearch.cloud.azure.AzureComputeService;
import org.elasticsearch.common.io.FileSystemUtils;
import org.elasticsearch.common.logging.ESLogger;
import org.elasticsearch.common.logging.ESLoggerFactory;
import org.elasticsearch.common.settings.ImmutableSettings;
import org.elasticsearch.common.settings.Settings;
import org.elasticsearch.common.transport.TransportAddress;
import org.elasticsearch.node.Node;
import org.elasticsearch.node.NodeBuilder;
import org.elasticsearch.node.internal.InternalNode;
import org.elasticsearch.transport.netty.NettyTransport;
import org.junit.After;
import org.junit.Assert;
import org.junit.Before;
import java.io.File;
import java.util.ArrayList;
import java.util.List;
public abstract class AzureAbstractTest {
protected static ESLogger logger = ESLoggerFactory.getLogger(AzureAbstractTest.class.getName());
private static List<Node> nodes;
private Class<? extends AzureComputeService> mock;
public AzureAbstractTest(Class<? extends AzureComputeService> mock) {
// We want to inject the Azure API Mock
this.mock = mock;
}
@Before
public void setUp() {
nodes = new ArrayList<Node>();
File dataDir = new File("./target/es/data");
if(dataDir.exists()) {
FileSystemUtils.deleteRecursively(dataDir, true);
}
}
@After
public void tearDown() {
// Cleaning nodes after test
for (Node node : nodes) {
node.close();
}
}
protected Client getTransportClient() {
// Create a TransportClient on node 1 and 2
Settings settings = ImmutableSettings.settingsBuilder()
.put("cluster.name", "azure")
.put("transport.tcp.connect_timeout", "1s")
.build();
TransportClient client = new TransportClient(settings);
for (Node node : nodes) {
NettyTransport nettyTransport = ((InternalNode) node).injector().getInstance(NettyTransport.class);
TransportAddress transportAddress = nettyTransport.boundAddress().publishAddress();
client.addTransportAddress(transportAddress);
}
return client;
}
protected Client getNodeClient() {
for (Node node : nodes) {
return node.client();
}
return null;
}
protected void checkNumberOfNodes(int expected, boolean fail) {
NodesInfoResponse nodeInfos = null;
try {
nodeInfos = getTransportClient().admin().cluster().prepareNodesInfo().execute().actionGet();
} catch (NoNodeAvailableException e) {
// If we can't build a Transport Client, we are may be not connected to any network
// Let's try a Node Client
nodeInfos = getNodeClient().admin().cluster().prepareNodesInfo().execute().actionGet();
}
Assert.assertNotNull(nodeInfos);
Assert.assertNotNull(nodeInfos.getNodes());
if (fail) {
Assert.assertEquals(expected, nodeInfos.getNodes().length);
} else {
if (nodeInfos.getNodes().length != expected) {
logger.warn("expected {} node(s) but found {}. Could be due to no local IP address available.",
expected, nodeInfos.getNodes().length);
}
}
}
protected void checkNumberOfNodes(int expected) {
checkNumberOfNodes(expected, true);
}
protected void nodeBuilder() {
ImmutableSettings.Builder builder = ImmutableSettings.settingsBuilder()
//.put("gateway.type", "local")
.put("path.data", "./target/es/data")
.put("path.logs", "./target/es/logs")
.put("path.work", "./target/es/work")
// .put("discovery.zen.ping.timeout", "500ms")
// .put("discovery.zen.fd.ping_retries",1)
// .put("discovery.zen.fd.ping_timeout", "500ms")
// .put("discovery.initial_state_timeout", "5s")
// .put("transport.tcp.connect_timeout", "1s")
.put("cloud.azure.api.impl", mock)
.put("cloud.azure.refresh_interval", "5s")
.put("node.name", (nodes.size()+1) + "#" + mock.getSimpleName());
Node node = NodeBuilder.nodeBuilder().settings(builder).node();
nodes.add(node);
}
}

View File

@ -0,0 +1,64 @@
/*
* Licensed to Elasticsearch (the "Author") under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. Author 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 org.elasticsearch.cloud.azure;
import com.carrotsearch.randomizedtesting.annotations.TestGroup;
import org.elasticsearch.test.ElasticsearchIntegrationTest;
import java.lang.annotation.Documented;
import java.lang.annotation.Inherited;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
/**
*
*/
public abstract class AbstractAzureTest extends ElasticsearchIntegrationTest {
/**
* Annotation for tests that require Azure to run. Azure tests are disabled by default.
* <p/>
* To enable test add -Dtests.azure=true -Des.config=/path/to/elasticsearch.yml
* <p/>
* The elasticsearch.yml file should contain the following keys
* <pre>
cloud:
azure:
keystore: FULLPATH-TO-YOUR-KEYSTORE
password: YOUR-PASSWORD
subscription_id: YOUR-AZURE-SUBSCRIPTION-ID
service_name: YOUR-AZURE-SERVICE-NAME
discovery:
type: azure
* </pre>
*/
@Documented
@Inherited
@Retention(RetentionPolicy.RUNTIME)
@TestGroup(enabled = false, sysProperty = SYSPROP_AZURE)
public @interface AzureTest {
}
/**
*/
public static final String SYSPROP_AZURE = "tests.azure";
}

View File

@ -0,0 +1,53 @@
/*
* Licensed to ElasticSearch under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. ElasticSearch 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 org.elasticsearch.discovery.azure;
import org.elasticsearch.action.admin.cluster.node.info.NodesInfoResponse;
import org.elasticsearch.cloud.azure.AbstractAzureTest;
import org.elasticsearch.cloud.azure.AzureComputeService;
import org.elasticsearch.common.settings.ImmutableSettings;
import org.elasticsearch.common.settings.Settings;
public abstract class AbstractAzureComputeServiceTest extends AbstractAzureTest {
private Class<? extends AzureComputeService> mock;
public AbstractAzureComputeServiceTest(Class<? extends AzureComputeService> mock) {
// We want to inject the Azure API Mock
this.mock = mock;
}
protected void checkNumberOfNodes(int expected) {
NodesInfoResponse nodeInfos = client().admin().cluster().prepareNodesInfo().execute().actionGet();
assertNotNull(nodeInfos);
assertNotNull(nodeInfos.getNodes());
assertEquals(expected, nodeInfos.getNodes().length);
}
@Override
protected Settings nodeSettings(int nodeOrdinal) {
ImmutableSettings.Builder builder = ImmutableSettings.settingsBuilder()
.put("cloud.azure.api.impl", mock)
// We add a fake subscription_id to start mock compute service
.put("cloud.azure.subscription_id", "fake")
.put("cloud.azure.refresh_interval", "5s");
return builder.build();
}
}

View File

@ -17,7 +17,7 @@
* under the License. * under the License.
*/ */
package org.elasticsearch.azure.test; package org.elasticsearch.discovery.azure;
import org.elasticsearch.ElasticSearchException; import org.elasticsearch.ElasticSearchException;
import org.elasticsearch.cloud.azure.AzureComputeService; import org.elasticsearch.cloud.azure.AzureComputeService;
@ -32,6 +32,7 @@ public abstract class AzureComputeServiceAbstractMock extends AbstractLifecycleC
protected AzureComputeServiceAbstractMock(Settings settings) { protected AzureComputeServiceAbstractMock(Settings settings) {
super(settings); super(settings);
logger.debug("starting Azure Mock [{}]", this.getClass().getSimpleName());
} }
@Override @Override

View File

@ -17,7 +17,7 @@
* under the License. * under the License.
*/ */
package org.elasticsearch.azure.test; package org.elasticsearch.discovery.azure;
import org.elasticsearch.cloud.azure.Instance; import org.elasticsearch.cloud.azure.Instance;
import org.elasticsearch.common.inject.Inject; import org.elasticsearch.common.inject.Inject;
@ -34,7 +34,6 @@ public class AzureComputeServiceSimpleMock extends AzureComputeServiceAbstractMo
@Inject @Inject
protected AzureComputeServiceSimpleMock(Settings settings) { protected AzureComputeServiceSimpleMock(Settings settings) {
super(settings); super(settings);
logger.debug("starting Azure Mock");
} }
@Override @Override

View File

@ -17,7 +17,7 @@
* under the License. * under the License.
*/ */
package org.elasticsearch.azure.test; package org.elasticsearch.discovery.azure;
import org.elasticsearch.cloud.azure.Instance; import org.elasticsearch.cloud.azure.Instance;
import org.elasticsearch.common.inject.Inject; import org.elasticsearch.common.inject.Inject;
@ -34,7 +34,6 @@ public class AzureComputeServiceTwoNodesMock extends AzureComputeServiceAbstract
@Inject @Inject
protected AzureComputeServiceTwoNodesMock(Settings settings) { protected AzureComputeServiceTwoNodesMock(Settings settings) {
super(settings); super(settings);
logger.debug("starting Azure Mock");
} }
@Override @Override

View File

@ -17,7 +17,7 @@
* under the License. * under the License.
*/ */
package org.elasticsearch.azure.test; package org.elasticsearch.discovery.azure;
import org.elasticsearch.cloud.azure.AzureComputeServiceImpl; import org.elasticsearch.cloud.azure.AzureComputeServiceImpl;
import org.elasticsearch.cloud.azure.Instance; import org.elasticsearch.cloud.azure.Instance;

View File

@ -16,11 +16,16 @@
* specific language governing permissions and limitations * specific language governing permissions and limitations
* under the License. * under the License.
*/ */
package org.elasticsearch.azure.test; package org.elasticsearch.discovery.azure;
import org.elasticsearch.test.ElasticsearchIntegrationTest;
import org.junit.Test; import org.junit.Test;
public class AzureSimpleTest extends AzureAbstractTest { @ElasticsearchIntegrationTest.ClusterScope(
scope = ElasticsearchIntegrationTest.Scope.TEST,
numNodes = 1,
transportClientRatio = 0.0)
public class AzureSimpleTest extends AbstractAzureComputeServiceTest {
public AzureSimpleTest() { public AzureSimpleTest() {
super(AzureComputeServiceSimpleMock.class); super(AzureComputeServiceSimpleMock.class);
@ -28,10 +33,9 @@ public class AzureSimpleTest extends AzureAbstractTest {
@Test @Test
public void one_node_should_run() { public void one_node_should_run() {
// Then we start our node for tests
nodeBuilder();
// We expect having 2 nodes as part of the cluster, let's test that // We expect having 2 nodes as part of the cluster, let's test that
checkNumberOfNodes(1); checkNumberOfNodes(1);
} }
} }

View File

@ -16,11 +16,16 @@
* specific language governing permissions and limitations * specific language governing permissions and limitations
* under the License. * under the License.
*/ */
package org.elasticsearch.azure.test; package org.elasticsearch.discovery.azure;
import org.elasticsearch.test.ElasticsearchIntegrationTest;
import org.junit.Test; import org.junit.Test;
public class AzureTwoStartedNodesTest extends AzureAbstractTest { @ElasticsearchIntegrationTest.ClusterScope(
scope = ElasticsearchIntegrationTest.Scope.TEST,
numNodes = 2,
transportClientRatio = 0.0)
public class AzureTwoStartedNodesTest extends AbstractAzureComputeServiceTest {
public AzureTwoStartedNodesTest() { public AzureTwoStartedNodesTest() {
super(AzureComputeServiceTwoNodesMock.class); super(AzureComputeServiceTwoNodesMock.class);
@ -28,11 +33,7 @@ public class AzureTwoStartedNodesTest extends AzureAbstractTest {
@Test @Test
public void two_nodes_should_run() { public void two_nodes_should_run() {
// Then we start our node for tests
nodeBuilder();
nodeBuilder();
// We expect having 2 nodes as part of the cluster, let's test that // We expect having 2 nodes as part of the cluster, let's test that
checkNumberOfNodes(2, false); checkNumberOfNodes(2);
} }
} }

View File

@ -8,9 +8,7 @@
# is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY # 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 # KIND, either express or implied. See the License for the specific language
# governing permissions and limitations under the License. # governing permissions and limitations under the License.
#
cluster.name: azure
# Azure discovery allows to use Azure API in order to perform discovery. # Azure discovery allows to use Azure API in order to perform discovery.
# #
# You have to install the cloud-azure plugin for enabling the Azure discovery. # You have to install the cloud-azure plugin for enabling the Azure discovery.
@ -18,13 +16,15 @@
# See <http://elasticsearch.org/guide/reference/modules/discovery/azure.html> # See <http://elasticsearch.org/guide/reference/modules/discovery/azure.html>
# for more information. # for more information.
# #
# See <http://elasticsearch.org/tutorials/2013/04/02/elasticsearch-on-azure.html> # See <https://github.com/elasticsearch/elasticsearch-cloud-azure/>
# for a step-by-step tutorial. # for a step-by-step tutorial.
cloud: #
azure: # cloud:
keystore: FULLPATH-TO-YOUR-KEYSTORE # azure:
password: YOUR-PASSWORD # keystore: FULLPATH-TO-YOUR-KEYSTORE
subscription_id: YOUR-AZURE-SUBSCRIPTION-ID # password: YOUR-PASSWORD
service_name: YOUR-AZURE-SERVICE-NAME # subscription_id: YOUR-AZURE-SUBSCRIPTION-ID
discovery: # service_name: YOUR-AZURE-SERVICE-NAME
type: azure #
# discovery:
# type: azure