Search in sources :

Example 16 with Pool

use of org.candlepin.model.Pool in project candlepin by candlepin.

the class RevocationOp method determineExcessEntitlements.

/**
 * In the second part, the list of entitlements is compiled from the main pool plus the shared pools
 * It is sorted in the order of LIFO. Entitlements are put in the revoke list until the count is
 * acceptable for the main pool. Any entitlements that came from a shared pool are also reflected in
 * the adjustment for the source entitlement for that shared pool.
 *
 * @param pool
 */
private void determineExcessEntitlements(Pool pool) {
    List<Pool> pools = new ArrayList<>();
    pools.add(pool);
    if (sharedPools.get(pool) != null) {
        pools.addAll(sharedPools.get(pool));
    }
    List<Entitlement> entitlements = this.poolCurator.retrieveOrderedEntitlementsOf(pools);
    long newConsumed = poolNewConsumed.get(pool);
    long existing = pool.getQuantity();
    for (Entitlement ent : entitlements) {
        if (newConsumed > existing) {
            ConsumerType ctype = this.consumerTypeCurator.getConsumerType(ent.getConsumer());
            if (!ctype.isType(ConsumerTypeEnum.SHARE)) {
                if (ent.getPool().isCreatedByShare()) {
                    Entitlement source = ent.getPool().getSourceEntitlement();
                    // the source entitlement may have already been adjusted in the shared pool reduction
                    if (shareEntitlementsToAdjust.get(source) == null) {
                        addEntitlementToAdjust(source, source.getQuantity());
                    }
                    addEntitlementToAdjust(source, shareEntitlementsToAdjust.get(source) - ent.getQuantity());
                    if (shareEntitlementsToAdjust.get(source) == 0) {
                        shareEntitlementsToAdjust.remove(source);
                        addEntitlmentToRevoke(source);
                    }
                }
                addEntitlementToRevoke(ent);
                newConsumed -= ent.getQuantity();
            }
        }
    }
    poolNewConsumed.put(pool, newConsumed);
}
Also used : ArrayList(java.util.ArrayList) Pool(org.candlepin.model.Pool) Entitlement(org.candlepin.model.Entitlement) ConsumerType(org.candlepin.model.ConsumerType)

Example 17 with Pool

use of org.candlepin.model.Pool in project candlepin by candlepin.

the class EventBuilder method setEventData.

/**
 * This method is used with any type of event and any target entity.
 * <p>
 * Note: For {@link Type#MODIFIED} events, it can be called twice consecutively
 * to first pass in the original, and then the updated entity. Alternatively,
 * {@link #setEventData(Eventful, Eventful)} can be used in the same use case.
 * </p>
 * @param entity The target entity of the Event
 * @return The builder object
 */
public EventBuilder setEventData(Eventful entity) {
    if (entity != null) {
        // Be careful to check for null before setting so we don't overwrite anything useful
        if (entity instanceof Named && ((Named) entity).getName() != null) {
            event.setTargetName(((Named) entity).getName());
        }
        if (entity instanceof Owned) {
            String ownerId = ((Owned) entity).getOwnerId();
            if (ownerId != null) {
                event.setOwnerId(ownerId);
            }
        }
        if (entity instanceof Entitlement) {
            event.setReferenceType(Event.ReferenceType.POOL);
            Pool referencedPool = ((Entitlement) entity).getPool();
            if (referencedPool != null && referencedPool.getId() != null) {
                event.setReferenceId(referencedPool.getId());
            }
        }
        if (entity.getId() != null) {
            event.setEntityId((String) entity.getId());
            if (entity instanceof ConsumerProperty) {
                Consumer owningConsumer = ((ConsumerProperty) entity).getConsumer();
                if (owningConsumer != null && owningConsumer.getUuid() != null) {
                    event.setConsumerUuid(owningConsumer.getUuid());
                }
            }
        }
        if (event.getTarget().equals(Target.POOL) && event.getType().equals(Type.CREATED)) {
            Map<String, String> eventData = new HashMap<>();
            eventData.put("subscriptionId", ((Pool) entity).getSubscriptionId());
            try {
                event.setEventData(mapper.writeValueAsString(eventData));
            } catch (JsonProcessingException e) {
                log.error("Error while building JSON for pool.created event.", e);
                throw new IseException("Error while building JSON for pool.created event.");
            }
        }
    }
    return this;
}
Also used : Named(org.candlepin.model.Named) Owned(org.candlepin.model.Owned) Consumer(org.candlepin.model.Consumer) IseException(org.candlepin.common.exceptions.IseException) HashMap(java.util.HashMap) Pool(org.candlepin.model.Pool) Entitlement(org.candlepin.model.Entitlement) JsonProcessingException(com.fasterxml.jackson.core.JsonProcessingException) ConsumerProperty(org.candlepin.model.ConsumerProperty)

Example 18 with Pool

use of org.candlepin.model.Pool in project candlepin by candlepin.

the class DefaultEntitlementCertServiceAdapterTest method setUp.

@Before
public void setUp() {
    Injector injector = Guice.createInjector(new TestingModules.MockJpaModule(), new TestingModules.ServletEnvironmentModule(), new TestingModules.StandardTest());
    injector.injectMembers(this);
    v3extensionUtil = new X509V3ExtensionUtil(config, entCurator);
    certServiceAdapter = new DefaultEntitlementCertServiceAdapter(mockedPKI, extensionUtil, v3extensionUtil, mock(EntitlementCertificateCurator.class), keyPairCurator, serialCurator, ownerCurator, entCurator, I18nFactory.getI18n(getClass(), Locale.US, I18nFactory.FALLBACK), config, productCurator, this.mockConsumerTypeCurator, this.mockEnvironmentCurator);
    product = TestUtil.createProduct("12345", "a product");
    product.setAttribute(Product.Attributes.VERSION, "version");
    product.setAttribute(Product.Attributes.VARIANT, "variant");
    product.setAttribute(Product.Attributes.TYPE, "SVC");
    product.setAttribute(Product.Attributes.ARCHITECTURE, ARCH_LABEL);
    largeContentProduct = TestUtil.createProduct("67890", "large content product");
    largeContentProduct.setAttribute(Product.Attributes.VERSION, "version");
    largeContentProduct.setAttribute(Product.Attributes.VARIANT, "variant");
    largeContentProduct.setAttribute(Product.Attributes.TYPE, "SVC");
    largeContentProduct.setAttribute(Product.Attributes.ARCHITECTURE, ARCH_LABEL);
    content = createContent(CONTENT_NAME, CONTENT_ID, CONTENT_LABEL, CONTENT_TYPE, CONTENT_VENDOR, CONTENT_URL, CONTENT_GPG_URL, ARCH_LABEL);
    content.setMetadataExpire(CONTENT_METADATA_EXPIRE);
    content.setRequiredTags(REQUIRED_TAGS);
    kickstartContent = createContent(CONTENT_NAME, CONTENT_ID_KICKSTART, CONTENT_LABEL, CONTENT_TYPE_KICKSTART, CONTENT_VENDOR, CONTENT_URL, CONTENT_GPG_URL, ARCH_LABEL);
    kickstartContent.setMetadataExpire(CONTENT_METADATA_EXPIRE);
    kickstartContent.setRequiredTags(REQUIRED_TAGS);
    fileContent = createContent(CONTENT_NAME, CONTENT_ID_FILE, CONTENT_LABEL, CONTENT_TYPE_FILE, CONTENT_VENDOR, CONTENT_URL, CONTENT_GPG_URL, ARCH_LABEL);
    fileContent.setMetadataExpire(CONTENT_METADATA_EXPIRE);
    fileContent.setRequiredTags(REQUIRED_TAGS);
    unknownTypeContent = createContent(CONTENT_NAME, CONTENT_ID_UNKNOWN, CONTENT_LABEL, CONTENT_TYPE_UNKNOWN, CONTENT_VENDOR, CONTENT_URL_UNKNOWN_TYPE, CONTENT_GPG_URL, ARCH_LABEL);
    unknownTypeContent.setMetadataExpire(CONTENT_METADATA_EXPIRE);
    unknownTypeContent.setRequiredTags(REQUIRED_TAGS);
    String emptyArches = "";
    noArchContent = createContent(CONTENT_NAME, CONTENT_ID, CONTENT_LABEL, CONTENT_TYPE, CONTENT_VENDOR, CONTENT_URL, CONTENT_GPG_URL, emptyArches);
    superContent = new HashSet<>();
    int index = 0;
    for (String url : testUrls) {
        ++index;
        superContent.add(createContent(CONTENT_NAME + "-" + index, CONTENT_ID + "-" + index, CONTENT_LABEL, CONTENT_TYPE, CONTENT_VENDOR, url, CONTENT_GPG_URL, ARCH_LABEL));
    }
    largeContent = new HashSet<>();
    index = 0;
    for (String url : largeTestUrls) {
        ++index;
        largeContent.add(createContent(CONTENT_NAME + "-" + index, CONTENT_ID + "-" + index, CONTENT_LABEL, CONTENT_TYPE, CONTENT_VENDOR, url, CONTENT_GPG_URL, ARCH_LABEL));
    }
    subscription = TestUtil.createSubscription(null, product, new HashSet<>());
    subscription.setId("1");
    subscription.setQuantity(1L);
    largeContentSubscription = TestUtil.createSubscription(null, largeContentProduct, new HashSet<>());
    largeContentSubscription.setId("2");
    largeContentSubscription.setQuantity(1L);
    owner = new Owner();
    owner.setId(TestUtil.randomString());
    when(ownerCurator.findOwnerById(owner.getId())).thenReturn(owner);
    pool = new Pool();
    pool.setQuantity(1L);
    pool.setProduct(product);
    pool.setStartDate(subscription.getStartDate());
    pool.setEndDate(subscription.getEndDate());
    largeContentPool = new Pool();
    largeContentPool.setProduct(largeContentProduct);
    ConsumerType type = new ConsumerType(ConsumerType.ConsumerTypeEnum.SYSTEM);
    type.setId("test-id");
    consumer = new Consumer("Test Consumer", "bob", owner, type);
    consumer.setUuid("test-consumer");
    when(this.mockConsumerTypeCurator.getConsumerType(eq(consumer))).thenReturn(type);
    when(this.mockConsumerTypeCurator.find(eq(type.getId()))).thenReturn(type);
    entitlement = new Entitlement();
    entitlement.setQuantity(new Integer(ENTITLEMENT_QUANTITY));
    entitlement.setConsumer(consumer);
    entitlement.setPool(pool);
    entitlement.setOwner(owner);
    largeContentEntitlement = new Entitlement();
    largeContentEntitlement.setQuantity(new Integer(ENTITLEMENT_QUANTITY));
    largeContentEntitlement.setConsumer(consumer);
    largeContentEntitlement.setPool(largeContentPool);
    largeContentEntitlement.setOwner(owner);
    product.addContent(content, false);
    Set empty = new HashSet<String>();
    when(productCurator.getPoolProvidedProductUuids(anyString())).thenReturn(empty);
// when(productAdapter.getProductById(eq(product.getOwner()), eq(product.getId())))
// .thenReturn(product);
// when(productAdapter.getProductById(
// eq(largeContentProduct.getOwner()), eq(largeContentProduct.getId()))
// ).thenReturn(largeContentProduct);
}
Also used : Owner(org.candlepin.model.Owner) Set(java.util.Set) HashSet(java.util.HashSet) Matchers.anyString(org.mockito.Matchers.anyString) TestingModules(org.candlepin.TestingModules) BigInteger(java.math.BigInteger) X509V3ExtensionUtil(org.candlepin.util.X509V3ExtensionUtil) Consumer(org.candlepin.model.Consumer) Injector(com.google.inject.Injector) Pool(org.candlepin.model.Pool) ConsumerType(org.candlepin.model.ConsumerType) Entitlement(org.candlepin.model.Entitlement) HashSet(java.util.HashSet) Before(org.junit.Before)

Example 19 with Pool

use of org.candlepin.model.Pool in project candlepin by candlepin.

the class CalculatedAttributesUtilTest method testQuantityIncrement.

@Test
public void testQuantityIncrement() {
    Product product2 = TestUtil.createProduct("blah", "blah");
    product2.setAttribute(Product.Attributes.INSTANCE_MULTIPLIER, "12");
    productCurator.create(product2);
    Pool pool2 = createPool(owner1, product2, 500L, TestUtil.createDate(2000, 1, 1), TestUtil.createDate(3000, 1, 1));
    SuggestedQuantity suggested = new SuggestedQuantity();
    suggested.setSuggested(1L);
    suggested.setIncrement(12L);
    Map<String, SuggestedQuantity> suggestedMap = new HashMap<>();
    suggestedMap.put(pool2.getId(), suggested);
    when(quantityRules.getSuggestedQuantities(any(List.class), any(Consumer.class), any(Date.class))).thenReturn(suggestedMap);
    Date date = new Date();
    attrUtil.setQuantityAttributes(pool2, consumer, date);
    assertEquals("1", pool2.getCalculatedAttributes().get("suggested_quantity"));
    assertEquals("12", pool2.getCalculatedAttributes().get("quantity_increment"));
}
Also used : Consumer(org.candlepin.model.Consumer) HashMap(java.util.HashMap) SuggestedQuantity(org.candlepin.policy.js.quantity.SuggestedQuantity) Product(org.candlepin.model.Product) Pool(org.candlepin.model.Pool) List(java.util.List) Date(java.util.Date) Test(org.junit.Test)

Example 20 with Pool

use of org.candlepin.model.Pool in project candlepin by candlepin.

the class InstalledProductStatusCalculatorTest method mockEntitlement.

private Entitlement mockEntitlement(Owner owner, Consumer consumer, Product product, DateRange range, Product... providedProducts) {
    Set<Product> provided = new HashSet<>();
    for (Product pp : providedProducts) {
        provided.add(pp);
    }
    final Pool p = new Pool(owner, product, provided, new Long(1000), range.getStartDate(), range.getEndDate(), "1000", "1000", "1000");
    p.setId("" + lastPoolId++);
    Entitlement e = new Entitlement(p, consumer, owner, 1);
    when(poolCurator.provides(p, product.getId())).thenReturn(true);
    for (Product pp : providedProducts) {
        when(poolCurator.provides(p, pp.getId())).thenReturn(true);
    }
    Random gen = new Random();
    int id = gen.nextInt(Integer.MAX_VALUE);
    e.setId(String.valueOf(id));
    return e;
}
Also used : Random(java.util.Random) Product(org.candlepin.model.Product) ConsumerInstalledProduct(org.candlepin.model.ConsumerInstalledProduct) Pool(org.candlepin.model.Pool) Entitlement(org.candlepin.model.Entitlement) HashSet(java.util.HashSet)

Aggregations

Pool (org.candlepin.model.Pool)508 Test (org.junit.Test)358 Product (org.candlepin.model.Product)217 Entitlement (org.candlepin.model.Entitlement)125 Consumer (org.candlepin.model.Consumer)115 ValidationResult (org.candlepin.policy.ValidationResult)111 ArrayList (java.util.ArrayList)100 LinkedList (java.util.LinkedList)100 Owner (org.candlepin.model.Owner)80 HashSet (java.util.HashSet)76 HashMap (java.util.HashMap)67 PoolQuantity (org.candlepin.model.PoolQuantity)66 Date (java.util.Date)65 ConsumerInstalledProduct (org.candlepin.model.ConsumerInstalledProduct)62 Subscription (org.candlepin.model.dto.Subscription)60 List (java.util.List)48 ConsumerType (org.candlepin.model.ConsumerType)48 SourceSubscription (org.candlepin.model.SourceSubscription)47 ActivationKey (org.candlepin.model.activationkeys.ActivationKey)38 Matchers.anyString (org.mockito.Matchers.anyString)30