use of org.zalando.nakadi.view.SubscriptionCursor in project nakadi by zalando.
the class EventStreamTest method testWriteStreamInfoWhenPresent.
@Test
public void testWriteStreamInfoWhenPresent() {
final ByteArrayOutputStream baos = new ByteArrayOutputStream();
final SubscriptionCursor cursor = new SubscriptionCursor("11", "000000000000000012", "event-type", "token-id");
final ArrayList<ConsumedEvent> events = Lists.newArrayList(new ConsumedEvent("{\"a\":\"b\"}".getBytes(), mock(NakadiCursor.class)));
try {
writerProvider.getWriter().writeSubscriptionBatch(baos, cursor, events, Optional.of("something"));
final JSONObject batch = new JSONObject(baos.toString());
final JSONObject cursorM = batch.getJSONObject("cursor");
assertEquals("11", cursorM.getString("partition"));
assertEquals("000000000000000012", cursorM.getString("offset"));
assertEquals("event-type", cursorM.getString("event_type"));
assertEquals("token-id", cursorM.getString("cursor_token"));
final JSONArray eventsM = batch.getJSONArray("events");
assertSame(eventsM.length(), 1);
assertEquals("something", batch.getJSONObject("info").getString("debug"));
} catch (final IOException e) {
fail(e.getMessage());
}
}
use of org.zalando.nakadi.view.SubscriptionCursor in project nakadi by zalando.
the class CursorsControllerTest method whenInvalidCursorExceptionThenUnprocessableEntity.
@Test
public void whenInvalidCursorExceptionThenUnprocessableEntity() throws Exception {
when(cursorsService.commitCursors(any(), any(), any())).thenThrow((new InvalidCursorException(CursorError.NULL_PARTITION, new SubscriptionCursor(null, null, null, null))));
final Problem expectedProblem = Problem.valueOf(UNPROCESSABLE_ENTITY, "partition must not be null");
checkForProblem(postCursors(DUMMY_CURSORS), expectedProblem);
}
use of org.zalando.nakadi.view.SubscriptionCursor in project nakadi by zalando.
the class UserJourneyAT method userJourneyHila.
@Test(timeout = 15000)
public void userJourneyHila() throws InterruptedException, IOException {
postEvents(rangeClosed(0, 3).mapToObj(x -> "{\"foo\":\"bar" + x + "\"}").collect(Collectors.toList()).toArray(new String[4]));
// create subscription
final SubscriptionBase subscriptionToCreate = RandomSubscriptionBuilder.builder().withOwningApplication("stups_aruha-test-end2end-nakadi").withEventType(eventTypeName).withStartFrom(BEGIN).buildSubscriptionBase();
final Subscription subscription = createSubscription(jsonRequestSpec(), subscriptionToCreate);
// list subscriptions
jsonRequestSpec().param("event_type", eventTypeName).get("/subscriptions").then().statusCode(OK.value()).body("items.size()", equalTo(1)).body("items[0].id", equalTo(subscription.getId()));
// create client and wait till we receive all events
final TestStreamingClient client = new TestStreamingClient(RestAssured.baseURI + ":" + RestAssured.port, subscription.getId(), "", oauthToken).start();
waitFor(() -> assertThat(client.getBatches(), hasSize(4)));
final List<StreamBatch> batches = client.getBatches();
// validate the content of events
for (int i = 0; i < batches.size(); i++) {
final SubscriptionCursor cursor = new SubscriptionCursor("0", TestUtils.toTimelineOffset(i), eventTypeName, "");
final StreamBatch expectedBatch = new StreamBatch(cursor, ImmutableList.of(ImmutableMap.of("foo", "bar" + i)), i == 0 ? new StreamMetadata("Stream started") : null);
final StreamBatch batch = batches.get(i);
assertThat(batch, equalToBatchIgnoringToken(expectedBatch));
}
// as we didn't commit, there should be still 4 unconsumed events
jsonRequestSpec().get("/subscriptions/{sid}/stats", subscription.getId()).then().statusCode(OK.value()).body("items[0].partitions[0].unconsumed_events", equalTo(4));
// commit cursor of latest event
final StreamBatch lastBatch = batches.get(batches.size() - 1);
final int commitCode = commitCursors(jsonRequestSpec(), subscription.getId(), ImmutableList.of(lastBatch.getCursor()), client.getSessionId());
assertThat(commitCode, equalTo(NO_CONTENT.value()));
// now there should be 0 unconsumed events
jsonRequestSpec().get("/subscriptions/{sid}/stats", subscription.getId()).then().statusCode(OK.value()).body("items[0].partitions[0].unconsumed_events", equalTo(0));
// get cursors
jsonRequestSpec().get("/subscriptions/{sid}/cursors", subscription.getId()).then().statusCode(OK.value()).body("items[0].partition", equalTo("0")).body("items[0].offset", equalTo("001-0001-000000000000000003"));
// delete subscription
jsonRequestSpec().delete("/subscriptions/{sid}", subscription.getId()).then().statusCode(NO_CONTENT.value());
}
use of org.zalando.nakadi.view.SubscriptionCursor in project nakadi by zalando.
the class SubscriptionAT method testGetSubscriptionCursors.
@Test
public void testGetSubscriptionCursors() throws IOException, InterruptedException {
final String etName = createEventType().getName();
final Subscription subscription = createSubscriptionForEventType(etName);
final String cursor = "{\"items\":[{\"partition\":\"0\",\"offset\":\"25\",\"event_type\":\"" + etName + "\",\"cursor_token\":\"abc\"}]}";
final TestStreamingClient client = TestStreamingClient.create(URL, subscription.getId(), "").start();
waitFor(() -> assertThat(client.getSessionId(), not(equalTo(SESSION_ID_UNKNOWN))));
commitCursors(subscription, cursor, client.getSessionId()).then().statusCode(HttpStatus.SC_NO_CONTENT);
final List<SubscriptionCursor> actualCursors = NakadiTestUtils.getSubscriptionCursors(subscription).getItems();
assertThat(actualCursors, hasSize(1));
final SubscriptionCursor actualCursor = actualCursors.get(0);
assertThat(actualCursor.getPartition(), equalTo("0"));
assertThat(actualCursor.getOffset(), equalTo(TestUtils.toTimelineOffset(25)));
assertThat(actualCursor.getEventType(), equalTo(etName));
}
use of org.zalando.nakadi.view.SubscriptionCursor in project nakadi by zalando.
the class HilaAT method testGetSubscriptionStat.
@Test(timeout = 10000)
public void testGetSubscriptionStat() throws Exception {
publishEvents(eventType.getName(), 15, i -> "{\"foo\":\"bar\"}");
final TestStreamingClient client = TestStreamingClient.create(URL, subscription.getId(), "max_uncommitted_events=20").start();
waitFor(() -> assertThat(client.getBatches(), hasSize(15)));
List<SubscriptionEventTypeStats> subscriptionStats = Collections.singletonList(new SubscriptionEventTypeStats(eventType.getName(), Collections.singletonList(new SubscriptionEventTypeStats.Partition("0", "assigned", 15L, client.getSessionId(), AUTO))));
NakadiTestUtils.getSubscriptionStat(subscription).then().content(new StringContains(JSON_TEST_HELPER.asJsonString(new ItemsWrapper<>(subscriptionStats))));
final String partition = client.getBatches().get(0).getCursor().getPartition();
final SubscriptionCursor cursor = new SubscriptionCursor(partition, "9", eventType.getName(), "token");
commitCursors(subscription.getId(), ImmutableList.of(cursor), client.getSessionId());
subscriptionStats = Collections.singletonList(new SubscriptionEventTypeStats(eventType.getName(), Collections.singletonList(new SubscriptionEventTypeStats.Partition("0", "assigned", 5L, client.getSessionId(), AUTO))));
NakadiTestUtils.getSubscriptionStat(subscription).then().content(new StringContains(JSON_TEST_HELPER.asJsonString(new ItemsWrapper<>(subscriptionStats))));
}
Aggregations