BUG-6858: adapt to ise api, wire harvestAll to 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.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;
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         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);
120
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);
133
134
135         provider = new SxpEpProviderProviderImpl(dataBroker, endpointService, domainSpecificRegistry, sgtGeneratorConfig);
136
137         Mockito.verify(templateProviderRegistry).addDistributionTarget(epPolicyTemplateDaoFacade);
138
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);
157     }
158
159     @Test
160     public void testGetEPPolicyTemplateProviderRegistry() throws Exception {
161         Assert.assertSame(templateProviderRegistry, provider.getEPPolicyTemplateProviderRegistry());
162     }
163
164     @Test
165     public void testClose() throws Exception {
166         provider.close();
167         Mockito.verify(masterDBBindingListener).close();
168         Mockito.verify(epPolicyTemplateListener).close();
169         Mockito.verify(epForwardingTemplateListener).close();
170         Mockito.verify(templateProviderRegistry).close();
171     }
172 }