@Test public void testUpdateDigest() throws Exception { MessageDigest digest1 = MessageDigest.getInstance("md5"); MessageDigest digest2 = MessageDigest.getInstance("md5"); CounterContext.ContextState state = CounterContext.ContextState.allocate(4, 2); state.writeElement(NodeId.fromInt(1), 4L, 4L); state.writeElement(NodeId.fromInt(2), 4L, 4L, true); state.writeElement(NodeId.fromInt(3), 4L, 4L); state.writeElement(NodeId.fromInt(4), 4L, 4L, true); CounterColumn original = new CounterColumn(ByteBufferUtil.bytes("x"), state.context, 1L); CounterColumn cleared = new CounterColumn(ByteBufferUtil.bytes("x"), cc.clearAllDelta(state.context), 1L); original.updateDigest(digest1); cleared.updateDigest(digest2); assert Arrays.equals(digest1.digest(), digest2.digest()); }
@Test public void testCreate() throws UnknownHostException { long delta = 3L; CounterUpdateColumn cuc = new CounterUpdateColumn(ByteBufferUtil.bytes("x"), delta, 1L); CounterColumn column = cuc.localCopy(Table.open("Keyspace5").getColumnFamilyStore("Counter1")); assert delta == column.total(); assert 1 == column.value().getShort(0); assert 0 == column.value().getShort(2); assert NodeId.wrap(column.value(), 4).isLocalId(); assert 1L == column.value().getLong(4 + 0 * stepLength + idLength); assert delta == column.value().getLong(4 + 0 * stepLength + idLength + clockLength); }
@Test public void testSerializeDeserialize() throws IOException { CounterContext.ContextState state = CounterContext.ContextState.allocate(4, 2); state.writeElement(NodeId.fromInt(1), 4L, 4L); state.writeElement(NodeId.fromInt(2), 4L, 4L, true); state.writeElement(NodeId.fromInt(3), 4L, 4L); state.writeElement(NodeId.fromInt(4), 4L, 4L, true); CounterColumn original = new CounterColumn(ByteBufferUtil.bytes("x"), state.context, 1L); DataOutputBuffer bufOut = new DataOutputBuffer(); Column.serializer().serialize(original, bufOut); byte[] serialized = bufOut.getData(); ByteArrayInputStream bufIn = new ByteArrayInputStream(serialized, 0, serialized.length); CounterColumn deserialized = (CounterColumn) Column.serializer().deserialize(new DataInputStream(bufIn)); assert original.equals(deserialized); bufIn = new ByteArrayInputStream(serialized, 0, serialized.length); CounterColumn deserializedOnRemote = (CounterColumn) Column.serializer().deserialize(new DataInputStream(bufIn), null, true); assert deserializedOnRemote.name().equals(original.name()); assert deserializedOnRemote.total() == original.total(); assert deserializedOnRemote.value().equals(cc.clearAllDelta(original.value())); assert deserializedOnRemote.timestamp() == deserialized.timestamp(); assert deserializedOnRemote.timestampOfLastDelete() == deserialized.timestampOfLastDelete(); }
@Test public void testDiff() throws UnknownHostException { ContextState left; ContextState right; CounterColumn leftCol; CounterColumn rightCol; // timestamp leftCol = new CounterColumn(ByteBufferUtil.bytes("x"), 0, 1L); rightCol = new CounterColumn(ByteBufferUtil.bytes("x"), 0, 2L); assert rightCol == leftCol.diff(rightCol); assert null == rightCol.diff(leftCol); // timestampOfLastDelete leftCol = new CounterColumn(ByteBufferUtil.bytes("x"), 0, 1L, 1L); rightCol = new CounterColumn(ByteBufferUtil.bytes("x"), 0, 1L, 2L); assert rightCol == leftCol.diff(rightCol); assert null == rightCol.diff(leftCol); // equality: equal nodes, all counts same left = ContextState.allocate(3, 0); left.writeElement(NodeId.fromInt(3), 3L, 0L); left.writeElement(NodeId.fromInt(6), 2L, 0L); left.writeElement(NodeId.fromInt(9), 1L, 0L); right = new ContextState(ByteBufferUtil.clone(left.context), 2); leftCol = new CounterColumn(ByteBufferUtil.bytes("x"), left.context, 1L); rightCol = new CounterColumn(ByteBufferUtil.bytes("x"), right.context, 1L); assert null == leftCol.diff(rightCol); // greater than: left has superset of nodes (counts equal) left = ContextState.allocate(4, 0); left.writeElement(NodeId.fromInt(3), 3L, 0L); left.writeElement(NodeId.fromInt(6), 2L, 0L); left.writeElement(NodeId.fromInt(9), 1L, 0L); left.writeElement(NodeId.fromInt(12), 0L, 0L); right = ContextState.allocate(3, 0); right.writeElement(NodeId.fromInt(3), 3L, 0L); right.writeElement(NodeId.fromInt(6), 2L, 0L); right.writeElement(NodeId.fromInt(9), 1L, 0L); leftCol = new CounterColumn(ByteBufferUtil.bytes("x"), left.context, 1L); rightCol = new CounterColumn(ByteBufferUtil.bytes("x"), right.context, 1L); assert null == leftCol.diff(rightCol); // less than: right has subset of nodes (counts equal) assert leftCol == rightCol.diff(leftCol); // disjoint: right and left have disjoint node sets left = ContextState.allocate(3, 0); left.writeElement(NodeId.fromInt(3), 1L, 0L); left.writeElement(NodeId.fromInt(4), 1L, 0L); left.writeElement(NodeId.fromInt(9), 1L, 0L); right = ContextState.allocate(3, 0); right.writeElement(NodeId.fromInt(3), 1L, 0L); right.writeElement(NodeId.fromInt(6), 1L, 0L); right.writeElement(NodeId.fromInt(9), 1L, 0L); leftCol = new CounterColumn(ByteBufferUtil.bytes("x"), left.context, 1L); rightCol = new CounterColumn(ByteBufferUtil.bytes("x"), right.context, 1L); assert rightCol == leftCol.diff(rightCol); assert leftCol == rightCol.diff(leftCol); }