diff --git a/core/api/src/test/java/org/onosproject/net/newresource/ResourceAllocationTest.java b/core/api/src/test/java/org/onosproject/net/newresource/ResourceAllocationTest.java
new file mode 100644
index 0000000..2872046
--- /dev/null
+++ b/core/api/src/test/java/org/onosproject/net/newresource/ResourceAllocationTest.java
@@ -0,0 +1,51 @@
+/*
+ * Copyright 2015 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.net.newresource;
+
+import com.google.common.testing.EqualsTester;
+import org.junit.Test;
+import org.onlab.packet.VlanId;
+import org.onosproject.net.ConnectPoint;
+import org.onosproject.net.DeviceId;
+import org.onosproject.net.LinkKey;
+import org.onosproject.net.PortNumber;
+import org.onosproject.net.intent.IntentId;
+
+public class ResourceAllocationTest {
+
+    private static final DeviceId D1 = DeviceId.deviceId("of:001");
+    private static final DeviceId D2 = DeviceId.deviceId("of:002");
+    private static final PortNumber P1 = PortNumber.portNumber(1);
+    private static final ConnectPoint CP1_1 = new ConnectPoint(D1, P1);
+    private static final ConnectPoint CP2_1 = new ConnectPoint(D2, P1);
+    private static final VlanId VLAN1 = VlanId.vlanId((short) 100);
+    private static final IntentId IID1 = IntentId.valueOf(30);
+
+    @Test
+    public void testEquals() {
+        DefaultResourceAllocation<LinkKey, VlanId> alloc1 =
+                new DefaultResourceAllocation<>(LinkKey.linkKey(CP1_1, CP2_1), VLAN1, IID1);
+        DefaultResourceAllocation<LinkKey, VlanId> sameAsAlloc1 =
+                new DefaultResourceAllocation<>(LinkKey.linkKey(CP1_1, CP2_1), VLAN1, IID1);
+        DefaultResourceAllocation<LinkKey, VlanId> alloc2 =
+                new DefaultResourceAllocation<>(LinkKey.linkKey(CP2_1, CP1_1), VLAN1, IID1);
+
+        new EqualsTester()
+                .addEqualityGroup(alloc1, sameAsAlloc1)
+                .addEqualityGroup(alloc2)
+                .testEquals();
+    }
+}
