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
8 package org.opendaylight.controller.config.yang.netconf.mdsal.notification;
10 import static org.mockito.Matchers.any;
11 import static org.mockito.Mockito.doNothing;
12 import static org.mockito.Mockito.doReturn;
13 import static org.mockito.Mockito.mock;
14 import static org.mockito.Mockito.verify;
16 import java.util.Collections;
17 import org.junit.Assert;
18 import org.junit.Before;
19 import org.junit.Test;
20 import org.mockito.ArgumentCaptor;
21 import org.mockito.Mock;
22 import org.mockito.MockitoAnnotations;
23 import org.opendaylight.controller.md.sal.binding.api.DataObjectModification;
24 import org.opendaylight.controller.md.sal.binding.api.DataTreeModification;
25 import org.opendaylight.netconf.notifications.BaseNotificationPublisherRegistration;
26 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev100924.Host;
27 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.netconf.monitoring.rev101004.netconf.state.sessions.Session;
28 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.netconf.monitoring.rev101004.netconf.state.sessions.SessionBuilder;
29 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.netconf.notifications.rev120206.NetconfSessionEnd;
30 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.netconf.notifications.rev120206.NetconfSessionStart;
32 public class SessionNotificationProducerTest {
34 private SessionNotificationProducer publisher;
36 private BaseNotificationPublisherRegistration registration;
39 public void setUp() throws Exception {
40 MockitoAnnotations.initMocks(this);
41 publisher = new SessionNotificationProducer(registration);
42 doNothing().when(registration).onSessionStarted(any());
43 doNothing().when(registration).onSessionEnded(any());
47 public void testOnDataChangedSessionCreated() throws Exception {
48 final Session session = createSession(1);
49 final DataTreeModification<Session> treeChange = getTreeModification(session, DataObjectModification.ModificationType.WRITE);
50 publisher.onDataTreeChanged(Collections.singleton(treeChange));
51 ArgumentCaptor<NetconfSessionStart> captor = ArgumentCaptor.forClass(NetconfSessionStart.class);
52 verify(registration).onSessionStarted(captor.capture());
53 final NetconfSessionStart value = captor.getValue();
54 Assert.assertEquals(session.getSessionId(), value.getSessionId().getValue());
55 Assert.assertEquals(session.getSourceHost().getIpAddress(), value.getSourceHost());
56 Assert.assertEquals(session.getUsername(), value.getUsername());
60 public void testOnDataChangedSessionDeleted() throws Exception {
61 final Session session = createSession(1);
62 final DataTreeModification<Session> data = getTreeModification(session, DataObjectModification.ModificationType.DELETE);
63 publisher.onDataTreeChanged(Collections.singleton(data));
64 ArgumentCaptor<NetconfSessionEnd> captor = ArgumentCaptor.forClass(NetconfSessionEnd.class);
65 verify(registration).onSessionEnded(captor.capture());
66 final NetconfSessionEnd value = captor.getValue();
67 Assert.assertEquals(session.getSessionId(), value.getSessionId().getValue());
68 Assert.assertEquals(session.getSourceHost().getIpAddress(), value.getSourceHost());
69 Assert.assertEquals(session.getUsername(), value.getUsername());
72 private Session createSession(long id) {
73 return new SessionBuilder()
75 .setSourceHost(new Host("0.0.0.0".toCharArray()))
80 @SuppressWarnings("unchecked")
81 private DataTreeModification<Session> getTreeModification(Session session, DataObjectModification.ModificationType type) {
82 final DataTreeModification<Session> treeChange = mock(DataTreeModification.class);
83 final DataObjectModification<Session> changeObject = mock(DataObjectModification.class);
86 doReturn(session).when(changeObject).getDataAfter();
89 doReturn(session).when(changeObject).getDataBefore();
92 doReturn(type).when(changeObject).getModificationType();
93 doReturn(changeObject).when(treeChange).getRootNode();