Enforce findbug and checkstyle under PCEP
[bgpcep.git] / pcep / topology / topology-provider / src / test / java / org / opendaylight / bgpcep / pcep / topology / provider / IncrementalSynchronizationProcedureTest.java
1 /*
2  * Copyright (c) 2015 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.bgpcep.pcep.topology.provider;
10
11 import static org.junit.Assert.assertEquals;
12 import static org.junit.Assert.assertFalse;
13 import static org.opendaylight.protocol.pcep.pcc.mock.spi.MsgBuilderUtil.createLsp;
14 import static org.opendaylight.protocol.pcep.pcc.mock.spi.MsgBuilderUtil.createPath;
15 import static org.opendaylight.protocol.util.CheckUtil.readDataOperational;
16
17 import com.google.common.base.Optional;
18 import java.math.BigInteger;
19 import java.util.Collections;
20 import org.junit.Before;
21 import org.junit.Test;
22 import org.opendaylight.protocol.pcep.PCEPSession;
23 import org.opendaylight.protocol.pcep.pcc.mock.spi.MsgBuilderUtil;
24 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.controller.pcep.sync.optimizations.rev171025.Tlvs3;
25 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.controller.pcep.sync.optimizations.rev171025.Tlvs3Builder;
26 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.controller.pcep.sync.optimizations.rev171025.lsp.db.version.tlv.LspDbVersion;
27 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.controller.pcep.sync.optimizations.rev171025.lsp.db.version.tlv.LspDbVersionBuilder;
28 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.crabbe.initiated.rev171025.Stateful1;
29 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.crabbe.initiated.rev171025.Stateful1Builder;
30 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful.rev171025.OperationalStatus;
31 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful.rev171025.Pcrpt;
32 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful.rev171025.PlspId;
33 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful.rev171025.SymbolicPathName;
34 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful.rev171025.Tlvs1;
35 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful.rev171025.Tlvs1Builder;
36 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful.rev171025.lsp.identifiers.tlv.LspIdentifiersBuilder;
37 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful.rev171025.lsp.object.LspBuilder;
38 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful.rev171025.stateful.capability.tlv.StatefulBuilder;
39 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful.rev171025.symbolic.path.name.tlv.SymbolicPathNameBuilder;
40 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.open.object.Open;
41 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.open.object.OpenBuilder;
42 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.open.object.open.TlvsBuilder;
43 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.rsvp.rev150820.LspId;
44 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.topology.pcep.rev171025.PccSyncState;
45
46 public class IncrementalSynchronizationProcedureTest
47         extends AbstractPCEPSessionTest<Stateful07TopologySessionListenerFactory> {
48
49     private Stateful07TopologySessionListener listener;
50
51     @Override
52     @Before
53     public void setUp() throws Exception {
54         super.setUp();
55         this.listener = (Stateful07TopologySessionListener) getSessionListener();
56     }
57
58     @Test
59     public void testStateSynchronizationPerformed() throws Exception {
60         PCEPSession session = getPCEPSession(getOpen(null), getOpen(null));
61         this.listener.onSessionUp(session);
62         //report LSP + LSP-DB version number
63         final Pcrpt pcRpt = getPcrpt(1L, "test");
64         this.listener.onMessage(session, pcRpt);
65         readDataOperational(getDataBroker(), this.pathComputationClientIId, pcc -> {
66             assertFalse(pcc.getReportedLsp().isEmpty());
67             return pcc;
68         });
69
70         this.listener.onSessionDown(session, new IllegalArgumentException());
71         this.listener = (Stateful07TopologySessionListener) getSessionListener();
72
73         //session up - expect sync (LSP-DBs do not match)
74         final LspDbVersion localDbVersion = new LspDbVersionBuilder()
75                 .setLspDbVersionValue(BigInteger.valueOf(2L)).build();
76         session = getPCEPSession(getOpen(localDbVersion), getOpen(null));
77         this.listener.onSessionUp(session);
78         readDataOperational(getDataBroker(), this.pathComputationClientIId, pcc -> {
79             //check node - IncrementalSync state
80             assertEquals(PccSyncState.IncrementalSync, pcc.getStateSync());
81             //check reported LSP - persisted from previous session
82             assertFalse(pcc.getReportedLsp().isEmpty());
83             return pcc;
84         });
85
86         //report LSP2 + LSP-DB version number 2
87         final Pcrpt pcRpt2 = getPcrpt(2L,"testsecond");
88         this.listener.onMessage(session, pcRpt2);
89         readDataOperational(getDataBroker(), this.pathComputationClientIId, pcc -> {
90             //check node - synchronized
91             assertEquals(PccSyncState.IncrementalSync, pcc.getStateSync());
92             //check reported LSP is not empty
93             assertEquals(2, pcc.getReportedLsp().size());
94             return pcc;
95         });
96
97         //sync rpt + LSP-DB
98         final Pcrpt syncMsg = getSyncPcrt();
99         this.listener.onMessage(session, syncMsg);
100         readDataOperational(getDataBroker(), this.pathComputationClientIId, pcc -> {
101             //check node - synchronized
102             assertEquals(PccSyncState.Synchronized, pcc.getStateSync());
103             //check reported LSP is empty, LSP state from previous session was purged
104             assertEquals(2, pcc.getReportedLsp().size());
105             return pcc;
106         });
107
108         //report LSP3 + LSP-DB version number 4
109         final Pcrpt pcRpt3 = getPcrpt(3L,"testthird");
110         this.listener.onMessage(session, pcRpt3);
111         readDataOperational(getDataBroker(), this.pathComputationClientIId, pcc -> {
112             //check node - synchronized
113             assertEquals(PccSyncState.Synchronized, pcc.getStateSync());
114             assertEquals(3,pcc.getReportedLsp().size());
115             return pcc;
116         });
117     }
118
119     private Open getOpen(final LspDbVersion dbVersion) {
120         return new OpenBuilder(super.getLocalPref()).setTlvs(new TlvsBuilder().addAugmentation(Tlvs1.class,
121             new Tlvs1Builder().setStateful(new StatefulBuilder().addAugmentation(Stateful1.class,
122                 new Stateful1Builder().setInitiation(Boolean.TRUE).build())
123             .addAugmentation(org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.controller.pcep.sync
124                     .optimizations.rev171025.Stateful1.class, new org.opendaylight.yang.gen.v1.urn.opendaylight.params
125                     .xml.ns.yang.controller.pcep.sync.optimizations.rev171025.Stateful1Builder()
126                 .setIncludeDbVersion(Boolean.TRUE).setDeltaLspSyncCapability(Boolean.TRUE).build())
127             .build()).build()).addAugmentation(Tlvs3.class, new Tlvs3Builder().setLspDbVersion(dbVersion).build())
128             .build()).build();
129     }
130
131     private Pcrpt getPcrpt(final Long val, final String pathname) {
132         return MsgBuilderUtil.createPcRtpMessage(new LspBuilder().setPlspId(new PlspId(val)).setTlvs(
133             new org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful.rev171025.lsp
134                     .object.lsp.TlvsBuilder().setLspIdentifiers(new LspIdentifiersBuilder()
135                     .setLspId(new LspId(val)).build())
136                 .setSymbolicPathName(new SymbolicPathNameBuilder().setPathName(new SymbolicPathName(
137                     pathname.getBytes())).build()).addAugmentation(org.opendaylight.yang.gen.v1.urn.opendaylight.params
138                 .xml.ns.yang.controller.pcep.sync.optimizations.rev171025.Tlvs1.class, new org.opendaylight.yang.gen.v1
139                     .urn.opendaylight.params.xml.ns.yang.controller.pcep.sync.optimizations.rev171025.Tlvs1Builder()
140                 .setLspDbVersion(new LspDbVersionBuilder().setLspDbVersionValue(BigInteger.valueOf(val)).build())
141                 .build()).build()).setPlspId(new PlspId(val)
142         ).setSync(true).setRemove(false).setOperational(OperationalStatus.Active).build(), Optional.absent(),
143             createPath(Collections.emptyList()));
144     }
145
146     private Pcrpt getSyncPcrt() {
147         return MsgBuilderUtil.createPcRtpMessage(createLsp(0, false, Optional.of(
148                 new org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful.rev171025
149                         .lsp.object.lsp.TlvsBuilder().addAugmentation(org.opendaylight.yang.gen.v1.urn.opendaylight
150                                 .params.xml.ns.yang.controller.pcep.sync.optimizations.rev171025.Tlvs1.class,
151                         new org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.controller.pcep.sync
152                                 .optimizations.rev171025.Tlvs1Builder().setLspDbVersion(new LspDbVersionBuilder()
153                                 .setLspDbVersionValue(BigInteger.valueOf(3L)).build()).build()).build()),
154                 true, false), Optional.absent(),
155                 createPath(Collections.emptyList()));
156     }
157 }