Repository: incubator-ignite Updated Branches: refs/heads/ignite-709_tests [created] 056bb33ec
# IGNITE-709 Create and use org.apache.ignite.testframework.junits.ConfigurationPatcher class. Project: http://git-wip-us.apache.org/repos/asf/incubator-ignite/repo Commit: http://git-wip-us.apache.org/repos/asf/incubator-ignite/commit/056bb33e Tree: http://git-wip-us.apache.org/repos/asf/incubator-ignite/tree/056bb33e Diff: http://git-wip-us.apache.org/repos/asf/incubator-ignite/diff/056bb33e Branch: refs/heads/ignite-709_tests Commit: 056bb33ec3f8a808e85690eee863116ff9baf42d Parents: 97e6bd3 Author: sevdokimov <sevdoki...@gridgain.com> Authored: Mon May 25 16:27:44 2015 +0300 Committer: sevdokimov <sevdoki...@gridgain.com> Committed: Mon May 25 16:27:44 2015 +0300 ---------------------------------------------------------------------- .../tcp/TcpClientDiscoverySpiSelfTest.java | 58 ++++------- .../junits/ConfigurationPatcher.java | 30 ++++++ .../junits/ConfigurationPatchers.java | 104 +++++++++++++++++++ .../testframework/junits/GridAbstractTest.java | 74 ++++++++++++- 4 files changed, 230 insertions(+), 36 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/056bb33e/modules/core/src/test/java/org/apache/ignite/spi/discovery/tcp/TcpClientDiscoverySpiSelfTest.java ---------------------------------------------------------------------- diff --git a/modules/core/src/test/java/org/apache/ignite/spi/discovery/tcp/TcpClientDiscoverySpiSelfTest.java b/modules/core/src/test/java/org/apache/ignite/spi/discovery/tcp/TcpClientDiscoverySpiSelfTest.java index 8157d59..0d9d8a1 100644 --- a/modules/core/src/test/java/org/apache/ignite/spi/discovery/tcp/TcpClientDiscoverySpiSelfTest.java +++ b/modules/core/src/test/java/org/apache/ignite/spi/discovery/tcp/TcpClientDiscoverySpiSelfTest.java @@ -34,6 +34,7 @@ import org.apache.ignite.spi.discovery.tcp.ipfinder.*; import org.apache.ignite.spi.discovery.tcp.ipfinder.vm.*; import org.apache.ignite.spi.discovery.tcp.messages.*; import org.apache.ignite.testframework.*; +import org.apache.ignite.testframework.junits.*; import org.apache.ignite.testframework.junits.common.*; import org.jetbrains.annotations.*; @@ -90,20 +91,8 @@ public class TcpClientDiscoverySpiSelfTest extends GridCommonAbstractTest { private static CountDownLatch msgLatch; /** */ - private UUID nodeId; - - /** */ private TcpDiscoveryVmIpFinder clientIpFinder; - /** */ - private long joinTimeout = TcpClientDiscoverySpi.DFLT_JOIN_TIMEOUT; - - /** */ - private long netTimeout = TcpDiscoverySpiAdapter.DFLT_NETWORK_TIMEOUT; - - /** */ - private boolean longSockTimeouts; - /** {@inheritDoc} */ @Override protected IgniteConfiguration getConfiguration(String gridName) throws Exception { IgniteConfiguration cfg = super.getConfiguration(gridName); @@ -147,19 +136,8 @@ public class TcpClientDiscoverySpiSelfTest extends GridCommonAbstractTest { else throw new IllegalArgumentException(); - if (longSockTimeouts) { - disco.setAckTimeout(2000); - disco.setSocketTimeout(2000); - } - - disco.setJoinTimeout(joinTimeout); - disco.setNetworkTimeout(netTimeout); - cfg.setDiscoverySpi(disco); - if (nodeId != null) - cfg.setNodeId(nodeId); - return cfg; } @@ -184,11 +162,7 @@ public class TcpClientDiscoverySpiSelfTest extends GridCommonAbstractTest { stopAllClients(true); stopAllServers(true); - nodeId = null; clientIpFinder = null; - joinTimeout = TcpClientDiscoverySpi.DFLT_JOIN_TIMEOUT; - netTimeout = TcpClientDiscoverySpi.DFLT_NETWORK_TIMEOUT; - longSockTimeouts = false; assert G.allGrids().isEmpty(); } @@ -199,10 +173,13 @@ public class TcpClientDiscoverySpiSelfTest extends GridCommonAbstractTest { */ public void testJoinTimeout() throws Exception { clientIpFinder = new TcpDiscoveryVmIpFinder(); - joinTimeout = 1000; try { - startClientNodes(1); + startGrid("client-0", new ConfigurationPatchers.DiscoveryPatcher() { + @Override protected void patch(TcpDiscoverySpiAdapter disco) { + disco.setJoinTimeout(500); + } + }); fail("Client cannot be start because no server nodes run"); } @@ -792,10 +769,14 @@ public class TcpClientDiscoverySpiSelfTest extends GridCommonAbstractTest { public void testDuplicateId() throws Exception { startServerNodes(2); - nodeId = G.ignite("server-1").cluster().localNode().id(); + final UUID nodeId = G.ignite("server-1").cluster().localNode().id(); try { - startGrid("client-0"); + startGrid("client-0", new ConfigurationPatcher() { + @Override public void patch(IgniteConfiguration cfg) { + cfg.setNodeId(nodeId); + } + }); assert false; } @@ -811,7 +792,12 @@ public class TcpClientDiscoverySpiSelfTest extends GridCommonAbstractTest { * @throws Exception If any error occurs. */ public void testTimeoutWaitingNodeAddedMessage() throws Exception { - longSockTimeouts = true; + addPatchers(new ConfigurationPatchers.DiscoveryPatcher() { + @Override public void patch(TcpDiscoverySpiAdapter disco) { + disco.setAckTimeout(2000); + disco.setSocketTimeout(2000); + } + }); startServerNodes(2); @@ -832,9 +818,11 @@ public class TcpClientDiscoverySpiSelfTest extends GridCommonAbstractTest { }); try { - netTimeout = 500; - - startGrid("client-0"); + startGrid("client-0", new ConfigurationPatchers.DiscoveryPatcher() { + @Override protected void patch(TcpDiscoverySpiAdapter disco) { + disco.setNetworkTimeout(500); + } + }); assert false; } http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/056bb33e/modules/core/src/test/java/org/apache/ignite/testframework/junits/ConfigurationPatcher.java ---------------------------------------------------------------------- diff --git a/modules/core/src/test/java/org/apache/ignite/testframework/junits/ConfigurationPatcher.java b/modules/core/src/test/java/org/apache/ignite/testframework/junits/ConfigurationPatcher.java new file mode 100644 index 0000000..e4d20fd --- /dev/null +++ b/modules/core/src/test/java/org/apache/ignite/testframework/junits/ConfigurationPatcher.java @@ -0,0 +1,30 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF 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.apache.ignite.testframework.junits; + +import org.apache.ignite.configuration.*; + +/** + * Class allow to modify Ignite configuration. + */ +public interface ConfigurationPatcher { + /** + * @param cfg Configuration to patch. + */ + public void patch(IgniteConfiguration cfg); +} http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/056bb33e/modules/core/src/test/java/org/apache/ignite/testframework/junits/ConfigurationPatchers.java ---------------------------------------------------------------------- diff --git a/modules/core/src/test/java/org/apache/ignite/testframework/junits/ConfigurationPatchers.java b/modules/core/src/test/java/org/apache/ignite/testframework/junits/ConfigurationPatchers.java new file mode 100644 index 0000000..474dfbc --- /dev/null +++ b/modules/core/src/test/java/org/apache/ignite/testframework/junits/ConfigurationPatchers.java @@ -0,0 +1,104 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF 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.apache.ignite.testframework.junits; + +import org.apache.ignite.configuration.*; +import org.apache.ignite.spi.discovery.tcp.*; + +import java.util.*; + +/** + * + */ +public class ConfigurationPatchers { + /** + * Default constructor. + */ + private ConfigurationPatchers() { + // No-op. + } + + /** + * @param patchers Patchers. + */ + public static ConfigurationPatcher union(ConfigurationPatcher ... patchers) { + if (patchers.length == 0) + return EmptyPatcher.INSTANCE; + + if (patchers.length == 1) + return patchers[0]; + + return new Union(Arrays.asList(patchers)); + } + + /** + * + */ + public abstract static class DiscoveryPatcher implements ConfigurationPatcher { + /** + * @param disco Discovery. + */ + protected abstract void patch(TcpDiscoverySpiAdapter disco); + + /** {@inheritDoc} */ + @Override public final void patch(IgniteConfiguration cfg) { + patch((TcpDiscoverySpiAdapter)cfg.getDiscoverySpi()); + } + } + + /** + * + */ + public static class EmptyPatcher implements ConfigurationPatcher { + /** */ + public static final EmptyPatcher INSTANCE = new EmptyPatcher(); + + /** + * + */ + private EmptyPatcher() { + // No-op. + } + + /** {@inheritDoc} */ + @Override public void patch(IgniteConfiguration cfg) { + // No-op. + } + } + + /** + * + */ + public static class Union implements ConfigurationPatcher { + /** */ + private final Collection<ConfigurationPatcher> patchers; + + /** + * @param patchers Patchers. + */ + public Union(Collection<ConfigurationPatcher> patchers) { + this.patchers = patchers; + } + + /** {@inheritDoc} */ + @Override public void patch(IgniteConfiguration cfg) { + for (ConfigurationPatcher patcher : patchers) + patcher.patch(cfg); + } + } +} http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/056bb33e/modules/core/src/test/java/org/apache/ignite/testframework/junits/GridAbstractTest.java ---------------------------------------------------------------------- diff --git a/modules/core/src/test/java/org/apache/ignite/testframework/junits/GridAbstractTest.java b/modules/core/src/test/java/org/apache/ignite/testframework/junits/GridAbstractTest.java index 2cae73a..98d4122 100644 --- a/modules/core/src/test/java/org/apache/ignite/testframework/junits/GridAbstractTest.java +++ b/modules/core/src/test/java/org/apache/ignite/testframework/junits/GridAbstractTest.java @@ -96,6 +96,9 @@ public abstract class GridAbstractTest extends TestCase { /** Starting grid name. */ protected static ThreadLocal<String> startingGrid = new ThreadLocal<>(); + /** */ + private final ThreadLocal<ConfigurationPatcher> patchers = new ThreadLocal<>(); + /** * */ @@ -483,6 +486,8 @@ public abstract class GridAbstractTest extends TestCase { } } + patchers.remove(); + info(">>> Starting test: " + getName() + " <<<"); try { @@ -621,6 +626,24 @@ public abstract class GridAbstractTest extends TestCase { * @return Started grid. * @throws Exception If anything failed. */ + protected IgniteEx startGrid(int idx, ConfigurationPatcher ... patchers) throws Exception { + ConfigurationPatcher oldPatcher = addPatchers(patchers); + + try { + return (IgniteEx)startGrid(getTestGridName(idx)); + } + finally { + setPatcher(oldPatcher); + } + } + + /** + * Starts new grid with given index. + * + * @param idx Index of the grid to start. + * @return Started grid. + * @throws Exception If anything failed. + */ protected IgniteEx startGrid(int idx) throws Exception { return (IgniteEx)startGrid(getTestGridName(idx)); } @@ -644,6 +667,24 @@ public abstract class GridAbstractTest extends TestCase { * @return Started grid. * @throws Exception If failed. */ + protected Ignite startGrid(String gridName, ConfigurationPatcher ... patchers) throws Exception { + ConfigurationPatcher oldPatchers = addPatchers(patchers); + + try { + return startGrid(gridName, (GridSpringResourceContext)null); + } + finally { + setPatcher(oldPatchers); + } + } + + /** + * Starts new grid with given name. + * + * @param gridName Grid name. + * @return Started grid. + * @throws Exception If failed. + */ protected Ignite startGrid(String gridName) throws Exception { return startGrid(gridName, (GridSpringResourceContext)null); } @@ -660,7 +701,12 @@ public abstract class GridAbstractTest extends TestCase { startingGrid.set(gridName); try { - return IgnitionEx.start(optimize(getConfiguration(gridName)), ctx); + IgniteConfiguration cfg = getConfiguration(gridName); + + if (patchers.get() != null) + patchers.get().patch(cfg); + + return IgnitionEx.start(optimize(cfg), ctx); } finally { startingGrid.set(null); @@ -668,6 +714,32 @@ public abstract class GridAbstractTest extends TestCase { } /** + * @param patchers Patchers to add. + * @return Old patcher. + */ + protected ConfigurationPatcher addPatchers(ConfigurationPatcher... patchers) { + ConfigurationPatcher oldPatchers = this.patchers.get(); + + ConfigurationPatcher newPatcher = ConfigurationPatchers.union(patchers); + + this.patchers.set(oldPatchers == null ? newPatcher : ConfigurationPatchers.union(oldPatchers, newPatcher)); + + return oldPatchers; + } + + /** + * @param patcher Patcher to set. + * @return Old patcher. + */ + protected ConfigurationPatcher setPatcher(ConfigurationPatcher patcher) { + ConfigurationPatcher oldPatchers = patchers.get(); + + patchers.set(patcher); + + return oldPatchers; + } + + /** * Optimizes configuration to achieve better test performance. * * @param cfg Configuration.