-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathJobsTest.java
More file actions
121 lines (103 loc) · 3.92 KB
/
Copy pathJobsTest.java
File metadata and controls
121 lines (103 loc) · 3.92 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
package org.javawebstack.jobs;
import org.javawebstack.jobs.handler.JobExceptionHandler;
import org.javawebstack.jobs.scheduler.JobScheduler;
import org.javawebstack.jobs.scheduler.inmemory.InMemoryJobScheduler;
import org.javawebstack.jobs.scheduler.model.JobScheduleEntry;
import org.javawebstack.jobs.serialization.JsonJobSerializer;
import org.javawebstack.jobs.storage.JobStorage;
import org.javawebstack.jobs.storage.inmemory.InMemoryJobStorage;
import org.javawebstack.jobs.storage.model.JobInfo;
import org.javawebstack.jobs.storage.model.RecurringJobInfo;
import org.javawebstack.jobs.test.jobs.NoOpJob;
import org.junit.jupiter.api.BeforeAll;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.TestInstance;
import java.time.Instant;
import java.util.Date;
import java.util.UUID;
import static org.junit.jupiter.api.Assertions.*;
@TestInstance(TestInstance.Lifecycle.PER_CLASS)
public class JobsTest {
private static final String TEST_QUEUE = "test";
JobStorage storage;
JobScheduler scheduler;
Jobs jobs;
@BeforeEach
public void up() {
storage = new InMemoryJobStorage();
scheduler = new InMemoryJobScheduler();
jobs = new Jobs(
storage,
scheduler,
new JsonJobSerializer()
);
}
@Test
public void testAddExceptionHandler() {
assertEquals(0, jobs.getExceptionHandlers().size());
jobs.addExceptionHandler((context, t) -> {
t.printStackTrace();
});
assertEquals(1, jobs.getExceptionHandlers().size());
}
@Test
public void testEnqueueJob() {
UUID id = jobs.enqueue(TEST_QUEUE, new NoOpJob());
assertEnqueued(id);
}
@Test
public void testEnqueueJobTypeAndPayload() {
UUID id = jobs.enqueue(TEST_QUEUE, NoOpJob.class.getName(), "{}");
assertEnqueued(id);
}
private void assertEnqueued(UUID id) {
assertNotNull(id);
JobInfo info = storage.getJob(id);
assertNotNull(info);
assertTrue(scheduler.getQueueEntries(TEST_QUEUE).contains(id));
}
@Test
public void testScheduleJob() {
Date at = Date.from(Instant.now().plusSeconds(3600));
UUID id = jobs.schedule(TEST_QUEUE, at, new NoOpJob());
assertScheduled(id, at);
}
@Test
public void testScheduleJobTypeAndPayload() {
Date at = Date.from(Instant.now().plusSeconds(3600));
UUID id = jobs.schedule(TEST_QUEUE, at, NoOpJob.class.getName(), "{}");
assertScheduled(id, at);
}
@Test
public void testScheduleRecurrentlyNoPayload() {
UUID id = jobs.scheduleRecurrently(TEST_QUEUE, "*/5 * * * *", new NoOpJob());
assertRecurrentlyScheduled(id);
}
@Test
public void testScheduleRecurrently() {
UUID id = jobs.scheduleRecurrently(TEST_QUEUE, "*/5 * * * *", NoOpJob.class.getName(), "{}");
assertRecurrentlyScheduled(id);
}
@Test
public void successfulDequeue() {
int oldSize = jobs.getScheduler().getQueueEntries(TEST_QUEUE).size();
UUID id = jobs.enqueue(TEST_QUEUE, NoOpJob.class.getName(), "{}");
assertEquals(oldSize + 1, jobs.getScheduler().getQueueEntries(TEST_QUEUE).size());
jobs.dequeue(id);
assertEquals(oldSize, jobs.getScheduler().getQueueEntries(TEST_QUEUE).size());
}
private void assertScheduled(UUID id, Date at) {
assertNotNull(id);
JobInfo info = storage.getJob(id);
assertNotNull(info);
JobScheduleEntry entry = scheduler.getScheduleEntries("test").stream().filter(e -> e.getJobId().equals(id)).findFirst().orElse(null);
assertNotNull(entry);
assertEquals(at.getTime() / 1000, entry.getAt().getTime() / 1000);
}
private void assertRecurrentlyScheduled(UUID id) {
assertNotNull(id);
RecurringJobInfo info = storage.getRecurringJob(id);
assertNotNull(info);
}
}