MessagesProcessingTest.java 2.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869
  1. package com.provectus.kafka.ui.emitter;
  2. import static org.assertj.core.api.Assertions.assertThat;
  3. import java.time.OffsetDateTime;
  4. import java.util.ArrayList;
  5. import java.util.Collections;
  6. import java.util.List;
  7. import java.util.Optional;
  8. import org.apache.kafka.clients.consumer.ConsumerRecord;
  9. import org.apache.kafka.common.header.internals.RecordHeaders;
  10. import org.apache.kafka.common.record.TimestampType;
  11. import org.apache.kafka.common.utils.Bytes;
  12. import org.junit.jupiter.api.RepeatedTest;
  13. class MessagesProcessingTest {
  14. @RepeatedTest(5)
  15. void testSortingAsc() {
  16. var messagesInOrder = List.of(
  17. consumerRecord(1, 100L, "1999-01-01T00:00:00+00:00"),
  18. consumerRecord(0, 0L, "2000-01-01T00:00:00+00:00"),
  19. consumerRecord(1, 200L, "2000-01-05T00:00:00+00:00"),
  20. consumerRecord(0, 10L, "2000-01-10T00:00:00+00:00"),
  21. consumerRecord(0, 20L, "2000-01-20T00:00:00+00:00"),
  22. consumerRecord(1, 300L, "3000-01-01T00:00:00+00:00"),
  23. consumerRecord(2, 1000L, "4000-01-01T00:00:00+00:00"),
  24. consumerRecord(2, 1001L, "2000-01-01T00:00:00+00:00"),
  25. consumerRecord(2, 1003L, "3000-01-01T00:00:00+00:00")
  26. );
  27. var shuffled = new ArrayList<>(messagesInOrder);
  28. Collections.shuffle(shuffled);
  29. var sortedList = MessagesProcessing.sorted(shuffled, true);
  30. assertThat(sortedList).containsExactlyElementsOf(messagesInOrder);
  31. }
  32. @RepeatedTest(5)
  33. void testSortingDesc() {
  34. var messagesInOrder = List.of(
  35. consumerRecord(1, 300L, "3000-01-01T00:00:00+00:00"),
  36. consumerRecord(2, 1003L, "3000-01-01T00:00:00+00:00"),
  37. consumerRecord(0, 20L, "2000-01-20T00:00:00+00:00"),
  38. consumerRecord(0, 10L, "2000-01-10T00:00:00+00:00"),
  39. consumerRecord(1, 200L, "2000-01-05T00:00:00+00:00"),
  40. consumerRecord(0, 0L, "2000-01-01T00:00:00+00:00"),
  41. consumerRecord(2, 1001L, "2000-01-01T00:00:00+00:00"),
  42. consumerRecord(2, 1000L, "4000-01-01T00:00:00+00:00"),
  43. consumerRecord(1, 100L, "1999-01-01T00:00:00+00:00")
  44. );
  45. var shuffled = new ArrayList<>(messagesInOrder);
  46. Collections.shuffle(shuffled);
  47. var sortedList = MessagesProcessing.sorted(shuffled, false);
  48. assertThat(sortedList).containsExactlyElementsOf(messagesInOrder);
  49. }
  50. private ConsumerRecord<Bytes, Bytes> consumerRecord(int partition, long offset, String ts) {
  51. return new ConsumerRecord<>(
  52. "topic", partition, offset, OffsetDateTime.parse(ts).toInstant().toEpochMilli(),
  53. TimestampType.CREATE_TIME,
  54. 0, 0, null, null, new RecordHeaders(), Optional.empty()
  55. );
  56. }
  57. }