/** * JBoss, Home of Professional Open Source * Copyright Red Hat, Inc., and individual contributors. * * Licensed 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.jboss.aerogear.simplepush.server.netty; import static org.jboss.aerogear.simplepush.protocol.impl.json.JsonUtil.toJson; import io.netty.handler.codec.http.websocketx.TextWebSocketFrame; import java.util.Arrays; import java.util.HashSet; import java.util.regex.Matcher; import java.util.regex.Pattern; import org.jboss.aerogear.simplepush.protocol.impl.HelloMessageImpl; import org.jboss.aerogear.simplepush.protocol.impl.PingMessageImpl; import org.jboss.aerogear.simplepush.protocol.impl.RegisterMessageImpl; import org.jboss.aerogear.simplepush.protocol.impl.UnregisterMessageImpl; public final class TestUtil { private static final Pattern MESSAGE_PATTERN = Pattern.compile("^a\\[\\\"([{\\\"]?\\S.*\\\"?})\\\"\\]"); private TestUtil() { } public static String helloFrameAsJson(final String uaid, final String... channelIds) { return toJson(new HelloMessageImpl(uaid.toString(), new HashSet<String>(Arrays.asList(channelIds)))); } public static TextWebSocketFrame helloWebSocketFrame(final String uaid, final String... channelIds) { return new TextWebSocketFrame(helloFrameAsJson(uaid.toString(), channelIds)); } public static String helloSockJSFrame(final String uaid, final String... channelIds) { return asSockjsMessage(helloFrameAsJson(uaid, channelIds)); } public static String registerChannelIdMessageSockJSFrame(final String channelId) { return asSockjsMessage(toJson(new RegisterMessageImpl(channelId))); } public static TextWebSocketFrame registerChannelIdWebSocketFrame(final String channelId) { final String json = toJson(new RegisterMessageImpl(channelId)); return new TextWebSocketFrame(json); } public static TextWebSocketFrame pingWebSocketFrame() { return new TextWebSocketFrame(toJson(new PingMessageImpl())); } public static TextWebSocketFrame unregisterChannelIdWebSocketFrame(final String channelId) { final String json = toJson(new UnregisterMessageImpl(channelId)); return new TextWebSocketFrame(json); } public static String unregisterChannelIdMessageSockJSFrame(final String channelId) { return asSockjsMessage(toJson(new UnregisterMessageImpl(channelId))); } public static String pingSockJSFrame() { return asSockjsMessage(toJson(new PingMessageImpl())); } private static String asSockjsMessage(final String content) { return "[" + content + "]"; } public static String extractJsonFromSockJSMessage(final String message) { final Matcher matcher = MESSAGE_PATTERN.matcher(message); if (matcher.find()) { return matcher.group(1).replaceAll("\\\\", ""); } else { throw new IllegalArgumentException("The message was not in the correct SockJS message format: " + message); } } }