Fix serialization of missing UUID
new byte['e'] was thought to produce [101] but it produces an byte[]
of length 101 containing only zero's.
Add serialization test for missing UUID.
Solves: Jira GER-1615
Change-Id: I5ead35124111aa3c33180e2cc889a9c06dce4e34
diff --git a/src/main/java/com/googlesource/gerrit/plugins/eventseiffel/cache/UUIDSerializer.java b/src/main/java/com/googlesource/gerrit/plugins/eventseiffel/cache/UUIDSerializer.java
index 64e4e6e..a6bfaa3 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/eventseiffel/cache/UUIDSerializer.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/eventseiffel/cache/UUIDSerializer.java
@@ -15,15 +15,18 @@
package com.googlesource.gerrit.plugins.eventseiffel.cache;
import com.google.gerrit.server.cache.serialize.CacheSerializer;
+import java.nio.charset.StandardCharsets;
+import java.util.Arrays;
import java.util.Optional;
import java.util.UUID;
public class UUIDSerializer implements CacheSerializer<Optional<UUID>> {
+ public static final byte[] EMPTY = "empty".getBytes(StandardCharsets.US_ASCII);
@Override
public byte[] serialize(Optional<UUID> object) {
if (object.isEmpty()) {
- return new byte['e'];
+ return EMPTY;
}
byte[] result = new byte[Long.BYTES * 2];
int i = result.length - 1;
@@ -42,7 +45,7 @@
@Override
public Optional<UUID> deserialize(byte[] in) {
- if (in.length == 1 && in[0] == 'e') {
+ if (Arrays.equals(in, EMPTY)) {
return Optional.empty();
}
long ls = 0;
diff --git a/src/test/java/com/googlesource/gerrit/plugins/eventseiffel/cache/IdCacheSerializerTest.java b/src/test/java/com/googlesource/gerrit/plugins/eventseiffel/cache/IdCacheSerializerTest.java
index cf6805a..5badcd8 100644
--- a/src/test/java/com/googlesource/gerrit/plugins/eventseiffel/cache/IdCacheSerializerTest.java
+++ b/src/test/java/com/googlesource/gerrit/plugins/eventseiffel/cache/IdCacheSerializerTest.java
@@ -15,6 +15,7 @@
package com.googlesource.gerrit.plugins.eventseiffel.cache;
import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertTrue;
import com.googlesource.gerrit.plugins.eventseiffel.eiffel.ArtifactEventKey;
import com.googlesource.gerrit.plugins.eventseiffel.eiffel.CompositionDefinedEventKey;
@@ -55,6 +56,14 @@
assertEquals(actual, deserialized);
}
+ @Test
+ public void missingUuidSerializedCorrectly() throws Exception {
+ UUIDSerializer uuidSerializer = new UUIDSerializer();
+ byte[] serialized = uuidSerializer.serialize(Optional.empty());
+ Optional<UUID> deserialized = uuidSerializer.deserialize(serialized);
+ assertTrue(deserialized.isEmpty());
+ }
+
private void eventKeyIsSerializedCorrectly(EventKey actual) throws Exception {
EventKeySerializer keySerializer = new EventKeySerializer();
byte[] serialized = keySerializer.serialize(actual);