IGNITE-2881: Fixed SPI queries.
Project: http://git-wip-us.apache.org/repos/asf/ignite/repo Commit: http://git-wip-us.apache.org/repos/asf/ignite/commit/59b46d3e Tree: http://git-wip-us.apache.org/repos/asf/ignite/tree/59b46d3e Diff: http://git-wip-us.apache.org/repos/asf/ignite/diff/59b46d3e Branch: refs/heads/ignite-ssl-hotfix Commit: 59b46d3e6ea073d054ca2262d676b055a74bbb1f Parents: 5e7ef86 Author: vozerov-gridgain <voze...@gridgain.com> Authored: Mon Oct 3 10:40:04 2016 +0300 Committer: vozerov-gridgain <voze...@gridgain.com> Committed: Mon Oct 3 10:40:04 2016 +0300 ---------------------------------------------------------------------- .../org/apache/ignite/cache/query/SpiQuery.java | 8 +- .../processors/cache/IgniteCacheProxy.java | 34 ++- .../cache/query/GridCacheQueryManager.java | 2 +- .../cache/query/IndexingSpiQuerySelfTest.java | 218 +++++++++++++++++++ .../cache/query/IndexingSpiQueryTxSelfTest.java | 162 ++++++++++++++ .../IgniteBinaryCacheQueryTestSuite.java | 1 - .../IgniteCacheQuerySelfTestSuite.java | 5 + 7 files changed, 416 insertions(+), 14 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/ignite/blob/59b46d3e/modules/core/src/main/java/org/apache/ignite/cache/query/SpiQuery.java ---------------------------------------------------------------------- diff --git a/modules/core/src/main/java/org/apache/ignite/cache/query/SpiQuery.java b/modules/core/src/main/java/org/apache/ignite/cache/query/SpiQuery.java index 0c11437..c3aa472 100644 --- a/modules/core/src/main/java/org/apache/ignite/cache/query/SpiQuery.java +++ b/modules/core/src/main/java/org/apache/ignite/cache/query/SpiQuery.java @@ -58,13 +58,13 @@ public final class SpiQuery<K, V> extends Query<Cache.Entry<K, V>> { } /** {@inheritDoc} */ - @Override public SqlQuery<K, V> setPageSize(int pageSize) { - return (SqlQuery<K, V>)super.setPageSize(pageSize); + @Override public SpiQuery<K, V> setPageSize(int pageSize) { + return (SpiQuery<K, V>)super.setPageSize(pageSize); } /** {@inheritDoc} */ - @Override public SqlQuery<K, V> setLocal(boolean loc) { - return (SqlQuery<K, V>)super.setLocal(loc); + @Override public SpiQuery<K, V> setLocal(boolean loc) { + return (SpiQuery<K, V>)super.setLocal(loc); } /** {@inheritDoc} */ http://git-wip-us.apache.org/repos/asf/ignite/blob/59b46d3e/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/IgniteCacheProxy.java ---------------------------------------------------------------------- diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/IgniteCacheProxy.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/IgniteCacheProxy.java index 81d4b49..58c7c9c 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/IgniteCacheProxy.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/IgniteCacheProxy.java @@ -533,11 +533,11 @@ public class IgniteCacheProxy<K, V> extends AsyncSupportAdapter<IgniteCache<K, V @SuppressWarnings("unchecked") private QueryCursor<Cache.Entry<K, V>> query(final Query filter, @Nullable ClusterGroup grp) throws IgniteCheckedException { - final CacheQuery<Map.Entry<K, V>> qry; + final CacheQuery qry; boolean isKeepBinary = opCtx != null && opCtx.isKeepBinary(); - final CacheQueryFuture<Map.Entry<K, V>> fut; + final CacheQueryFuture fut; if (filter instanceof TextQuery) { TextQuery p = (TextQuery)filter; @@ -561,8 +561,8 @@ public class IgniteCacheProxy<K, V> extends AsyncSupportAdapter<IgniteCache<K, V qry.projection(grp); fut = ctx.kernalContext().query().executeQuery(ctx, - new IgniteOutClosureX<CacheQueryFuture<Map.Entry<K, V>>>() { - @Override public CacheQueryFuture<Map.Entry<K, V>> applyx() throws IgniteCheckedException { + new IgniteOutClosureX<CacheQueryFuture<Cache.Entry<K, V>>>() { + @Override public CacheQueryFuture<Cache.Entry<K, V>> applyx() throws IgniteCheckedException { return qry.execute(((SpiQuery)filter).getArgs()); } }, false); @@ -577,21 +577,39 @@ public class IgniteCacheProxy<K, V> extends AsyncSupportAdapter<IgniteCache<K, V return new QueryCursorImpl<>(new GridCloseableIteratorAdapter<Entry<K, V>>() { /** */ - private Map.Entry<K, V> cur; + private Cache.Entry<K, V> cur; @Override protected Entry<K, V> onNext() throws IgniteCheckedException { if (!onHasNext()) throw new NoSuchElementException(); - Map.Entry<K, V> e = cur; + Cache.Entry<K, V> e = cur; cur = null; - return new CacheEntryImpl<>(e.getKey(), e.getValue()); + return e; } @Override protected boolean onHasNext() throws IgniteCheckedException { - return cur != null || (cur = fut.next()) != null; + if (cur != null) + return true; + + Object next = fut.next(); + + // Workaround a bug: if IndexingSpi is configured future represents Iterator<Cache.Entry> + // instead of Iterator<Map.Entry> due to IndexingSpi interface. + if (next == null) + return false; + + if (next instanceof Cache.Entry) + cur = (Cache.Entry)next; + else { + Map.Entry e = (Map.Entry)next; + + cur = new CacheEntryImpl(e.getKey(), e.getValue()); + } + + return true; } @Override protected void onClose() throws IgniteCheckedException { http://git-wip-us.apache.org/repos/asf/ignite/blob/59b46d3e/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/query/GridCacheQueryManager.java ---------------------------------------------------------------------- diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/query/GridCacheQueryManager.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/query/GridCacheQueryManager.java index 9699f09..7bd1a51 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/query/GridCacheQueryManager.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/query/GridCacheQueryManager.java @@ -690,7 +690,7 @@ public abstract class GridCacheQueryManager<K, V> extends GridCacheManagerAdapte T2<String, List<Object>> resKey = null; - if (qry.clause() == null) { + if (qry.clause() == null && qry.type() != SPI) { assert !loc; throw new IgniteCheckedException("Received next page request after iterator was removed. " + http://git-wip-us.apache.org/repos/asf/ignite/blob/59b46d3e/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/query/IndexingSpiQuerySelfTest.java ---------------------------------------------------------------------- diff --git a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/query/IndexingSpiQuerySelfTest.java b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/query/IndexingSpiQuerySelfTest.java new file mode 100644 index 0000000..94b0c8a --- /dev/null +++ b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/query/IndexingSpiQuerySelfTest.java @@ -0,0 +1,218 @@ +/* + * 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.internal.processors.cache.query; + +import junit.framework.TestCase; +import org.apache.ignite.Ignite; +import org.apache.ignite.IgniteCache; +import org.apache.ignite.IgniteTransactions; +import org.apache.ignite.Ignition; +import org.apache.ignite.cache.CacheAtomicityMode; +import org.apache.ignite.cache.query.QueryCursor; +import org.apache.ignite.cache.query.SpiQuery; +import org.apache.ignite.configuration.CacheConfiguration; +import org.apache.ignite.configuration.IgniteConfiguration; +import org.apache.ignite.internal.processors.cache.CacheEntryImpl; +import org.apache.ignite.internal.transactions.IgniteTxHeuristicCheckedException; +import org.apache.ignite.spi.IgniteSpiAdapter; +import org.apache.ignite.spi.IgniteSpiException; +import org.apache.ignite.spi.discovery.tcp.TcpDiscoverySpi; +import org.apache.ignite.spi.discovery.tcp.ipfinder.vm.TcpDiscoveryVmIpFinder; +import org.apache.ignite.spi.indexing.IndexingQueryFilter; +import org.apache.ignite.spi.indexing.IndexingSpi; +import org.apache.ignite.testframework.GridTestUtils; +import org.apache.ignite.transactions.Transaction; +import org.apache.ignite.transactions.TransactionConcurrency; +import org.apache.ignite.transactions.TransactionIsolation; +import org.apache.ignite.transactions.TransactionState; +import org.jetbrains.annotations.Nullable; + +import java.util.ArrayList; +import java.util.Collection; +import java.util.Iterator; +import java.util.Map; +import java.util.SortedMap; +import java.util.TreeMap; +import java.util.concurrent.Callable; +import javax.cache.Cache; + +/** + * Indexing Spi query test + */ +public class IndexingSpiQuerySelfTest extends TestCase { + /** {@inheritDoc} */ + @Override public void tearDown() throws Exception { + Ignition.stopAll(true); + } + + /** + * @throws Exception If failed. + */ + public void testSimpleIndexingSpi() throws Exception { + IgniteConfiguration cfg = configuration(); + + cfg.setIndexingSpi(new MyIndexingSpi()); + + Ignite ignite = Ignition.start(cfg); + + CacheConfiguration<Integer, Integer> ccfg = new CacheConfiguration<>("test-cache"); + + ccfg.setIndexedTypes(Integer.class, Integer.class); + + IgniteCache<Integer, Integer> cache = ignite.createCache(ccfg); + + for (int i = 0; i < 10; i++) + cache.put(i, i); + + QueryCursor<Cache.Entry<Integer, Integer>> cursor = cache.query(new SpiQuery<Integer, Integer>().setArgs(2, 5)); + + for (Cache.Entry<Integer, Integer> entry : cursor) + System.out.println(entry); + } + + /** + * @throws Exception If failed. + */ + @SuppressWarnings("ThrowableResultOfMethodCallIgnored") + public void testIndexingSpiFailure() throws Exception { + IgniteConfiguration cfg = configuration(); + + cfg.setIndexingSpi(new MyBrokenIndexingSpi()); + + Ignite ignite = Ignition.start(cfg); + + CacheConfiguration<Integer, Integer> ccfg = new CacheConfiguration<>("test-cache"); + + ccfg.setAtomicityMode(CacheAtomicityMode.TRANSACTIONAL); + ccfg.setIndexedTypes(Integer.class, Integer.class); + + final IgniteCache<Integer, Integer> cache = ignite.createCache(ccfg); + + final IgniteTransactions txs = ignite.transactions(); + + for (final TransactionConcurrency concurrency : TransactionConcurrency.values()) { + for (final TransactionIsolation isolation : TransactionIsolation.values()) { + System.out.println("Run in transaction: " + concurrency + " " + isolation); + + GridTestUtils.assertThrowsWithCause(new Callable<Void>() { + @Override public Void call() throws Exception { + Transaction tx; + + try (Transaction tx0 = tx = txs.txStart(concurrency, isolation)) { + cache.put(1, 1); + + tx0.commit(); + } + + assertEquals(TransactionState.ROLLED_BACK, tx.state()); + return null; + } + }, IgniteTxHeuristicCheckedException.class); + } + } + } + + /** + * @return Configuration. + */ + private IgniteConfiguration configuration() { + IgniteConfiguration cfg = new IgniteConfiguration(); + + TcpDiscoveryVmIpFinder ipFinder = new TcpDiscoveryVmIpFinder(true); + TcpDiscoverySpi disco = new TcpDiscoverySpi(); + + disco.setMaxMissedHeartbeats(Integer.MAX_VALUE); + + disco.setIpFinder(ipFinder); + + cfg.setDiscoverySpi(disco); + + return cfg; + } + + /** + * Indexing Spi implementation for test + */ + private static class MyIndexingSpi extends IgniteSpiAdapter implements IndexingSpi { + /** Index. */ + private final SortedMap<Object, Object> idx = new TreeMap<>(); + + /** {@inheritDoc} */ + @Override public void spiStart(@Nullable String gridName) throws IgniteSpiException { + // No-op. + } + + /** {@inheritDoc} */ + @Override public void spiStop() throws IgniteSpiException { + // No-op. + } + + /** {@inheritDoc} */ + @Override public Iterator<Cache.Entry<?, ?>> query(@Nullable String spaceName, Collection<Object> params, + @Nullable IndexingQueryFilter filters) throws IgniteSpiException { + if (params.size() < 2) + throw new IgniteSpiException("Range parameters required."); + + Iterator<Object> paramsIt = params.iterator(); + + Object from = paramsIt.next(); + Object to = paramsIt.next(); + + SortedMap<Object, Object> map = idx.subMap(from, to); + + Collection<Cache.Entry<?, ?>> res = new ArrayList<>(map.size()); + + for (Map.Entry<Object, Object> entry : map.entrySet()) + res.add(new CacheEntryImpl<>(entry.getKey(), entry.getValue())); + + return res.iterator(); + } + + /** {@inheritDoc} */ + @Override public void store(@Nullable String spaceName, Object key, Object val, long expirationTime) + throws IgniteSpiException { + idx.put(key, val); + } + + /** {@inheritDoc} */ + @Override public void remove(@Nullable String spaceName, Object key) throws IgniteSpiException { + // No-op. + } + + /** {@inheritDoc} */ + @Override public void onSwap(@Nullable String spaceName, Object key) throws IgniteSpiException { + // No-op. + } + + /** {@inheritDoc} */ + @Override public void onUnswap(@Nullable String spaceName, Object key, Object val) throws IgniteSpiException { + // No-op. + } + } + + /** + * Broken Indexing Spi implementation for test + */ + private class MyBrokenIndexingSpi extends MyIndexingSpi { + /** {@inheritDoc} */ + @Override public void store(@Nullable String spaceName, Object key, Object val, + long expirationTime) throws IgniteSpiException { + throw new IgniteSpiException("Test exception"); + } + } +} \ No newline at end of file http://git-wip-us.apache.org/repos/asf/ignite/blob/59b46d3e/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/query/IndexingSpiQueryTxSelfTest.java ---------------------------------------------------------------------- diff --git a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/query/IndexingSpiQueryTxSelfTest.java b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/query/IndexingSpiQueryTxSelfTest.java new file mode 100644 index 0000000..78ed1fd --- /dev/null +++ b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/query/IndexingSpiQueryTxSelfTest.java @@ -0,0 +1,162 @@ +/* + * 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.internal.processors.cache.query; + +import org.apache.ignite.IgniteCache; +import org.apache.ignite.IgniteTransactions; +import org.apache.ignite.cache.CacheAtomicityMode; +import org.apache.ignite.configuration.CacheConfiguration; +import org.apache.ignite.configuration.IgniteConfiguration; +import org.apache.ignite.internal.IgniteEx; +import org.apache.ignite.internal.processors.cache.GridCacheAbstractSelfTest; +import org.apache.ignite.internal.transactions.IgniteTxHeuristicCheckedException; +import org.apache.ignite.spi.IgniteSpiAdapter; +import org.apache.ignite.spi.IgniteSpiException; +import org.apache.ignite.spi.discovery.tcp.TcpDiscoverySpi; +import org.apache.ignite.spi.indexing.IndexingQueryFilter; +import org.apache.ignite.spi.indexing.IndexingSpi; +import org.apache.ignite.testframework.GridTestUtils; +import org.apache.ignite.transactions.Transaction; +import org.apache.ignite.transactions.TransactionConcurrency; +import org.apache.ignite.transactions.TransactionIsolation; +import org.apache.ignite.transactions.TransactionState; +import org.jetbrains.annotations.Nullable; + +import java.util.Collection; +import java.util.Iterator; +import java.util.concurrent.Callable; +import java.util.concurrent.atomic.AtomicInteger; +import javax.cache.Cache; + +/** + * Indexing Spi transactional query test + */ +public class IndexingSpiQueryTxSelfTest extends GridCacheAbstractSelfTest { + /** */ + private static AtomicInteger cnt; + + /** {@inheritDoc} */ + @Override protected int gridCount() { + return 4; + } + + /** {@inheritDoc} */ + @Override protected void beforeTestsStarted() throws Exception { + cnt = new AtomicInteger(); + + super.beforeTestsStarted(); + } + + /** {@inheritDoc} */ + @SuppressWarnings("unchecked") + @Override protected IgniteConfiguration getConfiguration(String gridName) throws Exception { + IgniteConfiguration cfg = super.getConfiguration(gridName); + ((TcpDiscoverySpi)cfg.getDiscoverySpi()).setForceServerMode(true); + + if (cnt.getAndIncrement() == 0) + cfg.setClientMode(true); + else { + cfg.setIndexingSpi(new MyBrokenIndexingSpi()); + + CacheConfiguration ccfg = cacheConfiguration(gridName); + ccfg.setName("test-cache"); + ccfg.setAtomicityMode(CacheAtomicityMode.TRANSACTIONAL); + + ccfg.setIndexedTypes(Integer.class, Integer.class); + + cfg.setCacheConfiguration(ccfg); + } + return cfg; + } + + /** + * @throws Exception If failed. + */ + @SuppressWarnings("ThrowableResultOfMethodCallIgnored") + public void testIndexingSpiWithTx() throws Exception { + IgniteEx ignite = grid(0); + + final IgniteCache<Integer, Integer> cache = ignite.cache("test-cache"); + + final IgniteTransactions txs = ignite.transactions(); + + for (final TransactionConcurrency concurrency : TransactionConcurrency.values()) { + for (final TransactionIsolation isolation : TransactionIsolation.values()) { + System.out.println("Run in transaction: " + concurrency + " " + isolation); + + GridTestUtils.assertThrowsWithCause(new Callable<Void>() { + @Override public Void call() throws Exception { + Transaction tx; + + try (Transaction tx0 = tx = txs.txStart(concurrency, isolation)) { + cache.put(1, 1); + + tx0.commit(); + } + + assertEquals(TransactionState.ROLLED_BACK, tx.state()); + + return null; + } + }, IgniteTxHeuristicCheckedException.class); + } + } + } + + /** + * Indexing SPI implementation for test + */ + private static class MyBrokenIndexingSpi extends IgniteSpiAdapter implements IndexingSpi { + /** {@inheritDoc} */ + @Override public void spiStart(@Nullable String gridName) throws IgniteSpiException { + // No-op. + } + + /** {@inheritDoc} */ + @Override public void spiStop() throws IgniteSpiException { + // No-op. + } + + /** {@inheritDoc} */ + @Override public Iterator<Cache.Entry<?, ?>> query(@Nullable String spaceName, Collection<Object> params, + @Nullable IndexingQueryFilter filters) throws IgniteSpiException { + return null; + } + + /** {@inheritDoc} */ + @Override public void store(@Nullable String spaceName, Object key, Object val, long expirationTime) + throws IgniteSpiException { + throw new IgniteSpiException("Test exception"); + } + + /** {@inheritDoc} */ + @Override public void remove(@Nullable String spaceName, Object key) throws IgniteSpiException { + // No-op. + } + + /** {@inheritDoc} */ + @Override public void onSwap(@Nullable String spaceName, Object key) throws IgniteSpiException { + // No-op. + } + + /** {@inheritDoc} */ + @Override public void onUnswap(@Nullable String spaceName, Object key, Object val) throws IgniteSpiException { + // No-op. + } + } +} http://git-wip-us.apache.org/repos/asf/ignite/blob/59b46d3e/modules/indexing/src/test/java/org/apache/ignite/testsuites/IgniteBinaryCacheQueryTestSuite.java ---------------------------------------------------------------------- diff --git a/modules/indexing/src/test/java/org/apache/ignite/testsuites/IgniteBinaryCacheQueryTestSuite.java b/modules/indexing/src/test/java/org/apache/ignite/testsuites/IgniteBinaryCacheQueryTestSuite.java index 761d4bd..3cb603c 100644 --- a/modules/indexing/src/test/java/org/apache/ignite/testsuites/IgniteBinaryCacheQueryTestSuite.java +++ b/modules/indexing/src/test/java/org/apache/ignite/testsuites/IgniteBinaryCacheQueryTestSuite.java @@ -24,7 +24,6 @@ import org.apache.ignite.internal.processors.cache.BinarySerializationQueryWithR import org.apache.ignite.internal.processors.cache.IgniteCacheBinaryObjectsScanSelfTest; import org.apache.ignite.internal.processors.cache.binary.distributed.dht.GridCacheBinaryDuplicateIndexObjectPartitionedAtomicSelfTest; import org.apache.ignite.internal.processors.cache.binary.distributed.dht.GridCacheBinaryDuplicateIndexObjectPartitionedTransactionalSelfTest; -import org.apache.ignite.internal.processors.cache.query.continuous.CacheContinuousQueryLostPartitionTest; import org.apache.ignite.testframework.config.GridTestProperties; /** http://git-wip-us.apache.org/repos/asf/ignite/blob/59b46d3e/modules/indexing/src/test/java/org/apache/ignite/testsuites/IgniteCacheQuerySelfTestSuite.java ---------------------------------------------------------------------- diff --git a/modules/indexing/src/test/java/org/apache/ignite/testsuites/IgniteCacheQuerySelfTestSuite.java b/modules/indexing/src/test/java/org/apache/ignite/testsuites/IgniteCacheQuerySelfTestSuite.java index e7f55a1..2174147 100644 --- a/modules/indexing/src/test/java/org/apache/ignite/testsuites/IgniteCacheQuerySelfTestSuite.java +++ b/modules/indexing/src/test/java/org/apache/ignite/testsuites/IgniteCacheQuerySelfTestSuite.java @@ -60,6 +60,8 @@ import org.apache.ignite.internal.processors.cache.distributed.replicated.Ignite import org.apache.ignite.internal.processors.cache.local.IgniteCacheLocalAtomicQuerySelfTest; import org.apache.ignite.internal.processors.cache.local.IgniteCacheLocalQuerySelfTest; import org.apache.ignite.internal.processors.cache.query.GridCacheQueryTransformerSelfTest; +import org.apache.ignite.internal.processors.cache.query.IndexingSpiQuerySelfTest; +import org.apache.ignite.internal.processors.cache.query.IndexingSpiQueryTxSelfTest; import org.apache.ignite.internal.processors.query.IgniteSqlSchemaIndexingTest; import org.apache.ignite.internal.processors.query.IgniteSqlSplitterSelfTest; import org.apache.ignite.internal.processors.query.h2.sql.GridQueryParsingTest; @@ -127,6 +129,9 @@ public class IgniteCacheQuerySelfTestSuite extends TestSuite { suite.addTestSuite(IgniteBinaryObjectQueryArgumentsOffheapLocalTest.class); suite.addTestSuite(IgniteBinaryObjectLocalQueryArgumentsTest.class); + suite.addTestSuite(IndexingSpiQuerySelfTest.class); + suite.addTestSuite(IndexingSpiQueryTxSelfTest.class); + return suite; } }