/* * 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.tests; import java.util.Collection; import java.util.List; import java.util.Map; import org.apache.ignite.cache.store.CacheStore; import org.apache.ignite.internal.processors.cache.CacheEntryImpl; import org.apache.ignite.internal.util.typedef.internal.U; import org.apache.ignite.tests.pojos.Person; import org.apache.ignite.tests.pojos.PersonId; import org.apache.ignite.tests.pojos.Product; import org.apache.ignite.tests.pojos.ProductOrder; import org.apache.ignite.tests.utils.CacheStoreHelper; import org.apache.ignite.tests.utils.CassandraHelper; import org.apache.ignite.tests.utils.TestCacheSession; import org.apache.ignite.tests.utils.TestTransaction; import org.apache.ignite.tests.utils.TestsHelper; import org.apache.ignite.transactions.Transaction; import org.apache.log4j.Logger; import org.junit.AfterClass; import org.junit.BeforeClass; import org.junit.Test; import org.springframework.core.io.ClassPathResource; /** * Unit tests for {@link org.apache.ignite.cache.store.cassandra.CassandraCacheStore} implementation of * {@link org.apache.ignite.cache.store.CacheStore} which allows to store Ignite cache data into Cassandra tables. */ public class CassandraDirectPersistenceTest { /** */ private static final Logger LOGGER = Logger.getLogger(CassandraDirectPersistenceTest.class.getName()); /** */ @BeforeClass public static void setUpClass() { if (CassandraHelper.useEmbeddedCassandra()) { try { CassandraHelper.startEmbeddedCassandra(LOGGER); } catch (Throwable e) { throw new RuntimeException("Failed to start embedded Cassandra instance", e); } } LOGGER.info("Testing admin connection to Cassandra"); CassandraHelper.testAdminConnection(); LOGGER.info("Testing regular connection to Cassandra"); CassandraHelper.testRegularConnection(); LOGGER.info("Dropping all artifacts from previous tests execution session"); CassandraHelper.dropTestKeyspaces(); LOGGER.info("Start tests execution"); } /** */ @AfterClass public static void tearDownClass() { try { CassandraHelper.dropTestKeyspaces(); } finally { CassandraHelper.releaseCassandraResources(); if (CassandraHelper.useEmbeddedCassandra()) { try { CassandraHelper.stopEmbeddedCassandra(); } catch (Throwable e) { LOGGER.error("Failed to stop embedded Cassandra instance", e); } } } } /** */ @Test @SuppressWarnings("unchecked") public void primitiveStrategyTest() { CacheStore store1 = CacheStoreHelper.createCacheStore("longTypes", new ClassPathResource("org/apache/ignite/tests/persistence/primitive/persistence-settings-1.xml"), CassandraHelper.getAdminDataSrc()); CacheStore store2 = CacheStoreHelper.createCacheStore("stringTypes", new ClassPathResource("org/apache/ignite/tests/persistence/primitive/persistence-settings-2.xml"), CassandraHelper.getAdminDataSrc()); Collection<CacheEntryImpl<Long, Long>> longEntries = TestsHelper.generateLongsEntries(); Collection<CacheEntryImpl<String, String>> strEntries = TestsHelper.generateStringsEntries(); Collection<Long> fakeLongKeys = TestsHelper.getKeys(longEntries); fakeLongKeys.add(-1L); fakeLongKeys.add(-2L); fakeLongKeys.add(-3L); fakeLongKeys.add(-4L); Collection<String> fakeStrKeys = TestsHelper.getKeys(strEntries); fakeStrKeys.add("-1"); fakeStrKeys.add("-2"); fakeStrKeys.add("-3"); fakeStrKeys.add("-4"); LOGGER.info("Running PRIMITIVE strategy write tests"); LOGGER.info("Running single write operation tests"); store1.write(longEntries.iterator().next()); store2.write(strEntries.iterator().next()); LOGGER.info("Single write operation tests passed"); LOGGER.info("Running bulk write operation tests"); store1.writeAll(longEntries); store2.writeAll(strEntries); LOGGER.info("Bulk write operation tests passed"); LOGGER.info("PRIMITIVE strategy write tests passed"); LOGGER.info("Running PRIMITIVE strategy read tests"); LOGGER.info("Running single read operation tests"); LOGGER.info("Running real keys read tests"); Long longVal = (Long)store1.load(longEntries.iterator().next().getKey()); if (!longEntries.iterator().next().getValue().equals(longVal)) throw new RuntimeException("Long values were incorrectly deserialized from Cassandra"); String strVal = (String)store2.load(strEntries.iterator().next().getKey()); if (!strEntries.iterator().next().getValue().equals(strVal)) throw new RuntimeException("String values were incorrectly deserialized from Cassandra"); LOGGER.info("Running fake keys read tests"); longVal = (Long)store1.load(-1L); if (longVal != null) throw new RuntimeException("Long value with fake key '-1' was found in Cassandra"); strVal = (String)store2.load("-1"); if (strVal != null) throw new RuntimeException("String value with fake key '-1' was found in Cassandra"); LOGGER.info("Single read operation tests passed"); LOGGER.info("Running bulk read operation tests"); LOGGER.info("Running real keys read tests"); Map longValues = store1.loadAll(TestsHelper.getKeys(longEntries)); if (!TestsHelper.checkCollectionsEqual(longValues, longEntries)) throw new RuntimeException("Long values were incorrectly deserialized from Cassandra"); Map strValues = store2.loadAll(TestsHelper.getKeys(strEntries)); if (!TestsHelper.checkCollectionsEqual(strValues, strEntries)) throw new RuntimeException("String values were incorrectly deserialized from Cassandra"); LOGGER.info("Running fake keys read tests"); longValues = store1.loadAll(fakeLongKeys); if (!TestsHelper.checkCollectionsEqual(longValues, longEntries)) throw new RuntimeException("Long values were incorrectly deserialized from Cassandra"); strValues = store2.loadAll(fakeStrKeys); if (!TestsHelper.checkCollectionsEqual(strValues, strEntries)) throw new RuntimeException("String values were incorrectly deserialized from Cassandra"); LOGGER.info("Bulk read operation tests passed"); LOGGER.info("PRIMITIVE strategy read tests passed"); LOGGER.info("Running PRIMITIVE strategy delete tests"); LOGGER.info("Deleting real keys"); store1.delete(longEntries.iterator().next().getKey()); store1.deleteAll(TestsHelper.getKeys(longEntries)); store2.delete(strEntries.iterator().next().getKey()); store2.deleteAll(TestsHelper.getKeys(strEntries)); LOGGER.info("Deleting fake keys"); store1.delete(-1L); store2.delete("-1"); store1.deleteAll(fakeLongKeys); store2.deleteAll(fakeStrKeys); LOGGER.info("PRIMITIVE strategy delete tests passed"); } /** */ @Test @SuppressWarnings("unchecked") public void blobStrategyTest() { CacheStore store1 = CacheStoreHelper.createCacheStore("longTypes", new ClassPathResource("org/apache/ignite/tests/persistence/blob/persistence-settings-1.xml"), CassandraHelper.getAdminDataSrc()); CacheStore store2 = CacheStoreHelper.createCacheStore("personTypes", new ClassPathResource("org/apache/ignite/tests/persistence/blob/persistence-settings-2.xml"), CassandraHelper.getAdminDataSrc()); CacheStore store3 = CacheStoreHelper.createCacheStore("personTypes", new ClassPathResource("org/apache/ignite/tests/persistence/blob/persistence-settings-3.xml"), CassandraHelper.getAdminDataSrc()); Collection<CacheEntryImpl<Long, Long>> longEntries = TestsHelper.generateLongsEntries(); Collection<CacheEntryImpl<Long, Person>> personEntries = TestsHelper.generateLongsPersonsEntries(); LOGGER.info("Running BLOB strategy write tests"); LOGGER.info("Running single write operation tests"); store1.write(longEntries.iterator().next()); store2.write(personEntries.iterator().next()); store3.write(personEntries.iterator().next()); LOGGER.info("Single write operation tests passed"); LOGGER.info("Running bulk write operation tests"); store1.writeAll(longEntries); store2.writeAll(personEntries); store3.writeAll(personEntries); LOGGER.info("Bulk write operation tests passed"); LOGGER.info("BLOB strategy write tests passed"); LOGGER.info("Running BLOB strategy read tests"); LOGGER.info("Running single read operation tests"); Long longVal = (Long)store1.load(longEntries.iterator().next().getKey()); if (!longEntries.iterator().next().getValue().equals(longVal)) throw new RuntimeException("Long values were incorrectly deserialized from Cassandra"); Person personVal = (Person)store2.load(personEntries.iterator().next().getKey()); if (!personEntries.iterator().next().getValue().equals(personVal)) throw new RuntimeException("Person values were incorrectly deserialized from Cassandra"); personVal = (Person)store3.load(personEntries.iterator().next().getKey()); if (!personEntries.iterator().next().getValue().equals(personVal)) throw new RuntimeException("Person values were incorrectly deserialized from Cassandra"); LOGGER.info("Single read operation tests passed"); LOGGER.info("Running bulk read operation tests"); Map longValues = store1.loadAll(TestsHelper.getKeys(longEntries)); if (!TestsHelper.checkCollectionsEqual(longValues, longEntries)) throw new RuntimeException("Long values were incorrectly deserialized from Cassandra"); Map personValues = store2.loadAll(TestsHelper.getKeys(personEntries)); if (!TestsHelper.checkPersonCollectionsEqual(personValues, personEntries, false)) throw new RuntimeException("Person values were incorrectly deserialized from Cassandra"); personValues = store3.loadAll(TestsHelper.getKeys(personEntries)); if (!TestsHelper.checkPersonCollectionsEqual(personValues, personEntries, false)) throw new RuntimeException("Person values were incorrectly deserialized from Cassandra"); LOGGER.info("Bulk read operation tests passed"); LOGGER.info("BLOB strategy read tests passed"); LOGGER.info("Running BLOB strategy delete tests"); store1.delete(longEntries.iterator().next().getKey()); store1.deleteAll(TestsHelper.getKeys(longEntries)); store2.delete(personEntries.iterator().next().getKey()); store2.deleteAll(TestsHelper.getKeys(personEntries)); store3.delete(personEntries.iterator().next().getKey()); store3.deleteAll(TestsHelper.getKeys(personEntries)); LOGGER.info("BLOB strategy delete tests passed"); } /** */ @Test @SuppressWarnings("unchecked") public void pojoStrategyTest() { CacheStore store1 = CacheStoreHelper.createCacheStore("longTypes", new ClassPathResource("org/apache/ignite/tests/persistence/pojo/persistence-settings-1.xml"), CassandraHelper.getAdminDataSrc()); CacheStore store2 = CacheStoreHelper.createCacheStore("personTypes", new ClassPathResource("org/apache/ignite/tests/persistence/pojo/persistence-settings-2.xml"), CassandraHelper.getAdminDataSrc()); CacheStore store3 = CacheStoreHelper.createCacheStore("personTypes", new ClassPathResource("org/apache/ignite/tests/persistence/pojo/persistence-settings-3.xml"), CassandraHelper.getAdminDataSrc()); CacheStore store4 = CacheStoreHelper.createCacheStore("persons", new ClassPathResource("org/apache/ignite/tests/persistence/pojo/persistence-settings-4.xml"), CassandraHelper.getAdminDataSrc()); CacheStore productStore = CacheStoreHelper.createCacheStore("product", new ClassPathResource("org/apache/ignite/tests/persistence/pojo/product.xml"), CassandraHelper.getAdminDataSrc()); CacheStore orderStore = CacheStoreHelper.createCacheStore("order", new ClassPathResource("org/apache/ignite/tests/persistence/pojo/order.xml"), CassandraHelper.getAdminDataSrc()); Collection<CacheEntryImpl<Long, Person>> entries1 = TestsHelper.generateLongsPersonsEntries(); Collection<CacheEntryImpl<PersonId, Person>> entries2 = TestsHelper.generatePersonIdsPersonsEntries(); Collection<CacheEntryImpl<PersonId, Person>> entries3 = TestsHelper.generatePersonIdsPersonsEntries(); Collection<CacheEntryImpl<Long, Product>> productEntries = TestsHelper.generateProductEntries(); Collection<CacheEntryImpl<Long, ProductOrder>> orderEntries = TestsHelper.generateOrderEntries(); LOGGER.info("Running POJO strategy write tests"); LOGGER.info("Running single write operation tests"); store1.write(entries1.iterator().next()); store2.write(entries2.iterator().next()); store3.write(entries3.iterator().next()); store4.write(entries3.iterator().next()); productStore.write(productEntries.iterator().next()); orderStore.write(orderEntries.iterator().next()); LOGGER.info("Single write operation tests passed"); LOGGER.info("Running bulk write operation tests"); store1.writeAll(entries1); store2.writeAll(entries2); store3.writeAll(entries3); store4.writeAll(entries3); productStore.writeAll(productEntries); orderStore.writeAll(orderEntries); LOGGER.info("Bulk write operation tests passed"); LOGGER.info("POJO strategy write tests passed"); LOGGER.info("Running POJO strategy read tests"); LOGGER.info("Running single read operation tests"); Person person = (Person)store1.load(entries1.iterator().next().getKey()); if (!entries1.iterator().next().getValue().equalsPrimitiveFields(person)) throw new RuntimeException("Person values were incorrectly deserialized from Cassandra"); person = (Person)store2.load(entries2.iterator().next().getKey()); if (!entries2.iterator().next().getValue().equalsPrimitiveFields(person)) throw new RuntimeException("Person values were incorrectly deserialized from Cassandra"); person = (Person)store3.load(entries3.iterator().next().getKey()); if (!entries3.iterator().next().getValue().equals(person)) throw new RuntimeException("Person values were incorrectly deserialized from Cassandra"); person = (Person)store4.load(entries3.iterator().next().getKey()); if (!entries3.iterator().next().getValue().equals(person)) throw new RuntimeException("Person values were incorrectly deserialized from Cassandra"); Product product = (Product)productStore.load(productEntries.iterator().next().getKey()); if (!productEntries.iterator().next().getValue().equals(product)) throw new RuntimeException("Product values were incorrectly deserialized from Cassandra"); ProductOrder order = (ProductOrder)orderStore.load(orderEntries.iterator().next().getKey()); if (!orderEntries.iterator().next().getValue().equals(order)) throw new RuntimeException("Order values were incorrectly deserialized from Cassandra"); LOGGER.info("Single read operation tests passed"); LOGGER.info("Running bulk read operation tests"); Map persons = store1.loadAll(TestsHelper.getKeys(entries1)); if (!TestsHelper.checkPersonCollectionsEqual(persons, entries1, true)) throw new RuntimeException("Person values were incorrectly deserialized from Cassandra"); persons = store2.loadAll(TestsHelper.getKeys(entries2)); if (!TestsHelper.checkPersonCollectionsEqual(persons, entries2, true)) throw new RuntimeException("Person values were incorrectly deserialized from Cassandra"); persons = store3.loadAll(TestsHelper.getKeys(entries3)); if (!TestsHelper.checkPersonCollectionsEqual(persons, entries3, false)) throw new RuntimeException("Person values were incorrectly deserialized from Cassandra"); persons = store4.loadAll(TestsHelper.getKeys(entries3)); if (!TestsHelper.checkPersonCollectionsEqual(persons, entries3, false)) throw new RuntimeException("Person values were incorrectly deserialized from Cassandra"); Map products = productStore.loadAll(TestsHelper.getKeys(productEntries)); if (!TestsHelper.checkProductCollectionsEqual(products, productEntries)) throw new RuntimeException("Product values were incorrectly deserialized from Cassandra"); Map orders = orderStore.loadAll(TestsHelper.getKeys(orderEntries)); if (!TestsHelper.checkOrderCollectionsEqual(orders, orderEntries)) throw new RuntimeException("Order values were incorrectly deserialized from Cassandra"); LOGGER.info("Bulk read operation tests passed"); LOGGER.info("POJO strategy read tests passed"); LOGGER.info("Running POJO strategy delete tests"); store1.delete(entries1.iterator().next().getKey()); store1.deleteAll(TestsHelper.getKeys(entries1)); store2.delete(entries2.iterator().next().getKey()); store2.deleteAll(TestsHelper.getKeys(entries2)); store3.delete(entries3.iterator().next().getKey()); store3.deleteAll(TestsHelper.getKeys(entries3)); store4.delete(entries3.iterator().next().getKey()); store4.deleteAll(TestsHelper.getKeys(entries3)); productStore.delete(productEntries.iterator().next().getKey()); productStore.deleteAll(TestsHelper.getKeys(productEntries)); orderStore.delete(orderEntries.iterator().next().getKey()); orderStore.deleteAll(TestsHelper.getKeys(orderEntries)); LOGGER.info("POJO strategy delete tests passed"); } /** */ @Test @SuppressWarnings("unchecked") public void pojoStrategyTransactionTest() { Map<Object, Object> sessionProps = U.newHashMap(1); Transaction sessionTx = new TestTransaction(); CacheStore productStore = CacheStoreHelper.createCacheStore("product", new ClassPathResource("org/apache/ignite/tests/persistence/pojo/product.xml"), CassandraHelper.getAdminDataSrc(), new TestCacheSession("product", sessionTx, sessionProps)); CacheStore orderStore = CacheStoreHelper.createCacheStore("order", new ClassPathResource("org/apache/ignite/tests/persistence/pojo/order.xml"), CassandraHelper.getAdminDataSrc(), new TestCacheSession("order", sessionTx, sessionProps)); List<CacheEntryImpl<Long, Product>> productEntries = TestsHelper.generateProductEntries(); Map<Long, List<CacheEntryImpl<Long, ProductOrder>>> ordersPerProduct = TestsHelper.generateOrdersPerProductEntries(productEntries, 2); Collection<Long> productIds = TestsHelper.getProductIds(productEntries); Collection<Long> orderIds = TestsHelper.getOrderIds(ordersPerProduct); LOGGER.info("Running POJO strategy transaction write tests"); LOGGER.info("Running single write operation tests"); CassandraHelper.dropTestKeyspaces(); Product product = productEntries.iterator().next().getValue(); ProductOrder order = ordersPerProduct.get(product.getId()).iterator().next().getValue(); productStore.write(productEntries.iterator().next()); orderStore.write(ordersPerProduct.get(product.getId()).iterator().next()); if (productStore.load(product.getId()) != null || orderStore.load(order.getId()) != null) { throw new RuntimeException("Single write operation test failed. Transaction wasn't committed yet, but " + "objects were already persisted into Cassandra"); } Map<Long, Product> products = (Map<Long, Product>)productStore.loadAll(productIds); Map<Long, ProductOrder> orders = (Map<Long, ProductOrder>)orderStore.loadAll(orderIds); if ((products != null && !products.isEmpty()) || (orders != null && !orders.isEmpty())) { throw new RuntimeException("Single write operation test failed. Transaction wasn't committed yet, but " + "objects were already persisted into Cassandra"); } //noinspection deprecation orderStore.sessionEnd(true); //noinspection deprecation productStore.sessionEnd(true); Product product1 = (Product)productStore.load(product.getId()); ProductOrder order1 = (ProductOrder)orderStore.load(order.getId()); if (product1 == null || order1 == null) { throw new RuntimeException("Single write operation test failed. Transaction was committed, but " + "no objects were persisted into Cassandra"); } if (!product.equals(product1) || !order.equals(order1)) { throw new RuntimeException("Single write operation test failed. Transaction was committed, but " + "objects were incorrectly persisted/loaded to/from Cassandra"); } products = (Map<Long, Product>)productStore.loadAll(productIds); orders = (Map<Long, ProductOrder>)orderStore.loadAll(orderIds); if (products == null || products.isEmpty() || orders == null || orders.isEmpty()) { throw new RuntimeException("Single write operation test failed. Transaction was committed, but " + "no objects were persisted into Cassandra"); } if (products.size() > 1 || orders.size() > 1) { throw new RuntimeException("Single write operation test failed. There were committed more objects " + "into Cassandra than expected"); } product1 = products.entrySet().iterator().next().getValue(); order1 = orders.entrySet().iterator().next().getValue(); if (!product.equals(product1) || !order.equals(order1)) { throw new RuntimeException("Single write operation test failed. Transaction was committed, but " + "objects were incorrectly persisted/loaded to/from Cassandra"); } LOGGER.info("Single write operation tests passed"); LOGGER.info("Running bulk write operation tests"); CassandraHelper.dropTestKeyspaces(); sessionProps.clear(); productStore.writeAll(productEntries); for (Long productId : ordersPerProduct.keySet()) orderStore.writeAll(ordersPerProduct.get(productId)); for (Long productId : productIds) { if (productStore.load(productId) != null) { throw new RuntimeException("Bulk write operation test failed. Transaction wasn't committed yet, but " + "objects were already persisted into Cassandra"); } } for (Long orderId : orderIds) { if (orderStore.load(orderId) != null) { throw new RuntimeException("Bulk write operation test failed. Transaction wasn't committed yet, but " + "objects were already persisted into Cassandra"); } } products = (Map<Long, Product>)productStore.loadAll(productIds); orders = (Map<Long, ProductOrder>)orderStore.loadAll(orderIds); if ((products != null && !products.isEmpty()) || (orders != null && !orders.isEmpty())) { throw new RuntimeException("Bulk write operation test failed. Transaction wasn't committed yet, but " + "objects were already persisted into Cassandra"); } //noinspection deprecation productStore.sessionEnd(true); //noinspection deprecation orderStore.sessionEnd(true); for (CacheEntryImpl<Long, Product> entry : productEntries) { product = (Product)productStore.load(entry.getKey()); if (!entry.getValue().equals(product)) { throw new RuntimeException("Bulk write operation test failed. Transaction was committed, but " + "not all objects were persisted into Cassandra"); } } for (Long productId : ordersPerProduct.keySet()) { for (CacheEntryImpl<Long, ProductOrder> entry : ordersPerProduct.get(productId)) { order = (ProductOrder)orderStore.load(entry.getKey()); if (!entry.getValue().equals(order)) { throw new RuntimeException("Bulk write operation test failed. Transaction was committed, but " + "not all objects were persisted into Cassandra"); } } } products = (Map<Long, Product>)productStore.loadAll(productIds); orders = (Map<Long, ProductOrder>)orderStore.loadAll(orderIds); if (products == null || products.isEmpty() || orders == null || orders.isEmpty()) { throw new RuntimeException("Bulk write operation test failed. Transaction was committed, but " + "no objects were persisted into Cassandra"); } if (products.size() < productIds.size() || orders.size() < orderIds.size()) { throw new RuntimeException("Bulk write operation test failed. There were committed less objects " + "into Cassandra than expected"); } if (products.size() > productIds.size() || orders.size() > orderIds.size()) { throw new RuntimeException("Bulk write operation test failed. There were committed more objects " + "into Cassandra than expected"); } for (CacheEntryImpl<Long, Product> entry : productEntries) { product = products.get(entry.getKey()); if (!entry.getValue().equals(product)) { throw new RuntimeException("Bulk write operation test failed. Transaction was committed, but " + "some objects were incorrectly persisted/loaded to/from Cassandra"); } } for (Long productId : ordersPerProduct.keySet()) { for (CacheEntryImpl<Long, ProductOrder> entry : ordersPerProduct.get(productId)) { order = orders.get(entry.getKey()); if (!entry.getValue().equals(order)) { throw new RuntimeException("Bulk write operation test failed. Transaction was committed, but " + "some objects were incorrectly persisted/loaded to/from Cassandra"); } } } LOGGER.info("Bulk write operation tests passed"); LOGGER.info("POJO strategy transaction write tests passed"); LOGGER.info("Running POJO strategy transaction delete tests"); LOGGER.info("Running single delete tests"); sessionProps.clear(); Product deletedProduct = productEntries.remove(0).getValue(); ProductOrder deletedOrder = ordersPerProduct.get(deletedProduct.getId()).remove(0).getValue(); productStore.delete(deletedProduct.getId()); orderStore.delete(deletedOrder.getId()); if (productStore.load(deletedProduct.getId()) == null || orderStore.load(deletedOrder.getId()) == null) { throw new RuntimeException("Single delete operation test failed. Transaction wasn't committed yet, but " + "objects were already deleted from Cassandra"); } products = (Map<Long, Product>)productStore.loadAll(productIds); orders = (Map<Long, ProductOrder>)orderStore.loadAll(orderIds); if (products.size() != productIds.size() || orders.size() != orderIds.size()) { throw new RuntimeException("Single delete operation test failed. Transaction wasn't committed yet, but " + "objects were already deleted from Cassandra"); } //noinspection deprecation productStore.sessionEnd(true); //noinspection deprecation orderStore.sessionEnd(true); if (productStore.load(deletedProduct.getId()) != null || orderStore.load(deletedOrder.getId()) != null) { throw new RuntimeException("Single delete operation test failed. Transaction was committed, but " + "objects were not deleted from Cassandra"); } products = (Map<Long, Product>)productStore.loadAll(productIds); orders = (Map<Long, ProductOrder>)orderStore.loadAll(orderIds); if (products.get(deletedProduct.getId()) != null || orders.get(deletedOrder.getId()) != null) { throw new RuntimeException("Single delete operation test failed. Transaction was committed, but " + "objects were not deleted from Cassandra"); } LOGGER.info("Single delete tests passed"); LOGGER.info("Running bulk delete tests"); sessionProps.clear(); productStore.deleteAll(productIds); orderStore.deleteAll(orderIds); products = (Map<Long, Product>)productStore.loadAll(productIds); orders = (Map<Long, ProductOrder>)orderStore.loadAll(orderIds); if (products == null || products.isEmpty() || orders == null || orders.isEmpty()) { throw new RuntimeException("Bulk delete operation test failed. Transaction wasn't committed yet, but " + "objects were already deleted from Cassandra"); } //noinspection deprecation orderStore.sessionEnd(true); //noinspection deprecation productStore.sessionEnd(true); products = (Map<Long, Product>)productStore.loadAll(productIds); orders = (Map<Long, ProductOrder>)orderStore.loadAll(orderIds); if ((products != null && !products.isEmpty()) || (orders != null && !orders.isEmpty())) { throw new RuntimeException("Bulk delete operation test failed. Transaction was committed, but " + "objects were not deleted from Cassandra"); } LOGGER.info("Bulk delete tests passed"); LOGGER.info("POJO strategy transaction delete tests passed"); } }