mirror of https://github.com/dapr/java-sdk.git
parent
4bd9942b8c
commit
b229d462e9
|
@ -0,0 +1,101 @@
|
||||||
|
// ------------------------------------------------------------
|
||||||
|
// Copyright (c) Microsoft Corporation.
|
||||||
|
// Licensed under the MIT License.
|
||||||
|
// ------------------------------------------------------------
|
||||||
|
|
||||||
|
package io.dapr.actors.runtime;
|
||||||
|
|
||||||
|
import com.fasterxml.jackson.databind.ObjectMapper;
|
||||||
|
import com.fasterxml.jackson.databind.node.ObjectNode;
|
||||||
|
import com.fasterxml.jackson.databind.type.MapType;
|
||||||
|
import java.io.IOException;
|
||||||
|
import java.time.*;
|
||||||
|
import java.util.Base64;
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
|
class ReminderInfo
|
||||||
|
{
|
||||||
|
private final Duration minTimePeriod = Duration.ofMillis(-1);
|
||||||
|
|
||||||
|
public Duration dueTime;
|
||||||
|
public Duration period;
|
||||||
|
public byte[] data;
|
||||||
|
|
||||||
|
public ReminderInfo() {
|
||||||
|
}
|
||||||
|
|
||||||
|
public ReminderInfo(byte[] state, Duration dueTime, Duration period) {
|
||||||
|
this.ValidateDueTime("DueTime", dueTime);
|
||||||
|
this.ValidatePeriod("Period", period);
|
||||||
|
this.data = state;
|
||||||
|
this.dueTime = dueTime;
|
||||||
|
this.period = period;
|
||||||
|
}
|
||||||
|
|
||||||
|
Duration getDueTime() {
|
||||||
|
return this.dueTime;
|
||||||
|
}
|
||||||
|
|
||||||
|
Duration getPeriod() {
|
||||||
|
return this.period;
|
||||||
|
}
|
||||||
|
|
||||||
|
byte[] getData() {
|
||||||
|
return this.data;
|
||||||
|
}
|
||||||
|
|
||||||
|
String serialize() throws IOException {
|
||||||
|
try {
|
||||||
|
ObjectMapper om = new ObjectMapper();
|
||||||
|
ObjectNode objectNode = om.createObjectNode();
|
||||||
|
objectNode.put("dueTime", ConverterUtils.ConvertDurationToDaprFormat(this.dueTime));
|
||||||
|
objectNode.put("period", ConverterUtils.ConvertDurationToDaprFormat(this.period));
|
||||||
|
if (this.data != null) {
|
||||||
|
objectNode.put("data", Base64.getEncoder().encodeToString(this.data));
|
||||||
|
}
|
||||||
|
|
||||||
|
return om.writeValueAsString(objectNode);
|
||||||
|
} catch (IOException e) {
|
||||||
|
throw e;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
static ReminderInfo deserialize(byte[] stream) throws IOException {
|
||||||
|
try {
|
||||||
|
ObjectMapper om = new ObjectMapper();
|
||||||
|
MapType type = om.getTypeFactory().constructMapType(Map.class, String.class, Object.class);
|
||||||
|
Map<String, Object> data = om.readValue(stream, type);
|
||||||
|
|
||||||
|
String d = (String)data.getOrDefault("dueTime", "");
|
||||||
|
Duration dueTime = ConverterUtils.ConvertDurationFromDaprFormat(d);
|
||||||
|
|
||||||
|
String p = (String)data.getOrDefault("period", "");
|
||||||
|
Duration period = ConverterUtils.ConvertDurationFromDaprFormat(p);
|
||||||
|
|
||||||
|
String s = (String)data.getOrDefault("data", null);
|
||||||
|
byte[] state = (s == null) ? null : Base64.getDecoder().decode(s);
|
||||||
|
|
||||||
|
return new ReminderInfo(state, dueTime, period);
|
||||||
|
} catch (IOException e) {
|
||||||
|
throw e;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void ValidateDueTime(String argName, Duration value)
|
||||||
|
{
|
||||||
|
if (value.compareTo(Duration.ZERO) < 0 )
|
||||||
|
{
|
||||||
|
String message = String.format("argName: %s - Duration toMillis() - specified value must be greater than %s", argName, Duration.ZERO);
|
||||||
|
throw new IllegalArgumentException(message);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void ValidatePeriod(String argName, Duration value) throws IllegalArgumentException
|
||||||
|
{
|
||||||
|
if (value.compareTo(this.minTimePeriod) < 0)
|
||||||
|
{
|
||||||
|
String message = String.format("argName: %s - Duration toMillis() - specified value must be greater than %s", argName, Duration.ZERO);
|
||||||
|
throw new IllegalArgumentException(message);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,60 @@
|
||||||
|
package io.dapr.actors.runtime;
|
||||||
|
|
||||||
|
import org.junit.Assert;
|
||||||
|
import org.junit.Test;
|
||||||
|
import java.time.Duration;
|
||||||
|
import java.util.Arrays;
|
||||||
|
|
||||||
|
public class ReminderInfoTest {
|
||||||
|
@Test(expected = IllegalArgumentException.class)
|
||||||
|
public void outOfRangeDueTime() {
|
||||||
|
ReminderInfo info = new ReminderInfo(null, Duration.ZERO.plusSeconds(-10), Duration.ZERO.plusMinutes(1));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void negativePeriod() {
|
||||||
|
// this is ok
|
||||||
|
ReminderInfo info = new ReminderInfo(null, Duration.ZERO.plusMinutes(1), Duration.ZERO.plusMillis(-1));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test(expected = IllegalArgumentException.class)
|
||||||
|
public void outOfRangePeriod() {
|
||||||
|
ReminderInfo info = new ReminderInfo(null, Duration.ZERO.plusMinutes(1), Duration.ZERO.plusMinutes(-10));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void noState() {
|
||||||
|
ReminderInfo original = new ReminderInfo(null, Duration.ZERO.plusMinutes(2), Duration.ZERO.plusMinutes((5)));
|
||||||
|
ReminderInfo recreated = null;
|
||||||
|
try {
|
||||||
|
String serialized = original.serialize();
|
||||||
|
recreated = ReminderInfo.deserialize(serialized.getBytes());
|
||||||
|
}
|
||||||
|
catch(Exception e) {
|
||||||
|
System.out.println("The error is: " + e);
|
||||||
|
Assert.fail();
|
||||||
|
}
|
||||||
|
|
||||||
|
Assert.assertEquals(original.data, recreated.data);
|
||||||
|
Assert.assertEquals(original.dueTime, recreated.dueTime);
|
||||||
|
Assert.assertEquals(original.period, recreated.period);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void withState() {
|
||||||
|
ReminderInfo original = new ReminderInfo("maru".getBytes(), Duration.ZERO.plusMinutes(2), Duration.ZERO.plusMinutes((5)));
|
||||||
|
ReminderInfo recreated = null;
|
||||||
|
try {
|
||||||
|
String serialized = original.serialize();
|
||||||
|
recreated = ReminderInfo.deserialize(serialized.getBytes());
|
||||||
|
}
|
||||||
|
catch(Exception e) {
|
||||||
|
System.out.println("The error is: " + e);
|
||||||
|
Assert.fail();
|
||||||
|
}
|
||||||
|
|
||||||
|
Assert.assertTrue(Arrays.equals(original.data, recreated.data));
|
||||||
|
Assert.assertEquals(original.dueTime, recreated.dueTime);
|
||||||
|
Assert.assertEquals(original.period, recreated.period);
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue