BUG-6650: ep-ip/sgt, implement and wire template provider
[groupbasedpolicy.git] / sxp-integration / sxp-ep-provider / src / test / java / org / opendaylight / groupbasedpolicy / sxp / ep / provider / impl / SxpEpProviderProviderImplTest.java
1 /*
2  * Copyright (c) 2016 Cisco Systems, Inc. and others.  All rights reserved.
3  *
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
7  */
8
9 package org.opendaylight.groupbasedpolicy.sxp.ep.provider.impl;
10
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;
15
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;
47
48 /**
49  * Test for {@link SxpEpProviderProviderImpl}.
50  */
51 @RunWith(PowerMockRunner.class)
52 @PrepareForTest({SxpEpProviderProviderImpl.class, EPTemplateUtil.class})
53 public class SxpEpProviderProviderImplTest {
54
55     @Mock
56     private DataBroker dataBroker;
57     @Mock
58     private RpcProviderRegistry rpcRegistry;
59     @Mock
60     private DomainSpecificRegistry domainSpecificRegistry;
61     @Mock
62     private EPPolicyTemplateProviderRegistryImpl templateProviderRegistry;
63     @Mock
64     private SxpMapperReactorImpl sxpMapperReactor;
65     @Mock
66     private BaseEndpointService endPointService;
67     @Mock
68     private SimpleCachedDaoImpl<Sgt, EndpointPolicyTemplateBySgt> epPolicyTemplateCachedDao;
69     @Mock
70     private SimpleCachedDaoImpl<IpPrefix, MasterDatabaseBinding> masterDBBindingCachedDao;
71     @Mock
72     private SimpleCachedDaoEPForwardingTemplateImpl epFwTemplateCachedDao;
73     @Mock
74     private Ordering<EndpointGroupId> groupOrdering;
75     @Mock
76     private Ordering<ConditionName> conditionOrdering;
77     @Mock
78     private EpPolicyTemplateValueKeyFactory epPolicyTemplateKeyFactory;
79     @Mock
80     private EPPolicyTemplateDaoImpl epPolicyTemplateDao;
81     @Mock
82     private EPForwardingTemplateDaoImpl epForwardingTemplateDao;
83     @Mock
84     private MasterDatabaseBindingDaoImpl masterDBBindingDao;
85     @Mock
86     private MasterDatabaseBindingListenerImpl masterDBBindingListener;
87     @Mock
88     private EPPolicyTemplateListenerImpl epPolicyTemplateListener;
89     @Mock
90     private EPForwardingTemplateListenerImpl epForwardingTemplateListener;
91     @Mock
92     private SxpEndpointAugmentorImpl sxpEPAugmentor;
93     @Mock
94     private EndpointAugmentorRegistry epAugmentorRegistry;
95     @Mock
96     private EPPolicyTemplateDaoFacadeImpl epPolicyTemplateDaoFacade;
97
98     private SxpEpProviderProviderImpl provider;
99
100     @Before
101     public void setUp() throws Exception {
102         Mockito.when(rpcRegistry.getRpcService(BaseEndpointService.class)).thenReturn(endPointService);
103         Mockito.when(domainSpecificRegistry.getEndpointAugmentorRegistry()).thenReturn(epAugmentorRegistry);
104
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);
129
130
131         provider = new SxpEpProviderProviderImpl(dataBroker, rpcRegistry, domainSpecificRegistry);
132
133         Mockito.verify(rpcRegistry).getRpcService(BaseEndpointService.class);
134         Mockito.verify(templateProviderRegistry).addDistributionTarget(epPolicyTemplateDaoFacade);
135         Mockito.verify(epAugmentorRegistry).register(sxpEPAugmentor);
136
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);
154     }
155
156     @Test
157     public void testGetEPPolicyTemplateProviderRegistry() throws Exception {
158         Assert.assertSame(templateProviderRegistry, provider.getEPPolicyTemplateProviderRegistry());
159     }
160
161     @Test
162     public void testClose() throws Exception {
163         provider.close();
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);
169     }
170 }