private void setupOneMessage() { setupOneMessage( ImmutableList.of( new IncomingMessage( DATA.getBytes(StandardCharsets.UTF_8), null, TIMESTAMP, 0, ACK_ID, RECORD_ID))); }
@Test public void checkpointCoderIsSane() { setupOneMessage(ImmutableList.of()); CoderProperties.coderSerializable(primSource.getCheckpointMarkCoder()); // Since we only serialize/deserialize the 'notYetReadIds', and we don't want to make // equals on checkpoints ignore those fields, we'll test serialization and deserialization // of checkpoints in multipleReaders below. }
/** Tests that checkpoints finalized after the reader is closed succeed. */ @Test public void closeWithActiveCheckpoints() throws Exception { setupOneMessage(); PubsubReader reader = primSource.createReader(p.getOptions(), null); reader.start(); PubsubCheckpoint checkpoint = reader.getCheckpointMark(); reader.close(); checkpoint.finalizeCheckpoint(); } }
recid)); setupOneMessage(incoming);
@Test public void extendAck() throws IOException { setupOneMessage(); PubsubReader reader = primSource.createReader(p.getOptions(), null); PubsubTestClient pubsubClient = (PubsubTestClient) reader.getPubsubClient(); // Pull the first message but don't take a checkpoint for it. assertTrue(reader.start()); assertEquals(DATA, data(reader.getCurrent())); // Extend the ack now.addAndGet(55 * 1000); pubsubClient.advance(); assertFalse(reader.advance()); // Extend the ack again now.addAndGet(25 * 1000); pubsubClient.advance(); assertFalse(reader.advance()); // Now ACK the message. PubsubCheckpoint checkpoint = reader.getCheckpointMark(); checkpoint.finalizeCheckpoint(); reader.close(); }
data.getBytes(StandardCharsets.UTF_8), null, TIMESTAMP, 0, ackid, RECORD_ID)); setupOneMessage(incoming); PubsubReader reader = primSource.createReader(p.getOptions(), null);
@Test public void readOneMessage() throws IOException { setupOneMessage(); PubsubReader reader = primSource.createReader(p.getOptions(), null); // Read one message. assertTrue(reader.start()); assertEquals(DATA, data(reader.getCurrent())); assertFalse(reader.advance()); // ACK the message. PubsubCheckpoint checkpoint = reader.getCheckpointMark(); checkpoint.finalizeCheckpoint(); reader.close(); }
@Test public void timeoutAckExtensions() throws IOException { setupOneMessage(); PubsubReader reader = primSource.createReader(p.getOptions(), null); PubsubTestClient pubsubClient = (PubsubTestClient) reader.getPubsubClient(); // Pull the first message but don't take a checkpoint for it. assertTrue(reader.start()); assertEquals(DATA, data(reader.getCurrent())); // Extend the ack. now.addAndGet(55 * 1000); pubsubClient.advance(); assertFalse(reader.advance()); // Let the ack expire. for (int i = 0; i < 3; i++) { now.addAndGet(25 * 1000); pubsubClient.advance(); assertFalse(reader.advance()); } // Wait for resend. now.addAndGet(25 * 1000); pubsubClient.advance(); // Reread the same message. assertTrue(reader.advance()); assertEquals(DATA, data(reader.getCurrent())); // Now ACK the message. PubsubCheckpoint checkpoint = reader.getCheckpointMark(); checkpoint.finalizeCheckpoint(); reader.close(); }
@Test public void timeoutAckAndRereadOneMessage() throws IOException { setupOneMessage(); PubsubReader reader = primSource.createReader(p.getOptions(), null); PubsubTestClient pubsubClient = (PubsubTestClient) reader.getPubsubClient(); assertTrue(reader.start()); assertEquals(DATA, data(reader.getCurrent())); // Let the ACK deadline for the above expire. now.addAndGet(65 * 1000); pubsubClient.advance(); // We'll now receive the same message again. assertTrue(reader.advance()); assertEquals(DATA, data(reader.getCurrent())); assertFalse(reader.advance()); // Now ACK the message. PubsubCheckpoint checkpoint = reader.getCheckpointMark(); checkpoint.finalizeCheckpoint(); reader.close(); }