2 * Copyright © 2019 FRINX s.r.o. 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.restconf.nb.rfc8040.streams;
10 import static org.junit.jupiter.api.Assertions.assertInstanceOf;
11 import static org.junit.jupiter.api.Assertions.assertNull;
12 import static org.mockito.Mockito.doReturn;
13 import static org.mockito.Mockito.verify;
16 import org.eclipse.jetty.websocket.servlet.ServletUpgradeRequest;
17 import org.eclipse.jetty.websocket.servlet.ServletUpgradeResponse;
18 import org.junit.jupiter.api.BeforeEach;
19 import org.junit.jupiter.api.Test;
20 import org.junit.jupiter.api.extension.ExtendWith;
21 import org.mockito.Mock;
22 import org.mockito.junit.jupiter.MockitoExtension;
23 import org.opendaylight.mdsal.common.api.CommitInfo;
24 import org.opendaylight.mdsal.common.api.LogicalDatastoreType;
25 import org.opendaylight.mdsal.dom.api.DOMDataBroker;
26 import org.opendaylight.mdsal.dom.api.DOMDataTreeChangeService;
27 import org.opendaylight.mdsal.dom.api.DOMDataTreeWriteTransaction;
28 import org.opendaylight.mdsal.dom.api.DOMMountPointService;
29 import org.opendaylight.mdsal.dom.api.DOMNotificationService;
30 import org.opendaylight.restconf.nb.rfc8040.databind.DatabindProvider;
31 import org.opendaylight.restconf.server.mdsal.MdsalRestconfStreamRegistry;
32 import org.opendaylight.restconf.server.mdsal.streams.dtcl.DataTreeChangeSource;
33 import org.opendaylight.yangtools.yang.common.QName;
34 import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier;
36 @ExtendWith(MockitoExtension.class)
37 class WebSocketFactoryTest extends AbstractNotificationListenerTest {
38 private static final QName TOASTER = QName.create("http://netconfcentral.org/ns/toaster", "2009-11-20", "toaster");
41 private PingExecutor pingExecutor;
43 private ServletUpgradeRequest upgradeRequest;
45 private ServletUpgradeResponse upgradeResponse;
47 private DOMDataBroker dataBroker;
49 private DOMDataTreeWriteTransaction tx;
51 private DOMDataTreeChangeService changeService;
53 private DatabindProvider databindProvider;
55 private DOMMountPointService mountPointService;
57 private DOMNotificationService notificationService;
59 private WebSocketFactory webSocketFactory;
60 private String streamName;
63 void prepareListenersBroker() {
64 doReturn(tx).when(dataBroker).newWriteOnlyTransaction();
65 doReturn(CommitInfo.emptyFluentFuture()).when(tx).commit();
67 final var streamRegistry = new MdsalRestconfStreamRegistry(dataBroker);
68 webSocketFactory = new WebSocketFactory(streamRegistry, pingExecutor, 5000, 2000);
70 streamName = streamRegistry.createStream(URI.create("https://localhost:8181/rests"),
71 new DataTreeChangeSource(databindProvider, changeService, LogicalDatastoreType.CONFIGURATION,
72 YangInstanceIdentifier.of(TOASTER)),
79 void createWebSocketSuccessfully() {
80 doReturn(URI.create("https://localhost:8181/rests/streams/xml/" + streamName))
81 .when(upgradeRequest).getRequestURI();
83 assertInstanceOf(WebSocketSender.class,
84 webSocketFactory.createWebSocket(upgradeRequest, upgradeResponse));
85 verify(upgradeResponse).setSuccess(true);
86 verify(upgradeResponse).setStatusCode(101);
90 void createWebSocketUnsuccessfully() {
91 doReturn(URI.create("https://localhost:8181/rests/streams/xml/" + streamName + "/toasterStatus"))
92 .when(upgradeRequest).getRequestURI();
94 assertNull(webSocketFactory.createWebSocket(upgradeRequest, upgradeResponse));
95 verify(upgradeResponse).setSuccess(false);
96 verify(upgradeResponse).setStatusCode(404);