Search in sources :

Example 1 with TopicRepository

use of org.zalando.nakadi.repository.TopicRepository in project nakadi by zalando.

the class EventTypeServiceTest method testFailToDeleteEventType.

@Test
public void testFailToDeleteEventType() throws Exception {
    final EventType eventType = buildDefaultEventType();
    doThrow(new InternalNakadiException("Can't delete event tye")).when(eventTypeRepository).removeEventType(eventType.getName());
    doReturn(Optional.of(eventType)).when(eventTypeRepository).findByNameO(eventType.getName());
    final Multimap<TopicRepository, String> topicsToDelete = mock(Multimap.class);
    doReturn(new ArrayList<Subscription>()).when(subscriptionDbRepository).listSubscriptions(ImmutableSet.of(eventType.getName()), Optional.empty(), 0, 1);
    doReturn(topicsToDelete).when(timelineService).deleteAllTimelinesForEventType(eventType.getName());
    try {
        eventTypeService.delete(eventType.getName());
    } catch (final EventTypeDeletionException e) {
        // check that topics are not deleted in Kafka
        verifyZeroInteractions(topicsToDelete);
        return;
    }
    fail("Should have thrown an EventTypeDeletionException");
}
Also used : InternalNakadiException(org.zalando.nakadi.exceptions.InternalNakadiException) TestUtils.buildDefaultEventType(org.zalando.nakadi.utils.TestUtils.buildDefaultEventType) EventType(org.zalando.nakadi.domain.EventType) EventTypeDeletionException(org.zalando.nakadi.exceptions.runtime.EventTypeDeletionException) TopicRepository(org.zalando.nakadi.repository.TopicRepository) Matchers.anyString(org.mockito.Matchers.anyString) Subscription(org.zalando.nakadi.domain.Subscription) Test(org.junit.Test)

Example 2 with TopicRepository

use of org.zalando.nakadi.repository.TopicRepository in project nakadi by zalando.

the class EventTypeControllerTest method whenDeleteEventTypeThenOk.

@Test
public void whenDeleteEventTypeThenOk() throws Exception {
    final EventType eventType = buildDefaultEventType();
    doReturn(eventType).when(eventTypeRepository).findByName(eventType.getName());
    doReturn(Optional.of(eventType)).when(eventTypeRepository).findByNameO(eventType.getName());
    doNothing().when(eventTypeRepository).removeEventType(eventType.getName());
    final Multimap<TopicRepository, String> topicsToDelete = ArrayListMultimap.create();
    topicsToDelete.put(topicRepository, "topic");
    doReturn(topicsToDelete).when(timelineService).deleteAllTimelinesForEventType(eventType.getName());
    deleteEventType(eventType.getName()).andExpect(status().isOk()).andExpect(content().string(""));
    verify(eventTypeRepository, times(1)).removeEventType(eventType.getName());
    verify(timelineService, times(1)).deleteAllTimelinesForEventType(eventType.getName());
}
Also used : TestUtils.buildDefaultEventType(org.zalando.nakadi.utils.TestUtils.buildDefaultEventType) EventType(org.zalando.nakadi.domain.EventType) TopicRepository(org.zalando.nakadi.repository.TopicRepository) Matchers.containsString(org.hamcrest.Matchers.containsString) Matchers.anyString(org.mockito.Matchers.anyString) Test(org.junit.Test)

Example 3 with TopicRepository

use of org.zalando.nakadi.repository.TopicRepository in project nakadi by zalando.

the class StreamingStateTest method ensureOffsetsSubscriptionsAreRefreshedAndClosed.

@Test
public void ensureOffsetsSubscriptionsAreRefreshedAndClosed() throws InternalNakadiException, NoSuchEventTypeException, ServiceUnavailableException, InvalidCursorException {
    final ZkSubscription<SubscriptionCursorWithoutToken> offsetSubscription = mock(ZkSubscription.class);
    final EventTypePartition pk = new EventTypePartition("t", "0");
    Mockito.when(zkMock.subscribeForOffsetChanges(Mockito.eq(pk), Mockito.any())).thenReturn(offsetSubscription);
    final EventConsumer.ReassignableEventConsumer consumer = mock(EventConsumer.ReassignableEventConsumer.class);
    when(consumer.getAssignment()).thenReturn(Collections.emptySet());
    when(timelineService.createEventConsumer(any())).thenReturn(consumer);
    when(subscription.getEventTypes()).thenReturn(Collections.singleton("t"));
    final Storage storage = mock(Storage.class);
    when(storage.getType()).thenReturn(Storage.Type.KAFKA);
    final Timeline timeline = new Timeline("t", 0, storage, "t", new Date());
    when(timelineService.getActiveTimelinesOrdered(eq("t"))).thenReturn(Collections.singletonList(timeline));
    final TopicRepository topicRepository = mock(TopicRepository.class);
    when(timelineService.getTopicRepository(eq(timeline))).thenReturn(topicRepository);
    final PartitionStatistics stats = mock(PartitionStatistics.class);
    final NakadiCursor beforeFirstCursor = NakadiCursor.of(timeline, "0", "0");
    when(stats.getBeforeFirst()).thenReturn(beforeFirstCursor);
    when(topicRepository.loadTopicStatistics(any())).thenReturn(Lists.newArrayList(stats));
    state.onEnter();
    final NakadiCursor anyCursor = NakadiCursor.of(timeline, "0", "0");
    when(cursorConverter.convert(any(SubscriptionCursorWithoutToken.class))).thenReturn(anyCursor);
    state.refreshTopologyUnlocked(new Partition[] { new Partition(pk.getEventType(), pk.getPartition(), SESSION_ID, null, Partition.State.ASSIGNED) });
    Mockito.verify(zkMock, Mockito.times(1)).subscribeForOffsetChanges(Mockito.eq(pk), Mockito.any());
    Mockito.verify(offsetSubscription, Mockito.times(0)).close();
    Mockito.verify(offsetSubscription, Mockito.times(0)).getData();
    state.offsetChanged(pk);
    Mockito.verify(zkMock, Mockito.times(1)).subscribeForOffsetChanges(Mockito.eq(pk), Mockito.any());
    Mockito.verify(offsetSubscription, Mockito.times(0)).close();
    Mockito.verify(offsetSubscription, Mockito.times(1)).getData();
    // Verify that offset change listener is removed
    state.refreshTopologyUnlocked(new Partition[0]);
    Mockito.verify(zkMock, Mockito.times(1)).subscribeForOffsetChanges(Mockito.eq(pk), Mockito.any());
    Mockito.verify(offsetSubscription, Mockito.times(1)).close();
    Mockito.verify(offsetSubscription, Mockito.times(1)).getData();
}
Also used : SubscriptionCursorWithoutToken(org.zalando.nakadi.view.SubscriptionCursorWithoutToken) EventConsumer(org.zalando.nakadi.repository.EventConsumer) EventTypePartition(org.zalando.nakadi.domain.EventTypePartition) Partition(org.zalando.nakadi.service.subscription.model.Partition) Timeline(org.zalando.nakadi.domain.Timeline) Storage(org.zalando.nakadi.domain.Storage) NakadiCursor(org.zalando.nakadi.domain.NakadiCursor) PartitionStatistics(org.zalando.nakadi.domain.PartitionStatistics) TopicRepository(org.zalando.nakadi.repository.TopicRepository) EventTypePartition(org.zalando.nakadi.domain.EventTypePartition) Date(java.util.Date) Test(org.junit.Test)

Example 4 with TopicRepository

use of org.zalando.nakadi.repository.TopicRepository in project nakadi by zalando.

the class StartingStateTest method testGetSubscriptionOffsetsBegin.

@Test
public void testGetSubscriptionOffsetsBegin() throws Exception {
    when(subscription.getReadFrom()).thenReturn(SubscriptionBase.InitialPosition.BEGIN);
    final NakadiCursor beforeBegin0 = mock(NakadiCursor.class);
    final SubscriptionCursorWithoutToken beforeBegin0Converted = mock(SubscriptionCursorWithoutToken.class);
    when(cursorConverter.convertToNoToken(eq(beforeBegin0))).thenReturn(beforeBegin0Converted);
    final NakadiCursor beforeBegin1 = mock(NakadiCursor.class);
    final SubscriptionCursorWithoutToken beforeBegin1Converted = mock(SubscriptionCursorWithoutToken.class);
    when(cursorConverter.convertToNoToken(eq(beforeBegin1))).thenReturn(beforeBegin1Converted);
    final TopicRepository topicRepository = mock(TopicRepository.class);
    final PartitionStatistics resultForTopic0 = mock(PartitionStatistics.class);
    when(resultForTopic0.getBeforeFirst()).thenReturn(beforeBegin0);
    final PartitionStatistics resultForTopic1 = mock(PartitionStatistics.class);
    when(resultForTopic1.getBeforeFirst()).thenReturn(beforeBegin1);
    when(topicRepository.loadTopicStatistics(any())).thenReturn(Lists.newArrayList(resultForTopic0, resultForTopic1));
    when(timelineService.getTopicRepository(eq(timelineEt00))).thenReturn(topicRepository);
    final Storage storage = mock(Storage.class);
    when(timelineEt00.getStorage()).thenReturn(storage);
    when(timelineEt10.getStorage()).thenReturn(storage);
    final List<SubscriptionCursorWithoutToken> cursors = StartingState.calculateStartPosition(subscription, timelineService, cursorConverter);
    Assert.assertEquals(cursors.size(), 2);
    Assert.assertEquals(beforeBegin0Converted, cursors.get(0));
    Assert.assertEquals(beforeBegin1Converted, cursors.get(1));
}
Also used : SubscriptionCursorWithoutToken(org.zalando.nakadi.view.SubscriptionCursorWithoutToken) NakadiCursor(org.zalando.nakadi.domain.NakadiCursor) Storage(org.zalando.nakadi.domain.Storage) PartitionStatistics(org.zalando.nakadi.domain.PartitionStatistics) TopicRepository(org.zalando.nakadi.repository.TopicRepository) Test(org.junit.Test)

Example 5 with TopicRepository

use of org.zalando.nakadi.repository.TopicRepository in project nakadi by zalando.

the class StartingStateTest method testGetSubscriptionOffsetsEnd.

@Test
public void testGetSubscriptionOffsetsEnd() throws Exception {
    when(subscription.getReadFrom()).thenReturn(SubscriptionBase.InitialPosition.END);
    final NakadiCursor end0 = mock(NakadiCursor.class);
    final SubscriptionCursorWithoutToken end0Converted = mock(SubscriptionCursorWithoutToken.class);
    when(cursorConverter.convertToNoToken(eq(end0))).thenReturn(end0Converted);
    final NakadiCursor end1 = mock(NakadiCursor.class);
    final SubscriptionCursorWithoutToken end1Converted = mock(SubscriptionCursorWithoutToken.class);
    when(cursorConverter.convertToNoToken(eq(end1))).thenReturn(end1Converted);
    final TopicRepository topicRepository = mock(TopicRepository.class);
    final PartitionStatistics statsForEt0 = mock(PartitionStatistics.class);
    when(statsForEt0.getLast()).thenReturn(end0);
    final PartitionStatistics statsForTopic1 = mock(PartitionStatistics.class);
    when(statsForTopic1.getLast()).thenReturn(end1);
    when(topicRepository.loadTopicEndStatistics(any())).thenReturn(Lists.newArrayList(statsForEt0, statsForTopic1));
    when(timelineService.getTopicRepository(eq(timelineEt01))).thenReturn(topicRepository);
    final Storage storage = mock(Storage.class);
    when(timelineEt01.getStorage()).thenReturn(storage);
    when(timelineEt11.getStorage()).thenReturn(storage);
    final List<SubscriptionCursorWithoutToken> cursors = StartingState.calculateStartPosition(subscription, timelineService, cursorConverter);
    Assert.assertEquals(cursors.size(), 2);
    Assert.assertEquals(end0Converted, cursors.get(0));
    Assert.assertEquals(end1Converted, cursors.get(1));
}
Also used : SubscriptionCursorWithoutToken(org.zalando.nakadi.view.SubscriptionCursorWithoutToken) NakadiCursor(org.zalando.nakadi.domain.NakadiCursor) Storage(org.zalando.nakadi.domain.Storage) PartitionStatistics(org.zalando.nakadi.domain.PartitionStatistics) TopicRepository(org.zalando.nakadi.repository.TopicRepository) Test(org.junit.Test)

Aggregations

TopicRepository (org.zalando.nakadi.repository.TopicRepository)23 Timeline (org.zalando.nakadi.domain.Timeline)13 Test (org.junit.Test)9 InternalNakadiException (org.zalando.nakadi.exceptions.InternalNakadiException)8 TimelineService (org.zalando.nakadi.service.timeline.TimelineService)8 EventType (org.zalando.nakadi.domain.EventType)7 NakadiCursor (org.zalando.nakadi.domain.NakadiCursor)7 PartitionStatistics (org.zalando.nakadi.domain.PartitionStatistics)6 Storage (org.zalando.nakadi.domain.Storage)6 NoSuchEventTypeException (org.zalando.nakadi.exceptions.NoSuchEventTypeException)6 List (java.util.List)5 NakadiException (org.zalando.nakadi.exceptions.NakadiException)5 SubscriptionCursorWithoutToken (org.zalando.nakadi.view.SubscriptionCursorWithoutToken)5 Date (java.util.Date)4 Map (java.util.Map)4 Collectors (java.util.stream.Collectors)4 NakadiSettings (org.zalando.nakadi.config.NakadiSettings)4 InvalidCursorException (org.zalando.nakadi.exceptions.InvalidCursorException)4 ServiceUnavailableException (org.zalando.nakadi.exceptions.ServiceUnavailableException)4 UnableProcessException (org.zalando.nakadi.exceptions.UnableProcessException)4