Repository: ignite Updated Branches: refs/heads/master fcc4d4a35 -> affddcb05
IGNITE-8156 Ignite Compatibility: common improvements. - Fixes #3901. Signed-off-by: dpavlov <[email protected]> Project: http://git-wip-us.apache.org/repos/asf/ignite/repo Commit: http://git-wip-us.apache.org/repos/asf/ignite/commit/affddcb0 Tree: http://git-wip-us.apache.org/repos/asf/ignite/tree/affddcb0 Diff: http://git-wip-us.apache.org/repos/asf/ignite/diff/affddcb0 Branch: refs/heads/master Commit: affddcb05bd9512eded36a86f6a4b78af703c360 Parents: fcc4d4a Author: Vyacheslav Daradur <[email protected]> Authored: Fri Apr 27 21:43:15 2018 +0300 Committer: dpavlov <[email protected]> Committed: Fri Apr 27 21:43:15 2018 +0300 ---------------------------------------------------------------------- .../DummyPersistenceCompatibilityTest.java | 376 ------------------ .../FoldersReuseCompatibilityTest.java | 33 +- ...itePersistenceCompatibilityAbstractTest.java | 65 +--- .../IgniteUuidCompatibilityTest.java | 189 --------- ...tingToWalV2SerializerWithCompactionTest.java | 9 +- .../PersistenceBasicCompatibilityTest.java | 379 +++++++++++++++++++ .../junits/IgniteCompatibilityAbstractTest.java | 34 +- .../junits/IgniteCompatibilityNodeRunner.java | 5 + .../util/CompatibilityTestsUtils.java | 12 + .../IgniteCompatibilityBasicTestSuite.java | 7 +- 10 files changed, 440 insertions(+), 669 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/ignite/blob/affddcb0/modules/compatibility/src/test/java/org/apache/ignite/compatibility/persistence/DummyPersistenceCompatibilityTest.java ---------------------------------------------------------------------- diff --git a/modules/compatibility/src/test/java/org/apache/ignite/compatibility/persistence/DummyPersistenceCompatibilityTest.java b/modules/compatibility/src/test/java/org/apache/ignite/compatibility/persistence/DummyPersistenceCompatibilityTest.java deleted file mode 100644 index b36f563..0000000 --- a/modules/compatibility/src/test/java/org/apache/ignite/compatibility/persistence/DummyPersistenceCompatibilityTest.java +++ /dev/null @@ -1,376 +0,0 @@ -/* - * 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.compatibility.persistence; - -import java.io.Externalizable; -import java.io.IOException; -import java.io.ObjectInput; -import java.io.ObjectOutput; -import java.io.Serializable; -import javax.cache.Cache; -import org.apache.ignite.Ignite; -import org.apache.ignite.IgniteCache; -import org.apache.ignite.cache.CacheAtomicityMode; -import org.apache.ignite.cache.CacheWriteSynchronizationMode; -import org.apache.ignite.configuration.BinaryConfiguration; -import org.apache.ignite.configuration.CacheConfiguration; -import org.apache.ignite.configuration.DataRegionConfiguration; -import org.apache.ignite.configuration.DataStorageConfiguration; -import org.apache.ignite.configuration.IgniteConfiguration; -import org.apache.ignite.configuration.PersistentStoreConfiguration; -import org.apache.ignite.internal.IgniteEx; -import org.apache.ignite.internal.processors.cache.GridCacheAbstractFullApiSelfTest; -import org.apache.ignite.internal.util.typedef.internal.U; -import org.apache.ignite.lang.IgniteInClosure; -import org.apache.ignite.spi.discovery.tcp.TcpDiscoverySpi; - -/** - * Saves data using previous version of ignite and then load this data using actual version - */ -public class DummyPersistenceCompatibilityTest extends IgnitePersistenceCompatibilityAbstractTest { - /** */ - protected static final String TEST_CACHE_NAME = DummyPersistenceCompatibilityTest.class.getSimpleName(); - - /** */ - protected volatile boolean compactFooter; - - /** {@inheritDoc} */ - @Override protected void beforeTest() throws Exception { - super.beforeTest(); - - U.delete(U.resolveWorkDirectory(U.defaultWorkDirectory(), "binary_meta", false)); - } - - /** {@inheritDoc} */ - @Override protected IgniteConfiguration getConfiguration(String igniteInstanceName) throws Exception { - IgniteConfiguration cfg = super.getConfiguration(igniteInstanceName); - - cfg.setPeerClassLoadingEnabled(false); - - cfg.setDataStorageConfiguration( - new DataStorageConfiguration() - .setDefaultDataRegionConfiguration( - new DataRegionConfiguration() - .setPersistenceEnabled(true) - )); - - cfg.setBinaryConfiguration( - new BinaryConfiguration() - .setCompactFooter(compactFooter) - ); - - return cfg; - } - - /** - * Tests opportunity to read data from previous Ignite DB version. - * - * @throws Exception If failed. - */ - public void testNodeStartByOldVersionPersistenceData_2_2() throws Exception { - doTestStartupWithOldVersion("2.2.0"); - } - - /** - * Tests opportunity to read data from previous Ignite DB version. - * - * @throws Exception If failed. - */ - public void testNodeStartByOldVersionPersistenceData_2_1() throws Exception { - doTestStartupWithOldVersion("2.1.0"); - } - - /** - * Tests opportunity to read data from previous Ignite DB version. - * - * @throws Exception If failed. - */ - public void testNodeStartByOldVersionPersistenceData_2_3() throws Exception { - doTestStartupWithOldVersion("2.3.0"); - } - - /** - * Tests opportunity to read data from previous Ignite DB version. - * - * @param igniteVer 3-digits version of ignite - * @throws Exception If failed. - */ - protected void doTestStartupWithOldVersion(String igniteVer, boolean compactFooter) throws Exception { - boolean prev = this.compactFooter; - - try { - this.compactFooter = compactFooter; - - startGrid(1, igniteVer, new ConfigurationClosure(compactFooter), new PostStartupClosure()); - - stopAllGrids(); - - IgniteEx ignite = startGrid(0); - - assertEquals(1, ignite.context().discovery().topologyVersion()); - - ignite.active(true); - - validateResultingCacheData(ignite.cache(TEST_CACHE_NAME)); - } - finally { - stopAllGrids(); - - this.compactFooter = prev; - } - } - - /** - * Tests opportunity to read data from previous Ignite DB version. - * - * @param igniteVer 3-digits version of ignite - * @throws Exception If failed. - */ - protected void doTestStartupWithOldVersion(String igniteVer) throws Exception { - doTestStartupWithOldVersion(igniteVer, true); - } - - /** - * @param cache to be filled by different keys and values. Results may be validated in {@link - * #validateResultingCacheData(Cache)}. - */ - public static void saveCacheData(Cache<Object, Object> cache) { - for (int i = 0; i < 10; i++) - cache.put(i, "data" + i); - - cache.put("1", "2"); - cache.put(12, 2); - cache.put(13L, 2L); - cache.put(TestEnum.A, "Enum_As_Key"); - cache.put("Enum_As_Value", TestEnum.B); - cache.put(TestEnum.C, TestEnum.C); - cache.put("Serializable", new TestSerializable(42)); - cache.put(new TestSerializable(42), "Serializable_As_Key"); - cache.put("Externalizable", new TestExternalizable(42)); - cache.put(new TestExternalizable(42), "Externalizable_As_Key"); - cache.put("testStringContainer", new TestStringContainerToBePrinted("testStringContainer")); - } - - /** - * Asserts cache contained all expected values as it was saved before. - * @param cache cache should be filled using {@link #saveCacheData(Cache)}. - */ - public static void validateResultingCacheData(Cache<Object, Object> cache) { - for (int i = 0; i < 10; i++) - assertEquals(cache.get(i), "data" + i); - - assertEquals("2", cache.get("1")); - assertEquals(2, cache.get(12)); - assertEquals(2L, cache.get(13L)); - assertEquals("Enum_As_Key", cache.get(TestEnum.A)); - assertEquals(TestEnum.B, cache.get("Enum_As_Value")); - assertEquals(TestEnum.C, cache.get(TestEnum.C)); - assertEquals(new TestSerializable(42), cache.get("Serializable")); - assertEquals("Serializable_As_Key", cache.get(new TestSerializable(42))); - assertEquals(new TestExternalizable(42), cache.get("Externalizable")); - assertEquals("Externalizable_As_Key", cache.get(new TestExternalizable(42))); - assertEquals(new TestStringContainerToBePrinted("testStringContainer"), cache.get("testStringContainer")); - } - - /** */ - public static class PostStartupClosure implements IgniteInClosure<Ignite> { - /** {@inheritDoc} */ - @Override public void apply(Ignite ignite) { - ignite.active(true); - - CacheConfiguration<Object, Object> cacheCfg = new CacheConfiguration<>(); - cacheCfg.setName(TEST_CACHE_NAME); - cacheCfg.setAtomicityMode(CacheAtomicityMode.TRANSACTIONAL); - cacheCfg.setBackups(1); - cacheCfg.setWriteSynchronizationMode(CacheWriteSynchronizationMode.FULL_SYNC); - - IgniteCache<Object, Object> cache = ignite.createCache(cacheCfg); - - saveCacheData(cache); - } - } - - /** */ - public static class ConfigurationClosure implements IgniteInClosure<IgniteConfiguration> { - private boolean compactFooter; - - public ConfigurationClosure(boolean compactFooter) { - this.compactFooter = compactFooter; - } - - /** {@inheritDoc} */ - @Override public void apply(IgniteConfiguration cfg) { - cfg.setLocalHost("127.0.0.1"); - - TcpDiscoverySpi disco = new TcpDiscoverySpi(); - disco.setIpFinder(GridCacheAbstractFullApiSelfTest.LOCAL_IP_FINDER); - - cfg.setDiscoverySpi(disco); - - cfg.setPeerClassLoadingEnabled(false); - - cfg.setPersistentStoreConfiguration(new PersistentStoreConfiguration()); - - if (!compactFooter) - cfg.setBinaryConfiguration(new BinaryConfiguration().setCompactFooter(compactFooter)); - } - } - - /** Enum for cover binaryObject enum save/load. */ - public enum TestEnum { - /** */A, /** */B, /** */C - } - - /** Special class to test WAL reader resistance to Serializable interface. */ - static class TestSerializable implements Serializable { - /** */ - private static final long serialVersionUID = 0L; - - /** I value. */ - private int iVal; - - /** - * Creates test object - * - * @param iVal I value. - */ - TestSerializable(int iVal) { - this.iVal = iVal; - } - - /** {@inheritDoc} */ - @Override public String toString() { - return "TestSerializable{" + - "iVal=" + iVal + - '}'; - } - - /** {@inheritDoc} */ - @Override public boolean equals(Object o) { - if (this == o) - return true; - if (o == null || getClass() != o.getClass()) - return false; - - TestSerializable that = (TestSerializable)o; - - return iVal == that.iVal; - } - - /** {@inheritDoc} */ - @Override public int hashCode() { - return iVal; - } - } - - /** Special class to test WAL reader resistance to Serializable interface. */ - static class TestExternalizable implements Externalizable { - /** */ - private static final long serialVersionUID = 0L; - - /** I value. */ - private int iVal; - - /** Noop ctor for unmarshalling */ - public TestExternalizable() { - - } - - /** - * Creates test object with provided value. - * - * @param iVal I value. - */ - public TestExternalizable(int iVal) { - this.iVal = iVal; - } - - /** {@inheritDoc} */ - @Override public String toString() { - return "TestExternalizable{" + - "iVal=" + iVal + - '}'; - } - - /** {@inheritDoc} */ - @Override public void writeExternal(ObjectOutput out) throws IOException { - out.writeInt(iVal); - } - - /** {@inheritDoc} */ - @Override public void readExternal(ObjectInput in) throws IOException, ClassNotFoundException { - iVal = in.readInt(); - } - - /** {@inheritDoc} */ - @Override public boolean equals(Object o) { - if (this == o) - return true; - if (o == null || getClass() != o.getClass()) - return false; - - TestExternalizable that = (TestExternalizable)o; - - return iVal == that.iVal; - } - - /** {@inheritDoc} */ - @Override public int hashCode() { - return iVal; - } - } - - /** Container class to test toString of data records. */ - static class TestStringContainerToBePrinted { - /** */ - String data; - - /** - * Creates container. - * - * @param data value to be searched in to String. - */ - public TestStringContainerToBePrinted(String data) { - this.data = data; - } - - /** {@inheritDoc} */ - @Override public boolean equals(Object o) { - if (this == o) - return true; - if (o == null || getClass() != o.getClass()) - return false; - - TestStringContainerToBePrinted printed = (TestStringContainerToBePrinted)o; - - return data != null ? data.equals(printed.data) : printed.data == null; - } - - /** {@inheritDoc} */ - @Override public int hashCode() { - return data != null ? data.hashCode() : 0; - } - - /** {@inheritDoc} */ - @Override public String toString() { - return "TestStringContainerToBePrinted{" + - "data='" + data + '\'' + - '}'; - } - } -} http://git-wip-us.apache.org/repos/asf/ignite/blob/affddcb0/modules/compatibility/src/test/java/org/apache/ignite/compatibility/persistence/FoldersReuseCompatibilityTest.java ---------------------------------------------------------------------- diff --git a/modules/compatibility/src/test/java/org/apache/ignite/compatibility/persistence/FoldersReuseCompatibilityTest.java b/modules/compatibility/src/test/java/org/apache/ignite/compatibility/persistence/FoldersReuseCompatibilityTest.java index 5a64381..69eecb1 100644 --- a/modules/compatibility/src/test/java/org/apache/ignite/compatibility/persistence/FoldersReuseCompatibilityTest.java +++ b/modules/compatibility/src/test/java/org/apache/ignite/compatibility/persistence/FoldersReuseCompatibilityTest.java @@ -56,19 +56,6 @@ public class FoldersReuseCompatibilityTest extends IgnitePersistenceCompatibilit private static final String KEY_OBJ = "ObjectFromPrevVersion"; /** {@inheritDoc} */ - @Override protected void afterTest() throws Exception { - // No-op. super.afterTest(); - stopAllGrids(); - } - - /** {@inheritDoc} */ - @Override protected void beforeTest() throws Exception { - super.beforeTest(); - - U.delete(U.resolveWorkDirectory(U.defaultWorkDirectory(), "binary_meta", false)); - } - - /** {@inheritDoc} */ @Override protected IgniteConfiguration getConfiguration(String igniteInstanceName) throws Exception { final IgniteConfiguration cfg = super.getConfiguration(igniteInstanceName); @@ -129,7 +116,7 @@ public class FoldersReuseCompatibilityTest extends IgnitePersistenceCompatibilit assertEquals(VAL, ignite.cache(CACHE_NAME).get(KEY)); - final DummyPersistenceCompatibilityTest.TestStringContainerToBePrinted actual = (DummyPersistenceCompatibilityTest.TestStringContainerToBePrinted)ignite.cache(CACHE_NAME).get(KEY_OBJ); + final PersistenceBasicCompatibilityTest.TestStringContainerToBePrinted actual = (PersistenceBasicCompatibilityTest.TestStringContainerToBePrinted)ignite.cache(CACHE_NAME).get(KEY_OBJ); assertEquals(VAL, actual.data); assertNodeIndexesInFolder();// should not create any new style directories @@ -148,15 +135,15 @@ public class FoldersReuseCompatibilityTest extends IgnitePersistenceCompatibilit cache.put("1", "2"); cache.put(1, 2); cache.put(1L, 2L); - cache.put(DummyPersistenceCompatibilityTest.TestEnum.A, "Enum_As_Key"); - cache.put("Enum_As_Value", DummyPersistenceCompatibilityTest.TestEnum.B); - cache.put(DummyPersistenceCompatibilityTest.TestEnum.C, DummyPersistenceCompatibilityTest.TestEnum.C); - - cache.put("Serializable", new DummyPersistenceCompatibilityTest.TestSerializable(42)); - cache.put(new DummyPersistenceCompatibilityTest.TestSerializable(42), "Serializable_As_Key"); - cache.put("Externalizable", new DummyPersistenceCompatibilityTest.TestExternalizable(42)); - cache.put(new DummyPersistenceCompatibilityTest.TestExternalizable(42), "Externalizable_As_Key"); - cache.put(KEY_OBJ, new DummyPersistenceCompatibilityTest.TestStringContainerToBePrinted(VAL)); + cache.put(PersistenceBasicCompatibilityTest.TestEnum.A, "Enum_As_Key"); + cache.put("Enum_As_Value", PersistenceBasicCompatibilityTest.TestEnum.B); + cache.put(PersistenceBasicCompatibilityTest.TestEnum.C, PersistenceBasicCompatibilityTest.TestEnum.C); + + cache.put("Serializable", new PersistenceBasicCompatibilityTest.TestSerializable(42)); + cache.put(new PersistenceBasicCompatibilityTest.TestSerializable(42), "Serializable_As_Key"); + cache.put("Externalizable", new PersistenceBasicCompatibilityTest.TestExternalizable(42)); + cache.put(new PersistenceBasicCompatibilityTest.TestExternalizable(42), "Externalizable_As_Key"); + cache.put(KEY_OBJ, new PersistenceBasicCompatibilityTest.TestStringContainerToBePrinted(VAL)); } } http://git-wip-us.apache.org/repos/asf/ignite/blob/affddcb0/modules/compatibility/src/test/java/org/apache/ignite/compatibility/persistence/IgnitePersistenceCompatibilityAbstractTest.java ---------------------------------------------------------------------- diff --git a/modules/compatibility/src/test/java/org/apache/ignite/compatibility/persistence/IgnitePersistenceCompatibilityAbstractTest.java b/modules/compatibility/src/test/java/org/apache/ignite/compatibility/persistence/IgnitePersistenceCompatibilityAbstractTest.java index f39b6f6..b08f6f7 100644 --- a/modules/compatibility/src/test/java/org/apache/ignite/compatibility/persistence/IgnitePersistenceCompatibilityAbstractTest.java +++ b/modules/compatibility/src/test/java/org/apache/ignite/compatibility/persistence/IgnitePersistenceCompatibilityAbstractTest.java @@ -18,27 +18,34 @@ package org.apache.ignite.compatibility.persistence; import java.io.File; -import java.nio.file.Files; -import java.nio.file.Path; -import java.nio.file.Paths; -import org.apache.ignite.IgniteCheckedException; +import java.util.Arrays; +import java.util.List; import org.apache.ignite.compatibility.testframework.junits.IgniteCompatibilityAbstractTest; +import org.apache.ignite.compatibility.testframework.util.CompatibilityTestsUtils; import org.apache.ignite.internal.util.typedef.internal.U; import static org.apache.ignite.internal.processors.cache.persistence.file.FilePageStoreManager.DFLT_STORE_DIR; +import static org.apache.ignite.internal.processors.cache.persistence.wal.reader.StandaloneGridKernalContext.BINARY_META_FOLDER; /** * Super class for all persistence compatibility tests. */ public abstract class IgnitePersistenceCompatibilityAbstractTest extends IgniteCompatibilityAbstractTest { + /** Persistence directories. */ + private static final List<String> PERSISTENCE_DIRS = Arrays.asList(DFLT_STORE_DIR, BINARY_META_FOLDER, "cp", "marshaller"); + /** {@inheritDoc} */ @Override protected void beforeTest() throws Exception { super.beforeTest(); - if (!isDefaultDBWorkDirectoryEmpty()) - deleteDefaultDBWorkDirectory(); + for (String dirName : PERSISTENCE_DIRS) { + File dir = U.resolveWorkDirectory(U.defaultWorkDirectory(), dirName, true); - assert isDefaultDBWorkDirectoryEmpty() : "DB work directory is not empty."; + if (!CompatibilityTestsUtils.isDirectoryEmpty(dir)) { + throw new IllegalStateException("Directory is not empty and can't be cleaned: " + + "[" + dir.getAbsolutePath() + "]. It may be locked by another system process."); + } + } } /** {@inheritDoc} */ @@ -48,47 +55,7 @@ public abstract class IgnitePersistenceCompatibilityAbstractTest extends IgniteC //protection if test failed to finish, e.g. by error stopAllGrids(); - assert deleteDefaultDBWorkDirectory() : "Couldn't delete DB work directory."; - } - - /** - * Gets a path to the default DB working directory. - * - * @return Path to the default DB working directory. - * @throws IgniteCheckedException In case of an error. - * @see #deleteDefaultDBWorkDirectory() - * @see #isDefaultDBWorkDirectoryEmpty() - */ - protected Path getDefaultDbWorkPath() throws IgniteCheckedException { - return Paths.get(U.defaultWorkDirectory() + File.separator + DFLT_STORE_DIR); - } - - /** - * Deletes the default DB working directory with all sub-directories and files. - * - * @return {@code true} if and only if the file or directory is successfully deleted, otherwise {@code false}. - * @throws IgniteCheckedException In case of an error. - * @see #getDefaultDbWorkPath() - * @see #deleteDefaultDBWorkDirectory() - */ - protected boolean deleteDefaultDBWorkDirectory() throws IgniteCheckedException { - Path dir = getDefaultDbWorkPath(); - - return Files.notExists(dir) || U.delete(dir.toFile()); - } - - /** - * Checks if the default DB working directory is empty. - * - * @return {@code true} if the default DB working directory is empty or doesn't exist, otherwise {@code false}. - * @throws IgniteCheckedException In case of an error. - * @see #getDefaultDbWorkPath() - * @see #deleteDefaultDBWorkDirectory() - */ - @SuppressWarnings("ConstantConditions") - protected boolean isDefaultDBWorkDirectoryEmpty() throws IgniteCheckedException { - File dir = getDefaultDbWorkPath().toFile(); - - return !dir.exists() || (dir.isDirectory() && dir.list().length == 0); + for (String dir : PERSISTENCE_DIRS) + U.delete(U.resolveWorkDirectory(U.defaultWorkDirectory(), dir, false)); } } http://git-wip-us.apache.org/repos/asf/ignite/blob/affddcb0/modules/compatibility/src/test/java/org/apache/ignite/compatibility/persistence/IgniteUuidCompatibilityTest.java ---------------------------------------------------------------------- diff --git a/modules/compatibility/src/test/java/org/apache/ignite/compatibility/persistence/IgniteUuidCompatibilityTest.java b/modules/compatibility/src/test/java/org/apache/ignite/compatibility/persistence/IgniteUuidCompatibilityTest.java deleted file mode 100644 index 88c6900..0000000 --- a/modules/compatibility/src/test/java/org/apache/ignite/compatibility/persistence/IgniteUuidCompatibilityTest.java +++ /dev/null @@ -1,189 +0,0 @@ -/* - * 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.compatibility.persistence; - -import java.util.Arrays; -import java.util.HashSet; -import java.util.Set; -import javax.cache.Cache; -import org.apache.ignite.Ignite; -import org.apache.ignite.IgniteCache; -import org.apache.ignite.cache.CacheAtomicityMode; -import org.apache.ignite.cache.CachePeekMode; -import org.apache.ignite.cache.CacheWriteSynchronizationMode; -import org.apache.ignite.configuration.BinaryConfiguration; -import org.apache.ignite.configuration.CacheConfiguration; -import org.apache.ignite.configuration.DataRegionConfiguration; -import org.apache.ignite.configuration.DataStorageConfiguration; -import org.apache.ignite.configuration.IgniteConfiguration; -import org.apache.ignite.configuration.PersistentStoreConfiguration; -import org.apache.ignite.internal.IgniteEx; -import org.apache.ignite.internal.binary.BinaryContext; -import org.apache.ignite.internal.processors.cache.GridCacheAbstractFullApiSelfTest; -import org.apache.ignite.internal.util.typedef.internal.U; -import org.apache.ignite.lang.IgniteInClosure; -import org.apache.ignite.lang.IgniteUuid; -import org.apache.ignite.spi.discovery.tcp.TcpDiscoverySpi; - -/** - * Checks that index and caches with IgniteUuid are compatible when IgniteUuid becomes predefined type. - * - * @see BinaryContext#registerPredefinedType(Class, int) - */ -public class IgniteUuidCompatibilityTest extends IgnitePersistenceCompatibilityAbstractTest { - /** */ - protected static final String TEST_CACHE_NAME = IgniteUuidCompatibilityTest.class.getSimpleName(); - - /** */ - protected volatile boolean compactFooter; - - /** */ - private static Set<String> VALUES = new HashSet<>(Arrays.asList("one", "two", "three")); - - /** {@inheritDoc} */ - @Override protected void beforeTest() throws Exception { - super.beforeTest(); - - U.delete(U.resolveWorkDirectory(U.defaultWorkDirectory(), "binary_meta", false)); - } - - /** {@inheritDoc} */ - @Override protected IgniteConfiguration getConfiguration(String igniteInstanceName) throws Exception { - IgniteConfiguration cfg = super.getConfiguration(igniteInstanceName); - - cfg.setPeerClassLoadingEnabled(false); - - cfg.setDataStorageConfiguration( - new DataStorageConfiguration() - .setDefaultDataRegionConfiguration( - new DataRegionConfiguration() - .setPersistenceEnabled(true) - )); - - cfg.setBinaryConfiguration( - new BinaryConfiguration() - .setCompactFooter(compactFooter) - ); - - return cfg; - } - - /** - * Tests opportunity to read data from previous Ignite DB version for cache contains IgniteUuid instances. - * - * @throws Exception If failed. - */ - public void testIgniteUuid_2_3() throws Exception { - doTestIgniteUuidCompatibility("2.3.0", false); - } - - /** - * Tests opportunity to read data from previous Ignite DB version for cache contains IgniteUuid instances. - * - * @throws Exception If failed. - */ - public void testIgniteUuidWithCompactFooter_2_3() throws Exception { - doTestIgniteUuidCompatibility("2.3.0", true); - } - - /** - * Tests opportunity to read data from previous Ignite DB version. - * - * @param igniteVer 3-digits version of ignite - * @throws Exception If failed. - */ - private void doTestIgniteUuidCompatibility(String igniteVer, boolean compactFooter) throws Exception { - boolean prev = this.compactFooter; - - try { - this.compactFooter = compactFooter; - - startGrid(1, igniteVer, new ConfigurationClosure(compactFooter), new PutData()); - - stopAllGrids(); - - IgniteEx ignite = startGrid(0); - - assertEquals(1, ignite.context().discovery().topologyVersion()); - - ignite.active(true); - - IgniteCache<IgniteUuid, String> cache = ignite.cache(TEST_CACHE_NAME); - - assertEquals(cache.size(CachePeekMode.ALL), VALUES.size()); - - Set<String> values = new HashSet<>(); - - for (Cache.Entry<IgniteUuid, String> e : cache) - values.add(e.getValue()); - - assertEquals(values, VALUES); - } - finally { - stopAllGrids(); - - this.compactFooter = prev; - } - } - - /** */ - public static class ConfigurationClosure implements IgniteInClosure<IgniteConfiguration> { - private boolean compactFooter; - - public ConfigurationClosure(boolean compactFooter) { - this.compactFooter = compactFooter; - } - - /** {@inheritDoc} */ - @Override public void apply(IgniteConfiguration cfg) { - cfg.setLocalHost("127.0.0.1"); - - TcpDiscoverySpi disco = new TcpDiscoverySpi(); - disco.setIpFinder(GridCacheAbstractFullApiSelfTest.LOCAL_IP_FINDER); - - cfg.setDiscoverySpi(disco); - - cfg.setPeerClassLoadingEnabled(false); - - cfg.setPersistentStoreConfiguration(new PersistentStoreConfiguration()); - - if (!compactFooter) - cfg.setBinaryConfiguration(new BinaryConfiguration().setCompactFooter(compactFooter)); - } - } - - /** */ - public static class PutData implements IgniteInClosure<Ignite> { - /** {@inheritDoc} */ - @Override public void apply(Ignite ignite) { - ignite.active(true); - - CacheConfiguration<IgniteUuid, String> cacheCfg = new CacheConfiguration<>(); - - cacheCfg.setName(TEST_CACHE_NAME); - cacheCfg.setAtomicityMode(CacheAtomicityMode.TRANSACTIONAL); - cacheCfg.setBackups(1); - cacheCfg.setWriteSynchronizationMode(CacheWriteSynchronizationMode.FULL_SYNC); - - IgniteCache<IgniteUuid, String> cache = ignite.createCache(cacheCfg); - - for (String v : VALUES) - cache.put(IgniteUuid.randomUuid(), v); - } - } -} http://git-wip-us.apache.org/repos/asf/ignite/blob/affddcb0/modules/compatibility/src/test/java/org/apache/ignite/compatibility/persistence/MigratingToWalV2SerializerWithCompactionTest.java ---------------------------------------------------------------------- diff --git a/modules/compatibility/src/test/java/org/apache/ignite/compatibility/persistence/MigratingToWalV2SerializerWithCompactionTest.java b/modules/compatibility/src/test/java/org/apache/ignite/compatibility/persistence/MigratingToWalV2SerializerWithCompactionTest.java index d79790e..c9f572f 100644 --- a/modules/compatibility/src/test/java/org/apache/ignite/compatibility/persistence/MigratingToWalV2SerializerWithCompactionTest.java +++ b/modules/compatibility/src/test/java/org/apache/ignite/compatibility/persistence/MigratingToWalV2SerializerWithCompactionTest.java @@ -40,7 +40,7 @@ import org.apache.ignite.spi.discovery.tcp.TcpDiscoverySpi; */ public class MigratingToWalV2SerializerWithCompactionTest extends IgnitePersistenceCompatibilityAbstractTest { /** */ - private static final String TEST_CACHE_NAME = DummyPersistenceCompatibilityTest.class.getSimpleName(); + private static final String TEST_CACHE_NAME = MigratingToWalV2SerializerWithCompactionTest.class.getSimpleName(); /** Entries count. */ private static final int ENTRIES = 300; @@ -52,13 +52,6 @@ public class MigratingToWalV2SerializerWithCompactionTest extends IgnitePersiste private static final int PAYLOAD_SIZE = 20000; /** {@inheritDoc} */ - @Override protected void beforeTest() throws Exception { - super.beforeTest(); - - U.delete(U.resolveWorkDirectory(U.defaultWorkDirectory(), "binary_meta", false)); - } - - /** {@inheritDoc} */ @Override protected IgniteConfiguration getConfiguration(String igniteInstanceName) throws Exception { IgniteConfiguration cfg = super.getConfiguration(igniteInstanceName); http://git-wip-us.apache.org/repos/asf/ignite/blob/affddcb0/modules/compatibility/src/test/java/org/apache/ignite/compatibility/persistence/PersistenceBasicCompatibilityTest.java ---------------------------------------------------------------------- diff --git a/modules/compatibility/src/test/java/org/apache/ignite/compatibility/persistence/PersistenceBasicCompatibilityTest.java b/modules/compatibility/src/test/java/org/apache/ignite/compatibility/persistence/PersistenceBasicCompatibilityTest.java new file mode 100644 index 0000000..af14b04 --- /dev/null +++ b/modules/compatibility/src/test/java/org/apache/ignite/compatibility/persistence/PersistenceBasicCompatibilityTest.java @@ -0,0 +1,379 @@ +/* + * 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.compatibility.persistence; + +import java.io.Externalizable; +import java.io.IOException; +import java.io.ObjectInput; +import java.io.ObjectOutput; +import java.io.Serializable; +import java.util.UUID; +import javax.cache.Cache; +import org.apache.ignite.Ignite; +import org.apache.ignite.IgniteCache; +import org.apache.ignite.cache.CacheAtomicityMode; +import org.apache.ignite.cache.CacheWriteSynchronizationMode; +import org.apache.ignite.configuration.BinaryConfiguration; +import org.apache.ignite.configuration.CacheConfiguration; +import org.apache.ignite.configuration.DataRegionConfiguration; +import org.apache.ignite.configuration.DataStorageConfiguration; +import org.apache.ignite.configuration.IgniteConfiguration; +import org.apache.ignite.configuration.PersistentStoreConfiguration; +import org.apache.ignite.internal.IgniteEx; +import org.apache.ignite.internal.processors.cache.GridCacheAbstractFullApiSelfTest; +import org.apache.ignite.lang.IgniteInClosure; +import org.apache.ignite.spi.discovery.tcp.TcpDiscoverySpi; + +/** + * Saves data using previous version of ignite and then load this data using actual version. + */ +public class PersistenceBasicCompatibilityTest extends IgnitePersistenceCompatibilityAbstractTest { + /** */ + protected static final String TEST_CACHE_NAME = PersistenceBasicCompatibilityTest.class.getSimpleName(); + + /** */ + protected volatile boolean compactFooter; + + /** {@inheritDoc} */ + @Override protected IgniteConfiguration getConfiguration(String igniteInstanceName) throws Exception { + IgniteConfiguration cfg = super.getConfiguration(igniteInstanceName); + + cfg.setPeerClassLoadingEnabled(false); + + cfg.setDataStorageConfiguration( + new DataStorageConfiguration() + .setDefaultDataRegionConfiguration( + new DataRegionConfiguration() + .setPersistenceEnabled(true) + )); + + cfg.setBinaryConfiguration( + new BinaryConfiguration() + .setCompactFooter(compactFooter) + ); + + return cfg; + } + + /** + * Tests opportunity to read data from previous Ignite DB version. + * + * @throws Exception If failed. + */ + public void testNodeStartByOldVersionPersistenceData_2_2() throws Exception { + doTestStartupWithOldVersion("2.2.0"); + } + + /** + * Tests opportunity to read data from previous Ignite DB version. + * + * @throws Exception If failed. + */ + public void testNodeStartByOldVersionPersistenceData_2_1() throws Exception { + doTestStartupWithOldVersion("2.1.0"); + } + + /** + * Tests opportunity to read data from previous Ignite DB version. + * + * @throws Exception If failed. + */ + public void testNodeStartByOldVersionPersistenceData_2_3() throws Exception { + doTestStartupWithOldVersion("2.3.0"); + } + + /** + * Tests opportunity to read data from previous Ignite DB version. + * + * @param igniteVer 3-digits version of ignite + * @throws Exception If failed. + */ + protected void doTestStartupWithOldVersion(String igniteVer, boolean compactFooter) throws Exception { + boolean prev = this.compactFooter; + + try { + this.compactFooter = compactFooter; + + startGrid(1, igniteVer, new ConfigurationClosure(compactFooter), new PostStartupClosure()); + + stopAllGrids(); + + IgniteEx ignite = startGrid(0); + + assertEquals(1, ignite.context().discovery().topologyVersion()); + + ignite.active(true); + + validateResultingCacheData(ignite.cache(TEST_CACHE_NAME)); + } + finally { + stopAllGrids(); + + this.compactFooter = prev; + } + } + + /** + * Tests opportunity to read data from previous Ignite DB version. + * + * @param igniteVer 3-digits version of ignite + * @throws Exception If failed. + */ + protected void doTestStartupWithOldVersion(String igniteVer) throws Exception { + doTestStartupWithOldVersion(igniteVer, true); + } + + /** + * @param cache to be filled by different keys and values. Results may be validated in {@link + * #validateResultingCacheData(Cache)}. + */ + public static void saveCacheData(Cache<Object, Object> cache) { + for (int i = 0; i < 10; i++) + cache.put(i, "data" + i); + + cache.put("1", "2"); + cache.put(12, 2); + cache.put(13L, 2L); + cache.put(TestEnum.A, "Enum_As_Key"); + cache.put("Enum_As_Value", TestEnum.B); + cache.put(TestEnum.C, TestEnum.C); + cache.put("Serializable", new TestSerializable(42)); + cache.put(new TestSerializable(42), "Serializable_As_Key"); + cache.put("Externalizable", new TestExternalizable(42)); + cache.put(new TestExternalizable(42), "Externalizable_As_Key"); + cache.put("testStringContainer", new TestStringContainerToBePrinted("testStringContainer")); + cache.put(UUID.fromString("DA9E0049-468C-4680-BF85-D5379164FDCC"), + UUID.fromString("B851B870-3BA7-4E5F-BDB8-458B42300000")); + } + + /** + * Asserts cache contained all expected values as it was saved before. + * + * @param cache Cache should be filled using {@link #saveCacheData(Cache)}. + */ + public static void validateResultingCacheData(Cache<Object, Object> cache) { + assertNotNull(cache); + + for (int i = 0; i < 10; i++) + assertEquals("data" + i, cache.get(i)); + + assertEquals("2", cache.get("1")); + assertEquals(2, cache.get(12)); + assertEquals(2L, cache.get(13L)); + assertEquals("Enum_As_Key", cache.get(TestEnum.A)); + assertEquals(TestEnum.B, cache.get("Enum_As_Value")); + assertEquals(TestEnum.C, cache.get(TestEnum.C)); + assertEquals(new TestSerializable(42), cache.get("Serializable")); + assertEquals("Serializable_As_Key", cache.get(new TestSerializable(42))); + assertEquals(new TestExternalizable(42), cache.get("Externalizable")); + assertEquals("Externalizable_As_Key", cache.get(new TestExternalizable(42))); + assertEquals(new TestStringContainerToBePrinted("testStringContainer"), cache.get("testStringContainer")); + assertEquals(UUID.fromString("B851B870-3BA7-4E5F-BDB8-458B42300000"), + cache.get(UUID.fromString("DA9E0049-468C-4680-BF85-D5379164FDCC"))); + } + + /** */ + public static class PostStartupClosure implements IgniteInClosure<Ignite> { + /** {@inheritDoc} */ + @Override public void apply(Ignite ignite) { + ignite.active(true); + + CacheConfiguration<Object, Object> cacheCfg = new CacheConfiguration<>(); + cacheCfg.setName(TEST_CACHE_NAME); + cacheCfg.setAtomicityMode(CacheAtomicityMode.TRANSACTIONAL); + cacheCfg.setBackups(1); + cacheCfg.setWriteSynchronizationMode(CacheWriteSynchronizationMode.FULL_SYNC); + + IgniteCache<Object, Object> cache = ignite.createCache(cacheCfg); + + saveCacheData(cache); + } + } + + /** */ + public static class ConfigurationClosure implements IgniteInClosure<IgniteConfiguration> { + /** Compact footer. */ + private boolean compactFooter; + + /** + * @param compactFooter Compact footer. + */ + public ConfigurationClosure(boolean compactFooter) { + this.compactFooter = compactFooter; + } + + /** {@inheritDoc} */ + @Override public void apply(IgniteConfiguration cfg) { + cfg.setLocalHost("127.0.0.1"); + + TcpDiscoverySpi disco = new TcpDiscoverySpi(); + disco.setIpFinder(GridCacheAbstractFullApiSelfTest.LOCAL_IP_FINDER); + + cfg.setDiscoverySpi(disco); + + cfg.setPeerClassLoadingEnabled(false); + + cfg.setPersistentStoreConfiguration(new PersistentStoreConfiguration()); + + cfg.setBinaryConfiguration(new BinaryConfiguration().setCompactFooter(compactFooter)); + } + } + + /** Enum for cover binaryObject enum save/load. */ + public enum TestEnum { + /** */A, /** */B, /** */C + } + + /** Special class to test WAL reader resistance to Serializable interface. */ + static class TestSerializable implements Serializable { + /** */ + private static final long serialVersionUID = 0L; + + /** I value. */ + private int iVal; + + /** + * Creates test object + * + * @param iVal I value. + */ + TestSerializable(int iVal) { + this.iVal = iVal; + } + + /** {@inheritDoc} */ + @Override public String toString() { + return "TestSerializable{" + + "iVal=" + iVal + + '}'; + } + + /** {@inheritDoc} */ + @Override public boolean equals(Object o) { + if (this == o) + return true; + if (o == null || getClass() != o.getClass()) + return false; + + TestSerializable that = (TestSerializable)o; + + return iVal == that.iVal; + } + + /** {@inheritDoc} */ + @Override public int hashCode() { + return iVal; + } + } + + /** Special class to test WAL reader resistance to Serializable interface. */ + static class TestExternalizable implements Externalizable { + /** */ + private static final long serialVersionUID = 0L; + + /** I value. */ + private int iVal; + + /** Noop ctor for unmarshalling */ + public TestExternalizable() { + + } + + /** + * Creates test object with provided value. + * + * @param iVal I value. + */ + public TestExternalizable(int iVal) { + this.iVal = iVal; + } + + /** {@inheritDoc} */ + @Override public String toString() { + return "TestExternalizable{" + + "iVal=" + iVal + + '}'; + } + + /** {@inheritDoc} */ + @Override public void writeExternal(ObjectOutput out) throws IOException { + out.writeInt(iVal); + } + + /** {@inheritDoc} */ + @Override public void readExternal(ObjectInput in) throws IOException, ClassNotFoundException { + iVal = in.readInt(); + } + + /** {@inheritDoc} */ + @Override public boolean equals(Object o) { + if (this == o) + return true; + if (o == null || getClass() != o.getClass()) + return false; + + TestExternalizable that = (TestExternalizable)o; + + return iVal == that.iVal; + } + + /** {@inheritDoc} */ + @Override public int hashCode() { + return iVal; + } + } + + /** Container class to test toString of data records. */ + static class TestStringContainerToBePrinted { + /** */ + String data; + + /** + * Creates container. + * + * @param data value to be searched in to String. + */ + public TestStringContainerToBePrinted(String data) { + this.data = data; + } + + /** {@inheritDoc} */ + @Override public boolean equals(Object o) { + if (this == o) + return true; + if (o == null || getClass() != o.getClass()) + return false; + + TestStringContainerToBePrinted printed = (TestStringContainerToBePrinted)o; + + return data != null ? data.equals(printed.data) : printed.data == null; + } + + /** {@inheritDoc} */ + @Override public int hashCode() { + return data != null ? data.hashCode() : 0; + } + + /** {@inheritDoc} */ + @Override public String toString() { + return "TestStringContainerToBePrinted{" + + "data='" + data + '\'' + + '}'; + } + } +} http://git-wip-us.apache.org/repos/asf/ignite/blob/affddcb0/modules/compatibility/src/test/java/org/apache/ignite/compatibility/testframework/junits/IgniteCompatibilityAbstractTest.java ---------------------------------------------------------------------- diff --git a/modules/compatibility/src/test/java/org/apache/ignite/compatibility/testframework/junits/IgniteCompatibilityAbstractTest.java b/modules/compatibility/src/test/java/org/apache/ignite/compatibility/testframework/junits/IgniteCompatibilityAbstractTest.java index f1aceb5..2301717 100644 --- a/modules/compatibility/src/test/java/org/apache/ignite/compatibility/testframework/junits/IgniteCompatibilityAbstractTest.java +++ b/modules/compatibility/src/test/java/org/apache/ignite/compatibility/testframework/junits/IgniteCompatibilityAbstractTest.java @@ -21,9 +21,11 @@ import java.io.File; import java.net.URL; import java.util.ArrayList; import java.util.Collection; +import java.util.Set; import java.util.UUID; import java.util.concurrent.CountDownLatch; import java.util.concurrent.TimeUnit; +import java.util.stream.Collectors; import org.apache.ignite.Ignite; import org.apache.ignite.IgniteLogger; import org.apache.ignite.compatibility.testframework.junits.logger.ListenedGridTestLog4jLogger; @@ -164,31 +166,25 @@ public abstract class IgniteCompatibilityAbstractTest extends GridCommonAbstract filteredJvmArgs.add(arg); } - ClassLoader ldr = CLASS_LOADER; - final Collection<Dependency> dependencies = getDependencies(ver); + Set<String> excluded = dependencies.stream().map(Dependency::localPathTemplate).collect(Collectors.toSet()); + StringBuilder pathBuilder = new StringBuilder(); - for (URL url : CompatibilityTestsUtils.classLoaderUrls(ldr)) { + for (URL url : CompatibilityTestsUtils.classLoaderUrls(CLASS_LOADER)) { String path = url.getPath(); - boolean excluded = false; - for (Dependency next : dependencies) { - if (path.contains(next.localPathTemplate())) { - excluded = true; - break; - } - } - if (!excluded) + if (excluded.stream().noneMatch(path::contains)) pathBuilder.append(path).append(File.pathSeparator); } - for (Dependency next : dependencies) { - final String artifactVer = next.version() != null ? next.version() : ver; - final String grpName = next.groupName() != null ? next.groupName() : "org.apache.ignite"; - String pathToArtifact = MavenUtils.getPathToIgniteArtifact(grpName, next.artifactName(), - artifactVer, next.classifier()); + for (Dependency dependency : dependencies) { + final String artifactVer = dependency.version() != null ? dependency.version() : ver; + final String grpName = dependency.groupName() != null ? dependency.groupName() : "org.apache.ignite"; + + String pathToArtifact = MavenUtils.getPathToIgniteArtifact(grpName, dependency.artifactName(), + artifactVer, dependency.classifier()); pathBuilder.append(pathToArtifact).append(File.pathSeparator); } @@ -196,7 +192,7 @@ public abstract class IgniteCompatibilityAbstractTest extends GridCommonAbstract filteredJvmArgs.add("-cp"); filteredJvmArgs.add(pathBuilder.toString()); - final Collection<String> jvmParms = getJvmParms(); + final Collection<String> jvmParms = getJvmParams(); if (jvmParms != null) filteredJvmArgs.addAll(jvmParms); @@ -255,7 +251,7 @@ public abstract class IgniteCompatibilityAbstractTest extends GridCommonAbstract * * @return additional JVM arguments */ - protected Collection<String> getJvmParms() { + protected Collection<String> getJvmParams() { return new ArrayList<>(); } @@ -327,4 +323,4 @@ public abstract class IgniteCompatibilityAbstractTest extends GridCommonAbstract nodeJoinedLatch.countDown(); } } -} \ No newline at end of file +} http://git-wip-us.apache.org/repos/asf/ignite/blob/affddcb0/modules/compatibility/src/test/java/org/apache/ignite/compatibility/testframework/junits/IgniteCompatibilityNodeRunner.java ---------------------------------------------------------------------- diff --git a/modules/compatibility/src/test/java/org/apache/ignite/compatibility/testframework/junits/IgniteCompatibilityNodeRunner.java b/modules/compatibility/src/test/java/org/apache/ignite/compatibility/testframework/junits/IgniteCompatibilityNodeRunner.java index 2ad5544..165cb4c 100644 --- a/modules/compatibility/src/test/java/org/apache/ignite/compatibility/testframework/junits/IgniteCompatibilityNodeRunner.java +++ b/modules/compatibility/src/test/java/org/apache/ignite/compatibility/testframework/junits/IgniteCompatibilityNodeRunner.java @@ -106,12 +106,16 @@ public class IgniteCompatibilityNodeRunner extends IgniteNodeRunner { } X.println(IgniteCompatibilityAbstractTest.SYNCHRONIZATION_LOG_MESSAGE + nodeId); + watchdog.interrupt(); } catch (Throwable e) { e.printStackTrace(); + X.println("Dumping classpath, error occurred: " + e); + dumpClasspath(); + throw e; } } @@ -147,6 +151,7 @@ public class IgniteCompatibilityNodeRunner extends IgniteNodeRunner { }; final Thread thread = new Thread(target); + thread.setDaemon(true); thread.start(); http://git-wip-us.apache.org/repos/asf/ignite/blob/affddcb0/modules/compatibility/src/test/java/org/apache/ignite/compatibility/testframework/util/CompatibilityTestsUtils.java ---------------------------------------------------------------------- diff --git a/modules/compatibility/src/test/java/org/apache/ignite/compatibility/testframework/util/CompatibilityTestsUtils.java b/modules/compatibility/src/test/java/org/apache/ignite/compatibility/testframework/util/CompatibilityTestsUtils.java index ce48ff8..5e6be51 100644 --- a/modules/compatibility/src/test/java/org/apache/ignite/compatibility/testframework/util/CompatibilityTestsUtils.java +++ b/modules/compatibility/src/test/java/org/apache/ignite/compatibility/testframework/util/CompatibilityTestsUtils.java @@ -17,6 +17,7 @@ package org.apache.ignite.compatibility.testframework.util; +import java.io.File; import java.lang.reflect.Field; import java.net.URL; import java.net.URLClassLoader; @@ -90,4 +91,15 @@ public class CompatibilityTestsUtils { return null; } } + + /** + * Checks if the given directory is empty. + * + * @param dir Directory to check. + * @return {@code true} if the given directory is empty or doesn't exist, otherwise {@code false}. + */ + @SuppressWarnings("ConstantConditions") + public static boolean isDirectoryEmpty(File dir) { + return !dir.exists() || (dir.isDirectory() && dir.list().length == 0); + } } http://git-wip-us.apache.org/repos/asf/ignite/blob/affddcb0/modules/compatibility/src/test/java/org/apache/ignite/compatibility/testsuites/IgniteCompatibilityBasicTestSuite.java ---------------------------------------------------------------------- diff --git a/modules/compatibility/src/test/java/org/apache/ignite/compatibility/testsuites/IgniteCompatibilityBasicTestSuite.java b/modules/compatibility/src/test/java/org/apache/ignite/compatibility/testsuites/IgniteCompatibilityBasicTestSuite.java index eaa38af..b526137 100644 --- a/modules/compatibility/src/test/java/org/apache/ignite/compatibility/testsuites/IgniteCompatibilityBasicTestSuite.java +++ b/modules/compatibility/src/test/java/org/apache/ignite/compatibility/testsuites/IgniteCompatibilityBasicTestSuite.java @@ -18,10 +18,9 @@ package org.apache.ignite.compatibility.testsuites; import junit.framework.TestSuite; -import org.apache.ignite.compatibility.persistence.DummyPersistenceCompatibilityTest; import org.apache.ignite.compatibility.persistence.FoldersReuseCompatibilityTest; -import org.apache.ignite.compatibility.persistence.IgniteUuidCompatibilityTest; import org.apache.ignite.compatibility.persistence.MigratingToWalV2SerializerWithCompactionTest; +import org.apache.ignite.compatibility.persistence.PersistenceBasicCompatibilityTest; /** * Compatibility tests basic test suite. @@ -34,14 +33,12 @@ public class IgniteCompatibilityBasicTestSuite { public static TestSuite suite() throws Exception { TestSuite suite = new TestSuite("Ignite Compatibility Basic Test Suite"); - suite.addTestSuite(DummyPersistenceCompatibilityTest.class); + suite.addTestSuite(PersistenceBasicCompatibilityTest.class); suite.addTestSuite(FoldersReuseCompatibilityTest.class); suite.addTestSuite(MigratingToWalV2SerializerWithCompactionTest.class); - suite.addTestSuite(IgniteUuidCompatibilityTest.class); - return suite; } }
