1 package com.atlassian.scheduler.config;
2
3 import com.google.common.collect.ImmutableMap;
4 import org.junit.Test;
5
6 import java.io.Serializable;
7 import java.util.Collections;
8 import java.util.Date;
9 import java.util.Map;
10
11 import static com.atlassian.scheduler.config.JobConfig.NO_PARAMETERS;
12 import static com.atlassian.scheduler.config.RunMode.RUN_LOCALLY;
13 import static com.atlassian.scheduler.config.RunMode.RUN_ONCE_PER_CLUSTER;
14 import static com.atlassian.scheduler.config.Schedule.forInterval;
15 import static com.atlassian.scheduler.config.Schedule.runOnce;
16 import static com.google.common.collect.Maps.newHashMap;
17 import static org.hamcrest.Matchers.equalTo;
18 import static org.hamcrest.Matchers.is;
19 import static org.hamcrest.Matchers.not;
20 import static org.junit.Assert.assertEquals;
21 import static org.junit.Assert.assertNotSame;
22 import static org.junit.Assert.assertSame;
23 import static org.junit.Assert.assertThat;
24 import static org.junit.Assert.fail;
25
26
27
28
29 public class JobConfigTest {
30 private static final JobRunnerKey KEY = JobRunnerKey.of("test.job");
31
32 @Test
33 public void testDefaults() {
34 final JobConfig config = JobConfig.forJobRunnerKey(KEY);
35 assertEquals(KEY, config.getJobRunnerKey());
36 assertEquals(RUN_ONCE_PER_CLUSTER, config.getRunMode());
37 assertEquals(runOnce(null), config.getSchedule());
38 assertEquals(NO_PARAMETERS, config.getParameters());
39 }
40
41 @Test
42 public void testWithRunMode() {
43 final JobConfig original = JobConfig.forJobRunnerKey(KEY);
44 final JobConfig modified = original.withRunMode(RUN_LOCALLY);
45 assertNotSame(original, modified);
46 assertThat(modified, not(equalTo(original)));
47 assertThat(original.getRunMode(), is(RUN_ONCE_PER_CLUSTER));
48 assertThat(modified.getRunMode(), is(RUN_LOCALLY));
49 }
50
51 @Test
52 public void testWithSchedule() {
53 final Schedule schedule = forInterval(42L, new Date());
54 final JobConfig original = JobConfig.forJobRunnerKey(KEY);
55 final JobConfig modified = original.withSchedule(schedule);
56 assertNotSame(original, modified);
57 assertThat(modified, not(equalTo(original)));
58 assertThat(original.getSchedule(), is(runOnce(null)));
59 assertThat(modified.getSchedule(), is(schedule));
60 }
61
62 @Test
63 public void testWithParametersNull() {
64 final Map<String, Serializable> parameters = JobConfig.forJobRunnerKey(KEY)
65 .withParameters(null)
66 .getParameters();
67 assertEquals(NO_PARAMETERS, parameters);
68 assertImmutable(parameters);
69 }
70
71 @Test
72 public void testWithParametersImmutableMap() {
73
74
75
76 final Map<String, Serializable> parameters = ImmutableMap.copyOf(mutableParameters());
77 final JobConfig original = JobConfig.forJobRunnerKey(KEY);
78 final JobConfig modified = original.withParameters(parameters);
79 assertThat(modified, not(equalTo(original)));
80 assertSame(parameters, modified.getParameters());
81 }
82
83 @Test
84 public void testWithParametersUnmodifiableMap() {
85
86
87
88
89 final Map<String, Serializable> modifiableMap = mutableParameters();
90 final Map<String, Serializable> unmodifiableMap = Collections.unmodifiableMap(modifiableMap);
91 final JobConfig original = JobConfig.forJobRunnerKey(KEY);
92 final JobConfig modified = original.withParameters(unmodifiableMap);
93 assertThat(modified, not(equalTo(original)));
94 assertThat(modified.getParameters(), equalTo(unmodifiableMap));
95 assertNotSame(unmodifiableMap, modified.getParameters());
96 assertImmutable(modified.getParameters());
97 modifiableMap.put("Changed", "It!");
98 assertThat(modified.getParameters(), equalTo(mutableParameters()));
99 assertThat(modified.getParameters(), not(equalTo(unmodifiableMap)));
100 }
101
102 @Test
103 public void testWithParametersNormalMap() {
104 final Map<String, Serializable> modifiableMap = mutableParameters();
105 final JobConfig original = JobConfig.forJobRunnerKey(KEY);
106 final JobConfig modified = original.withParameters(modifiableMap);
107 assertThat(modified, not(equalTo(original)));
108 assertThat(modified.getParameters(), equalTo(modifiableMap));
109 assertImmutable(modified.getParameters());
110 modifiableMap.put("Changed", "It!");
111 assertThat(modified.getParameters(), equalTo(mutableParameters()));
112 assertThat(modified.getParameters(), not(equalTo(modifiableMap)));
113 }
114
115
116 private static void assertImmutable(Map<String, Serializable> map) {
117 try {
118 map.put("This put should fail", "because the map should be immutable");
119 fail("Supplied map was mutable: " + map);
120 } catch (UnsupportedOperationException uoe) {
121
122 }
123 }
124
125 private static Map<String, Serializable> mutableParameters() {
126 final Map<String, Serializable> map = newHashMap();
127 map.put("Hello", 42L);
128 map.put("World", true);
129 return map;
130 }
131 }