package uk.ac.ic.wlgitbridge.snapshot.push;
import org.junit.Assert;
import org.junit.Test;
import uk.ac.ic.wlgitbridge.snapshot.push.exception.InternalErrorException;
import uk.ac.ic.wlgitbridge.snapshot.push.exception.SnapshotPostException;
import uk.ac.ic.wlgitbridge.snapshot.push.exception.UnexpectedPostbackException;
import static org.junit.Assert.*;
/**
* Created by winston on 05/04/2016.
*/
public class PostbackManagerTest {
private final PostbackManager postbackManager = new PostbackManager();
@Test
public void testRaceWithVersionId()
throws UnexpectedPostbackException,
SnapshotPostException {
String key = postbackManager.makeKeyForProject("proj");
postbackManager.postVersionIDForProject("proj", 1, key);
int versionId = postbackManager.waitForVersionIdOrThrow("proj");
assertEquals("Version id didn't match posted", 1, versionId);
}
@Test
public void testRaceWithException() throws UnexpectedPostbackException,
SnapshotPostException {
String key = postbackManager.makeKeyForProject("proj");
InternalErrorException ex = new InternalErrorException();
postbackManager.postExceptionForProject("proj", ex, key);
try {
postbackManager.waitForVersionIdOrThrow("proj");
} catch (InternalErrorException e) {
Assert.assertSame("Wrong exception was thrown", ex, e);
return;
}
Assert.fail("Exception wasn't thrown as required");
}
@Test
public void testTableConsistency() throws UnexpectedPostbackException,
SnapshotPostException {
String key1 = postbackManager.makeKeyForProject("proj1");
assertEquals(1, postbackManager.postbackContentsTable.size());
String key2 = postbackManager.makeKeyForProject("proj2");
assertEquals(2, postbackManager.postbackContentsTable.size());
postbackManager.postVersionIDForProject("proj1", 1, key1);
postbackManager.postVersionIDForProject("proj2", 1, key2);
assertEquals(2, postbackManager.postbackContentsTable.size());
postbackManager.waitForVersionIdOrThrow("proj1");
assertEquals(1, postbackManager.postbackContentsTable.size());
postbackManager.waitForVersionIdOrThrow("proj2");
Assert.assertTrue(postbackManager.postbackContentsTable.isEmpty());
}
}