/* * Copyright (c) 2016, PostgreSQL Global Development Group * See the LICENSE file in the project root for more information. */ package org.postgresql.replication; import static org.hamcrest.CoreMatchers.equalTo; import static org.hamcrest.CoreMatchers.not; import static org.hamcrest.CoreMatchers.notNullValue; import static org.junit.Assert.assertThat; import org.junit.Test; public class LogSequenceNumberTest { @Test public void testNotNullWhenCreateFromStr() throws Exception { LogSequenceNumber result = LogSequenceNumber.valueOf("0/15D68C50"); assertThat(result, notNullValue()); } @Test public void testParseNotValidLSNStr() throws Exception { LogSequenceNumber result = LogSequenceNumber.valueOf("15D68C55"); assertThat(result, equalTo(LogSequenceNumber.INVALID_LSN)); } @Test public void testParseLSNFromStringAndConvertToLong() throws Exception { LogSequenceNumber result = LogSequenceNumber.valueOf("16/3002D50"); assertThat("64-bit number use in replication protocol, " + "that why we should can convert string represent LSN to long", result.asLong(), equalTo(94539623760L) ); } @Test public void testConvertNumericLSNToString() throws Exception { LogSequenceNumber result = LogSequenceNumber.valueOf(94539623760L); assertThat("64-bit number use in replication protocol, " + "but more readable standard format use in logs where each 8-bit print in hex form via slash", result.asString(), equalTo("16/3002D50") ); } @Test public void testConvertNumericLSNToString_2() throws Exception { LogSequenceNumber result = LogSequenceNumber.valueOf(366383352L); assertThat("64-bit number use in replication protocol, " + "but more readable standard format use in logs where each 8-bit print in hex form via slash", result.asString(), equalTo("0/15D690F8") ); } @Test public void testEqualLSN() throws Exception { LogSequenceNumber first = LogSequenceNumber.valueOf("0/15D690F8"); LogSequenceNumber second = LogSequenceNumber.valueOf("0/15D690F8"); assertThat(first, equalTo(second)); } @Test public void testEqualLSNCreateByDifferentWay() throws Exception { LogSequenceNumber first = LogSequenceNumber.valueOf("0/15D690F8"); LogSequenceNumber second = LogSequenceNumber.valueOf(366383352L); assertThat("LSN creates as 64-bit number and as string where each 8-bit print in hex form " + "via slash represent same position in WAL should be equals", first, equalTo(second) ); } @Test public void testNotEqualLSN() throws Exception { LogSequenceNumber first = LogSequenceNumber.valueOf("0/15D690F8"); LogSequenceNumber second = LogSequenceNumber.valueOf("0/15D68C50"); assertThat(first, not(equalTo(second))); } @Test public void testDifferentLSNHaveDifferentHash() throws Exception { LogSequenceNumber first = LogSequenceNumber.valueOf("0/15D690F8"); LogSequenceNumber second = LogSequenceNumber.valueOf("0/15D68C50"); assertThat(first.hashCode(), not(equalTo(second.hashCode()))); } @Test public void testSameLSNHaveSameHash() throws Exception { LogSequenceNumber first = LogSequenceNumber.valueOf("0/15D690F8"); LogSequenceNumber second = LogSequenceNumber.valueOf("0/15D690F8"); assertThat(first.hashCode(), equalTo(second.hashCode())); } }