Skip to content

Commit

Permalink
Change annotation ack from enum to string
Browse files Browse the repository at this point in the history
- Change SqsListenerAcknowledgementMode from enum to class with const
  strings
- Change typo on "acknowledgement" annotation field
- Remove unnecessary field on SqsContainerOptionsBuilder
- Move integration tests to its own test suite
  • Loading branch information
jvcalassio committed Sep 7, 2023
1 parent 895aca1 commit 5b5eac3
Show file tree
Hide file tree
Showing 8 changed files with 460 additions and 251 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -221,9 +221,11 @@ protected Integer resolveAsInteger(String value, String propertyName) {
}

@Nullable
protected AcknowledgementMode resolve(SqsListenerAcknowledgementMode value) {
protected AcknowledgementMode resolveAcknowledgement(String value) {
try {
return value == SqsListenerAcknowledgementMode.INHERIT ? null : AcknowledgementMode.valueOf(value.name());
final String resolvedValue = resolveAsString(value, "acknowledgmentMode");
return resolvedValue.equals(SqsListenerAcknowledgementMode.DEFAULT) ? null
: AcknowledgementMode.valueOf(resolvedValue);
}
catch (IllegalArgumentException e) {
throw new IllegalArgumentException("Cannot resolve " + value + " as AcknowledgementMode", e);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -138,9 +138,9 @@
String messageVisibilitySeconds() default "";

/**
* The acknowledgement mode to be used for the provided queues. If not specified, the
* acknowledgement mode defined for the container factory will be used.
* The acknowledgement mode to be used for the provided queues. If not specified, the acknowledgement mode defined
* for the container factory will be used.
*/
SqsListenerAcknowledgementMode acknowledgmentMode() default SqsListenerAcknowledgementMode.INHERIT;
String acknowledgementMode() default SqsListenerAcknowledgementMode.DEFAULT;

}
Original file line number Diff line number Diff line change
Expand Up @@ -30,28 +30,27 @@
* @see io.awspring.cloud.sqs.listener.ContainerOptions
* @see SqsListener
*/
public enum SqsListenerAcknowledgementMode {
public class SqsListenerAcknowledgementMode {

/**
* Use acknowledge mode defined by the container.
*/
INHERIT,
public static final String DEFAULT = "DEFAULT";

/**
* Messages will be acknowledged when message processing is successful.
*/
ON_SUCCESS,
public static final String ON_SUCCESS = "ON_SUCCESS";

/**
* Messages will be acknowledged whether processing was completed successfully or with
* an error.
* Messages will be acknowledged whether processing was completed successfully or with an error.
*/
ALWAYS,
public static final String ALWAYS = "ALWAYS";

/**
* Messages will not be acknowledged automatically by the container.
* @see io.awspring.cloud.sqs.listener.acknowledgement.Acknowledgement
*/
MANUAL,
public static final String MANUAL = "MANUAL";

}
Original file line number Diff line number Diff line change
Expand Up @@ -51,7 +51,7 @@ protected Endpoint createEndpoint(SqsListener sqsListenerAnnotation) {
resolveAsInteger(sqsListenerAnnotation.maxConcurrentMessages(), "maxConcurrentMessages"))
.messageVisibility(
resolveAsInteger(sqsListenerAnnotation.messageVisibilitySeconds(), "messageVisibility"))
.acknowledgementMode(resolve(sqsListenerAnnotation.acknowledgmentMode())).build();
.acknowledgementMode(resolveAcknowledgement(sqsListenerAnnotation.acknowledgementMode())).build();
}

@Override
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,6 @@
*/
package io.awspring.cloud.sqs.listener;

import io.awspring.cloud.sqs.listener.acknowledgement.handler.AcknowledgementMode;
import java.time.Duration;
import java.util.Collection;
import software.amazon.awssdk.services.sqs.model.MessageSystemAttributeName;
Expand Down Expand Up @@ -66,11 +65,4 @@ SqsContainerOptionsBuilder messageSystemAttributeNames(
*/
SqsContainerOptionsBuilder queueNotFoundStrategy(QueueNotFoundStrategy queueNotFoundStrategy);

/**
* Set the {@link AcknowledgementMode} for the container.
* @param acknowledgementMode the acknowledgement mode.
* @return this instance.
*/
SqsContainerOptionsBuilder acknowledgementMode(AcknowledgementMode acknowledgementMode);

}
Original file line number Diff line number Diff line change
Expand Up @@ -15,14 +15,13 @@
*/
package io.awspring.cloud.sqs.annotation;

import static org.junit.jupiter.api.Assertions.assertEquals;

import io.awspring.cloud.sqs.listener.acknowledgement.handler.AcknowledgementMode;
import org.junit.jupiter.api.Test;
import java.lang.reflect.Field;
import org.junit.jupiter.params.ParameterizedTest;
import org.junit.jupiter.params.provider.EnumSource;

import static org.junit.jupiter.api.Assertions.assertDoesNotThrow;
import static org.junit.jupiter.api.Assertions.assertEquals;

/**
* Tests for {@link SqsListenerAcknowledgementMode} enum values
*
Expand All @@ -32,10 +31,11 @@ class SqsListenerAcknowledgementModeTests {

@ParameterizedTest
@EnumSource(AcknowledgementMode.class)
void shouldHaveAllValuesOfAcknowledgementModeEnum(final AcknowledgementMode acknowledgementMode) {
final SqsListenerAcknowledgementMode correspondingValue = assertDoesNotThrow(() ->
SqsListenerAcknowledgementMode.valueOf(acknowledgementMode.name()));
assertEquals(acknowledgementMode.name(), correspondingValue.name());
void shouldHaveAllValuesOfAcknowledgementModeEnum(final AcknowledgementMode acknowledgementMode)
throws NoSuchFieldException, IllegalAccessException {
Class<SqsListenerAcknowledgementMode> clz = SqsListenerAcknowledgementMode.class;
Field correspondingValue = clz.getDeclaredField(acknowledgementMode.name());
assertEquals(acknowledgementMode.name(), correspondingValue.get(clz));
}

}
Loading

0 comments on commit 5b5eac3

Please sign in to comment.