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.controller.sal.binding.api.RpcProviderRegistry;
25 import org.opendaylight.groupbasedpolicy.api.DomainSpecificRegistry;
26 import org.opendaylight.groupbasedpolicy.api.EndpointAugmentorRegistry;
27 import org.opendaylight.groupbasedpolicy.sxp.ep.provider.impl.dao.EPForwardingTemplateDaoImpl;
28 import org.opendaylight.groupbasedpolicy.sxp.ep.provider.impl.dao.EPPolicyTemplateDaoFacadeImpl;
29 import org.opendaylight.groupbasedpolicy.sxp.ep.provider.impl.dao.EPPolicyTemplateDaoImpl;
30 import org.opendaylight.groupbasedpolicy.sxp.ep.provider.impl.dao.EpPolicyTemplateValueKeyFactory;
31 import org.opendaylight.groupbasedpolicy.sxp.ep.provider.impl.dao.MasterDatabaseBindingDaoImpl;
32 import org.opendaylight.groupbasedpolicy.sxp.ep.provider.impl.dao.SimpleCachedDaoEPForwardingTemplateImpl;
33 import org.opendaylight.groupbasedpolicy.sxp.ep.provider.impl.dao.SimpleCachedDaoImpl;
34 import org.opendaylight.groupbasedpolicy.sxp.ep.provider.impl.listen.EPForwardingTemplateListenerImpl;
35 import org.opendaylight.groupbasedpolicy.sxp.ep.provider.impl.listen.EPPolicyTemplateListenerImpl;
36 import org.opendaylight.groupbasedpolicy.sxp.ep.provider.impl.listen.MasterDatabaseBindingListenerImpl;
37 import org.opendaylight.groupbasedpolicy.sxp.ep.provider.impl.util.EPTemplateUtil;
38 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.IpPrefix;
39 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.base_endpoint.rev160427.BaseEndpointService;
40 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.common.rev140421.ConditionName;
41 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.common.rev140421.EndpointGroupId;
42 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;
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 RpcProviderRegistry rpcRegistry;
60 private DomainSpecificRegistry domainSpecificRegistry;
62 private EPPolicyTemplateProviderRegistryImpl templateProviderRegistry;
64 private SxpMapperReactorImpl sxpMapperReactor;
66 private BaseEndpointService endPointService;
68 private SimpleCachedDaoImpl<Sgt, EndpointPolicyTemplateBySgt> epPolicyTemplateCachedDao;
70 private SimpleCachedDaoImpl<IpPrefix, MasterDatabaseBinding> masterDBBindingCachedDao;
72 private SimpleCachedDaoEPForwardingTemplateImpl epFwTemplateCachedDao;
74 private Ordering<EndpointGroupId> groupOrdering;
76 private Ordering<ConditionName> conditionOrdering;
78 private EpPolicyTemplateValueKeyFactory epPolicyTemplateKeyFactory;
80 private EPPolicyTemplateDaoImpl epPolicyTemplateDao;
82 private EPForwardingTemplateDaoImpl epForwardingTemplateDao;
84 private MasterDatabaseBindingDaoImpl masterDBBindingDao;
86 private MasterDatabaseBindingListenerImpl masterDBBindingListener;
88 private EPPolicyTemplateListenerImpl epPolicyTemplateListener;
90 private EPForwardingTemplateListenerImpl epForwardingTemplateListener;
92 private SxpEndpointAugmentorImpl sxpEPAugmentor;
94 private EndpointAugmentorRegistry epAugmentorRegistry;
96 private EPPolicyTemplateDaoFacadeImpl epPolicyTemplateDaoFacade;
98 private SxpEpProviderProviderImpl provider;
101 public void setUp() throws Exception {
102 Mockito.when(rpcRegistry.getRpcService(BaseEndpointService.class)).thenReturn(endPointService);
103 Mockito.when(domainSpecificRegistry.getEndpointAugmentorRegistry()).thenReturn(epAugmentorRegistry);
105 whenNew(EPPolicyTemplateProviderRegistryImpl.class).withNoArguments().thenReturn(templateProviderRegistry);
106 whenNew(SxpMapperReactorImpl.class).withArguments(endPointService, dataBroker).thenReturn(sxpMapperReactor);
107 whenNew(SimpleCachedDaoImpl.class).withNoArguments().thenReturn(epPolicyTemplateCachedDao, masterDBBindingCachedDao);
108 whenNew(SimpleCachedDaoEPForwardingTemplateImpl.class).withNoArguments().thenReturn(epFwTemplateCachedDao);
109 stub(method(EPTemplateUtil.class, "createEndpointGroupIdOrdering")).toReturn(groupOrdering);
110 stub(method(EPTemplateUtil.class, "createConditionNameOrdering")).toReturn(conditionOrdering);
111 whenNew(EpPolicyTemplateValueKeyFactory.class).withArguments(groupOrdering, conditionOrdering)
112 .thenReturn(epPolicyTemplateKeyFactory);
113 whenNew(EPPolicyTemplateDaoImpl.class).withArguments(dataBroker, epPolicyTemplateCachedDao, epPolicyTemplateKeyFactory)
114 .thenReturn(epPolicyTemplateDao);
115 whenNew(EPPolicyTemplateDaoFacadeImpl.class).withArguments(dataBroker, epPolicyTemplateDao)
116 .thenReturn(epPolicyTemplateDaoFacade);
117 whenNew(EPForwardingTemplateDaoImpl.class).withArguments(dataBroker, epFwTemplateCachedDao)
118 .thenReturn(epForwardingTemplateDao);
119 whenNew(MasterDatabaseBindingDaoImpl.class).withArguments(dataBroker, masterDBBindingCachedDao)
120 .thenReturn(masterDBBindingDao);
121 whenNew(MasterDatabaseBindingListenerImpl.class).withArguments(dataBroker, sxpMapperReactor, masterDBBindingCachedDao,
122 epPolicyTemplateDaoFacade, epForwardingTemplateDao).thenReturn(masterDBBindingListener);
123 whenNew(EPPolicyTemplateListenerImpl.class).withArguments(dataBroker, sxpMapperReactor, epPolicyTemplateCachedDao,
124 masterDBBindingDao, epForwardingTemplateDao).thenReturn(epPolicyTemplateListener);
125 whenNew(EPForwardingTemplateListenerImpl.class).withArguments(dataBroker, sxpMapperReactor, epFwTemplateCachedDao,
126 masterDBBindingDao, epPolicyTemplateDaoFacade).thenReturn(epForwardingTemplateListener);
127 whenNew(SxpEndpointAugmentorImpl.class).withArguments(epPolicyTemplateDaoFacade,epPolicyTemplateKeyFactory)
128 .thenReturn(sxpEPAugmentor);
131 provider = new SxpEpProviderProviderImpl(dataBroker, rpcRegistry, domainSpecificRegistry);
133 Mockito.verify(rpcRegistry).getRpcService(BaseEndpointService.class);
134 Mockito.verify(templateProviderRegistry).addDistributionTarget(epPolicyTemplateDaoFacade);
135 Mockito.verify(epAugmentorRegistry).register(sxpEPAugmentor);
137 // check if all expected object got constructed and wired
138 verifyNew(EPPolicyTemplateProviderRegistryImpl.class).withNoArguments();
139 verifyNew(SxpMapperReactorImpl.class).withArguments(endPointService, dataBroker);
140 verifyNew(SimpleCachedDaoImpl.class, Mockito.times(2)).withNoArguments();
141 verifyNew(SimpleCachedDaoEPForwardingTemplateImpl.class).withNoArguments();
142 verifyNew(EpPolicyTemplateValueKeyFactory.class).withArguments(groupOrdering, conditionOrdering);
143 verifyNew(EPPolicyTemplateDaoImpl.class).withArguments(dataBroker, epPolicyTemplateCachedDao, epPolicyTemplateKeyFactory);
144 verifyNew(EPPolicyTemplateDaoFacadeImpl.class).withArguments(dataBroker, epPolicyTemplateDao);
145 verifyNew(EPForwardingTemplateDaoImpl.class).withArguments(dataBroker, epFwTemplateCachedDao);
146 verifyNew(MasterDatabaseBindingDaoImpl.class).withArguments(dataBroker, masterDBBindingCachedDao);
147 verifyNew(MasterDatabaseBindingListenerImpl.class).withArguments(dataBroker, sxpMapperReactor, masterDBBindingCachedDao,
148 epPolicyTemplateDaoFacade, epForwardingTemplateDao);
149 verifyNew(EPPolicyTemplateListenerImpl.class).withArguments(dataBroker, sxpMapperReactor, epPolicyTemplateCachedDao,
150 masterDBBindingDao, epForwardingTemplateDao);
151 verifyNew(EPForwardingTemplateListenerImpl.class).withArguments(dataBroker, sxpMapperReactor, epFwTemplateCachedDao,
152 masterDBBindingDao, epPolicyTemplateDaoFacade);
153 verifyNew(SxpEndpointAugmentorImpl.class).withArguments(epPolicyTemplateDaoFacade,epPolicyTemplateKeyFactory);
157 public void testGetEPPolicyTemplateProviderRegistry() throws Exception {
158 Assert.assertSame(templateProviderRegistry, provider.getEPPolicyTemplateProviderRegistry());
162 public void testClose() throws Exception {
164 Mockito.verify(masterDBBindingListener).close();
165 Mockito.verify(epPolicyTemplateListener).close();
166 Mockito.verify(epForwardingTemplateListener).close();
167 Mockito.verify(templateProviderRegistry).close();
168 Mockito.verify(epAugmentorRegistry).unregister(sxpEPAugmentor);