| /* |
| * Licensed to the Apache Software Foundation (ASF) under one or more |
| * contributor license agreements. See the NOTICE file distributed with |
| * this work for additional information regarding copyright ownership. |
| * The ASF licenses this file to You under the Apache License, Version 2.0 |
| * (the "License"); you may not use this file except in compliance with |
| * the License. You may obtain a copy of the License at |
| * |
| * http://www.apache.org/licenses/LICENSE-2.0 |
| * |
| * Unless required by applicable law or agreed to in writing, software |
| * distributed under the License is distributed on an "AS IS" BASIS, |
| * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| * See the License for the specific language governing permissions and |
| * limitations under the License. |
| */ |
| package org.apache.wicket.protocol.ws.util.tester; |
| |
| import jakarta.servlet.http.HttpServletRequest; |
| import jakarta.servlet.http.HttpSession; |
| |
| import org.apache.wicket.Application; |
| import org.apache.wicket.Page; |
| import org.apache.wicket.protocol.http.WebApplication; |
| import org.apache.wicket.protocol.http.mock.MockHttpServletRequest; |
| import org.apache.wicket.protocol.ws.api.AbstractWebSocketProcessor; |
| import org.apache.wicket.protocol.ws.api.message.IWebSocketPushMessage; |
| import org.apache.wicket.request.http.WebRequest; |
| import org.apache.wicket.util.lang.Args; |
| import org.apache.wicket.util.tester.WicketTester; |
| |
| /** |
| * An {@link org.apache.wicket.protocol.ws.api.IWebSocketProcessor} used by {@link WebSocketTester} |
| * |
| * @since 6.0 |
| */ |
| abstract class TestWebSocketProcessor extends AbstractWebSocketProcessor |
| { |
| /** |
| * |
| * Constructor. |
| * |
| * @param request |
| * the http request that was used to create the IWebSocketProcessor |
| * @param application |
| * the current Wicket Application |
| */ |
| public TestWebSocketProcessor(final HttpServletRequest request, final WebApplication application) |
| { |
| super(request, application); |
| } |
| |
| /** |
| * Constructor. |
| * |
| * @param page |
| * the page that may have registered {@link org.apache.wicket.protocol.ws.api.WebSocketBehavior} |
| */ |
| public TestWebSocketProcessor(final WicketTester wicketTester, final Page page) |
| { |
| super(createRequest(wicketTester, page), (WebApplication) page.getApplication()); |
| } |
| |
| /** |
| * Constructor. |
| * |
| * @param resourceName |
| * the name of the shared resource that will handle the web socket messages |
| */ |
| public TestWebSocketProcessor(final WicketTester wicketTester, final String resourceName) |
| { |
| super(createRequest(wicketTester, resourceName), wicketTester.getApplication()); |
| } |
| |
| /** |
| * Creates an HttpServletRequest that is needed by AbstractWebSocketProcessor |
| * |
| * @param page |
| * the page that may have registered {@link org.apache.wicket.protocol.ws.api.WebSocketBehavior} |
| * @return a mock http request |
| */ |
| private static HttpServletRequest createRequest(final WicketTester wicketTester, final Page page) |
| { |
| Args.notNull(page, "page"); |
| MockHttpServletRequest request = createRequest(wicketTester); |
| request.addParameter("pageId", page.getId()); |
| return request; |
| } |
| |
| /** |
| * Creates an HttpServletRequest that is needed by AbstractWebSocketProcessor |
| * |
| * @param resourceName |
| * the page that may have registered {@link org.apache.wicket.protocol.ws.api.WebSocketBehavior} |
| * @return a mock http request |
| */ |
| private static HttpServletRequest createRequest(final WicketTester wicketTester, final String resourceName) |
| { |
| Args.notNull(resourceName, "resourceName"); |
| MockHttpServletRequest request = createRequest(wicketTester); |
| request.addParameter("resourceName", resourceName); |
| return request; |
| } |
| |
| /** |
| * Creates an HttpServletRequest that is needed by AbstractWebSocketProcessor |
| * |
| * @return a mock http request |
| */ |
| private static MockHttpServletRequest createRequest(final WicketTester wicketTester) |
| { |
| Application application = wicketTester.getApplication(); |
| HttpSession httpSession = wicketTester.getHttpSession(); |
| MockHttpServletRequest request = new MockHttpServletRequest(application, httpSession, null); |
| request.addParameter(WebRequest.PARAM_AJAX_BASE_URL, "."); |
| return request; |
| } |
| |
| |
| /** |
| * Setups TestWebSocketConnection. |
| * |
| * @param connection |
| * the native connection. Not needed/Ignored. |
| */ |
| @Override |
| public void onOpen(Object connection) |
| { |
| onConnect(new TestWebSocketConnection(getApplication(), getSessionId(), getRegistryKey()) { |
| |
| @Override |
| protected void onOutMessage(String message) |
| { |
| TestWebSocketProcessor.this.onOutMessage(message); |
| } |
| |
| @Override |
| protected void onOutMessage(byte[] message, int offset, int length) |
| { |
| TestWebSocketProcessor.this.onOutMessage(message, offset, length); |
| } |
| |
| @Override |
| public void sendMessage(IWebSocketPushMessage message) |
| { |
| TestWebSocketProcessor.this.broadcastMessage(message); |
| } |
| }); |
| } |
| |
| /** |
| * A callback method that is being called when a test message is written to the TestWebSocketConnection |
| * |
| * @param message |
| * the text message to deliver to the client |
| */ |
| protected abstract void onOutMessage(String message); |
| |
| /** |
| * A callback method that is being called when a binary message is written to the TestWebSocketConnection |
| * |
| * @param message |
| * the binary message to deliver to the client |
| * @param offset |
| * the offset of the binary message to start to read from |
| * @param length |
| * the length of bytes to read from the binary message |
| */ |
| protected abstract void onOutMessage(byte[] message, int offset, int length); |
| } |