Tidy up logic around canonicalization of attributes

Added initial test to validate builder and utils
This commit is contained in:
Oleg Zhurakousky
2020-12-02 15:17:17 +01:00
parent a318b88da7
commit c07722dab3
2 changed files with 23 additions and 6 deletions

View File

@@ -57,8 +57,7 @@ public final class CloudEventMessageUtils {
private CloudEventMessageUtils() {
}
//=====
//=========== INTERNAL USE ONLY ==
static String _DATA = "data";
static String _ID = "id";
@@ -78,6 +77,7 @@ public final class CloudEventMessageUtils {
static String _SUBJECT = "subject";
static String _TIME = "time";
// ================================
/**
* String value of 'application/cloudevents' mime type.
@@ -288,9 +288,15 @@ public final class CloudEventMessageUtils {
}
/**
* Will canonicalize Cloud Event attributes (headers) by removing well known prefixes.
* So, for example 'ce_source' will become 'source'.
* Will canonicalize Cloud Event attributes (headers) by ensuring canonical
* prefix for all attributes and extensions regardless of where they came from.
* The canonical prefix is 'ce-'.
*
* So, for example 'ce_source' will become 'ce-source'.
* @param headers message headers
* @param structured boolean signifying that headers map represents structured Cloud Event
* at which point attributes without any prefix will still be treated as
* Cloud Event attributes.
*/
private static void canonicalizeHeaders(Map<String, Object> headers, boolean structured) {
String[] keys = headers.keySet().toArray(new String[] {});

View File

@@ -16,15 +16,16 @@
package org.springframework.cloud.function.cloudevent;
import static org.assertj.core.api.Assertions.assertThat;
import java.net.URI;
import java.util.Map;
import org.junit.jupiter.api.Test;
import org.springframework.messaging.Message;
import org.springframework.messaging.support.MessageBuilder;
import static org.assertj.core.api.Assertions.assertThat;
/**
* @author Oleg Zhurakousky
*/
@@ -52,5 +53,15 @@ public class CloudEventMessageUtilsAndBuilderTests {
assertThat(CloudEventMessageUtils.getType(kafkaMessage)).isEqualTo("blah");
assertThat(kafkaMessage.getHeaders().get("ce_specversion")).isNotNull();
assertThat(CloudEventMessageUtils.getSpecVersion(kafkaMessage)).isEqualTo("1.0");
httpMessage = CloudEventMessageBuilder.fromMessage(kafkaMessage).build(CloudEventMessageUtils.DEFAULT_ATTR_PREFIX);
attributes = CloudEventMessageUtils.getAttributes(httpMessage);
assertThat(attributes.size()).isEqualTo(3);
assertThat(httpMessage.getHeaders().get("ce-source")).isNotNull();
assertThat(CloudEventMessageUtils.getSource(httpMessage)).isEqualTo(URI.create("https://foo.bar"));
assertThat(httpMessage.getHeaders().get("ce-type")).isNotNull();
assertThat(CloudEventMessageUtils.getType(httpMessage)).isEqualTo("blah");
assertThat(httpMessage.getHeaders().get("ce-specversion")).isNotNull();
assertThat(CloudEventMessageUtils.getSpecVersion(httpMessage)).isEqualTo("1.0");
}
}