You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@streampipes.apache.org by ze...@apache.org on 2024/07/22 15:09:34 UTC

(streampipes) branch dev updated: refactor(#2777): Fix test case for DateTimeFromStringProcessor (#3047)

This is an automated email from the ASF dual-hosted git repository.

zehnder pushed a commit to branch dev
in repository https://gitbox.apache.org/repos/asf/streampipes.git


The following commit(s) were added to refs/heads/dev by this push:
     new f685d0be63 refactor(#2777): Fix test case for DateTimeFromStringProcessor (#3047)
f685d0be63 is described below

commit f685d0be63ce974cce579f4d65a82d520065efa0
Author: Philipp Zehnder <te...@users.noreply.github.com>
AuthorDate: Mon Jul 22 17:09:29 2024 +0200

    refactor(#2777): Fix test case for DateTimeFromStringProcessor (#3047)
---
 .../datetime/TestDateTimeFromStringProcessor.java  | 260 ++++++---------------
 1 file changed, 65 insertions(+), 195 deletions(-)

diff --git a/streampipes-extensions/streampipes-processors-transformation-jvm/src/test/java/org/apache/streampipes/processors/transformation/jvm/processor/datetime/TestDateTimeFromStringProcessor.java b/streampipes-extensions/streampipes-processors-transformation-jvm/src/test/java/org/apache/streampipes/processors/transformation/jvm/processor/datetime/TestDateTimeFromStringProcessor.java
index cdfc2163df..00a8e78d5f 100644
--- a/streampipes-extensions/streampipes-processors-transformation-jvm/src/test/java/org/apache/streampipes/processors/transformation/jvm/processor/datetime/TestDateTimeFromStringProcessor.java
+++ b/streampipes-extensions/streampipes-processors-transformation-jvm/src/test/java/org/apache/streampipes/processors/transformation/jvm/processor/datetime/TestDateTimeFromStringProcessor.java
@@ -18,200 +18,70 @@
 
 package org.apache.streampipes.processors.transformation.jvm.processor.datetime;
 
-//@RunWith(Parameterized.class)
+import org.apache.streampipes.test.executors.PrefixStrategy;
+import org.apache.streampipes.test.executors.ProcessingElementTestExecutor;
+import org.apache.streampipes.test.executors.StreamPrefix;
+import org.apache.streampipes.test.executors.TestConfiguration;
+
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.params.ParameterizedTest;
+import org.junit.jupiter.params.provider.Arguments;
+import org.junit.jupiter.params.provider.MethodSource;
+
+import java.util.List;
+import java.util.Map;
+import java.util.stream.Stream;
+
+import static org.apache.streampipes.processors.transformation.jvm.processor.datetime.DateTimeFromStringProcessor.OUTPUT_TIMESTAMP_RUNTIME_NAME;
+import static org.apache.streampipes.processors.transformation.jvm.processor.datetime.DateTimeFromStringProcessor.OUTPUT_TIMEZONE_RUNTIME_NAME;
+
 public class TestDateTimeFromStringProcessor {
-//  private static final Logger LOG = LoggerFactory.getLogger(TestDateTimeFromStringProcessor.class);
-//
-//  @org.junit.runners.Parameterized.Parameters
-//  public static Iterable<Object[]> data() {
-//
-//    var expectedTimestamp = 1700222655537L;
-//
-//    return Arrays.asList(new Object[][]{
-//        // the first test just demonstrates that the testing and the source code is
-//        // functioning
-//        {
-//            "inputField", "US/Eastern",
-//            List.of("2020-11-13T21:07:38.146120+01:00", "2023-11-14T16:17:01.286299-05:00",
-//                    "2023-11-14T14:05:57.519543100"
-//            ),
-//            List.of(1605298058146L, 1699996621286L, 1699988757519L)
-//        },
-//        /*
-//         * the next three tests demonstrate two things: (1) if the DateTime string has
-//         * the zone information already in it, the user input on the timezone will not
-//         * affect the DateTime variable. (2) The same instant in the real world will
-//         * result in the same instant in the datetime variable
-//         */
-//        {
-//            "inputField", "US/Pacific", List.of("2023-11-17T04:04:15.537187600-08:00[US/Pacific]"),
-//            List.of(expectedTimestamp)
-//        },
-//        {
-//            "inputField", "US/Pacific", List.of("2023-11-17T05:04:15.537187600-07:00[US/Arizona]"),
-//            List.of(expectedTimestamp)
-//        },
-//        {
-//            "inputField", "US/Pacific", List.of("2023-11-17T07:04:15.537187600-05:00[US/Eastern]"),
-//            List.of(expectedTimestamp)
-//        },
-//        /*
-//         * The next three tests demonstrate that if a localdatetime is given, when the
-//         * user selects a time zone. An instant in time will be created for that
-//         * specific timezone.
-//         */
-//        {
-//            "inputField", "US/Pacific", List.of("2023-11-17T04:04:15.537187600"),
-//            List.of(expectedTimestamp)
-//        },
-//        {
-//            "inputField", "US/Arizona", List.of("2023-11-17T04:04:15.537187600"),
-//            List.of(1700219055537L)
-//        },
-//        {
-//            "inputField", "US/Eastern", List.of("2023-11-17T04:04:15.537187600"),
-//            List.of(1700211855537L)
-//        },
-//
-//        });
-//  }
-//
-//  @org.junit.runners.Parameterized.Parameter
-//  public String streamInputDateTimeFieldName;
-//
-//  @org.junit.runners.Parameterized.Parameter(1)
-//  public String selectedTimeZone;
-//
-//  @org.junit.runners.Parameterized.Parameter(2)
-//  public List<String> eventsString;
-//
-//  @org.junit.runners.Parameterized.Parameter(3)
-//  public List<String> expectedValues;
-//
-//  public static final String DEFAULT_STREAM_PREFIX = "Stream";
-//
-//  @Test
-//  public void testDateTime() {
-//    DateTimeFromStringProcessor dateTime = new DateTimeFromStringProcessor();
-//    DataProcessorDescription originalGraph = dateTime.declareModel();
-//    originalGraph.setSupportedGrounding(EventGroundingGenerator.makeDummyGrounding());
-//
-//    DataProcessorInvocation graph = InvocationGraphGenerator.makeEmptyInvocation(originalGraph);
-//    graph.setInputStreams(Collections.singletonList(
-//        EventStreamGenerator.makeStreamWithProperties(Collections.singletonList("in-stream"))));
-//    graph.setOutputStream(
-//        EventStreamGenerator.makeStreamWithProperties(Collections.singletonList("out-stream")));
-//    graph.getOutputStream()
-//         .getEventGrounding()
-//         .getTransportProtocol()
-//         .getTopicDefinition()
-//         .setActualTopicName("output-topic");
-//
-//    MappingPropertyUnary mappingPropertyUnary = graph.getStaticProperties()
-//                                                     .stream()
-//                                                     .filter(p -> p instanceof MappingPropertyUnary)
-//                                                     .map(p -> (MappingPropertyUnary) p)
-//                                                     .filter(p -> DateTimeFromStringProcessor.FIELD_ID.equals(
-//                                                                 p.getInternalName()
-//                                                             )
-//                                                     )
-//                                                     .findFirst()
-//                                                     .orElse(null);
-//
-//    assert mappingPropertyUnary != null;
-//    mappingPropertyUnary.setSelectedProperty(DEFAULT_STREAM_PREFIX + "::" + streamInputDateTimeFieldName);
-//
-//    OneOfStaticProperty selectedTimeZoneProperty = graph.getStaticProperties()
-//                                                        .stream()
-//                                                        .filter(p -> p instanceof OneOfStaticProperty)
-//                                                        .map(p -> (OneOfStaticProperty) p)
-//                                                        .filter(p -> (
-//                                                            DateTimeFromStringProcessor.INPUT_TIMEZONE_KEY.equals(
-//                                                                p.getInternalName()
-//                                                            )
-//                                                        ))
-//                                                        .findFirst()
-//                                                        .orElse(null);
-//    assert selectedTimeZoneProperty != null;
-//    Option selectedTimeZoneOption = selectedTimeZoneProperty.getOptions()
-//                                                            .stream()
-//                                                            .filter(item -> item.getName()
-//                                                                                .equals(selectedTimeZone))
-//                                                            .findFirst()
-//                                                            .orElse(null);
-//    assert selectedTimeZoneOption != null;
-//    selectedTimeZoneOption.setSelected(true);
-//
-//    ProcessorParams params = new ProcessorParams(graph);
-//    SpOutputCollector spOut = new StoreEventCollector();
-//    dateTime.onInvocation(params, spOut, null);
-//    Tuple2<String, List<Long>> res = sendEvents(dateTime, spOut);
-//    List<Long> resValues = res.v;
-//    assert eventsString.size() == expectedValues.size();
-//    int size = eventsString.size();
-//    for (int i = 0; i < size; i++) {
-//      LOG.info("Expected value is {}.", expectedValues.get(i));
-//      LOG.info(
-//          "Actual value is {}.",
-//          resValues.get(i)
-//                   .toString()
-//      );
-//      assertEquals(
-//          expectedValues.get(i),
-//          resValues.get(i)
-//      );
-//    }
-//  }
-//
-//  private Tuple2<String, List<Long>> sendEvents(DateTimeFromStringProcessor dateTime, SpOutputCollector spOut) {
-//    String field = "";
-//    Long timestampValue = null;
-//    List<Event> events = makeEvents();
-//    List<Long> dateTimeValueList = new ArrayList<>();
-//    for (Event event : events) {
-//      LOG.info("sending event with value "
-//                   + event.getFieldBySelector(DEFAULT_STREAM_PREFIX + "::" + streamInputDateTimeFieldName)
-//                          .getAsPrimitive()
-//                          .getAsString());
-//      dateTime.onEvent(event, spOut);
-//
-//      try {
-//        TimeUnit.MILLISECONDS.sleep(100);
-//      } catch (InterruptedException e) {
-//        throw new RuntimeException(e);
-//      }
-//      try {
-//        field = event.getFieldBySelector(DEFAULT_STREAM_PREFIX + "::" + DateTimeFromStringProcessor.FIELD_ID)
-//                     .getAsPrimitive()
-//                     .getAsString();
-//        timestampValue = event
-//            .getFieldBySelector(DateTimeFromStringProcessor.OUTPUT_TIMESTAMP_RUNTIME_NAME)
-//            .getAsPrimitive()
-//            .getAsLong();
-//        LOG.info(field + ":" + timestampValue);
-//      } catch (IllegalArgumentException e) {
-//        throw new RuntimeException(e);
-//      }
-//      dateTimeValueList.add(timestampValue);
-//    }
-//    return new Tuple2<>(field, dateTimeValueList);
-//  }
-//
-//  private List<Event> makeEvents() {
-//    List<Event> events = new ArrayList<>();
-//    for (String eventString : eventsString) {
-//      events.add(makeEvent(eventString));
-//    }
-//    return events;
-//  }
-//
-//  private Event makeEvent(String value) {
-//    Map<String, Object> map = new HashMap<>();
-//    map.put(streamInputDateTimeFieldName, value);
-//    return EventFactory.fromMap(
-//        map,
-//        new SourceInfo("test-topic", DEFAULT_STREAM_PREFIX),
-//        new SchemaInfo(null, new ArrayList<>())
-//    );
-//  }
+
+  private static final String KEY_1 = "key1";
+  private static final String TIMEZONE = "US/Eastern";
+
+  private DateTimeFromStringProcessor processor;
+
+  @BeforeEach
+  public void setup() {
+    processor = new DateTimeFromStringProcessor();
+  }
+
+  private static final Map<String, Long> cases = Map.of(
+      "2020-11-13T21:07:38.146120+01:00", 1605298058146L,
+      "2023-11-14T16:17:01.286299-05:00", 1699996621286L,
+      "2023-11-14T14:05:57.519543100", 1699988757519L
+  );
+
+  static Stream<Arguments> arguments() {
+    return cases.entrySet().stream().map(entry -> {
+      Map<String, Object> inputEvent = Map.of(KEY_1, entry.getKey());
+      Map<String, Object> outputEvent = Map.of(
+          KEY_1, entry.getKey(),
+          OUTPUT_TIMEZONE_RUNTIME_NAME, TIMEZONE,
+          OUTPUT_TIMESTAMP_RUNTIME_NAME, entry.getValue()
+      );
+      return Arguments.of(List.of(inputEvent), List.of(outputEvent));
+    });
+  }
+
+  @ParameterizedTest
+  @MethodSource("arguments")
+  public void testStringToState(
+      List<Map<String, Object>> intpuEvents,
+      List<Map<String, Object>> outputEvents
+  ) {
+
+    var configuration = TestConfiguration
+        .builder()
+        .config(DateTimeFromStringProcessor.FIELD_ID, StreamPrefix.s0(KEY_1))
+        .config(DateTimeFromStringProcessor.INPUT_TIMEZONE_KEY, TIMEZONE)
+        .prefixStrategy(PrefixStrategy.SAME_PREFIX)
+        .build();
+
+    var testExecutor = new ProcessingElementTestExecutor(processor, configuration);
+
+    testExecutor.run(intpuEvents, outputEvents);
+  }
+
 }