/*
 * 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.testsuites;

import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
import org.apache.ignite.IgniteSystemProperties;
import org.apache.ignite.cache.IgniteCacheEntryProcessorSequentialCallTest;
import org.apache.ignite.cache.IgniteWarmupClosureSelfTest;
import org.apache.ignite.cache.store.CacheStoreReadFromBackupTest;
import org.apache.ignite.cache.store.GridCacheBalancingStoreSelfTest;
import org.apache.ignite.cache.store.GridStoreLoadCacheTest;
import org.apache.ignite.cache.store.StoreResourceInjectionSelfTest;
import org.apache.ignite.cache.store.jdbc.CacheJdbcPojoStoreTest;
import org.apache.ignite.cache.store.jdbc.GridCacheJdbcBlobStoreSelfTest;
import org.apache.ignite.cache.store.jdbc.JdbcTypesDefaultTransformerTest;
import org.apache.ignite.internal.managers.communication.IgniteCommunicationBalanceMultipleConnectionsTest;
import org.apache.ignite.internal.managers.communication.IgniteCommunicationBalancePairedConnectionsTest;
import org.apache.ignite.internal.managers.communication.IgniteCommunicationBalanceTest;
import org.apache.ignite.internal.managers.communication.IgniteCommunicationSslBalanceTest;
import org.apache.ignite.internal.managers.communication.IgniteIoTestMessagesTest;
import org.apache.ignite.internal.managers.communication.IgniteVariousConnectionNumberTest;
import org.apache.ignite.internal.processors.cache.CacheAffinityCallSelfTest;
import org.apache.ignite.internal.processors.cache.CacheDeferredDeleteQueueTest;
import org.apache.ignite.internal.processors.cache.CacheDeferredDeleteSanitySelfTest;
import org.apache.ignite.internal.processors.cache.CacheMvccTxFastFinishTest;
import org.apache.ignite.internal.processors.cache.CacheTxFastFinishTest;
import org.apache.ignite.internal.processors.cache.DataStorageConfigurationValidationTest;
import org.apache.ignite.internal.processors.cache.GridCacheAffinityApiSelfTest;
import org.apache.ignite.internal.processors.cache.GridCacheAffinityMapperSelfTest;
import org.apache.ignite.internal.processors.cache.GridCacheAffinityRoutingSelfTest;
import org.apache.ignite.internal.processors.cache.GridCacheAsyncOperationsLimitSelfTest;
import org.apache.ignite.internal.processors.cache.GridCacheConfigurationConsistencySelfTest;
import org.apache.ignite.internal.processors.cache.GridCacheConfigurationValidationSelfTest;
import org.apache.ignite.internal.processors.cache.GridCacheLifecycleAwareSelfTest;
import org.apache.ignite.internal.processors.cache.GridCacheMissingCommitVersionSelfTest;
import org.apache.ignite.internal.processors.cache.GridCacheMvccManagerSelfTest;
import org.apache.ignite.internal.processors.cache.GridCacheMvccMultiThreadedUpdateSelfTest;
import org.apache.ignite.internal.processors.cache.GridCacheMvccPartitionedSelfTest;
import org.apache.ignite.internal.processors.cache.GridCacheMvccSelfTest;
import org.apache.ignite.internal.processors.cache.GridCacheOffHeapAtomicMultiThreadedUpdateSelfTest;
import org.apache.ignite.internal.processors.cache.GridCacheOffHeapMultiThreadedUpdateSelfTest;
import org.apache.ignite.internal.processors.cache.GridCachePartitionedLocalStoreSelfTest;
import org.apache.ignite.internal.processors.cache.GridCacheReplicatedLocalStoreSelfTest;
import org.apache.ignite.internal.processors.cache.GridCacheStopSelfTest;
import org.apache.ignite.internal.processors.cache.GridCacheTcpClientDiscoveryMultiThreadedTest;
import org.apache.ignite.internal.processors.cache.GridDataStorageConfigurationConsistencySelfTest;
import org.apache.ignite.internal.processors.cache.IgniteCacheAtomicConcurrentUnorderedUpdateAllTest;
import org.apache.ignite.internal.processors.cache.IgniteCacheAtomicInvokeTest;
import org.apache.ignite.internal.processors.cache.IgniteCacheAtomicNearEnabledInvokeTest;
import org.apache.ignite.internal.processors.cache.IgniteCacheAtomicStopBusySelfTest;
import org.apache.ignite.internal.processors.cache.IgniteCacheAtomicWithStoreInvokeTest;
import org.apache.ignite.internal.processors.cache.IgniteCacheEntryListenerAtomicReplicatedTest;
import org.apache.ignite.internal.processors.cache.IgniteCacheEntryListenerAtomicTest;
import org.apache.ignite.internal.processors.cache.IgniteCacheEntryProcessorCallTest;
import org.apache.ignite.internal.processors.cache.IgniteCacheManyAsyncOperationsTest;
import org.apache.ignite.internal.processors.cache.IgniteCacheMvccTxInvokeTest;
import org.apache.ignite.internal.processors.cache.IgniteCacheMvccTxNearEnabledInvokeTest;
import org.apache.ignite.internal.processors.cache.IgniteCacheTxInvokeTest;
import org.apache.ignite.internal.processors.cache.IgniteCacheTxNearEnabledInvokeTest;
import org.apache.ignite.internal.processors.cache.IgniteClientAffinityAssignmentSelfTest;
import org.apache.ignite.internal.processors.cache.IgniteIncompleteCacheObjectSelfTest;
import org.apache.ignite.internal.processors.cache.binary.CacheKeepBinaryWithInterceptorTest;
import org.apache.ignite.internal.processors.cache.binary.distributed.dht.GridCacheAffinityRoutingBinarySelfTest;
import org.apache.ignite.internal.processors.cache.binary.distributed.dht.GridCacheAtomicPartitionedOnlyBinaryDataStreamerMultiNodeSelfTest;
import org.apache.ignite.internal.processors.cache.binary.distributed.dht.GridCacheAtomicPartitionedOnlyBinaryDataStreamerMultithreadedSelfTest;
import org.apache.ignite.internal.processors.cache.binary.distributed.dht.GridCacheAtomicPartitionedOnlyBinaryMultiNodeSelfTest;
import org.apache.ignite.internal.processors.cache.binary.distributed.dht.GridCacheAtomicPartitionedOnlyBinaryMultithreadedSelfTest;
import org.apache.ignite.internal.processors.cache.binary.distributed.dht.GridCacheBinariesNearPartitionedByteArrayValuesSelfTest;
import org.apache.ignite.internal.processors.cache.binary.distributed.dht.GridCacheBinariesPartitionedOnlyByteArrayValuesSelfTest;
import org.apache.ignite.internal.processors.cache.context.IgniteCacheAtomicExecutionContextTest;
import org.apache.ignite.internal.processors.cache.context.IgniteCacheContinuousExecutionContextTest;
import org.apache.ignite.internal.processors.cache.context.IgniteCacheIsolatedExecutionContextTest;
import org.apache.ignite.internal.processors.cache.context.IgniteCacheP2PDisableExecutionContextTest;
import org.apache.ignite.internal.processors.cache.context.IgniteCachePrivateExecutionContextTest;
import org.apache.ignite.internal.processors.cache.context.IgniteCacheReplicatedExecutionContextTest;
import org.apache.ignite.internal.processors.cache.context.IgniteCacheSharedExecutionContextTest;
import org.apache.ignite.internal.processors.cache.distributed.CacheAtomicNearUpdateTopologyChangeTest;
import org.apache.ignite.internal.processors.cache.distributed.GridCacheClientModesTcpClientDiscoveryAbstractTest;
import org.apache.ignite.internal.processors.cache.distributed.IgniteCacheAtomicMessageRecovery10ConnectionsTest;
import org.apache.ignite.internal.processors.cache.distributed.IgniteCacheAtomicMessageRecoveryPairedConnectionsTest;
import org.apache.ignite.internal.processors.cache.distributed.IgniteCacheAtomicMessageRecoveryTest;
import org.apache.ignite.internal.processors.cache.distributed.IgniteCacheConnectionRecovery10ConnectionsTest;
import org.apache.ignite.internal.processors.cache.distributed.IgniteCacheConnectionRecoveryTest;
import org.apache.ignite.internal.processors.cache.distributed.IgniteCacheMessageRecoveryIdleConnectionTest;
import org.apache.ignite.internal.processors.cache.distributed.IgniteCacheMessageWriteTimeoutTest;
import org.apache.ignite.internal.processors.cache.distributed.dht.GridCacheAtomicNearCacheSelfTest;
import org.apache.ignite.internal.processors.cache.distributed.dht.GridCachePartitionsStateValidatorSelfTest;
import org.apache.ignite.internal.processors.cache.distributed.dht.GridCachePartitionsUpdateCountersAndSizeTest;
import org.apache.ignite.internal.processors.cache.query.continuous.CacheEntryProcessorExternalizableFailedTest;
import org.apache.ignite.internal.processors.cache.query.continuous.CacheEntryProcessorNonSerializableTest;
import org.apache.ignite.testframework.junits.DynamicSuite;
import org.junit.runner.RunWith;

/**
 * Test suite.
 */
@RunWith(DynamicSuite.class)
public class IgniteCacheMvccTestSuite1 {
    /**
     * @return IgniteCache test suite.
     */
    public static List<Class<?>> suite() {
        System.setProperty(IgniteSystemProperties.IGNITE_FORCE_MVCC_MODE_IN_TESTS, "true");

        Set<Class> ignoredTests = new HashSet<>();

        // Skip classes that already contains Mvcc tests
        ignoredTests.add(CacheKeepBinaryWithInterceptorTest.class);
        ignoredTests.add(CacheEntryProcessorNonSerializableTest.class);
        ignoredTests.add(CacheEntryProcessorExternalizableFailedTest.class);
        ignoredTests.add(IgniteCacheEntryProcessorSequentialCallTest.class);
        ignoredTests.add(IgniteCacheEntryProcessorCallTest.class);
        ignoredTests.add(GridCacheConfigurationConsistencySelfTest.class);
        ignoredTests.add(IgniteCacheMessageRecoveryIdleConnectionTest.class);
        ignoredTests.add(IgniteCacheConnectionRecoveryTest.class);
        ignoredTests.add(IgniteCacheConnectionRecovery10ConnectionsTest.class);
        ignoredTests.add(CacheDeferredDeleteSanitySelfTest.class);
        ignoredTests.add(CacheDeferredDeleteQueueTest.class);
        ignoredTests.add(GridCacheStopSelfTest.class);
        ignoredTests.add(GridCacheBinariesNearPartitionedByteArrayValuesSelfTest.class);
        ignoredTests.add(GridCacheBinariesPartitionedOnlyByteArrayValuesSelfTest.class);

        // Atomic caches.
        ignoredTests.add(IgniteCacheEntryListenerAtomicTest.class);
        ignoredTests.add(IgniteCacheEntryListenerAtomicReplicatedTest.class);
        ignoredTests.add(IgniteCacheAtomicInvokeTest.class);
        ignoredTests.add(IgniteCacheAtomicNearEnabledInvokeTest.class);
        ignoredTests.add(IgniteCacheAtomicWithStoreInvokeTest.class);
        ignoredTests.add(IgniteCacheAtomicConcurrentUnorderedUpdateAllTest.class);
        ignoredTests.add(GridCachePartitionedLocalStoreSelfTest.class);
        ignoredTests.add(GridCacheReplicatedLocalStoreSelfTest.class);
        ignoredTests.add(CacheStoreReadFromBackupTest.class);

        ignoredTests.add(IgniteCacheAtomicExecutionContextTest.class);
        ignoredTests.add(IgniteCacheReplicatedExecutionContextTest.class);
        ignoredTests.add(IgniteCacheContinuousExecutionContextTest.class);
        ignoredTests.add(IgniteCacheIsolatedExecutionContextTest.class);
        ignoredTests.add(IgniteCacheP2PDisableExecutionContextTest.class);
        ignoredTests.add(IgniteCachePrivateExecutionContextTest.class);
        ignoredTests.add(IgniteCacheSharedExecutionContextTest.class);

        ignoredTests.add(IgniteCacheAtomicStopBusySelfTest.class);
        ignoredTests.add(GridCacheAtomicNearCacheSelfTest.class);
        ignoredTests.add(CacheAtomicNearUpdateTopologyChangeTest.class);
        ignoredTests.add(GridCacheOffHeapAtomicMultiThreadedUpdateSelfTest.class);
        ignoredTests.add(IgniteCacheAtomicMessageRecoveryTest.class);
        ignoredTests.add(IgniteCacheAtomicMessageRecoveryPairedConnectionsTest.class);
        ignoredTests.add(IgniteCacheAtomicMessageRecovery10ConnectionsTest.class);

        ignoredTests.add(GridCacheClientModesTcpClientDiscoveryAbstractTest.CaseNearPartitionedAtomic.class);
        ignoredTests.add(GridCacheClientModesTcpClientDiscoveryAbstractTest.CaseNearReplicatedAtomic.class);
        ignoredTests.add(GridCacheClientModesTcpClientDiscoveryAbstractTest.CaseClientPartitionedAtomic.class);
        ignoredTests.add(GridCacheClientModesTcpClientDiscoveryAbstractTest.CaseClientReplicatedAtomic.class);

        ignoredTests.add(GridCacheAtomicPartitionedOnlyBinaryDataStreamerMultiNodeSelfTest.class);
        ignoredTests.add(GridCacheAtomicPartitionedOnlyBinaryDataStreamerMultithreadedSelfTest.class);
        ignoredTests.add(GridCacheAtomicPartitionedOnlyBinaryMultiNodeSelfTest.class);
        ignoredTests.add(GridCacheAtomicPartitionedOnlyBinaryMultithreadedSelfTest.class);

        // Irrelevant tests.
        ignoredTests.add(GridCacheMvccSelfTest.class); // This is about MvccCandidate, but not TxSnapshot.
        ignoredTests.add(GridCacheMvccPartitionedSelfTest.class); // This is about MvccCandidate, but not TxSnapshot.
        ignoredTests.add(GridCacheMvccManagerSelfTest.class); // This is about MvccCandidate, but not TxSnapshot.
        ignoredTests.add(GridCacheMissingCommitVersionSelfTest.class); // Mvcc tx states resides in TxLog.

        // Other non-Tx test.
        ignoredTests.add(GridCacheAffinityRoutingSelfTest.class);
        ignoredTests.add(GridCacheAffinityRoutingBinarySelfTest.class);
        ignoredTests.add(IgniteClientAffinityAssignmentSelfTest.class);
        ignoredTests.add(CacheAffinityCallSelfTest.class);
        ignoredTests.add(GridCacheAffinityMapperSelfTest.class);
        ignoredTests.add(GridCacheAffinityApiSelfTest.class);

        ignoredTests.add(GridCacheConfigurationValidationSelfTest.class);

        ignoredTests.add(GridDataStorageConfigurationConsistencySelfTest.class);
        ignoredTests.add(DataStorageConfigurationValidationTest.class);
        ignoredTests.add(JdbcTypesDefaultTransformerTest.class);
        ignoredTests.add(GridCacheJdbcBlobStoreSelfTest.class);
        ignoredTests.add(CacheJdbcPojoStoreTest.class);
        ignoredTests.add(GridCacheBalancingStoreSelfTest.class);
        ignoredTests.add(GridStoreLoadCacheTest.class);

        ignoredTests.add(IgniteWarmupClosureSelfTest.class);
        ignoredTests.add(StoreResourceInjectionSelfTest.class);
        ignoredTests.add(GridCacheAsyncOperationsLimitSelfTest.class);
        ignoredTests.add(IgniteCacheManyAsyncOperationsTest.class);
        ignoredTests.add(GridCacheLifecycleAwareSelfTest.class);
        ignoredTests.add(IgniteCacheMessageWriteTimeoutTest.class);
        ignoredTests.add(GridCachePartitionsStateValidatorSelfTest.class);
        ignoredTests.add(GridCachePartitionsUpdateCountersAndSizeTest.class);
        ignoredTests.add(IgniteVariousConnectionNumberTest.class);
        ignoredTests.add(IgniteIncompleteCacheObjectSelfTest.class);

        ignoredTests.add(IgniteCommunicationBalanceTest.class);
        ignoredTests.add(IgniteCommunicationBalancePairedConnectionsTest.class);
        ignoredTests.add(IgniteCommunicationBalanceMultipleConnectionsTest.class);
        ignoredTests.add(IgniteCommunicationSslBalanceTest.class);
        ignoredTests.add(IgniteIoTestMessagesTest.class);

        ignoredTests.add(GridCacheTcpClientDiscoveryMultiThreadedTest.class);

        // Skip classes which Mvcc implementations are added in this method below.
        ignoredTests.add(GridCacheOffHeapMultiThreadedUpdateSelfTest.class); // See GridCacheMvccMultiThreadedUpdateSelfTest.
        ignoredTests.add(CacheTxFastFinishTest.class); // See CacheMvccTxFastFinishTest.
        ignoredTests.add(IgniteCacheTxInvokeTest.class); // See IgniteCacheMvccTxInvokeTest.
        ignoredTests.add(IgniteCacheTxNearEnabledInvokeTest.class); // See IgniteCacheMvccTxNearEnabledInvokeTest.

        List<Class<?>> suite = new ArrayList<>(IgniteBinaryCacheTestSuite.suite(ignoredTests));

        // Add Mvcc clones.
        suite.add(GridCacheMvccMultiThreadedUpdateSelfTest.class);
        suite.add(CacheMvccTxFastFinishTest.class);
        suite.add(IgniteCacheMvccTxInvokeTest.class);
        suite.add(IgniteCacheMvccTxNearEnabledInvokeTest.class);

        return suite;
    }
}
