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 com.google.common.collect.Ordering;
12 import org.junit.Assert;
13 import org.junit.Before;
14 import org.junit.Test;
15 import org.junit.runner.RunWith;
16 import org.mockito.Mock;
17 import org.mockito.Mockito;
18 import org.opendaylight.controller.md.sal.binding.api.DataBroker;
19 import org.opendaylight.groupbasedpolicy.api.DomainSpecificRegistry;
20 import org.opendaylight.groupbasedpolicy.api.EndpointAugmentorRegistry;
21 import org.opendaylight.groupbasedpolicy.sxp.ep.provider.impl.dao.EPForwardingTemplateDaoImpl;
22 import org.opendaylight.groupbasedpolicy.sxp.ep.provider.impl.dao.EPPolicyTemplateDaoFacadeImpl;
23 import org.opendaylight.groupbasedpolicy.sxp.ep.provider.impl.dao.EPPolicyTemplateDaoImpl;
24 import org.opendaylight.groupbasedpolicy.sxp.ep.provider.impl.dao.EpPolicyTemplateValueKeyFactory;
25 import org.opendaylight.groupbasedpolicy.sxp.ep.provider.impl.dao.MasterDatabaseBindingDaoImpl;
26 import org.opendaylight.groupbasedpolicy.sxp.ep.provider.impl.dao.SimpleCachedDaoEPForwardingTemplateImpl;
27 import org.opendaylight.groupbasedpolicy.sxp.ep.provider.impl.dao.SimpleCachedDaoImpl;
28 import org.opendaylight.groupbasedpolicy.sxp.ep.provider.impl.listen.EPForwardingTemplateListenerImpl;
29 import org.opendaylight.groupbasedpolicy.sxp.ep.provider.impl.listen.EPPolicyTemplateListenerImpl;
30 import org.opendaylight.groupbasedpolicy.sxp.ep.provider.impl.listen.MasterDatabaseBindingListenerImpl;
31 import org.opendaylight.groupbasedpolicy.sxp.ep.provider.impl.util.EPTemplateUtil;
32 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.IpPrefix;
33 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.base_endpoint.rev160427.BaseEndpointService;
34 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.common.rev140421.ConditionName;
35 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.common.rev140421.EndpointGroupId;
36 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;
37 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.controller.config.groupbasedpolicy.sxp.integration.sxp.ep.provider.rev160722.SgtGeneratorConfig;
38 import org.opendaylight.yang.gen.v1.urn.opendaylight.sxp.database.rev160308.Sgt;
39 import org.opendaylight.yang.gen.v1.urn.opendaylight.sxp.database.rev160308.master.database.fields.MasterDatabaseBinding;
40 import org.powermock.core.classloader.annotations.PrepareForTest;
41 import org.powermock.modules.junit4.PowerMockRunner;
43 import static org.powermock.api.mockito.PowerMockito.verifyNew;
44 import static org.powermock.api.mockito.PowerMockito.whenNew;
45 import static org.powermock.api.support.membermodification.MemberMatcher.method;
46 import static org.powermock.api.support.membermodification.MemberModifier.stub;
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 Mockito.when(domainSpecificRegistry.getEndpointAugmentorRegistry()).thenReturn(epAugmentorRegistry);
108 whenNew(EPPolicyTemplateProviderRegistryImpl.class).withNoArguments().thenReturn(templateProviderRegistry);
109 whenNew(SxpMapperReactorImpl.class).withArguments(endpointService, dataBroker).thenReturn(sxpMapperReactor);
110 whenNew(SimpleCachedDaoImpl.class).withNoArguments().thenReturn(epPolicyTemplateCachedDao, masterDBBindingCachedDao);
111 whenNew(SimpleCachedDaoEPForwardingTemplateImpl.class).withNoArguments().thenReturn(epFwTemplateCachedDao);
112 stub(method(EPTemplateUtil.class, "createEndpointGroupIdOrdering")).toReturn(groupOrdering);
113 stub(method(EPTemplateUtil.class, "createConditionNameOrdering")).toReturn(conditionOrdering);
114 whenNew(EpPolicyTemplateValueKeyFactory.class).withArguments(groupOrdering, conditionOrdering)
115 .thenReturn(epPolicyTemplateKeyFactory);
116 whenNew(EPPolicyTemplateDaoImpl.class).withArguments(dataBroker, epPolicyTemplateCachedDao, epPolicyTemplateKeyFactory)
117 .thenReturn(epPolicyTemplateDao);
118 whenNew(SgtGeneratorImpl.class).withArguments(sgtGeneratorConfig).thenReturn(sgtGenerator);
119 whenNew(EPPolicyTemplateDaoFacadeImpl.class).withArguments(dataBroker, epPolicyTemplateDao, epPolicyTemplateCachedDao, sgtGenerator)
120 .thenReturn(epPolicyTemplateDaoFacade);
121 whenNew(EPToSgtMapperImpl.class).withArguments(epPolicyTemplateDaoFacade).thenReturn(epToSgtMapper);
123 whenNew(EPForwardingTemplateDaoImpl.class).withArguments(dataBroker, epFwTemplateCachedDao)
124 .thenReturn(epForwardingTemplateDao);
125 whenNew(MasterDatabaseBindingDaoImpl.class).withArguments(dataBroker, masterDBBindingCachedDao)
126 .thenReturn(masterDBBindingDao);
127 whenNew(MasterDatabaseBindingListenerImpl.class).withArguments(dataBroker, sxpMapperReactor, masterDBBindingCachedDao,
128 epPolicyTemplateDaoFacade, epForwardingTemplateDao).thenReturn(masterDBBindingListener);
129 whenNew(EPPolicyTemplateListenerImpl.class).withArguments(dataBroker, sxpMapperReactor, epPolicyTemplateCachedDao,
130 masterDBBindingDao, epForwardingTemplateDao).thenReturn(epPolicyTemplateListener);
131 whenNew(EPForwardingTemplateListenerImpl.class).withArguments(dataBroker, sxpMapperReactor, epFwTemplateCachedDao,
132 masterDBBindingDao, epPolicyTemplateDaoFacade).thenReturn(epForwardingTemplateListener);
133 whenNew(SxpEndpointAugmentorImpl.class).withArguments(epPolicyTemplateDao, epPolicyTemplateKeyFactory)
134 .thenReturn(sxpEPAugmentor);
137 provider = new SxpEpProviderProviderImpl(dataBroker, endpointService, domainSpecificRegistry, sgtGeneratorConfig);
139 Mockito.verify(templateProviderRegistry).addDistributionTarget(epPolicyTemplateDaoFacade);
140 Mockito.verify(epAugmentorRegistry).register(sxpEPAugmentor);
142 // check if all expected object got constructed and wired
143 verifyNew(EPPolicyTemplateProviderRegistryImpl.class).withNoArguments();
144 verifyNew(SxpMapperReactorImpl.class).withArguments(endpointService, dataBroker);
145 verifyNew(SimpleCachedDaoImpl.class, Mockito.times(2)).withNoArguments();
146 verifyNew(SimpleCachedDaoEPForwardingTemplateImpl.class).withNoArguments();
147 verifyNew(EpPolicyTemplateValueKeyFactory.class).withArguments(groupOrdering, conditionOrdering);
148 verifyNew(EPPolicyTemplateDaoImpl.class).withArguments(dataBroker, epPolicyTemplateCachedDao, epPolicyTemplateKeyFactory);
149 verifyNew(SgtGeneratorImpl.class).withArguments(sgtGeneratorConfig);
150 verifyNew(EPPolicyTemplateDaoFacadeImpl.class).withArguments(dataBroker, epPolicyTemplateDao, epPolicyTemplateCachedDao, sgtGenerator);
151 verifyNew(EPToSgtMapperImpl.class).withArguments(epPolicyTemplateDaoFacade);
152 verifyNew(EPForwardingTemplateDaoImpl.class).withArguments(dataBroker, epFwTemplateCachedDao);
153 verifyNew(MasterDatabaseBindingDaoImpl.class).withArguments(dataBroker, masterDBBindingCachedDao);
154 verifyNew(MasterDatabaseBindingListenerImpl.class).withArguments(dataBroker, sxpMapperReactor, masterDBBindingCachedDao,
155 epPolicyTemplateDaoFacade, epForwardingTemplateDao);
156 verifyNew(EPPolicyTemplateListenerImpl.class).withArguments(dataBroker, sxpMapperReactor, epPolicyTemplateCachedDao,
157 masterDBBindingDao, epForwardingTemplateDao);
158 verifyNew(EPForwardingTemplateListenerImpl.class).withArguments(dataBroker, sxpMapperReactor, epFwTemplateCachedDao,
159 masterDBBindingDao, epPolicyTemplateDaoFacade);
160 verifyNew(SxpEndpointAugmentorImpl.class).withArguments(epPolicyTemplateDao, epPolicyTemplateKeyFactory);
164 public void testGetEPPolicyTemplateProviderRegistry() throws Exception {
165 Assert.assertSame(templateProviderRegistry, provider.getEPPolicyTemplateProviderRegistry());
169 public void testClose() throws Exception {
171 Mockito.verify(masterDBBindingListener).close();
172 Mockito.verify(epPolicyTemplateListener).close();
173 Mockito.verify(epForwardingTemplateListener).close();
174 Mockito.verify(templateProviderRegistry).close();
175 Mockito.verify(epAugmentorRegistry).unregister(sxpEPAugmentor);