1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18 package org.apache.omid.tso.client;
19
20 import org.apache.phoenix.thirdparty.com.google.common.collect.Sets;
21
22 import org.apache.omid.committable.CommitTable;
23 import org.apache.omid.committable.InMemoryCommitTable;
24 import org.apache.omid.tso.util.DummyCellIdImpl;
25 import org.testng.annotations.Test;
26
27 import java.util.HashSet;
28 import java.util.concurrent.ExecutionException;
29
30 import static org.testng.Assert.assertEquals;
31 import static org.testng.Assert.assertTrue;
32 import static org.testng.Assert.fail;
33
34 public class TestMockTSOClient {
35
36 final static public CellId c1 = new DummyCellIdImpl(0xdeadbeefL);
37 final static public CellId c2 = new DummyCellIdImpl(-0xfeedcafeL);
38
39 @Test(timeOut = 10_000)
40 public void testConflicts() throws Exception {
41 CommitTable commitTable = new InMemoryCommitTable();
42 TSOProtocol client = new MockTSOClient(commitTable.getWriter());
43
44 long tr1 = client.getNewStartTimestamp().get();
45 long tr2 = client.getNewStartTimestamp().get();
46
47 client.commit(tr1, Sets.newHashSet(c1), new HashSet<CellId>()).get();
48
49 try {
50 client.commit(tr2, Sets.newHashSet(c1, c2), new HashSet<CellId>()).get();
51 fail("Shouldn't have committed");
52 } catch (ExecutionException ee) {
53 assertEquals(ee.getCause().getClass(), AbortException.class, "Should have aborted");
54 }
55 }
56
57 @Test(timeOut = 10_000)
58 public void testWatermarkUpdate() throws Exception {
59 CommitTable commitTable = new InMemoryCommitTable();
60 TSOProtocol client = new MockTSOClient(commitTable.getWriter());
61 CommitTable.Client commitTableClient = commitTable.getClient();
62
63 long tr1 = client.getNewStartTimestamp().get();
64 client.commit(tr1, Sets.newHashSet(c1), new HashSet<CellId>()).get();
65
66 long initWatermark = commitTableClient.readLowWatermark().get();
67
68 long tr2 = client.getNewStartTimestamp().get();
69 client.commit(tr2, Sets.newHashSet(c1), new HashSet<CellId>()).get();
70
71 long newWatermark = commitTableClient.readLowWatermark().get();
72 assertTrue(newWatermark > initWatermark, "new low watermark should be bigger");
73 }
74 }