blob: 23a97bef46f3ead43b3190a69633eefebd5bc667 [file] [log] [blame]
Yuta HIGUCHIeecee552014-10-16 14:09:01 -07001package org.onlab.onos.store.impl;
Yuta HIGUCHI67a527f2014-10-02 22:23:54 -07002
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 HIGUCHI8d143d22014-10-19 23:15:09 -07009import org.onlab.util.KryoNamespace;
Yuta HIGUCHI67a527f2014-10-02 22:23:54 -070010
11import com.google.common.testing.EqualsTester;
12
Yuta HIGUCHI273dcc82014-10-03 00:32:12 -070013/**
14 * Test of {@link Timestamped}.
15 */
Yuta HIGUCHI67a527f2014-10-02 22:23:54 -070016public class TimestampedTest {
17
Yuta HIGUCHI273dcc82014-10-03 00:32:12 -070018 private static final Timestamp TS_1_1 = new MastershipBasedTimestamp(1, 1);
19 private static final Timestamp TS_1_2 = new MastershipBasedTimestamp(1, 2);
20 private static final Timestamp TS_2_1 = new MastershipBasedTimestamp(2, 1);
Yuta HIGUCHI67a527f2014-10-02 22:23:54 -070021
22 @Test
23 public final void testHashCode() {
24 Timestamped<String> a = new Timestamped<>("a", TS_1_1);
25 Timestamped<String> b = new Timestamped<>("b", TS_1_1);
26 assertTrue("value does not impact hashCode",
27 a.hashCode() == b.hashCode());
28 }
29
30 @Test
31 public final void testEquals() {
32 Timestamped<String> a = new Timestamped<>("a", TS_1_1);
33 Timestamped<String> b = new Timestamped<>("b", TS_1_1);
34 assertTrue("value does not impact equality",
35 a.equals(b));
36
37 new EqualsTester()
38 .addEqualityGroup(new Timestamped<>("a", TS_1_1),
39 new Timestamped<>("b", TS_1_1),
40 new Timestamped<>("c", TS_1_1))
41 .addEqualityGroup(new Timestamped<>("a", TS_1_2),
42 new Timestamped<>("b", TS_1_2),
43 new Timestamped<>("c", TS_1_2))
44 .addEqualityGroup(new Timestamped<>("a", TS_2_1),
45 new Timestamped<>("b", TS_2_1),
46 new Timestamped<>("c", TS_2_1))
47 .testEquals();
48
49 }
50
51 @Test
52 public final void testValue() {
53 final Integer n = Integer.valueOf(42);
54 Timestamped<Integer> tsv = new Timestamped<>(n, TS_1_1);
55 assertSame(n, tsv.value());
56
57 }
58
59 @Test(expected = NullPointerException.class)
60 public final void testValueNonNull() {
61 new Timestamped<>(null, TS_1_1);
62 }
63
64 @Test(expected = NullPointerException.class)
65 public final void testTimestampNonNull() {
66 new Timestamped<>("Foo", null);
67 }
68
69 @Test
70 public final void testIsNewer() {
71 Timestamped<String> a = new Timestamped<>("a", TS_1_2);
72 Timestamped<String> b = new Timestamped<>("b", TS_1_1);
73 assertTrue(a.isNewer(b));
74 assertFalse(b.isNewer(a));
75 }
76
77 @Test
78 public final void testKryoSerializable() {
79 final ByteBuffer buffer = ByteBuffer.allocate(1 * 1024 * 1024);
Yuta HIGUCHI8d143d22014-10-19 23:15:09 -070080 final KryoNamespace kryos = KryoNamespace.newBuilder()
Yuta HIGUCHI67a527f2014-10-02 22:23:54 -070081 .register(Timestamped.class,
Yuta HIGUCHI273dcc82014-10-03 00:32:12 -070082 MastershipBasedTimestamp.class)
Yuta HIGUCHI67a527f2014-10-02 22:23:54 -070083 .build();
84
85 Timestamped<String> original = new Timestamped<>("foobar", TS_1_1);
86 kryos.serialize(original, buffer);
87 buffer.flip();
88 Timestamped<String> copy = kryos.deserialize(buffer);
89
90 new EqualsTester()
91 .addEqualityGroup(original, copy)
92 .testEquals();
93 }
94}