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.dao;
11 import com.google.common.base.Optional;
12 import com.google.common.util.concurrent.Futures;
13 import com.google.common.util.concurrent.ListenableFuture;
14 import java.util.Collections;
15 import java.util.concurrent.ExecutionException;
16 import org.hamcrest.BaseMatcher;
17 import org.hamcrest.Description;
18 import org.junit.Assert;
19 import org.junit.Before;
20 import org.junit.Rule;
21 import org.junit.Test;
22 import org.junit.rules.ExpectedException;
23 import org.junit.runner.RunWith;
24 import org.mockito.Mock;
25 import org.mockito.Mockito;
26 import org.mockito.runners.MockitoJUnitRunner;
27 import org.opendaylight.controller.md.sal.binding.api.DataBroker;
28 import org.opendaylight.controller.md.sal.binding.api.WriteTransaction;
29 import org.opendaylight.controller.md.sal.common.api.data.TransactionCommitFailedException;
30 import org.opendaylight.groupbasedpolicy.sxp.ep.provider.api.EPPolicyTemplateProvider;
31 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.common.rev140421.EndpointGroupId;
32 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.common.rev140421.TenantId;
33 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.controller.config.groupbasedpolicy.sxp.integration.sxp.ep.provider.model.rev160302.TemplateGenerated;
34 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;
35 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.EndpointPolicyTemplateBySgtBuilder;
36 import org.opendaylight.yang.gen.v1.urn.opendaylight.sxp.database.rev160308.Sgt;
39 * Test for {@link EPPolicyTemplateDaoFacadeImpl}.
41 @RunWith(MockitoJUnitRunner.class)
42 public class EPPolicyTemplateDaoFacadeImplTest {
44 private static final Sgt SGT = new Sgt(42);
45 private static final TenantId TENANT_ID = new TenantId("tenant-01");
46 private static final EndpointGroupId EPG_ID = new EndpointGroupId("epg-01");
47 private static final TransactionCommitFailedException TX_EXCEPTION = new TransactionCommitFailedException("unit-txSubmit-error");
50 public ExpectedException thrownRule = ExpectedException.none();
53 private EPPolicyTemplateDaoImpl delegateDao;
55 private DataBroker dataBroker;
57 private EPPolicyTemplateProvider provider;
59 private WriteTransaction wTx;
62 private EndpointPolicyTemplateBySgtBuilder templateBld;
63 private EPPolicyTemplateDaoFacadeImpl facade;
66 public void setUp() throws Exception {
67 Mockito.when(wTx.submit()).thenReturn(Futures.immediateCheckedFuture((Void) null));
68 Mockito.when(dataBroker.newWriteOnlyTransaction()).thenReturn(wTx);
69 templateBld = new EndpointPolicyTemplateBySgtBuilder()
72 .setEndpointGroups(Collections.singletonList(EPG_ID));
74 facade = new EPPolicyTemplateDaoFacadeImpl(dataBroker, delegateDao);
78 public void testRead_trivial() throws Exception {
79 final EndpointPolicyTemplateBySgt template = templateBld.build();
80 Mockito.when(delegateDao.read(SGT)).thenReturn(Futures.immediateFuture(Optional.of(template)));
82 final ListenableFuture<Optional<EndpointPolicyTemplateBySgt>> actual = facade.read(SGT);
83 Assert.assertTrue(actual.isDone());
84 Assert.assertTrue(actual.get().isPresent());
85 Assert.assertEquals(template, actual.get().get());
89 public void testRead_success() throws Exception {
90 final EndpointPolicyTemplateBySgt template = templateBld
91 .setOrigin(TemplateGenerated.class)
94 Mockito.when(delegateDao.read(SGT)).thenReturn(Futures.immediateFuture(Optional.absent()));
95 Mockito.when(provider.provideTemplate(SGT)).thenReturn(java.util.Optional.of(template));
96 Mockito.when(wTx.submit()).thenReturn(Futures.immediateCheckedFuture(null));
97 facade.setTemplateProvider(provider);
100 final ListenableFuture<Optional<EndpointPolicyTemplateBySgt>> actual = facade.read(SGT);
101 Assert.assertTrue(actual.isDone());
102 Assert.assertTrue(actual.get().isPresent());
103 Assert.assertEquals(template, actual.get().get());
107 public void testRead_failNoProvider() throws Exception {
108 Mockito.when(delegateDao.read(SGT)).thenReturn(Futures.immediateFuture(Optional.absent()));
110 final ListenableFuture<Optional<EndpointPolicyTemplateBySgt>> actual = facade.read(SGT);
111 Assert.assertTrue(actual.isDone());
112 Assert.assertFalse(actual.get().isPresent());
116 public void testRead_failProviderMiss() throws Exception {
117 Mockito.when(delegateDao.read(SGT)).thenReturn(Futures.immediateFuture(Optional.absent()));
118 Mockito.when(provider.provideTemplate(SGT)).thenReturn(java.util.Optional.empty());
119 facade.setTemplateProvider(provider);
122 final ListenableFuture<Optional<EndpointPolicyTemplateBySgt>> actual = facade.read(SGT);
123 Assert.assertTrue(actual.isDone());
124 Assert.assertFalse(actual.get().isPresent());
128 public void testRead_failProviderStoreError() throws Exception {
129 Mockito.when(delegateDao.read(SGT)).thenReturn(Futures.immediateFuture(Optional.absent()));
130 final EndpointPolicyTemplateBySgt template = templateBld
131 .setOrigin(TemplateGenerated.class)
134 Mockito.when(delegateDao.read(SGT)).thenReturn(Futures.immediateFuture(Optional.absent()));
135 Mockito.when(provider.provideTemplate(SGT)).thenReturn(java.util.Optional.of(template));
136 Mockito.when(wTx.submit()).thenReturn(Futures.immediateFailedCheckedFuture(TX_EXCEPTION));
137 facade.setTemplateProvider(provider);
139 final ListenableFuture<Optional<EndpointPolicyTemplateBySgt>> actual = facade.read(SGT);
140 Assert.assertTrue(actual.isDone());
142 // prepare exception rule
143 thrownRule.expect(ExecutionException.class);
144 thrownRule.expectCause(new BaseMatcher<Throwable>() {
146 public boolean matches(final Object item) {
147 return TX_EXCEPTION == item;
151 public void describeTo(final Description description) {
152 description.appendText("TransactionCommitFailedException");