use of org.zalando.nakadi.view.SubscriptionCursor in project nakadi by zalando.
the class HilaAT method whenPatchThenCursorsAreInitializedToDefault.
@Test(timeout = 15000)
public void whenPatchThenCursorsAreInitializedToDefault() throws Exception {
final EventType et = createEventType();
publishEvents(et.getName(), 10, i -> "{\"foo\": \"bar\"}");
Thread.sleep(1000L);
final Subscription s = createSubscription(RandomSubscriptionBuilder.builder().withEventType(et.getName()).withStartFrom(END).buildSubscriptionBase());
given().body(MAPPER.writeValueAsString(new ItemsWrapper<>(Collections.emptyList()))).contentType(JSON).patch("/subscriptions/{id}/cursors", s.getId()).then().statusCode(SC_NO_CONTENT);
final ItemsWrapper<SubscriptionCursor> subscriptionCursors = MAPPER.readValue(given().get("/subscriptions/{id}/cursors", s.getId()).getBody().asString(), new TypeReference<ItemsWrapper<SubscriptionCursor>>() {
});
final List<EventTypePartitionView> etStats = MAPPER.readValue(given().get("/event-types/{et}/partitions", et.getName()).getBody().asString(), new TypeReference<List<EventTypePartitionView>>() {
});
Assert.assertEquals(subscriptionCursors.getItems().size(), etStats.size());
subscriptionCursors.getItems().forEach(sCursor -> {
final boolean offsetSame = etStats.stream().anyMatch(ss -> ss.getPartitionId().equals(sCursor.getPartition()) && ss.getNewestAvailableOffset().equals(sCursor.getOffset()));
// Check that after patch cursors are the same as END
Assert.assertTrue(offsetSame);
});
}
use of org.zalando.nakadi.view.SubscriptionCursor in project nakadi by zalando.
the class HilaAT method whenCommitVeryFirstEventThenOk.
@Test(timeout = 5000)
public void whenCommitVeryFirstEventThenOk() throws Exception {
publishEvent(eventType.getName(), "{\"foo\":\"bar\"}");
// create session, read from subscription and wait for events to be sent
final TestStreamingClient client = TestStreamingClient.create(subscription.getId()).start();
waitFor(() -> assertThat(client.getBatches(), not(empty())));
// commit and check that status is 204
final int commitResult = commitCursors(subscription.getId(), ImmutableList.of(new SubscriptionCursor("0", "0", eventType.getName(), "token")), client.getSessionId());
assertThat(commitResult, equalTo(SC_NO_CONTENT));
}
use of org.zalando.nakadi.view.SubscriptionCursor in project nakadi by zalando.
the class HilaAT method whenResetCursorsThenStreamFromResetCursorOffset.
@Test(timeout = 15000)
public void whenResetCursorsThenStreamFromResetCursorOffset() throws Exception {
publishEvents(eventType.getName(), 20, i -> "{\"foo\":\"bar\"}");
final TestStreamingClient client1 = TestStreamingClient.create(subscription.getId()).start();
waitFor(() -> assertThat(client1.getBatches(), hasSize(10)));
int statusCode = commitCursors(subscription.getId(), Collections.singletonList(client1.getBatches().get(9).getCursor()), client1.getSessionId());
Assert.assertEquals(SC_NO_CONTENT, statusCode);
final List<SubscriptionCursor> resetCursors = Collections.singletonList(client1.getBatches().get(4).getCursor());
statusCode = given().body(MAPPER.writeValueAsString(new ItemsWrapper<>(resetCursors))).contentType(JSON).patch("/subscriptions/{id}/cursors", subscription.getId()).getStatusCode();
Assert.assertEquals(SC_NO_CONTENT, statusCode);
Assert.assertFalse(client1.isRunning());
Assert.assertTrue(client1.getBatches().stream().anyMatch(streamBatch -> streamBatch.getMetadata() != null && streamBatch.getMetadata().getDebug().equals("Resetting subscription cursors")));
final TestStreamingClient client2 = TestStreamingClient.create(subscription.getId()).start();
waitFor(() -> assertThat(client2.getBatches(), hasSize(10)));
Assert.assertEquals("001-0001-000000000000000005", client2.getBatches().get(0).getCursor().getOffset());
}
use of org.zalando.nakadi.view.SubscriptionCursor in project nakadi by zalando.
the class HilaAT method whenWindowSizeIsSetItIsConsidered.
@Test(timeout = 15000)
public void whenWindowSizeIsSetItIsConsidered() throws Exception {
publishEvents(eventType.getName(), 15, i -> "{\"foo\":\"bar\"}");
final TestStreamingClient client = TestStreamingClient.create(URL, subscription.getId(), "max_uncommitted_events=5").start();
waitFor(() -> assertThat(client.getBatches(), hasSize(5)));
SubscriptionCursor cursorToCommit = client.getBatches().get(4).getCursor();
commitCursors(subscription.getId(), ImmutableList.of(cursorToCommit), client.getSessionId());
waitFor(() -> assertThat(client.getBatches(), hasSize(10)));
cursorToCommit = client.getBatches().get(6).getCursor();
commitCursors(subscription.getId(), ImmutableList.of(cursorToCommit), client.getSessionId());
waitFor(() -> assertThat(client.getBatches(), hasSize(12)));
}
use of org.zalando.nakadi.view.SubscriptionCursor in project nakadi by zalando.
the class HilaAT method whenStreamTimeoutReachedSessionIsClosed.
@Test(timeout = 15000)
public void whenStreamTimeoutReachedSessionIsClosed() throws Exception {
publishEvent(eventType.getName(), "{\"foo\":\"bar\"}");
final TestStreamingClient client = TestStreamingClient.create(URL, subscription.getId(), "stream_timeout=3").start();
waitFor(() -> assertThat(client.getBatches(), hasSize(1)));
// to check that stream_timeout works we need to commit everything we consumed, in other case
// Nakadi will first wait till commit_timeout exceeds
final SubscriptionCursor lastBatchCursor = client.getBatches().get(client.getBatches().size() - 1).getCursor();
commitCursors(subscription.getId(), ImmutableList.of(lastBatchCursor), client.getSessionId());
waitFor(() -> assertThat(client.isRunning(), is(false)), 5000);
}
Aggregations