diff --git a/core/net/src/test/java/org/onosproject/core/impl/HybridLogicalClockManagerTest.java b/core/net/src/test/java/org/onosproject/core/impl/HybridLogicalClockManagerTest.java
new file mode 100644
index 0000000..806b417
--- /dev/null
+++ b/core/net/src/test/java/org/onosproject/core/impl/HybridLogicalClockManagerTest.java
@@ -0,0 +1,99 @@
+/*
+ * Copyright 2016-present Open Networking Laboratory
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.onosproject.core.impl;
+
+import java.util.concurrent.atomic.AtomicLong;
+import java.util.function.Supplier;
+
+import org.junit.Assert;
+import org.junit.Test;
+import org.onosproject.core.HybridLogicalTime;
+
+/**
+ * Unit tests for {@link HybridLogicalClockManager}.
+ */
+public class HybridLogicalClockManagerTest {
+
+    @Test
+    public void testLocalEvents() {
+        AtomicLong ticker = new AtomicLong();
+        Supplier<Long> ptSource = ticker::get;
+        HybridLogicalClockManager clockManager = new HybridLogicalClockManager();
+        clockManager.physicalTimeSource = ptSource;
+
+        HybridLogicalTime time1 = clockManager.timeNow();
+        Assert.assertEquals(0, time1.logicalTime());
+        Assert.assertEquals(1, time1.logicalCounter());
+
+        HybridLogicalTime time2 = clockManager.timeNow();
+        Assert.assertEquals(0, time2.logicalTime());
+        Assert.assertEquals(2, time2.logicalCounter());
+
+        ticker.incrementAndGet();
+
+        HybridLogicalTime time3 = clockManager.timeNow();
+        Assert.assertEquals(1, time3.logicalTime());
+        Assert.assertEquals(0, time3.logicalCounter());
+
+        HybridLogicalTime time4 = clockManager.timeNow();
+        Assert.assertEquals(1, time4.logicalTime());
+        Assert.assertEquals(1, time4.logicalCounter());
+    }
+
+    @Test
+    public void testReceiveEvents() {
+        AtomicLong ticker = new AtomicLong(1);
+        Supplier<Long> ptSource = ticker::get;
+        HybridLogicalClockManager clockManager = new HybridLogicalClockManager();
+        clockManager.physicalTimeSource = ptSource;
+
+        HybridLogicalTime time1 = clockManager.timeNow();
+        Assert.assertEquals(1, time1.logicalTime());
+        Assert.assertEquals(0, time1.logicalCounter());
+
+        HybridLogicalTime eventTime1 = new HybridLogicalTime(1, 0);
+        clockManager.recordEventTime(eventTime1);
+
+        Assert.assertEquals(1, clockManager.logicalTime());
+        Assert.assertEquals(1, clockManager.logicalCounter());
+
+        HybridLogicalTime eventTime2 = new HybridLogicalTime(2, 0);
+        clockManager.recordEventTime(eventTime2);
+
+        Assert.assertEquals(2, clockManager.logicalTime());
+        Assert.assertEquals(1, clockManager.logicalCounter());
+
+        HybridLogicalTime eventTime3 = new HybridLogicalTime(2, 2);
+        clockManager.recordEventTime(eventTime3);
+
+        Assert.assertEquals(2, clockManager.logicalTime());
+        Assert.assertEquals(3, clockManager.logicalCounter());
+
+        HybridLogicalTime eventTime4 = new HybridLogicalTime(2, 1);
+        clockManager.recordEventTime(eventTime4);
+
+        Assert.assertEquals(2, clockManager.logicalTime());
+        Assert.assertEquals(4, clockManager.logicalCounter());
+
+        ticker.set(4);
+
+        HybridLogicalTime eventTime5 = new HybridLogicalTime(3, 0);
+        clockManager.recordEventTime(eventTime5);
+
+        Assert.assertEquals(4, clockManager.logicalTime());
+        Assert.assertEquals(0, clockManager.logicalCounter());
+    }
+}
