This is an automated email from the ASF dual-hosted git repository. rouazana pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/james-project.git
commit 2925bafb174dd776bc1be9ae459e0141c6a38229 Author: Rémi Kowalski <[email protected]> AuthorDate: Thu Aug 22 11:45:04 2019 +0200 JAMES-2813 Add MemoryReferenceTask for unit tests --- .../server/task/json/TaskSerializationTest.java | 20 +++++++++ .../task/json/dto/MemoryReferenceTaskDTO.java | 41 +++++++++++++++++++ .../task/json/dto/MemoryReferenceTaskStore.java | 47 ++++++++++++++++++++++ .../server/task/json/dto/TestTaskDTOModules.java | 12 ++++++ .../org/apache/james/task/MemoryReferenceTask.java | 45 +++++++++++++++++++++ 5 files changed, 165 insertions(+) diff --git a/server/task-json/src/test/java/org/apache/james/server/task/json/TaskSerializationTest.java b/server/task-json/src/test/java/org/apache/james/server/task/json/TaskSerializationTest.java index a1fa0e1..67d89d0 100644 --- a/server/task-json/src/test/java/org/apache/james/server/task/json/TaskSerializationTest.java +++ b/server/task-json/src/test/java/org/apache/james/server/task/json/TaskSerializationTest.java @@ -19,14 +19,17 @@ package org.apache.james.server.task.json; import static net.javacrumbs.jsonunit.assertj.JsonAssertions.assertThatJson; import static org.apache.james.server.task.json.dto.TestTaskDTOModules.COMPLETED_TASK_MODULE; +import static org.apache.james.server.task.json.dto.TestTaskDTOModules.MEMORY_REFERENCE_TASK_MODULE; import static org.apache.james.server.task.json.dto.TestTaskDTOModules.FAILED_TASK_MODULE; import static org.apache.james.server.task.json.dto.TestTaskDTOModules.THROWING_TASK_MODULE; import static org.assertj.core.api.Assertions.assertThat; import java.io.IOException; +import org.apache.james.server.task.json.dto.MemoryReferenceTaskStore; import org.apache.james.task.CompletedTask; import org.apache.james.task.FailedTask; +import org.apache.james.task.MemoryReferenceTask; import org.apache.james.task.Task; import org.apache.james.task.ThrowingTask; import org.junit.jupiter.api.Test; @@ -37,6 +40,7 @@ class TaskSerializationTest { private static final String SERIALIZED_FAILED_TASK = "{\"type\": \"failed-task\"}"; private static final String SERIALIZED_COMPLETED_TASK = "{\"type\": \"completed-task\"}"; + private static final String SERIALIZED_MEMORY_REFERENCE_TASK = "{\"type\": \"memory-reference-task\", \"reference\": 0}"; private static final String SERIALIZED_THROWING_TASK = "{\"type\": \"throwing-task\"}"; @Test @@ -68,6 +72,22 @@ class TaskSerializationTest { } @Test + void memoryReferenceTaskShouldSerialize() throws JsonProcessingException { + MemoryReferenceTask memoryReferenceTask = new MemoryReferenceTask(() -> Task.Result.COMPLETED); + + String actual = new JsonTaskSerializer(MEMORY_REFERENCE_TASK_MODULE.apply(new MemoryReferenceTaskStore())).serialize(memoryReferenceTask); + assertThatJson(actual).isEqualTo(SERIALIZED_MEMORY_REFERENCE_TASK); + } + + @Test + void memoryReferenceTaskShouldDeserialize() throws IOException { + MemoryReferenceTaskStore memoryReferenceTaskStore = new MemoryReferenceTaskStore(); + memoryReferenceTaskStore.add(new MemoryReferenceTask(() -> Task.Result.COMPLETED)); + Task task = new JsonTaskSerializer(MEMORY_REFERENCE_TASK_MODULE.apply(memoryReferenceTaskStore)).deserialize(SERIALIZED_MEMORY_REFERENCE_TASK); + assertThat(task).isInstanceOf(MemoryReferenceTask.class); + } + + @Test void throwingTaskShouldSerialize() throws JsonProcessingException { ThrowingTask throwingTask = new ThrowingTask(); diff --git a/server/task-json/src/test/java/org/apache/james/server/task/json/dto/MemoryReferenceTaskDTO.java b/server/task-json/src/test/java/org/apache/james/server/task/json/dto/MemoryReferenceTaskDTO.java new file mode 100644 index 0000000..09f9fa8 --- /dev/null +++ b/server/task-json/src/test/java/org/apache/james/server/task/json/dto/MemoryReferenceTaskDTO.java @@ -0,0 +1,41 @@ +/**************************************************************** + * Licensed to the Apache Software Foundation (ASF) under one * + * or more contributor license agreements. See the NOTICE file * + * distributed with this work for additional information * + * regarding copyright ownership. The ASF licenses this file * + * to you 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.apache.james.server.task.json.dto; + +import com.fasterxml.jackson.annotation.JsonProperty; + +public class MemoryReferenceTaskDTO implements TaskDTO { + + private final String type; + private final Integer reference; + + public MemoryReferenceTaskDTO(@JsonProperty("type") String type, @JsonProperty("reference") Integer reference) { + this.type = type; + this.reference = reference; + } + + @Override + public String getType() { + return type; + } + + public Integer getReference() { + return reference; + } +} diff --git a/server/task-json/src/test/java/org/apache/james/server/task/json/dto/MemoryReferenceTaskStore.java b/server/task-json/src/test/java/org/apache/james/server/task/json/dto/MemoryReferenceTaskStore.java new file mode 100644 index 0000000..c99435b --- /dev/null +++ b/server/task-json/src/test/java/org/apache/james/server/task/json/dto/MemoryReferenceTaskStore.java @@ -0,0 +1,47 @@ +/** + * ************************************************************* + * Licensed to the Apache Software Foundation (ASF) under one * + * or more contributor license agreements. See the NOTICE file * + * distributed with this work for additional information * + * regarding copyright ownership. The ASF licenses this file * + * to you 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.apache.james.server.task.json.dto; + +import java.util.Map; +import java.util.concurrent.ConcurrentHashMap; +import java.util.concurrent.atomic.AtomicInteger; + +import org.apache.james.task.MemoryReferenceTask; + +public class MemoryReferenceTaskStore { + private final AtomicInteger counter; + private final Map<Integer, MemoryReferenceTask> tasks; + + public MemoryReferenceTaskStore() { + this.counter = new AtomicInteger(0); + this.tasks = new ConcurrentHashMap<>(); + } + + public Integer add(MemoryReferenceTask task) { + Integer reference = counter.getAndIncrement(); + tasks.put(reference, task); + return reference; + } + + public MemoryReferenceTask get(Integer reference) { + return tasks.get(reference); + } +} diff --git a/server/task-json/src/test/java/org/apache/james/server/task/json/dto/TestTaskDTOModules.java b/server/task-json/src/test/java/org/apache/james/server/task/json/dto/TestTaskDTOModules.java index c385b40..db919ec 100644 --- a/server/task-json/src/test/java/org/apache/james/server/task/json/dto/TestTaskDTOModules.java +++ b/server/task-json/src/test/java/org/apache/james/server/task/json/dto/TestTaskDTOModules.java @@ -19,10 +19,13 @@ package org.apache.james.server.task.json.dto; +import java.util.function.Function; + import org.apache.james.json.DTOModule; import org.apache.james.server.task.json.TestTask; import org.apache.james.task.CompletedTask; import org.apache.james.task.FailedTask; +import org.apache.james.task.MemoryReferenceTask; import org.apache.james.task.ThrowingTask; public interface TestTaskDTOModules { @@ -60,4 +63,13 @@ public interface TestTaskDTOModules { .toDTOConverter((task, typeName) -> new ThrowingTaskDTO(typeName)) .typeName("throwing-task") .withFactory(TaskDTOModule::new); + + + Function<MemoryReferenceTaskStore, TaskDTOModule<MemoryReferenceTask, MemoryReferenceTaskDTO>> MEMORY_REFERENCE_TASK_MODULE = store -> DTOModule + .forDomainObject(MemoryReferenceTask.class) + .convertToDTO(MemoryReferenceTaskDTO.class) + .toDomainObjectConverter(dto -> store.get(dto.getReference())) + .toDTOConverter((task, typeName) -> new MemoryReferenceTaskDTO(typeName, store.add(task))) + .typeName("memory-reference-task") + .withFactory(TaskDTOModule::new); } diff --git a/server/task/src/test/java/org/apache/james/task/MemoryReferenceTask.java b/server/task/src/test/java/org/apache/james/task/MemoryReferenceTask.java new file mode 100644 index 0000000..16f2a7e --- /dev/null +++ b/server/task/src/test/java/org/apache/james/task/MemoryReferenceTask.java @@ -0,0 +1,45 @@ +/**************************************************************** + * Licensed to the Apache Software Foundation (ASF) under one * + * or more contributor license agreements. See the NOTICE file * + * distributed with this work for additional information * + * regarding copyright ownership. The ASF licenses this file * + * to you 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.apache.james.task; + +import java.util.Optional; + +public class MemoryReferenceTask implements Task { + public static final String TYPE = "memory-reference-task"; + private final Task task; + + public MemoryReferenceTask(Task task) { + this.task = task; + } + + @Override + public Result run() throws InterruptedException { + return task.run(); + } + + @Override + public String type() { + return TYPE; + } + + @Override + public Optional<TaskExecutionDetails.AdditionalInformation> details() { + return Optional.empty(); + } +} --------------------------------------------------------------------- To unsubscribe, e-mail: [email protected] For additional commands, e-mail: [email protected]
