/** * 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 org.candlepin.test.TestUtil; import java.util.ArrayList; import java.util.Date; import java.util.HashSet; import java.util.List; import java.util.Set; import javax.inject.Inject; /** * This class creates the following dataset: * - 10 Engineering products E0..E9 * - 10 Pools P0..P9 * - 10 Marketing products M0..M9 * - 3 consumers C0..C2 * - 10 Content instances CON0..CON9 * - 20 Entitlements E0..E19 * * To understand different edge cases that this dataset provides, see inline comments in this class * and most importantly see commented tests in EntitlementCuratorTest * * @author fnguyen * @see EntitlementCuratorTest * */ public class ModifierTestDataGenerator { /** * All the entitlements of this consumer are expired */ @Inject private ProductCurator productCurator; @Inject private OwnerProductCurator ownerProductCurator; @Inject private CertificateSerialCurator certSerialCurator; @Inject private PoolCurator poolCurator; @Inject private ConsumerCurator consumerCurator; @Inject private ConsumerTypeCurator consumerTypeCurator; @Inject private EntitlementCurator entitlementCurator; @Inject private ContentCurator contentCurator; private Owner owner; private List<Consumer> consumers = new ArrayList<Consumer>(); private List<Content> contents = new ArrayList<Content>(); private List<Product> engProducts = new ArrayList<Product>(); private List<Product> mktProducts = new ArrayList<Product>(); private List<Entitlement> entitlements = new ArrayList<Entitlement>(); private List<Pool> pools = new ArrayList<Pool>(); public void createTestData(Owner owner) { this.owner = owner; for (int i = 0; i < 10; i++) { Product prod = TestUtil.createProduct("E" + i, "EName" + i); prod = productCurator.create(prod); this.ownerProductCurator.mapProductToOwner(prod, owner); engProducts.add(prod); } for (int i = 0; i < 10; i++) { Content content = TestUtil.createContent("fakecontent-" + i); Set<String> modified = new HashSet<String>(); /** * Content 0 modifies every product */ if (i == 0) { for (Product p : engProducts) { modified.add(p.getId()); } } else if (i == 1) { /** * Content 1 modify product 3 */ modified.add(engProducts.get(3).getId()); } else if (i == 4 || i == 5) { /** * Content 4,5 modify products 7,8,9 */ modified.add(engProducts.get(7).getId()); modified.add(engProducts.get(8).getId()); modified.add(engProducts.get(9).getId()); } else if (i == 6) { /** * Content 6 modifies marketing product 2 and 3 */ modified.add("M2"); modified.add("M3"); } content.setModifiedProductIds(modified); content = contentCurator.create(content); contents.add(content); } for (int i = 0; i < 3; i++) { Consumer cons = createConsumer(owner, "C" + i); consumers.add(cons); } /** * Attach engineering products to content */ for (int i = 0; i < 10; i++) { engProducts.get(i).addContent(contents.get(i), true); productCurator.merge(engProducts.get(i)); } for (int i = 0; i < 10; i++) { List<Product> provided = new ArrayList<Product>(); provided.add(engProducts.get(i)); Date start = TestUtil.createDate(2000, 1, 1); Date end = null; /** * First 3 pools are expired */ if (i < 3) { end = TestUtil.createDate(2005, 1, 1); } else if (i == 7) { //Pool 7 shouldn't overlap start = TestUtil.createDate(2051, 1, 1); end = TestUtil.createDate(2052, 1, 1); } else { end = TestUtil.createDate(2050, 1, 1); } //Pool 2 doesn't have provided products if (i == 2) { provided = new ArrayList<Product>(); } Pool p = createPool(i, start, end, provided); pools.add(p); } for (int i = 0; i < 20; i++) { Entitlement e = null; /** * Consumer 0 owns entitlements from 0-9 to every pool * Consumer 1 owns only one entitlement - 18, to pool 8 * Consumer 2 owns entitlements to pool 0-9 without 8 and 4 */ if (i <= 9) { e = createEntitlement(consumers.get(0), pools.get(i % 10)); } else if (i == 18) { e = createEntitlement(consumers.get(1), pools.get(i % 10)); } else if (i != 14) { e = createEntitlement(consumers.get(2), pools.get(i % 10)); } entitlements.add(e); } } public List<Entitlement> getEntitlements(Integer ... indexes) { List<Entitlement> result = new ArrayList<Entitlement>(); for (Integer i : indexes) { result.add(entitlements.get(i)); } return result; } private Entitlement createEntitlement(Consumer consumer, Pool pool) { EntitlementCertificate cert = createEntitlementCertificate("key", "certificate"); Entitlement e = TestUtil.createEntitlement(owner, consumer, pool, cert); entitlementCurator.create(e); return e; } private EntitlementCertificate createEntitlementCertificate(String key, String cert) { EntitlementCertificate toReturn = new EntitlementCertificate(); CertificateSerial certSerial = new CertificateSerial(new Date()); certSerialCurator.create(certSerial); toReturn.setKeyAsBytes(key.getBytes()); toReturn.setCertAsBytes(cert.getBytes()); toReturn.setSerial(certSerial); return toReturn; } private Pool createPool(int id, Date startDate, Date endDate, List<Product> provided) { Product poolProd = TestUtil.createProduct("M" + id, "MName-" + id); productCurator.create(poolProd); this.ownerProductCurator.mapProductToOwner(poolProd, owner); Pool p = TestUtil.createPool(owner, poolProd); mktProducts.add(poolProd); for (Product prov : provided) { p.addProvidedProduct(prov); } p.setStartDate(startDate); p.setEndDate(endDate); p.setQuantity(1000L); poolCurator.create(p); return p; } private Consumer createConsumer(Owner owner, String name) { ConsumerType type = new ConsumerType("test-consumer-type-" + TestUtil.randomInt()); consumerTypeCurator.create(type); Consumer c = new Consumer(name, "test-user", owner, type); consumerCurator.create(c); return c; } public String getEntitlementId(int i) { return getEntitlements(i).get(0).getId(); } }