/* * Copyright (c) 2016 Cisco Systems, Inc. and others. All rights reserved. * * This program and the accompanying materials are made available under the * terms of the Eclipse Public License v1.0 which accompanies this distribution, * and is available at http://www.eclipse.org/legal/epl-v10.html */ package org.opendaylight.groupbasedpolicy.sxp.ep.provider.impl; import java.util.ArrayList; import java.util.Collections; import java.util.List; import java.util.Map; import org.junit.Assert; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; import org.mockito.ArgumentCaptor; import org.mockito.Captor; import org.mockito.Matchers; import org.mockito.Mock; import org.mockito.Mockito; import org.mockito.Spy; import org.mockito.runners.MockitoJUnitRunner; import org.opendaylight.groupbasedpolicy.sxp.ep.provider.impl.dao.EpPolicyTemplateValueKey; import org.opendaylight.groupbasedpolicy.sxp.ep.provider.impl.dao.EpPolicyTemplateValueKeyFactory; import org.opendaylight.groupbasedpolicy.sxp.ep.provider.impl.util.EPTemplateUtil; import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.base_endpoint.rev160427.endpoints.address.endpoints.AddressEndpoint; import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.base_endpoint.rev160427.endpoints.address.endpoints.AddressEndpointBuilder; import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.base_endpoint.rev160427.endpoints.containment.endpoints.ContainmentEndpoint; import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.base_endpoint.rev160427.endpoints.containment.endpoints.ContainmentEndpointBuilder; import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.base_endpoint.rev160427.register.endpoint.input.AddressEndpointReg; import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.base_endpoint.rev160427.register.endpoint.input.AddressEndpointRegBuilder; import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.base_endpoint.rev160427.register.endpoint.input.ContainmentEndpointReg; import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.base_endpoint.rev160427.register.endpoint.input.ContainmentEndpointRegBuilder; import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.common.rev140421.ConditionName; import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.common.rev140421.EndpointGroupId; import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.common.rev140421.TenantId; import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.renderer.rev151103.renderers.renderer.renderer.policy.configuration.endpoints.AddressEndpointWithLocation; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.controller.config.groupbasedpolicy.sxp.integration.sxp.ep.provider.model.rev160302.sxp.ep.mapper.EndpointPolicyTemplateBySgt; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.controller.config.groupbasedpolicy.sxp.integration.sxp.ep.provider.model.rev160302.sxp.ep.mapper.EndpointPolicyTemplateBySgtBuilder; import org.opendaylight.yang.gen.v1.urn.opendaylight.sxp.database.rev160308.Sgt; import org.opendaylight.yangtools.yang.binding.Augmentation; /** * Test for {@link SxpEndpointAugmentorImpl}. */ @RunWith(MockitoJUnitRunner.class) public class SxpEndpointAugmentorImplTest { @Mock private ReadableByKey<EpPolicyTemplateValueKey, EndpointPolicyTemplateBySgt> epPolicyDao; @Spy private EpPolicyTemplateValueKeyFactory keyFactory = new EpPolicyTemplateValueKeyFactory( EPTemplateUtil.createEndpointGroupIdOrdering(), EPTemplateUtil.createConditionNameOrdering()); @Captor private ArgumentCaptor<EpPolicyTemplateValueKey> keyCapt; private SxpEndpointAugmentorImpl augmetor; @Before public void setUp() throws Exception { augmetor = new SxpEndpointAugmentorImpl(epPolicyDao, keyFactory); } @Test public void testBuildAddressEndpointWithLocationAugmentation() throws Exception { final TenantId tenantId = new TenantId("tn1"); final AddressEndpoint endpoint = new AddressEndpointBuilder() .setTenant(tenantId) .setCondition(buildConditions(new String[]{"cn2", "cn1"})) .setEndpointGroup(buildEndpointGroupIds(new String[]{"epg2", "epg1"})) .build(); Mockito.doCallRealMethod().when(keyFactory).sortValueKeyLists(Matchers.<EndpointPolicyTemplateBySgt>any()); final List<ConditionName> conditions = buildConditions(new String[]{"cn1", "cn2"}); final List<EndpointGroupId> endpointGroupIds = buildEndpointGroupIds(new String[]{"epg1", "epg2"}); final EndpointPolicyTemplateBySgt epPolicyTemplate = new EndpointPolicyTemplateBySgtBuilder() .setTenant(tenantId) .setEndpointGroups(endpointGroupIds) .setConditions(conditions) .setSgt(new Sgt(42)) .build(); Mockito.when(epPolicyDao.readBy(keyCapt.capture())).thenReturn(Collections.singletonList(epPolicyTemplate)); final Map.Entry<Class<? extends Augmentation<AddressEndpointWithLocation>>, Augmentation<AddressEndpointWithLocation>> augmentationEntry = augmetor.buildAddressEndpointWithLocationAugmentation(endpoint); // Assert.assertEquals(AddressEndpointWithLocationAug.class, augmentationEntry.getKey()); // Assert.assertTrue(DataObject.class.isAssignableFrom(augmentationEntry.getValue().getClass())); // Assert.assertEquals(AddressEndpointWithLocationAug.class, ((DataObject) augmentationEntry.getValue()).getImplementedInterface()); // Assert.assertEquals(42, ((AddressEndpointWithLocationAug) augmentationEntry.getValue()).getSgt().getValue().intValue()); final EpPolicyTemplateValueKey keyValue = keyCapt.getValue(); Assert.assertEquals(tenantId, keyValue.getTenantId()); Assert.assertEquals(endpointGroupIds, keyValue.getEpgId()); Assert.assertEquals(conditions, keyValue.getConditionName()); } private static List<EndpointGroupId> buildEndpointGroupIds(final String[] names) { final List<EndpointGroupId> endpointGroupIds = new ArrayList<>(); for (String epgId : names) { endpointGroupIds.add(new EndpointGroupId(epgId)); } return endpointGroupIds; } private static List<ConditionName> buildConditions(final String[] names) { final List<ConditionName> conditions = new ArrayList<>(); for (String condition : names) { conditions.add(new ConditionName(condition)); } return conditions; } @Test public void testBuildAddressEndpointAugmentation() throws Exception { final AddressEndpointReg endpoint = new AddressEndpointRegBuilder().build(); Assert.assertNull(augmetor.buildAddressEndpointAugmentation(endpoint)); } @Test public void testBuildContainmentEndpointAugmentation() throws Exception { final ContainmentEndpointReg endpoint = new ContainmentEndpointRegBuilder().build(); Assert.assertNull(augmetor.buildContainmentEndpointAugmentation(endpoint)); } @Test public void testBuildContainmentEndpointWithLocationAugmentation() throws Exception { final ContainmentEndpoint endpoint = new ContainmentEndpointBuilder().build(); Assert.assertNull(augmetor.buildContainmentEndpointWithLocationAugmentation(endpoint)); } }