Migrate netconf to mockito ArgumentMatchers
[netconf.git] / netconf / netconf-notifications-impl / src / test / java / org / opendaylight / netconf / notifications / impl / NetconfNotificationManagerTest.java
index c838506ff50c0a89e4f96a203d4100800afb136c..04afed6eef204218b893a0b3a88995d2c962ac08 100644 (file)
@@ -8,16 +8,22 @@
 
 package org.opendaylight.netconf.notifications.impl;
 
+import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.fail;
-import static org.mockito.Matchers.any;
+import static org.mockito.ArgumentMatchers.any;
 import static org.mockito.Mockito.doNothing;
 import static org.mockito.Mockito.mock;
 import static org.mockito.Mockito.verify;
 import static org.mockito.Mockito.verifyNoMoreInteractions;
 
 import com.google.common.collect.Lists;
-import java.text.ParseException;
 import java.text.SimpleDateFormat;
+import java.time.Instant;
+import java.time.format.DateTimeParseException;
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.Iterator;
+import org.junit.Assert;
 import org.junit.Before;
 import org.junit.Test;
 import org.mockito.Mock;
@@ -35,6 +41,7 @@ import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.netconf.not
 
 public class NetconfNotificationManagerTest {
 
+    public static final String RFC3339_DATE_FORMAT_WITH_MILLIS_BLUEPRINT = "yyyy-MM-dd'T'HH:mm:ss.SSSXXX";
     @Mock
     private NetconfNotificationRegistry notificationRegistry;
 
@@ -43,28 +50,91 @@ public class NetconfNotificationManagerTest {
         MockitoAnnotations.initMocks(this);
     }
 
+    @Test
+    public void testEventTime() throws Exception {
+        //Testing values with SimpleDateFormat
+        final ArrayList<String> checkWith = Lists.newArrayList(
+                "2001-07-04T12:08:56.235-07:00",
+                "2015-10-23T09:42:27.671+00:00",
+                "1970-01-01T17:17:22.229+00:00",
+                "1937-01-01T12:00:27.870+00:20",
+                "2015-06-30T23:59:59.000+00:00",
+                "1996-12-19T16:39:57.000-08:00",
+                "2015-10-23T09:42:27.000+00:00",
+                "2015-10-23T09:42:27.200+00:00",
+                "1985-04-12T23:20:50.520+00:00",
+                // Values with leap second
+                "2001-07-04T23:59:59.235-07:00",
+                "1990-12-31T23:59:59.000-08:00",
+                "2015-10-23T23:59:59.671+00:00",
+                "1970-01-01T23:59:59.229+00:00",
+                "1937-01-01T23:59:59.870+00:20",
+                "1990-12-31T23:59:59.000+00:00",
+                "2015-10-23T23:59:59.200+00:00",
+                "1985-04-12T23:59:59.520+00:00");
+        final Iterator<String> iterator = checkWith.iterator();
+
+        // Testing correct values
+        for (final String time : Lists.newArrayList(
+                "2001-07-04T12:08:56.235-07:00",
+                "2015-10-23T09:42:27.67175+00:00",
+                "1970-01-01T17:17:22.229568+00:00",
+                "1937-01-01T12:00:27.87+00:20",
+                "2015-06-30T23:59:59Z",
+                "1996-12-19T16:39:57-08:00",
+                "2015-10-23T09:42:27Z",
+                "2015-10-23T09:42:27.200001Z",
+                "1985-04-12T23:20:50.52Z",
+                // Values with leap second
+                "2001-07-04T23:59:60.235-07:00",
+                "1990-12-31T23:59:60-08:00",
+                "2015-10-23T23:59:60.67175+00:00",
+                "1970-01-01T23:59:60.229568+00:00",
+                "1937-01-01T23:59:60.87+00:20",
+                "1990-12-31T23:59:60Z",
+                "2015-10-23T23:59:60.20001Z",
+                "1985-04-12T23:59:60.52Z"
+        )) {
+            try {
+                final Date apply = NetconfNotification.RFC3339_DATE_PARSER.apply(time);
+                final Date parse =
+                        new SimpleDateFormat(RFC3339_DATE_FORMAT_WITH_MILLIS_BLUEPRINT).parse(iterator.next());
+                assertEquals(parse.getTime(), apply.getTime());
+                // Testing that we're consistent from formatting to parsing.
+                final String dateString = NetconfNotification.RFC3339_DATE_FORMATTER.apply(apply);
+                final Date date1 = NetconfNotification.RFC3339_DATE_PARSER.apply(dateString);
+                final String dateString1 = NetconfNotification.RFC3339_DATE_FORMATTER.apply(date1);
+                Assert.assertEquals(apply, date1);
+                Assert.assertEquals(dateString, dateString1);
+            } catch (final DateTimeParseException e) {
+                fail("Failed to parse time value = " + time + " " + e);
+                throw e;
+            }
+        }
 
-    @Test public void testEventTime() throws Exception {
-        final SimpleDateFormat simpleDateFormat = new SimpleDateFormat(
-            NetconfNotification.RFC3339_DATE_FORMAT_BLUEPRINT);
-        final SimpleDateFormat simpleDateFormat2 = new SimpleDateFormat(
-            NetconfNotification.RFC3339_DATE_FORMAT_WITH_MILLIS_BLUEPRINT);
-
-        for (String time : Lists.newArrayList(
-            "2001-07-04T12:08:56.235-07:00",
-            "2015-10-23T09:42:27.67175+00:00",
-            "1970-01-01T17:17:22.229568+00:00",
-            "1937-01-01T12:00:27.87+00:20",
-            "1990-12-31T15:59:60-08:00",
-            "1990-12-31T23:59:60Z",
-            "1996-12-19T16:39:57-08:00"
-//          ,"1985-04-12T23:20:50.52Z"
+        // Testing that we're consistent from formatting to parsing.
+        final Date date0 = Date.from(Instant.ofEpochMilli(0));
+        final String dateString0 = NetconfNotification.RFC3339_DATE_FORMATTER.apply(date0);
+        final Date date1 = NetconfNotification.RFC3339_DATE_PARSER.apply(dateString0);
+        final String dateString1 = NetconfNotification.RFC3339_DATE_FORMATTER.apply(date1);
+        Assert.assertEquals(date0, date1);
+        Assert.assertEquals(dateString0, dateString1);
+
+        // Testing wrong values
+        for (final String time : Lists.newArrayList(
+                "0",
+                "205-10-23T09:42:27.67175+00:00",
+                "1970-01-01T17:60:22.229568+00:00",
+                "1937-01-01T32:00:27.87+00:20",
+                "2060-13-31T15:59:90-08:00",
+                "1990-12-31T23:58:60Z"
         )) {
             try {
-                simpleDateFormat.parse(time);
-            } catch (ParseException e) {
-                simpleDateFormat2.parse(time);
+                NetconfNotification.RFC3339_DATE_PARSER.apply(time);
+            } catch (final DateTimeParseException e) {
+                continue;
             }
+            fail("Should have thrown an exception; value= " + time);
         }
     }
 
@@ -78,7 +148,8 @@ public class NetconfNotificationManagerTest {
 
         final NetconfNotificationListener listener = mock(NetconfNotificationListener.class);
         doNothing().when(listener).onNotification(any(StreamNameType.class), any(NetconfNotification.class));
-        final NotificationListenerRegistration notificationListenerRegistration = netconfNotificationManager.registerNotificationListener(NetconfNotificationManager.BASE_NETCONF_STREAM.getName(), listener);
+        final NotificationListenerRegistration notificationListenerRegistration = netconfNotificationManager
+                .registerNotificationListener(NetconfNotificationManager.BASE_NETCONF_STREAM.getName(), listener);
         final NetconfCapabilityChange notification = capabilityChangedBuilder.build();
         baseNotificationPublisherRegistration.onCapabilityChanged(notification);
 
@@ -94,12 +165,14 @@ public class NetconfNotificationManagerTest {
     public void testClose() throws Exception {
         final NetconfNotificationManager netconfNotificationManager = new NetconfNotificationManager();
 
-        final BaseNotificationPublisherRegistration baseNotificationPublisherRegistration = netconfNotificationManager.registerBaseNotificationPublisher();
+        final BaseNotificationPublisherRegistration baseNotificationPublisherRegistration =
+                netconfNotificationManager.registerBaseNotificationPublisher();
 
         final NetconfNotificationListener listener = mock(NetconfNotificationListener.class);
         doNothing().when(listener).onNotification(any(StreamNameType.class), any(NetconfNotification.class));
 
-        netconfNotificationManager.registerNotificationListener(NetconfNotificationManager.BASE_NETCONF_STREAM.getName(), listener);
+        netconfNotificationManager
+                .registerNotificationListener(NetconfNotificationManager.BASE_NETCONF_STREAM.getName(), listener);
 
         final NetconfNotificationCollector.NetconfNotificationStreamListener streamListener =
                 mock(NetconfNotificationCollector.NetconfNotificationStreamListener.class);
@@ -127,7 +200,8 @@ public class NetconfNotificationManagerTest {
     public void testStreamListeners() throws Exception {
         final NetconfNotificationManager netconfNotificationManager = new NetconfNotificationManager();
 
-        final NetconfNotificationCollector.NetconfNotificationStreamListener streamListener = mock(NetconfNotificationCollector.NetconfNotificationStreamListener.class);
+        final NetconfNotificationCollector.NetconfNotificationStreamListener streamListener =
+                mock(NetconfNotificationCollector.NetconfNotificationStreamListener.class);
         doNothing().when(streamListener).onStreamRegistered(any(Stream.class));
         doNothing().when(streamListener).onStreamUnregistered(any(StreamNameType.class));