2 * Copyright (c) 2016 Cisco Systems, Inc. and others. All rights reserved.
4 * This program and the accompanying materials are made available under the
5 * terms of the Eclipse Public License v1.0 which accompanies this distribution,
6 * and is available at http://www.eclipse.org/legal/epl-v10.html
9 package org.opendaylight.groupbasedpolicy.sxp.ep.provider.impl;
11 import static org.powermock.api.mockito.PowerMockito.verifyNew;
12 import static org.powermock.api.mockito.PowerMockito.whenNew;
13 import static org.powermock.api.support.membermodification.MemberMatcher.method;
14 import static org.powermock.api.support.membermodification.MemberModifier.stub;
16 import com.google.common.collect.Ordering;
17 import org.junit.Assert;
18 import org.junit.Before;
19 import org.junit.Test;
20 import org.junit.runner.RunWith;
21 import org.mockito.Mock;
22 import org.mockito.Mockito;
23 import org.opendaylight.controller.md.sal.binding.api.DataBroker;
24 import org.opendaylight.groupbasedpolicy.api.DomainSpecificRegistry;
25 import org.opendaylight.groupbasedpolicy.api.EndpointAugmentorRegistry;
26 import org.opendaylight.groupbasedpolicy.sxp.ep.provider.impl.dao.EPForwardingTemplateDaoImpl;
27 import org.opendaylight.groupbasedpolicy.sxp.ep.provider.impl.dao.EPPolicyTemplateDaoFacadeImpl;
28 import org.opendaylight.groupbasedpolicy.sxp.ep.provider.impl.dao.EPPolicyTemplateDaoImpl;
29 import org.opendaylight.groupbasedpolicy.sxp.ep.provider.impl.dao.EpPolicyTemplateValueKeyFactory;
30 import org.opendaylight.groupbasedpolicy.sxp.ep.provider.impl.dao.MasterDatabaseBindingDaoImpl;
31 import org.opendaylight.groupbasedpolicy.sxp.ep.provider.impl.dao.SimpleCachedDaoEPForwardingTemplateImpl;
32 import org.opendaylight.groupbasedpolicy.sxp.ep.provider.impl.dao.SimpleCachedDaoImpl;
33 import org.opendaylight.groupbasedpolicy.sxp.ep.provider.impl.listen.EPForwardingTemplateListenerImpl;
34 import org.opendaylight.groupbasedpolicy.sxp.ep.provider.impl.listen.EPPolicyTemplateListenerImpl;
35 import org.opendaylight.groupbasedpolicy.sxp.ep.provider.impl.listen.MasterDatabaseBindingListenerImpl;
36 import org.opendaylight.groupbasedpolicy.sxp.ep.provider.impl.util.EPTemplateUtil;
37 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.IpPrefix;
38 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.base_endpoint.rev160427.BaseEndpointService;
39 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.common.rev140421.ConditionName;
40 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.common.rev140421.EndpointGroupId;
41 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;
42 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.controller.config.groupbasedpolicy.sxp.integration.sxp.ep.provider.rev160722.SgtGeneratorConfig;
43 import org.opendaylight.yang.gen.v1.urn.opendaylight.sxp.database.rev160308.Sgt;
44 import org.opendaylight.yang.gen.v1.urn.opendaylight.sxp.database.rev160308.master.database.fields.MasterDatabaseBinding;
45 import org.powermock.core.classloader.annotations.PrepareForTest;
46 import org.powermock.modules.junit4.PowerMockRunner;
49 * Test for {@link SxpEpProviderProviderImpl}.
51 @RunWith(PowerMockRunner.class)
52 @PrepareForTest({SxpEpProviderProviderImpl.class, EPTemplateUtil.class})
53 public class SxpEpProviderProviderImplTest {
56 private DataBroker dataBroker;
58 private DomainSpecificRegistry domainSpecificRegistry;
60 private EPPolicyTemplateProviderRegistryImpl templateProviderRegistry;
62 private SxpMapperReactorImpl sxpMapperReactor;
64 private BaseEndpointService endpointService;
66 private SimpleCachedDaoImpl<Sgt, EndpointPolicyTemplateBySgt> epPolicyTemplateCachedDao;
68 private SimpleCachedDaoImpl<IpPrefix, MasterDatabaseBinding> masterDBBindingCachedDao;
70 private SimpleCachedDaoEPForwardingTemplateImpl epFwTemplateCachedDao;
72 private Ordering<EndpointGroupId> groupOrdering;
74 private Ordering<ConditionName> conditionOrdering;
76 private EpPolicyTemplateValueKeyFactory epPolicyTemplateKeyFactory;
78 private EPPolicyTemplateDaoImpl epPolicyTemplateDao;
80 private EPForwardingTemplateDaoImpl epForwardingTemplateDao;
82 private MasterDatabaseBindingDaoImpl masterDBBindingDao;
84 private MasterDatabaseBindingListenerImpl masterDBBindingListener;
86 private EPPolicyTemplateListenerImpl epPolicyTemplateListener;
88 private EPForwardingTemplateListenerImpl epForwardingTemplateListener;
90 private SxpEndpointAugmentorImpl sxpEPAugmentor;
92 private EndpointAugmentorRegistry epAugmentorRegistry;
94 private EPPolicyTemplateDaoFacadeImpl epPolicyTemplateDaoFacade;
96 private SgtGeneratorConfig sgtGeneratorConfig;
98 private SgtGeneratorImpl sgtGenerator;
100 private EPToSgtMapperImpl epToSgtMapper;
102 private SxpEpProviderProviderImpl provider;
105 public void setUp() throws Exception {
106 whenNew(EPPolicyTemplateProviderRegistryImpl.class).withNoArguments().thenReturn(templateProviderRegistry);
107 whenNew(SxpMapperReactorImpl.class).withArguments(endpointService, dataBroker).thenReturn(sxpMapperReactor);
108 whenNew(SimpleCachedDaoImpl.class).withNoArguments().thenReturn(epPolicyTemplateCachedDao, masterDBBindingCachedDao);
109 whenNew(SimpleCachedDaoEPForwardingTemplateImpl.class).withNoArguments().thenReturn(epFwTemplateCachedDao);
110 stub(method(EPTemplateUtil.class, "createEndpointGroupIdOrdering")).toReturn(groupOrdering);
111 stub(method(EPTemplateUtil.class, "createConditionNameOrdering")).toReturn(conditionOrdering);
112 whenNew(EpPolicyTemplateValueKeyFactory.class).withArguments(groupOrdering, conditionOrdering)
113 .thenReturn(epPolicyTemplateKeyFactory);
114 whenNew(EPPolicyTemplateDaoImpl.class).withArguments(dataBroker, epPolicyTemplateCachedDao, epPolicyTemplateKeyFactory)
115 .thenReturn(epPolicyTemplateDao);
116 whenNew(SgtGeneratorImpl.class).withArguments(sgtGeneratorConfig).thenReturn(sgtGenerator);
117 whenNew(EPPolicyTemplateDaoFacadeImpl.class).withArguments(dataBroker, epPolicyTemplateDao, epPolicyTemplateCachedDao, sgtGenerator)
118 .thenReturn(epPolicyTemplateDaoFacade);
119 whenNew(EPToSgtMapperImpl.class).withArguments(epPolicyTemplateDaoFacade).thenReturn(epToSgtMapper);
121 whenNew(EPForwardingTemplateDaoImpl.class).withArguments(dataBroker, epFwTemplateCachedDao)
122 .thenReturn(epForwardingTemplateDao);
123 whenNew(MasterDatabaseBindingDaoImpl.class).withArguments(dataBroker, masterDBBindingCachedDao)
124 .thenReturn(masterDBBindingDao);
125 whenNew(MasterDatabaseBindingListenerImpl.class).withArguments(dataBroker, sxpMapperReactor, masterDBBindingCachedDao,
126 epPolicyTemplateDaoFacade, epForwardingTemplateDao).thenReturn(masterDBBindingListener);
127 whenNew(EPPolicyTemplateListenerImpl.class).withArguments(dataBroker, sxpMapperReactor, epPolicyTemplateCachedDao,
128 masterDBBindingDao, epForwardingTemplateDao).thenReturn(epPolicyTemplateListener);
129 whenNew(EPForwardingTemplateListenerImpl.class).withArguments(dataBroker, sxpMapperReactor, epFwTemplateCachedDao,
130 masterDBBindingDao, epPolicyTemplateDaoFacade).thenReturn(epForwardingTemplateListener);
131 whenNew(SxpEndpointAugmentorImpl.class).withArguments(epPolicyTemplateDao, epPolicyTemplateKeyFactory)
132 .thenReturn(sxpEPAugmentor);
135 provider = new SxpEpProviderProviderImpl(dataBroker, endpointService, domainSpecificRegistry, sgtGeneratorConfig);
137 Mockito.verify(templateProviderRegistry).addDistributionTarget(epPolicyTemplateDaoFacade);
139 // check if all expected object got constructed and wired
140 verifyNew(EPPolicyTemplateProviderRegistryImpl.class).withNoArguments();
141 verifyNew(SxpMapperReactorImpl.class).withArguments(endpointService, dataBroker);
142 verifyNew(SimpleCachedDaoImpl.class, Mockito.times(2)).withNoArguments();
143 verifyNew(SimpleCachedDaoEPForwardingTemplateImpl.class).withNoArguments();
144 verifyNew(EpPolicyTemplateValueKeyFactory.class).withArguments(groupOrdering, conditionOrdering);
145 verifyNew(EPPolicyTemplateDaoImpl.class).withArguments(dataBroker, epPolicyTemplateCachedDao, epPolicyTemplateKeyFactory);
146 verifyNew(SgtGeneratorImpl.class).withArguments(sgtGeneratorConfig);
147 verifyNew(EPPolicyTemplateDaoFacadeImpl.class).withArguments(dataBroker, epPolicyTemplateDao, epPolicyTemplateCachedDao, sgtGenerator);
148 verifyNew(EPToSgtMapperImpl.class).withArguments(epPolicyTemplateDaoFacade);
149 verifyNew(EPForwardingTemplateDaoImpl.class).withArguments(dataBroker, epFwTemplateCachedDao);
150 verifyNew(MasterDatabaseBindingDaoImpl.class).withArguments(dataBroker, masterDBBindingCachedDao);
151 verifyNew(MasterDatabaseBindingListenerImpl.class).withArguments(dataBroker, sxpMapperReactor, masterDBBindingCachedDao,
152 epPolicyTemplateDaoFacade, epForwardingTemplateDao);
153 verifyNew(EPPolicyTemplateListenerImpl.class).withArguments(dataBroker, sxpMapperReactor, epPolicyTemplateCachedDao,
154 masterDBBindingDao, epForwardingTemplateDao);
155 verifyNew(EPForwardingTemplateListenerImpl.class).withArguments(dataBroker, sxpMapperReactor, epFwTemplateCachedDao,
156 masterDBBindingDao, epPolicyTemplateDaoFacade);
160 public void testGetEPPolicyTemplateProviderRegistry() throws Exception {
161 Assert.assertSame(templateProviderRegistry, provider.getEPPolicyTemplateProviderRegistry());
165 public void testClose() throws Exception {
167 Mockito.verify(masterDBBindingListener).close();
168 Mockito.verify(epPolicyTemplateListener).close();
169 Mockito.verify(epForwardingTemplateListener).close();
170 Mockito.verify(templateProviderRegistry).close();