/graylog2-server/src/test/java/org/graylog/plugins/views/search/IndexRangeContainsOneOfStreamsTest.java

https://github.com/Graylog2/graylog2-server · Java · 132 lines · 86 code · 30 blank · 16 comment · 0 complexity · 854c68d8fb0fcbdaf6ac4776fbe63c16 MD5 · raw file

  1. /*
  2. * Copyright (C) 2020 Graylog, Inc.
  3. *
  4. * This program is free software: you can redistribute it and/or modify
  5. * it under the terms of the Server Side Public License, version 1,
  6. * as published by MongoDB, Inc.
  7. *
  8. * This program is distributed in the hope that it will be useful,
  9. * but WITHOUT ANY WARRANTY; without even the implied warranty of
  10. * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  11. * Server Side Public License for more details.
  12. *
  13. * You should have received a copy of the Server Side Public License
  14. * along with this program. If not, see
  15. * <http://www.mongodb.com/licensing/server-side-public-license>.
  16. */
  17. package org.graylog.plugins.views.search;
  18. import org.graylog2.indexer.ranges.IndexRange;
  19. import org.graylog2.plugin.streams.Stream;
  20. import org.junit.Rule;
  21. import org.junit.Test;
  22. import org.mockito.Answers;
  23. import org.mockito.ArgumentCaptor;
  24. import org.mockito.Mock;
  25. import org.mockito.junit.MockitoJUnit;
  26. import org.mockito.junit.MockitoRule;
  27. import java.util.Collections;
  28. import static org.assertj.core.api.Assertions.assertThat;
  29. import static org.mockito.ArgumentMatchers.any;
  30. import static org.mockito.ArgumentMatchers.eq;
  31. import static org.mockito.Mockito.mock;
  32. import static org.mockito.Mockito.never;
  33. import static org.mockito.Mockito.times;
  34. import static org.mockito.Mockito.verify;
  35. import static org.mockito.Mockito.when;
  36. public class IndexRangeContainsOneOfStreamsTest {
  37. private static final String indexName = "somethingsomething";
  38. @Rule
  39. public MockitoRule rule = MockitoJUnit.rule();
  40. @Mock
  41. private IndexRange indexRange;
  42. @Mock(answer = Answers.RETURNS_DEEP_STUBS)
  43. private Stream stream1;
  44. @Mock(answer = Answers.RETURNS_DEEP_STUBS)
  45. private Stream stream2;
  46. @Test
  47. public void emptyStreamsShouldNotMatchAnything() {
  48. final IndexRangeContainsOneOfStreams predicate = new IndexRangeContainsOneOfStreams(Collections.emptySet());
  49. final IndexRange indexRange = mock(IndexRange.class);
  50. assertThat(predicate.test(indexRange)).isFalse();
  51. }
  52. @Test
  53. public void currentIndexRangeShouldMatchIfManaged() {
  54. when(indexRange.streamIds()).thenReturn(null);
  55. when(indexRange.indexName()).thenReturn(indexName);
  56. when(stream1.getId()).thenReturn("stream1");
  57. when(stream1.getIndexSet().isManagedIndex(eq(indexName))).thenReturn(true);
  58. when(stream2.getId()).thenReturn("stream2");
  59. when(stream2.getIndexSet().isManagedIndex(eq(indexName))).thenReturn(false);
  60. final IndexRangeContainsOneOfStreams predicate = new IndexRangeContainsOneOfStreams(stream1, stream2);
  61. assertThat(predicate.test(indexRange)).isTrue();
  62. }
  63. @Test
  64. public void currentIndexRangeShouldNotMatchIfNotManaged() {
  65. when(indexRange.streamIds()).thenReturn(null);
  66. when(indexRange.indexName()).thenReturn(indexName);
  67. when(stream1.getId()).thenReturn("stream1");
  68. when(stream1.getIndexSet().isManagedIndex(eq(indexName))).thenReturn(false);
  69. when(stream2.getId()).thenReturn("stream2");
  70. when(stream2.getIndexSet().isManagedIndex(eq(indexName))).thenReturn(false);
  71. final IndexRangeContainsOneOfStreams predicate = new IndexRangeContainsOneOfStreams(stream1, stream2);
  72. assertThat(predicate.test(indexRange)).isFalse();
  73. final ArgumentCaptor<String> stream1IndexSet = ArgumentCaptor.forClass(String.class);
  74. verify(stream1.getIndexSet(), times(1)).isManagedIndex(stream1IndexSet.capture());
  75. assertThat(stream1IndexSet.getAllValues()).containsExactly(indexName);
  76. final ArgumentCaptor<String> stream2IndexSet = ArgumentCaptor.forClass(String.class);
  77. verify(stream2.getIndexSet(), times(1)).isManagedIndex(stream2IndexSet.capture());
  78. assertThat(stream2IndexSet.getAllValues()).containsExactly(indexName);
  79. }
  80. @Test
  81. public void closedIndexRangeShouldNotMatchIfNotContainingStreamId() {
  82. when(indexRange.streamIds()).thenReturn(Collections.singletonList("stream3"));
  83. when(stream1.getId()).thenReturn("stream1");
  84. when(stream2.getId()).thenReturn("stream2");
  85. final IndexRangeContainsOneOfStreams predicate = new IndexRangeContainsOneOfStreams(stream1, stream2);
  86. assertThat(predicate.test(indexRange)).isFalse();
  87. verify(stream1.getIndexSet(), never()).isManagedIndex(any());
  88. verify(stream2.getIndexSet(), never()).isManagedIndex(any());
  89. verify(indexRange, never()).indexName();
  90. }
  91. @Test
  92. public void closedIndexRangeShouldNotMatchIfNotContainingAnyStreamId() {
  93. when(indexRange.streamIds()).thenReturn(Collections.emptyList());
  94. when(stream1.getId()).thenReturn("stream1");
  95. when(stream2.getId()).thenReturn("stream2");
  96. final IndexRangeContainsOneOfStreams predicate = new IndexRangeContainsOneOfStreams(stream1, stream2);
  97. assertThat(predicate.test(indexRange)).isFalse();
  98. verify(stream1.getIndexSet(), never()).isManagedIndex(any());
  99. verify(stream2.getIndexSet(), never()).isManagedIndex(any());
  100. verify(indexRange, never()).indexName();
  101. }
  102. }