1 package net.pterodactylus.rhynodge.states;
4 import java.io.IOException;
5 import java.util.Optional;
6 import javax.annotation.Nonnull;
8 import net.pterodactylus.rhynodge.State;
9 import net.pterodactylus.rhynodge.states.StateManager.StateDirectory;
11 import com.fasterxml.jackson.annotation.JsonProperty;
12 import com.google.common.io.Files;
13 import org.hamcrest.Matchers;
14 import org.junit.BeforeClass;
15 import org.junit.Rule;
16 import org.junit.Test;
17 import org.junit.rules.TemporaryFolder;
19 import static com.google.common.base.Charsets.UTF_8;
20 import static com.google.common.base.Objects.equal;
21 import static org.apache.log4j.Level.OFF;
22 import static org.apache.log4j.Logger.getLogger;
23 import static org.hamcrest.MatcherAssert.assertThat;
24 import static org.hamcrest.Matchers.is;
27 * Unit test for {@link StateManager}.
29 * @author <a href="mailto:bombe@pterodactylus.net">David ‘Bombe’ Roden</a>
31 public class StateManagerTest {
34 public TemporaryFolder tempFolder = new TemporaryFolder();
35 private final File statePath;
36 private final StateManager stateManager;
39 public static void deactivateLogging() {
40 getLogger(StateManager.class).setLevel(OFF);
43 public StateManagerTest() throws IOException {
45 statePath = tempFolder.newFolder();
46 stateManager = new StateManager(StateDirectory.of(statePath.getPath()));
50 public void successStateCanBeRestored() {
51 TestState testState = new TestState();
52 stateManager.saveState("test", testState);
53 Optional<State> restoredState = stateManager.loadLastState("test");
54 assertThat(restoredState.get(), Matchers.<State>is(testState));
55 restoredState = stateManager.loadLastSuccessfulState("test");
56 assertThat(restoredState.get(), Matchers.<State>is(testState));
60 public void failStateIsNotSavedAsSuccessfulState() {
61 TestState testState = new TestState(false);
62 stateManager.saveState("test", testState);
63 Optional<State> restoredState = stateManager.loadLastState("test");
64 assertThat(restoredState.get(), Matchers.<State>is(testState));
65 restoredState = stateManager.loadLastSuccessfulState("test");
66 assertThat(restoredState.isPresent(), is(false));
70 public void invalidJsonFileCanNotBeLoaded() throws IOException {
71 Files.write("not json", new File(statePath, "test.last.json"), UTF_8);
72 Optional<State> restoredState = stateManager.loadLastState("test");
73 assertThat(restoredState.isPresent(), is(false));
77 public void jsonWithInvalidFieldsCanNotBeLoaded() throws IOException {
78 Files.write("{\"not\":\"json\"}", new File(statePath, "test.last.json"), UTF_8);
79 Optional<State> restoredState = stateManager.loadLastState("test");
80 assertThat(restoredState.isPresent(), is(false));
84 public void unmappableStateCanBeSavedButNotLoaded() throws IOException {
85 InvalidState invalidState = new InvalidState();
86 stateManager.saveState("test", invalidState);
87 assertThat(new File(statePath, "test.last.json").exists(), is(false));
90 public static class TestState extends AbstractState {
96 public TestState(boolean success) {
102 protected String plainText() {
108 public static class InvalidState extends AbstractState {
111 private final Object someObject = new Object();
115 protected String plainText() {