8039fcf9d0c97eeaa08eff72956230b413a8448d
[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 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;
42
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;
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 DomainSpecificRegistry domainSpecificRegistry;
59     @Mock
60     private EPPolicyTemplateProviderRegistryImpl templateProviderRegistry;
61     @Mock
62     private SxpMapperReactorImpl sxpMapperReactor;
63     @Mock
64     private BaseEndpointService endpointService;
65     @Mock
66     private SimpleCachedDaoImpl<Sgt, EndpointPolicyTemplateBySgt> epPolicyTemplateCachedDao;
67     @Mock
68     private SimpleCachedDaoImpl<IpPrefix, MasterDatabaseBinding> masterDBBindingCachedDao;
69     @Mock
70     private SimpleCachedDaoEPForwardingTemplateImpl epFwTemplateCachedDao;
71     @Mock
72     private Ordering<EndpointGroupId> groupOrdering;
73     @Mock
74     private Ordering<ConditionName> conditionOrdering;
75     @Mock
76     private EpPolicyTemplateValueKeyFactory epPolicyTemplateKeyFactory;
77     @Mock
78     private EPPolicyTemplateDaoImpl epPolicyTemplateDao;
79     @Mock
80     private EPForwardingTemplateDaoImpl epForwardingTemplateDao;
81     @Mock
82     private MasterDatabaseBindingDaoImpl masterDBBindingDao;
83     @Mock
84     private MasterDatabaseBindingListenerImpl masterDBBindingListener;
85     @Mock
86     private EPPolicyTemplateListenerImpl epPolicyTemplateListener;
87     @Mock
88     private EPForwardingTemplateListenerImpl epForwardingTemplateListener;
89     @Mock
90     private SxpEndpointAugmentorImpl sxpEPAugmentor;
91     @Mock
92     private EndpointAugmentorRegistry epAugmentorRegistry;
93     @Mock
94     private EPPolicyTemplateDaoFacadeImpl epPolicyTemplateDaoFacade;
95     @Mock
96     private SgtGeneratorConfig sgtGeneratorConfig;
97     @Mock
98     private SgtGeneratorImpl sgtGenerator;
99     @Mock
100     private EPToSgtMapperImpl epToSgtMapper;
101
102     private SxpEpProviderProviderImpl provider;
103
104     @Before
105     public void setUp() throws Exception {
106         Mockito.when(domainSpecificRegistry.getEndpointAugmentorRegistry()).thenReturn(epAugmentorRegistry);
107
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);
122
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);
135
136
137         provider = new SxpEpProviderProviderImpl(dataBroker, endpointService, domainSpecificRegistry, sgtGeneratorConfig);
138
139         Mockito.verify(templateProviderRegistry).addDistributionTarget(epPolicyTemplateDaoFacade);
140         Mockito.verify(epAugmentorRegistry).register(sxpEPAugmentor);
141
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);
161     }
162
163     @Test
164     public void testGetEPPolicyTemplateProviderRegistry() throws Exception {
165         Assert.assertSame(templateProviderRegistry, provider.getEPPolicyTemplateProviderRegistry());
166     }
167
168     @Test
169     public void testClose() throws Exception {
170         provider.close();
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);
176     }
177 }