/*
* Copyright 2013-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.cloud.aws.messaging;
import com.fasterxml.jackson.annotation.JsonProperty;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.cloud.aws.messaging.core.QueueMessagingTemplate;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
import javax.annotation.Resource;
import java.util.Collections;
import java.util.List;
import static org.junit.Assert.assertEquals;
/**
* @author Agim Emruli
* @author Alain Sahli
*/
@RunWith(SpringJUnit4ClassRunner.class)
public abstract class QueueMessagingTemplateIntegrationTest {
private static final String JSON_QUEUE_NAME = "JsonQueue";
private static final String STRING_QUEUE_NAME = "StringQueue";
@SuppressWarnings("SpringJavaAutowiringInspection")
@Resource(name = "defaultQueueMessagingTemplate")
private QueueMessagingTemplate defaultQueueMessagingTemplate;
@SuppressWarnings("SpringJavaAutowiringInspection")
@Resource(name = "queueMessagingTemplateWithCustomConverter")
private QueueMessagingTemplate messagingTemplateWithCustomConverter;
@Test
public void sendAndReceive_stringMessageWithProvidedDestination_shouldUseTheProvidedDestination() throws Exception {
// Arrange
String messageContent = "testMessage";
// Act
this.defaultQueueMessagingTemplate.convertAndSend(STRING_QUEUE_NAME, messageContent);
String receivedMessage = this.defaultQueueMessagingTemplate.receiveAndConvert(STRING_QUEUE_NAME, String.class);
// Assert
assertEquals(messageContent, receivedMessage);
}
@Test
public void sendAndReceive_ObjectMessageWithDefaultDestination_shouldUseTheStreamQueue() throws Exception {
// Arrange
List<String> payload = Collections.singletonList("myString");
// Act
this.messagingTemplateWithCustomConverter.convertAndSend(payload);
List<String> result = this.messagingTemplateWithCustomConverter.receiveAndConvert(StringList.class);
// Assert
assertEquals("myString", result.get(0));
}
@Test
public void sendAndReceive_JsonMessageWithDefaultDestination_shouldUseTheJsonQueue() throws Exception {
// Arrange
DummyObject payload = new DummyObject("Hello", 100);
// Act
this.defaultQueueMessagingTemplate.convertAndSend(payload);
DummyObject result = this.defaultQueueMessagingTemplate.receiveAndConvert(DummyObject.class);
// Assert
assertEquals("Hello", result.getValue());
assertEquals(100, result.getAnotherValue());
}
@Test
public void convertAndSend_aStringWithJsonConverter_shouldSerializeAndDeserializeCorrectly() throws Exception {
// Act
this.defaultQueueMessagingTemplate.convertAndSend(JSON_QUEUE_NAME, "A String");
// Assert
String result = this.defaultQueueMessagingTemplate.receiveAndConvert(JSON_QUEUE_NAME, String.class);
assertEquals("A String", result);
}
private static class DummyObject {
private final String value;
private final int anotherValue;
private DummyObject(@JsonProperty("value") String value, @JsonProperty("anotherValue") int anotherValue) {
this.value = value;
this.anotherValue = anotherValue;
}
public int getAnotherValue() {
return this.anotherValue;
}
public String getValue() {
return this.value;
}
}
private interface StringList extends List<String> {
}
}