/** * Copyright (c) 2009 - 2012 Red Hat, Inc. * * This software is licensed to you under the GNU General Public License, * version 2 (GPLv2). There is NO WARRANTY for this software, express or * implied, including the implied warranties of MERCHANTABILITY or FITNESS * FOR A PARTICULAR PURPOSE. You should have received a copy of GPLv2 * along with this software; if not, see * http://www.gnu.org/licenses/old-licenses/gpl-2.0.txt. * * Red Hat trademarks are not licensed under GPLv2. No permission is * granted to use or replicate Red Hat trademarks that are incorporated * in this software or its documentation. */ package org.candlepin.model; import static org.junit.Assert.*; import org.candlepin.common.config.Configuration; import org.candlepin.config.ConfigProperties; import org.candlepin.model.ConsumerType.ConsumerTypeEnum; import org.candlepin.resteasy.parameter.KeyValueParameter; import org.candlepin.test.DatabaseTestFixture; import org.candlepin.test.TestDateUtil; import org.candlepin.test.TestUtil; import org.candlepin.util.Util; import org.junit.Before; import org.junit.Test; import java.util.ArrayList; import java.util.HashMap; import java.util.HashSet; import java.util.LinkedList; import java.util.List; import java.util.Map; import javax.inject.Inject; /** * ConsumerCuratorSearchTest */ public class ConsumerCuratorSearchTest extends DatabaseTestFixture { @Inject private Configuration config; private Owner owner; private ConsumerType ct; @Before public void setUp() { owner = new Owner("test-owner", "Test Owner"); owner = ownerCurator.create(owner); ct = new ConsumerType(ConsumerTypeEnum.SYSTEM); ct = consumerTypeCurator.create(ct); config.setProperty(ConfigProperties.INTEGER_FACTS, "system.count, system.multiplier"); config.setProperty(ConfigProperties.NON_NEG_INTEGER_FACTS, "system.count"); } @Test public void testSearchOwnerConsumersNoMatches() { Consumer consumer = new Consumer("testConsumer", "testUser", owner, ct); Map<String, String> facts = new HashMap<String, String>(); facts.put("testkey", "testval"); facts.put("otherkey", "otherval"); consumer.setFacts(facts); consumer = consumerCurator.create(consumer); // Create another consumer to make sure we're not just retreiving everyhting Consumer otherConsumer = new Consumer("testConsumer2", "testUser2", owner, ct); Map<String, String> otherFacts = new HashMap<String, String>(); otherFacts.put("otherconsumerkey", "testval"); otherConsumer.setFacts(otherFacts); otherConsumer = consumerCurator.create(otherConsumer); List<KeyValueParameter> factFilters = new LinkedList<KeyValueParameter>(); factFilters.add(new TestingKeyValueParameter("notAKey", "notAVal")); List<Consumer> results = consumerCurator.searchOwnerConsumers( owner, null, null, null, null, factFilters, null, null, null).list(); assertEquals(0, results.size()); } @Test public void testSearchConsumersNoOwner() { Consumer consumer = new Consumer("testConsumer", "testUser", owner, ct); Map<String, String> facts = new HashMap<String, String>(); facts.put("testkey", "testval"); facts.put("otherkey", "otherval"); consumer.setFacts(facts); consumer = consumerCurator.create(consumer); // Create another consumer to make sure we're not just retrieving everything Consumer otherConsumer = new Consumer("testConsumer2", "testUser2", owner, ct); Map<String, String> otherFacts = new HashMap<String, String>(); otherFacts.put("otherconsumerkey", "testval"); otherConsumer.setFacts(otherFacts); otherConsumer = consumerCurator.create(otherConsumer); List<KeyValueParameter> factFilters = new LinkedList<KeyValueParameter>(); factFilters.add(new TestingKeyValueParameter("testkey", "testval")); List<Consumer> results = consumerCurator.searchOwnerConsumers( null, null, null, null, null, factFilters, null, null, null).list(); assertEquals(1, results.size()); assertEquals(consumer, results.get(0)); } @Test public void testSearchConsumersUuids() { Consumer consumer = new Consumer("testConsumer", "testUser", owner, ct); Map<String, String> facts = new HashMap<String, String>(); facts.put("key", "val"); facts.put("otherkey", "otherval"); consumer.setFacts(facts); consumer = consumerCurator.create(consumer); // Create another consumer to make sure we're not just retrieving everything Consumer otherConsumer = new Consumer("testConsumer2", "testUser2", owner, ct); Map<String, String> otherFacts = new HashMap<String, String>(); otherFacts.put("key", "val"); otherConsumer.setFacts(otherFacts); otherConsumer = consumerCurator.create(otherConsumer); List<KeyValueParameter> factFilters = new LinkedList<KeyValueParameter>(); factFilters.add(new TestingKeyValueParameter("key", "val")); List<String> uuids = new LinkedList<String>(); uuids.add(consumer.getUuid()); List<Consumer> results = consumerCurator.searchOwnerConsumers( null, null, null, uuids, null, factFilters, null, null, null).list(); assertEquals(1, results.size()); assertEquals(consumer, results.get(0)); } @Test public void testSearchHypervisorIdsCaseInsensitive() { String hypervisorid = "HyPuUiD"; String hypervisorid2 = "HyPuUiD2"; Consumer consumer = new Consumer("testConsumer", "testUser", owner, ct); consumer.setHypervisorId(new HypervisorId(hypervisorid)); consumer = consumerCurator.create(consumer); Consumer consumer2 = new Consumer("testConsumer2", "testUser2", owner, ct); consumer2.setHypervisorId(new HypervisorId(hypervisorid2)); consumer2 = consumerCurator.create(consumer2); List<String> hypervisorIds = new ArrayList<String>(); hypervisorIds.add(hypervisorid.toUpperCase()); List<Consumer> results = consumerCurator.searchOwnerConsumers( null, null, null, null, hypervisorIds, null, null, null, null).list(); assertEquals(1, results.size()); assertEquals(consumer, results.get(0)); } @Test public void testSearchConsumersUuidsAndOwner() { Consumer consumer = new Consumer("testConsumer", "testUser", owner, ct); Map<String, String> facts = new HashMap<String, String>(); facts.put("key", "val"); facts.put("otherkey", "otherval"); consumer.setFacts(facts); consumer = consumerCurator.create(consumer); // Create another consumer to make sure we're not just retrieving everything Consumer otherConsumer = new Consumer("testConsumer2", "testUser2", owner, ct); Map<String, String> otherFacts = new HashMap<String, String>(); otherFacts.put("key", "val"); otherConsumer.setFacts(otherFacts); otherConsumer = consumerCurator.create(otherConsumer); Owner otherOwner = new Owner("test-owner1", "Test Owner1"); otherOwner = ownerCurator.create(otherOwner); Consumer otherOwnCons = new Consumer("testConsumer3", "testUser3", otherOwner, ct); Map<String, String> otherOwnFacts = new HashMap<String, String>(); otherOwnFacts.put("key", "val"); otherOwnCons.setFacts(otherOwnFacts); otherOwnCons = consumerCurator.create(otherOwnCons); List<KeyValueParameter> factFilters = new LinkedList<KeyValueParameter>(); factFilters.add(new TestingKeyValueParameter("key", "val")); List<String> uuids = new LinkedList<String>(); uuids.add(consumer.getUuid()); uuids.add(otherOwnCons.getUuid()); List<Consumer> results = consumerCurator.searchOwnerConsumers( owner, null, null, uuids, null, factFilters, null, null, null).list(); assertEquals(1, results.size()); assertEquals(consumer, results.get(0)); } @Test public void testSearchOwnerConsumers() { Consumer consumer = new Consumer("testConsumer", "testUser", owner, ct); Map<String, String> facts = new HashMap<String, String>(); facts.put("testkey", "testval"); facts.put("otherkey", "otherval"); consumer.setFacts(facts); consumer = consumerCurator.create(consumer); // Create another consumer to make sure we're not just retrieving everything Consumer otherConsumer = new Consumer("testConsumer2", "testUser2", owner, ct); Map<String, String> otherFacts = new HashMap<String, String>(); otherFacts.put("otherconsumerkey", "testval"); otherConsumer.setFacts(otherFacts); otherConsumer = consumerCurator.create(otherConsumer); List<KeyValueParameter> factFilters = new LinkedList<KeyValueParameter>(); factFilters.add(new TestingKeyValueParameter("testkey", "testval")); List<Consumer> results = consumerCurator.searchOwnerConsumers( owner, null, null, null, null, factFilters, null, null, null).list(); assertEquals(1, results.size()); assertEquals(consumer, results.get(0)); } @Test public void testSearchOwnerConsumersEscaping() { Consumer consumer = new Consumer("testConsumer", "testUser", owner, ct); Map<String, String> facts = new HashMap<String, String>(); facts.put("a", "\"')"); consumer.setFacts(facts); consumer = consumerCurator.create(consumer); List<KeyValueParameter> factFilters = new LinkedList<KeyValueParameter>(); factFilters.add(new TestingKeyValueParameter("a", "\"')")); List<Consumer> results = consumerCurator.searchOwnerConsumers( owner, null, null, null, null, factFilters, null, null, null).list(); assertEquals(1, results.size()); assertEquals(consumer, results.get(0)); } @Test public void testSearchOwnerConsumersKeyEscaping() { Consumer consumer = new Consumer("testConsumer", "testUser", owner, ct); Map<String, String> facts = new HashMap<String, String>(); facts.put("%", "'); SELECT id from cp_owners"); consumer.setFacts(facts); consumer = consumerCurator.create(consumer); List<KeyValueParameter> factFilters = new LinkedList<KeyValueParameter>(); factFilters.add(new TestingKeyValueParameter("%", "'); SELECT id from cp_owners")); List<Consumer> results = consumerCurator.searchOwnerConsumers( owner, null, null, null, null, factFilters, null, null, null).list(); assertEquals(1, results.size()); assertEquals(consumer, results.get(0)); } @Test public void testSearchOwnerConsumersMoreEscapingWithWildcard() { Consumer consumer = new Consumer("testConsumer", "testUser", owner, ct); Map<String, String> facts = new HashMap<String, String>(); facts.put("%", "'); SELECT * from cp_owners"); consumer.setFacts(facts); consumer = consumerCurator.create(consumer); List<KeyValueParameter> factFilters = new LinkedList<KeyValueParameter>(); factFilters.add(new TestingKeyValueParameter("%", "'); SELECT * from cp_owners")); List<Consumer> results = consumerCurator.searchOwnerConsumers( owner, null, null, null, null, factFilters, null, null, null).list(); assertEquals(1, results.size()); assertEquals(consumer, results.get(0)); } @Test public void testSearchOwnerConsumersInsensitiveValue() { Consumer consumer = new Consumer("testConsumer", "testUser", owner, ct); Map<String, String> facts = new HashMap<String, String>(); facts.put("testkey", "testval"); facts.put("otherkey", "otherval"); consumer.setFacts(facts); consumer = consumerCurator.create(consumer); // Create another consumer to make sure we're not just retreiving everyhting Consumer otherConsumer = new Consumer("testConsumer2", "testUser2", owner, ct); Map<String, String> otherFacts = new HashMap<String, String>(); otherFacts.put("otherconsumerkey", "testval"); otherConsumer.setFacts(otherFacts); otherConsumer = consumerCurator.create(otherConsumer); List<KeyValueParameter> factFilters = new LinkedList<KeyValueParameter>(); factFilters.add(new TestingKeyValueParameter("testkey", "teSTVal")); List<Consumer> results = consumerCurator.searchOwnerConsumers( owner, null, null, null, null, factFilters, null, null, null).list(); assertEquals(1, results.size()); assertEquals(consumer, results.get(0)); } @Test public void testSearchOwnerConsumersSensitiveKey() { Consumer consumer = new Consumer("testConsumer", "testUser", owner, ct); Map<String, String> facts = new HashMap<String, String>(); facts.put("testkey", "testval"); facts.put("otherkey", "otherval"); consumer.setFacts(facts); consumer = consumerCurator.create(consumer); // Create another consumer to make sure we're not just retreiving everyhting Consumer otherConsumer = new Consumer("testConsumer2", "testUser2", owner, ct); Map<String, String> otherFacts = new HashMap<String, String>(); otherFacts.put("otherconsumerkey", "testval"); otherConsumer.setFacts(otherFacts); otherConsumer = consumerCurator.create(otherConsumer); List<KeyValueParameter> factFilters = new LinkedList<KeyValueParameter>(); factFilters.add(new TestingKeyValueParameter("Testkey", "testval")); List<Consumer> results = consumerCurator.searchOwnerConsumers( owner, null, null, null, null, factFilters, null, null, null).list(); assertEquals(0, results.size()); } @Test public void testSearchOwnerConsumersKeyWildcard() { Consumer consumer = new Consumer("testConsumer", "testUser", owner, ct); Map<String, String> facts = new HashMap<String, String>(); facts.put("testkey", "testval"); //facts.put("otherkey", "otherval"); consumer.setFacts(facts); consumer = consumerCurator.create(consumer); // Create another consumer to make sure we're not just retreiving everyhting Consumer otherConsumer = new Consumer("testConsumer2", "testUser2", owner, ct); Map<String, String> otherFacts = new HashMap<String, String>(); otherFacts.put("otherconsumerkey123", "testval"); otherConsumer.setFacts(otherFacts); otherConsumer = consumerCurator.create(otherConsumer); List<KeyValueParameter> factFilters = new LinkedList<KeyValueParameter>(); factFilters.add(new TestingKeyValueParameter("*key*", "testval")); List<Consumer> results = consumerCurator.searchOwnerConsumers( owner, null, null, null, null, factFilters, null, null, null).list(); assertEquals(2, results.size()); } @Test public void testSearchOwnerConsumersValueWildcard() { Consumer consumer = new Consumer("testConsumer", "testUser", owner, ct); Map<String, String> facts = new HashMap<String, String>(); facts.put("key", "testingval"); //facts.put("otherkey", "otherval"); consumer.setFacts(facts); consumer = consumerCurator.create(consumer); // Create another consumer to make sure we're not just retreiving everyhting Consumer otherConsumer = new Consumer("testConsumer2", "testUser2", owner, ct); Map<String, String> otherFacts = new HashMap<String, String>(); otherFacts.put("key", "testvaltwo"); otherConsumer.setFacts(otherFacts); otherConsumer = consumerCurator.create(otherConsumer); List<KeyValueParameter> factFilters = new LinkedList<KeyValueParameter>(); factFilters.add(new TestingKeyValueParameter("key", "*val*")); List<Consumer> results = consumerCurator.searchOwnerConsumers( owner, null, null, null, null, factFilters, null, null, null).list(); assertEquals(2, results.size()); } @Test public void testSearchOwnerConsumersValueWildcardMiddle() { Consumer consumer = new Consumer("testConsumer", "testUser", owner, ct); Map<String, String> facts = new HashMap<String, String>(); facts.put("key", "testingvaltest"); //facts.put("otherkey", "otherval"); consumer.setFacts(facts); consumer = consumerCurator.create(consumer); // Create another consumer to make sure we're not just retreiving everyhting Consumer otherConsumer = new Consumer("testConsumer2", "testUser2", owner, ct); Map<String, String> otherFacts = new HashMap<String, String>(); otherFacts.put("key", "testvaltwotest"); otherConsumer.setFacts(otherFacts); otherConsumer = consumerCurator.create(otherConsumer); List<KeyValueParameter> factFilters = new LinkedList<KeyValueParameter>(); factFilters.add(new TestingKeyValueParameter("key", "test*test")); List<Consumer> results = consumerCurator.searchOwnerConsumers( owner, null, null, null, null, factFilters, null, null, null).list(); assertEquals(2, results.size()); } @Test public void testSearchOwnerConsumersValueAnd() { Consumer consumer = new Consumer("testConsumer", "testUser", owner, ct); Map<String, String> facts = new HashMap<String, String>(); facts.put("key1", "value1"); facts.put("key2", "value2"); //facts.put("otherkey", "otherval"); consumer.setFacts(facts); consumer = consumerCurator.create(consumer); // Create another consumer to make sure we're not just retreiving everyhting Consumer otherConsumer = new Consumer("testConsumer2", "testUser2", owner, ct); Map<String, String> otherFacts = new HashMap<String, String>(); otherFacts.put("key1", "value1"); otherFacts.put("key2", "value3notsame"); otherConsumer.setFacts(otherFacts); otherConsumer = consumerCurator.create(otherConsumer); List<KeyValueParameter> factFilters = new LinkedList<KeyValueParameter>(); factFilters.add(new TestingKeyValueParameter("key1", "value1")); factFilters.add(new TestingKeyValueParameter("key2", "value2")); List<Consumer> results = consumerCurator.searchOwnerConsumers( owner, null, null, null, null, factFilters, null, null, null).list(); assertEquals(1, results.size()); assertEquals(consumer, results.get(0)); } @Test public void testSearchOwnerConsumersValueAndOr() { Consumer consumer = new Consumer("testConsumer", "testUser", owner, ct); Map<String, String> facts = new HashMap<String, String>(); facts.put("key1", "value1"); facts.put("key2", "value2"); //facts.put("otherkey", "otherval"); consumer.setFacts(facts); consumer = consumerCurator.create(consumer); // Create another consumer to make sure we're not just retreiving everyhting Consumer otherConsumer = new Consumer("testConsumer2", "testUser2", owner, ct); Map<String, String> otherFacts = new HashMap<String, String>(); otherFacts.put("key1", "value1"); otherFacts.put("key2", "value3"); otherConsumer.setFacts(otherFacts); otherConsumer = consumerCurator.create(otherConsumer); List<KeyValueParameter> factFilters = new LinkedList<KeyValueParameter>(); factFilters.add(new TestingKeyValueParameter("key1", "value1")); factFilters.add(new TestingKeyValueParameter("key2", "value2")); factFilters.add(new TestingKeyValueParameter("key2", "value3")); List<Consumer> results = consumerCurator.searchOwnerConsumers( owner, null, null, null, null, factFilters, null, null, null).list(); assertEquals(2, results.size()); } @Test public void testSearchOwnerConsumersNoMatch() { Consumer consumer = new Consumer("testConsumer", "testUser", owner, ct); Map<String, String> facts = new HashMap<String, String>(); facts.put("key1", "value1"); facts.put("key2", "value2"); //facts.put("otherkey", "otherval"); consumer.setFacts(facts); consumer = consumerCurator.create(consumer); // Create another consumer to make sure we're not just retreiving everyhting Consumer otherConsumer = new Consumer("testConsumer2", "testUser2", owner, ct); Map<String, String> otherFacts = new HashMap<String, String>(); otherFacts.put("key1", "value2"); otherFacts.put("key2", "value1"); otherConsumer.setFacts(otherFacts); otherConsumer = consumerCurator.create(otherConsumer); List<KeyValueParameter> factFilters = new LinkedList<KeyValueParameter>(); factFilters.add(new TestingKeyValueParameter("key1", "value2")); factFilters.add(new TestingKeyValueParameter("key2", "value1")); List<Consumer> results = consumerCurator.searchOwnerConsumers( owner, null, null, null, null, factFilters, null, null, null).list(); assertEquals(1, results.size()); assertEquals(otherConsumer, results.get(0)); } @Test public void testSearchBySubscriptionId() { // Create another consumer to make sure we're not just retrieving everything Consumer otherConsumer = new Consumer("testConsumer2", "testUser2", owner, ct); otherConsumer = consumerCurator.create(otherConsumer); Consumer consumer = new Consumer("testConsumer", "testUser", owner, ct); consumer = consumerCurator.create(consumer); Product p = TestUtil.createProduct("SKU1", "Product 1"); productCurator.create(p); Pool pool = new Pool( owner, p, new HashSet<Product>(), 1L, TestDateUtil.date(2010, 1, 1), TestDateUtil.date(2030, 1, 1), "CONTRACT_123", "ACCOUNT_456", "ORDER_789" ); Pool pool2 = new Pool( owner, p, new HashSet<Product>(), 1L, TestDateUtil.date(2010, 1, 1), TestDateUtil.date(2030, 1, 1), "CONTRACT_123", "ACCOUNT_456", "ORDER_789" ); String source1 = Util.generateDbUUID(); String source2 = Util.generateDbUUID(); pool.setSourceSubscription(new SourceSubscription(source1, "master")); pool2.setSourceSubscription(new SourceSubscription(source2, "master2")); poolCurator.create(pool); poolCurator.create(pool2); EntitlementCertificate cert = createEntitlementCertificate("entkey", "ecert"); Entitlement e = createEntitlement(owner, consumer, pool, cert); entitlementCurator.create(e); Entitlement e2 = createEntitlement(owner, otherConsumer, pool2, cert); entitlementCurator.create(e2); List<String> subscriptionIds = new ArrayList<String>(); subscriptionIds.add(source1); List<Consumer> results = consumerCurator.searchOwnerConsumers( owner, null, null, null, null, null, null, subscriptionIds, null).list(); assertEquals(1, results.size()); assertEquals(consumer, results.get(0)); } @Test public void testSearchByContractNumber() { // Create another consumer to make sure we're not just retrieving everything Consumer otherConsumer = new Consumer("testConsumer2", "testUser2", owner, ct); otherConsumer = consumerCurator.create(otherConsumer); Consumer consumer = new Consumer("testConsumer", "testUser", owner, ct); consumer = consumerCurator.create(consumer); Product p = TestUtil.createProduct("SKU1", "Product 1"); productCurator.create(p); Pool pool = new Pool( owner, p, new HashSet<Product>(), 1L, TestDateUtil.date(2010, 1, 1), TestDateUtil.date(2030, 1, 1), "CONTRACT_123", "ACCOUNT_456", "ORDER_789" ); Pool pool2 = new Pool( owner, p, new HashSet<Product>(), 1L, TestDateUtil.date(2010, 1, 1), TestDateUtil.date(2030, 1, 1), "CONTRACT_XXX", "ACCOUNT_456", "ORDER_789" ); pool.setSourceSubscription(new SourceSubscription(Util.generateDbUUID(), "master")); pool2.setSourceSubscription(new SourceSubscription(Util.generateDbUUID(), "master")); poolCurator.create(pool); poolCurator.create(pool2); EntitlementCertificate cert = createEntitlementCertificate("entkey", "ecert"); Entitlement e = createEntitlement(owner, consumer, pool, cert); entitlementCurator.create(e); Entitlement e2 = createEntitlement(owner, otherConsumer, pool2, cert); entitlementCurator.create(e2); List<String> contracts = new ArrayList<String>(); contracts.add("CONTRACT_123"); List<Consumer> results = consumerCurator.searchOwnerConsumers( owner, null, null, null, null, null, null, null, contracts).list(); assertEquals(1, results.size()); assertEquals(consumer, results.get(0)); } @Test public void testSearchBySku() { Consumer consumer = new Consumer("testConsumer", "testUser", owner, ct); consumer = consumerCurator.create(consumer); // Create another consumer to make sure we're not just retrieving everything Consumer otherConsumer = new Consumer("testConsumer2", "testUser2", owner, ct); otherConsumer = consumerCurator.create(otherConsumer); Product p = TestUtil.createProduct("SKU1", "Product 1"); p.setAttribute(Product.Attributes.TYPE, "MKT"); Product p2 = TestUtil.createProduct("SVC_ID", "Product 2"); p2.setAttribute(Product.Attributes.TYPE, "SVC"); productCurator.create(p); productCurator.create(p2); Pool pool = new Pool( owner, p, new HashSet<Product>(), 1L, TestDateUtil.date(2010, 1, 1), TestDateUtil.date(2030, 1, 1), "CONTRACT_123", "ACCOUNT_456", "ORDER_789" ); Pool pool2 = new Pool( owner, p2, new HashSet<Product>(), 1L, TestDateUtil.date(2010, 1, 1), TestDateUtil.date(2030, 1, 1), "CONTRACT_XXX", "ACCOUNT_456", "ORDER_789" ); pool.setSourceSubscription(new SourceSubscription(Util.generateDbUUID(), "master")); pool2.setSourceSubscription(new SourceSubscription(Util.generateDbUUID(), "master")); poolCurator.create(pool); poolCurator.create(pool2); EntitlementCertificate cert = createEntitlementCertificate("entkey", "ecert"); Entitlement e = createEntitlement(owner, consumer, pool, cert); entitlementCurator.create(e); Entitlement e2 = createEntitlement(owner, consumer, pool2, cert); entitlementCurator.create(e2); List<String> skus = new ArrayList<String>(); skus.add("SKU1"); List<Consumer> results = consumerCurator.searchOwnerConsumers( owner, null, null, null, null, null, skus, null, null).list(); assertEquals(1, results.size()); assertEquals(consumer, results.get(0)); skus.clear(); // MKT_ID should not appear since it is a marketing product skus.add("SVC_ID"); results = consumerCurator.searchOwnerConsumers(owner, null, null, null, null, null, skus, null, null) .list(); assertTrue(results.isEmpty()); } @Test public void testSearchBySkuIsConjunction() { Consumer consumer = new Consumer("testConsumer", "testUser", owner, ct); consumer = consumerCurator.create(consumer); Consumer otherConsumer = new Consumer("testConsumer2", "testUser2", owner, ct); otherConsumer = consumerCurator.create(otherConsumer); Product p = TestUtil.createProduct("SKU1", "Product 1"); p.setAttribute(Product.Attributes.TYPE, "MKT"); Product p2 = TestUtil.createProduct("SKU2", "Product 2"); p2.setAttribute(Product.Attributes.TYPE, "MKT"); productCurator.create(p); productCurator.create(p2); Pool pool = new Pool( owner, p, new HashSet<Product>(), 10L, TestDateUtil.date(2010, 1, 1), TestDateUtil.date(2030, 1, 1), "CONTRACT_123", "ACCOUNT_456", "ORDER_789" ); Pool pool2 = new Pool( owner, p2, new HashSet<Product>(), 10L, TestDateUtil.date(2010, 1, 1), TestDateUtil.date(2030, 1, 1), "CONTRACT_XXX", "ACCOUNT_456", "ORDER_789" ); pool.setSourceSubscription(new SourceSubscription(Util.generateDbUUID(), "master")); pool2.setSourceSubscription(new SourceSubscription(Util.generateDbUUID(), "master")); poolCurator.create(pool); poolCurator.create(pool2); EntitlementCertificate cert = createEntitlementCertificate("entkey", "entcert"); Entitlement e = createEntitlement(owner, consumer, pool, cert); entitlementCurator.create(e); Entitlement e2 = createEntitlement(owner, consumer, pool2, cert); entitlementCurator.create(e2); Entitlement e3 = createEntitlement(owner, otherConsumer, pool2, cert); entitlementCurator.create(e3); List<String> skus = new ArrayList<String>(); skus.add("SKU1"); skus.add("SKU2"); List<Consumer> results = consumerCurator.searchOwnerConsumers( owner, null, null, null, null, null, skus, null, null).list(); assertEquals(1, results.size()); assertEquals(consumer, results.get(0)); skus.clear(); skus.add("SKU2"); results = consumerCurator.searchOwnerConsumers(owner, null, null, null, null, null, skus, null, null) .list(); assertEquals(2, results.size()); skus.clear(); skus.add("SKU1"); results = consumerCurator.searchOwnerConsumers(owner, null, null, null, null, null, skus, null, null) .list(); assertEquals(1, results.size()); assertEquals(consumer, results.get(0)); } @Test public void testSearchBySkuIsWithinOneOwner() { Consumer consumer = new Consumer("testConsumer", "testUser", owner, ct); consumer = consumerCurator.create(consumer); Owner owner2 = new Owner("test-owner2", "Test Owner2"); owner2 = ownerCurator.create(owner2); Consumer otherConsumer = new Consumer("testConsumer2", "testUser2", owner2, ct); otherConsumer = consumerCurator.create(otherConsumer); // Two owners, two different products, but with the same SKU Product p = TestUtil.createProduct("SKU1", "Product 1"); p.setAttribute(Product.Attributes.TYPE, "MKT"); Product p2 = TestUtil.createProduct("SKU1", "Product 1"); p2.setAttribute(Product.Attributes.TYPE, "MKT"); productCurator.create(p); productCurator.create(p2); Pool pool = new Pool( owner, p, new HashSet<Product>(), 10L, TestDateUtil.date(2010, 1, 1), TestDateUtil.date(2030, 1, 1), "CONTRACT_123", "ACCOUNT_456", "ORDER_789" ); Pool pool2 = new Pool( owner2, p2, new HashSet<Product>(), 10L, TestDateUtil.date(2010, 1, 1), TestDateUtil.date(2030, 1, 1), "CONTRACT_123", "ACCOUNT_456", "ORDER_789" ); pool.setSourceSubscription(new SourceSubscription(Util.generateDbUUID(), "master")); poolCurator.create(pool); pool2.setSourceSubscription(new SourceSubscription(Util.generateDbUUID(), "master")); poolCurator.create(pool2); EntitlementCertificate cert = createEntitlementCertificate("entkey", "entcert"); Entitlement e = createEntitlement(owner, consumer, pool, cert); entitlementCurator.create(e); Entitlement e2 = createEntitlement(owner2, otherConsumer, pool2, cert); entitlementCurator.create(e2); List<String> skus = new ArrayList<String>(); skus.add("SKU1"); List<Consumer> results = consumerCurator.searchOwnerConsumers( owner, null, null, null, null, null, skus, null, null).list(); assertEquals(1, results.size()); assertEquals(consumer, results.get(0)); results = consumerCurator.searchOwnerConsumers(owner2, null, null, null, null, null, skus, null, null) .list(); assertEquals(1, results.size()); assertEquals(otherConsumer, results.get(0)); // Searching with no owner cuts across the whole data set results = consumerCurator.searchOwnerConsumers(null, null, null, null, null, null, skus, null, null) .list(); assertEquals(2, results.size()); } @Test public void testSearchByContractNumberIsConjunction() { Consumer consumer = new Consumer("testConsumer", "testUser", owner, ct); consumer = consumerCurator.create(consumer); Consumer otherConsumer = new Consumer("testConsumer2", "testUser2", owner, ct); otherConsumer = consumerCurator.create(otherConsumer); Product p = TestUtil.createProduct("SKU1", "Product 1"); p.setAttribute(Product.Attributes.TYPE, "MKT"); productCurator.create(p); Pool pool = new Pool( owner, p, new HashSet<Product>(), 10L, TestDateUtil.date(2010, 1, 1), TestDateUtil.date(2030, 1, 1), "CONTRACT_123", "ACCOUNT_456", "ORDER_789" ); Pool pool2 = new Pool( owner, p, new HashSet<Product>(), 10L, TestDateUtil.date(2010, 1, 1), TestDateUtil.date(2030, 1, 1), "CONTRACT_XXX", "ACCOUNT_456", "ORDER_789" ); pool.setSourceSubscription(new SourceSubscription(Util.generateDbUUID(), "master")); pool2.setSourceSubscription(new SourceSubscription(Util.generateDbUUID(), "master")); poolCurator.create(pool); poolCurator.create(pool2); EntitlementCertificate cert = createEntitlementCertificate("entkey", "entcert"); Entitlement e = createEntitlement(owner, consumer, pool, cert); entitlementCurator.create(e); Entitlement e2 = createEntitlement(owner, consumer, pool2, cert); entitlementCurator.create(e2); Entitlement e3 = createEntitlement(owner, otherConsumer, pool2, cert); entitlementCurator.create(e3); List<String> contracts = new ArrayList<String>(); contracts.add("CONTRACT_123"); contracts.add("CONTRACT_XXX"); List<Consumer> results = consumerCurator.searchOwnerConsumers( owner, null, null, null, null, null, null, null, contracts).list(); assertEquals(1, results.size()); assertEquals(consumer, results.get(0)); contracts.clear(); contracts.add("CONTRACT_XXX"); results = consumerCurator.searchOwnerConsumers( owner, null, null, null, null, null, null, null, contracts).list(); assertEquals(2, results.size()); contracts.clear(); contracts.add("CONTRACT_123"); results = consumerCurator.searchOwnerConsumers( owner, null, null, null, null, null, null, null, contracts).list(); assertEquals(1, results.size()); assertEquals(consumer, results.get(0)); } @Test public void testSearchByContractAndSku() { Consumer consumer = new Consumer("testConsumer", "testUser", owner, ct); consumer = consumerCurator.create(consumer); Consumer consumer2 = new Consumer("testConsumer2", "testUser2", owner, ct); consumer2 = consumerCurator.create(consumer2); Consumer consumer3 = new Consumer("testConsumer3", "testUser3", owner, ct); consumer3 = consumerCurator.create(consumer3); Product p = TestUtil.createProduct("SKU1", "Product 1"); p.setAttribute(Product.Attributes.TYPE, "MKT"); Product p2 = TestUtil.createProduct("SKU2", "Product 2"); p2.setAttribute(Product.Attributes.TYPE, "MKT"); productCurator.create(p); productCurator.create(p2); Pool pool = new Pool( owner, p, new HashSet<Product>(), 1L, TestDateUtil.date(2010, 1, 1), TestDateUtil.date(2030, 1, 1), "CONTRACT_123", "ACCOUNT_456", "ORDER_789" ); Pool pool2 = new Pool( owner, p, new HashSet<Product>(), 1L, TestDateUtil.date(2010, 1, 1), TestDateUtil.date(2030, 1, 1), "CONTRACT_XXX", "ACCOUNT_456", "ORDER_789" ); // Same contract as 1 but different SKU Pool pool3 = new Pool( owner, p2, new HashSet<Product>(), 1L, TestDateUtil.date(2010, 1, 1), TestDateUtil.date(2030, 1, 1), "CONTRACT_123", "ACCOUNT_456", "ORDER_789" ); for (Pool x : new Pool[] { pool, pool2, pool3 }) { x.setSourceSubscription(new SourceSubscription(Util.generateDbUUID(), "master")); poolCurator.create(x); } EntitlementCertificate cert = createEntitlementCertificate("entkey", "ecert"); Entitlement e = createEntitlement(owner, consumer, pool, cert); entitlementCurator.create(e); Entitlement e2 = createEntitlement(owner, consumer2, pool2, cert); entitlementCurator.create(e2); Entitlement e3 = createEntitlement(owner, consumer3, pool3, cert); entitlementCurator.create(e3); List<String> skus = new ArrayList<String>(); skus.add("SKU1"); List<String> contracts = new ArrayList<String>(); contracts.add("CONTRACT_123"); List<Consumer> results = consumerCurator.searchOwnerConsumers( owner, null, null, null, null, null, skus, null, contracts).list(); assertEquals(1, results.size()); assertEquals(consumer, results.get(0)); } private class TestingKeyValueParameter extends KeyValueParameter { /** * @param queryParamName * @param queryParameterValue */ public TestingKeyValueParameter(String key, String value) { super(key, value); } @Override public String key() { return this.paramName; } @Override public String value() { return this.paramValue; } } }