public void testTruncatedTranslog() throws Exception { try { Path translogFile = getDataPath("/org/elasticsearch/index/translog/translog-v1-truncated.binary"); assertThat("test file should exist", Files.exists(translogFile), equalTo(true)); try (ImmutableTranslogReader reader = openReader(translogFile, 0)) { try (final Translog.Snapshot snapshot = reader.newSnapshot()) { while (snapshot.next() != null) {} } } fail("should have thrown an exception about the body being truncated"); } catch (TranslogCorruptedException e) { assertThat( "translog truncated: " + e.getMessage(), e.getMessage().contains("operation size is corrupted must be"), equalTo(true)); } }
public void testCorruptedTranslogs() throws Exception { try { Path translogFile = getDataPath("/org/elasticsearch/index/translog/translog-v1-corrupted-magic.binary"); assertThat("test file should exist", Files.exists(translogFile), equalTo(true)); openReader(translogFile, 0); fail("should have thrown an exception about the header being corrupt"); } catch (TranslogCorruptedException e) { assertThat( "translog corruption from header: " + e.getMessage(), e.getMessage() .contains("translog looks like version 1 or later, but has corrupted header"), equalTo(true)); } try { Path translogFile = getDataPath("/org/elasticsearch/index/translog/translog-invalid-first-byte.binary"); assertThat("test file should exist", Files.exists(translogFile), equalTo(true)); openReader(translogFile, 0); fail("should have thrown an exception about the header being corrupt"); } catch (TranslogCorruptedException e) { assertThat( "translog corruption from header: " + e.getMessage(), e.getMessage() .contains("Invalid first byte in translog file, got: 1, expected 0x00 or 0x3f"), equalTo(true)); } try { Path translogFile = getDataPath("/org/elasticsearch/index/translog/translog-v1-corrupted-body.binary"); assertThat("test file should exist", Files.exists(translogFile), equalTo(true)); try (ImmutableTranslogReader reader = openReader(translogFile, 0)) { try (final Translog.Snapshot snapshot = reader.newSnapshot()) { while (snapshot.next() != null) {} } } fail("should have thrown an exception about the body being corrupted"); } catch (TranslogCorruptedException e) { assertThat( "translog corruption from body: " + e.getMessage(), e.getMessage().contains("translog corruption while reading from stream"), equalTo(true)); } }