blob: deb3e4da7c6b02ed06440e6dda844278863fc75d [file] [log] [blame]
Yuta HIGUCHI67a527f2014-10-02 22:23:54 -07001package org.onlab.onos.store.common.impl;
2
3import static org.junit.Assert.*;
4
5import java.nio.ByteBuffer;
6
Yuta HIGUCHI67a527f2014-10-02 22:23:54 -07007import org.junit.Test;
8import org.onlab.onos.store.Timestamp;
Yuta HIGUCHI8ce08732014-10-11 10:40:45 -07009import org.onlab.onos.store.impl.MastershipBasedTimestamp;
Yuta HIGUCHI67a527f2014-10-02 22:23:54 -070010import org.onlab.util.KryoPool;
11
12import com.google.common.testing.EqualsTester;
13
Yuta HIGUCHI273dcc82014-10-03 00:32:12 -070014/**
15 * Test of {@link Timestamped}.
16 */
Yuta HIGUCHI67a527f2014-10-02 22:23:54 -070017public class TimestampedTest {
18
Yuta HIGUCHI273dcc82014-10-03 00:32:12 -070019 private static final Timestamp TS_1_1 = new MastershipBasedTimestamp(1, 1);
20 private static final Timestamp TS_1_2 = new MastershipBasedTimestamp(1, 2);
21 private static final Timestamp TS_2_1 = new MastershipBasedTimestamp(2, 1);
Yuta HIGUCHI67a527f2014-10-02 22:23:54 -070022
23 @Test
24 public final void testHashCode() {
25 Timestamped<String> a = new Timestamped<>("a", TS_1_1);
26 Timestamped<String> b = new Timestamped<>("b", TS_1_1);
27 assertTrue("value does not impact hashCode",
28 a.hashCode() == b.hashCode());
29 }
30
31 @Test
32 public final void testEquals() {
33 Timestamped<String> a = new Timestamped<>("a", TS_1_1);
34 Timestamped<String> b = new Timestamped<>("b", TS_1_1);
35 assertTrue("value does not impact equality",
36 a.equals(b));
37
38 new EqualsTester()
39 .addEqualityGroup(new Timestamped<>("a", TS_1_1),
40 new Timestamped<>("b", TS_1_1),
41 new Timestamped<>("c", TS_1_1))
42 .addEqualityGroup(new Timestamped<>("a", TS_1_2),
43 new Timestamped<>("b", TS_1_2),
44 new Timestamped<>("c", TS_1_2))
45 .addEqualityGroup(new Timestamped<>("a", TS_2_1),
46 new Timestamped<>("b", TS_2_1),
47 new Timestamped<>("c", TS_2_1))
48 .testEquals();
49
50 }
51
52 @Test
53 public final void testValue() {
54 final Integer n = Integer.valueOf(42);
55 Timestamped<Integer> tsv = new Timestamped<>(n, TS_1_1);
56 assertSame(n, tsv.value());
57
58 }
59
60 @Test(expected = NullPointerException.class)
61 public final void testValueNonNull() {
62 new Timestamped<>(null, TS_1_1);
63 }
64
65 @Test(expected = NullPointerException.class)
66 public final void testTimestampNonNull() {
67 new Timestamped<>("Foo", null);
68 }
69
70 @Test
71 public final void testIsNewer() {
72 Timestamped<String> a = new Timestamped<>("a", TS_1_2);
73 Timestamped<String> b = new Timestamped<>("b", TS_1_1);
74 assertTrue(a.isNewer(b));
75 assertFalse(b.isNewer(a));
76 }
77
78 @Test
79 public final void testKryoSerializable() {
80 final ByteBuffer buffer = ByteBuffer.allocate(1 * 1024 * 1024);
81 final KryoPool kryos = KryoPool.newBuilder()
82 .register(Timestamped.class,
Yuta HIGUCHI273dcc82014-10-03 00:32:12 -070083 MastershipBasedTimestamp.class)
Yuta HIGUCHI67a527f2014-10-02 22:23:54 -070084 .build();
85
86 Timestamped<String> original = new Timestamped<>("foobar", TS_1_1);
87 kryos.serialize(original, buffer);
88 buffer.flip();
89 Timestamped<String> copy = kryos.deserialize(buffer);
90
91 new EqualsTester()
92 .addEqualityGroup(original, copy)
93 .testEquals();
94 }
95}