Package org.springframework.messaging.simp

Source Code of org.springframework.messaging.simp.SimpMessagingTemplateTests

/*
* Copyright 2002-2014 the original author or authors.
*
* 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.springframework.messaging.simp;

import java.util.Arrays;
import java.util.Collections;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import org.junit.Before;
import org.junit.Test;

import org.springframework.messaging.Message;
import org.springframework.messaging.MessageHeaders;
import org.springframework.messaging.StubMessageChannel;
import org.springframework.messaging.simp.stomp.StompCommand;
import org.springframework.messaging.simp.stomp.StompHeaderAccessor;
import org.springframework.messaging.support.MessageBuilder;
import org.springframework.messaging.support.MessageHeaderAccessor;
import org.springframework.messaging.support.NativeMessageHeaderAccessor;
import org.springframework.util.LinkedMultiValueMap;

import static org.junit.Assert.*;

/**
* Unit tests for {@link org.springframework.messaging.simp.SimpMessagingTemplate}.
*
* @author Rossen Stoyanchev
*/
public class SimpMessagingTemplateTests {

  private SimpMessagingTemplate messagingTemplate;

  private StubMessageChannel messageChannel;


  @Before
  public void setup() {
    this.messageChannel = new StubMessageChannel();
    this.messagingTemplate = new SimpMessagingTemplate(this.messageChannel);
  }


  @Test
  public void convertAndSendToUser() {
    this.messagingTemplate.convertAndSendToUser("joe", "/queue/foo", "data");
    List<Message<byte[]>> messages = this.messageChannel.getMessages();

    assertEquals(1, messages.size());

    Message<byte[]> message = messages.get(0);
    SimpMessageHeaderAccessor headerAccessor =
        MessageHeaderAccessor.getAccessor(message, SimpMessageHeaderAccessor.class);

    assertNotNull(headerAccessor);
    assertEquals(SimpMessageType.MESSAGE, headerAccessor.getMessageType());
    assertEquals("/user/joe/queue/foo", headerAccessor.getDestination());
  }

  @Test
  public void convertAndSendToUserWithEncoding() {
    this.messagingTemplate.convertAndSendToUser("http://joe.openid.example.org/", "/queue/foo", "data");
    List<Message<byte[]>> messages = this.messageChannel.getMessages();

    assertEquals(1, messages.size());

    SimpMessageHeaderAccessor headerAccessor =
        MessageHeaderAccessor.getAccessor(messages.get(0), SimpMessageHeaderAccessor.class);

    assertNotNull(headerAccessor);
    assertEquals("/user/http:%2F%2Fjoe.openid.example.org%2F/queue/foo", headerAccessor.getDestination());
  }

  @Test
  public void convertAndSendWithCustomHeader() {
    Map<String, Object> headers = Collections.<String, Object>singletonMap("key", "value");
    this.messagingTemplate.convertAndSend("/foo", "data", headers);

    List<Message<byte[]>> messages = this.messageChannel.getMessages();

    SimpMessageHeaderAccessor headerAccessor =
        MessageHeaderAccessor.getAccessor(messages.get(0), SimpMessageHeaderAccessor.class);

    assertNotNull(headerAccessor);
    assertNull(headerAccessor.toMap().get("key"));
    assertEquals(Arrays.asList("value"), headerAccessor.getNativeHeader("key"));
  }

  @Test
  public void convertAndSendWithCustomHeaderNonNative() {
    Map<String, Object> headers = new HashMap<>();
    headers.put("key", "value");
    headers.put(NativeMessageHeaderAccessor.NATIVE_HEADERS, new LinkedMultiValueMap<String, String>());
    this.messagingTemplate.convertAndSend("/foo", "data", headers);

    List<Message<byte[]>> messages = this.messageChannel.getMessages();

    SimpMessageHeaderAccessor headerAccessor =
        MessageHeaderAccessor.getAccessor(messages.get(0), SimpMessageHeaderAccessor.class);

    assertNotNull(headerAccessor);
    assertEquals("value", headerAccessor.toMap().get("key"));
    assertNull(headerAccessor.getNativeHeader("key"));
  }

  // SPR-11868

  @Test
  public void convertAndSendWithCustomDestinationPrefix() {
    this.messagingTemplate.setUserDestinationPrefix("/prefix");
    this.messagingTemplate.convertAndSendToUser("joe", "/queue/foo", "data");
    List<Message<byte[]>> messages = this.messageChannel.getMessages();

    assertEquals(1, messages.size());

    Message<byte[]> message = messages.get(0);
    SimpMessageHeaderAccessor headerAccessor =
        MessageHeaderAccessor.getAccessor(message, SimpMessageHeaderAccessor.class);

    assertNotNull(headerAccessor);
    assertEquals(SimpMessageType.MESSAGE, headerAccessor.getMessageType());
    assertEquals("/prefix/joe/queue/foo", headerAccessor.getDestination());
  }

  @Test
  public void convertAndSendWithMutableSimpMessageHeaders() {
    SimpMessageHeaderAccessor accessor = SimpMessageHeaderAccessor.create();
    accessor.setHeader("key", "value");
    accessor.setNativeHeader("fooNative", "barNative");
    accessor.setLeaveMutable(true);
    MessageHeaders headers = accessor.getMessageHeaders();

    this.messagingTemplate.convertAndSend("/foo", "data", headers);

    List<Message<byte[]>> messages = this.messageChannel.getMessages();
    Message<byte[]> message = messages.get(0);

    assertSame(headers, message.getHeaders());
    assertFalse(accessor.isMutable());
  }

  @Test
  public void processHeadersToSend() {
    Map<String, Object> map = this.messagingTemplate.processHeadersToSend(null);

    assertNotNull(map);
    assertTrue("Actual: " + map.getClass().toString(), MessageHeaders.class.isAssignableFrom(map.getClass()));

    SimpMessageHeaderAccessor headerAccessor =
        MessageHeaderAccessor.getAccessor((MessageHeaders) map, SimpMessageHeaderAccessor.class);

    assertTrue(headerAccessor.isMutable());
    assertEquals(SimpMessageType.MESSAGE, headerAccessor.getMessageType());
  }

  @Test
  public void doSendWithMutableHeaders() {
    SimpMessageHeaderAccessor accessor = SimpMessageHeaderAccessor.create();
    accessor.setHeader("key", "value");
    accessor.setNativeHeader("fooNative", "barNative");
    accessor.setLeaveMutable(true);
    MessageHeaders headers = accessor.getMessageHeaders();
    Message<?> message = MessageBuilder.createMessage("payload", headers);

    this.messagingTemplate.doSend("/topic/foo", message);

    List<Message<byte[]>> messages = this.messageChannel.getMessages();
    Message<byte[]> sentMessage = messages.get(0);

    assertSame(message, sentMessage);
    assertFalse(accessor.isMutable());
  }

  @Test
  public void doSendWithStompHeaders() {
    StompHeaderAccessor accessor = StompHeaderAccessor.create(StompCommand.SUBSCRIBE);
    accessor.setDestination("/user/queue/foo");
    Message<?> message = MessageBuilder.createMessage(new byte[0], accessor.getMessageHeaders());

    this.messagingTemplate.doSend("/queue/foo-user123", message);

    List<Message<byte[]>> messages = this.messageChannel.getMessages();
    Message<byte[]> sentMessage = messages.get(0);

    MessageHeaderAccessor sentAccessor = MessageHeaderAccessor.getAccessor(sentMessage, MessageHeaderAccessor.class);
    assertEquals(StompHeaderAccessor.class, sentAccessor.getClass());
    assertEquals("/queue/foo-user123", ((StompHeaderAccessor) sentAccessor).getDestination());
  }

}
TOP

Related Classes of org.springframework.messaging.simp.SimpMessagingTemplateTests

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.