[ONOS-6806] Add getAvailableDeviceCount method to DeviceService

Change-Id: Ieda7e66c1a1d25aa92b55542ecfe59652dac3bc5
diff --git a/core/api/src/main/java/org/onosproject/net/device/DeviceService.java b/core/api/src/main/java/org/onosproject/net/device/DeviceService.java
index 1cb90e8..b1ab0e6 100644
--- a/core/api/src/main/java/org/onosproject/net/device/DeviceService.java
+++ b/core/api/src/main/java/org/onosproject/net/device/DeviceService.java
@@ -39,6 +39,15 @@
     int getDeviceCount();
 
     /**
+     * Returns the number of currently available devices known to the system.
+     *
+     * @return number of available devices
+     */
+    default int getAvailableDeviceCount() {
+        return getDeviceCount();
+    }
+
+    /**
      * Returns a collection of the currently known infrastructure
      * devices.
      *
diff --git a/core/api/src/main/java/org/onosproject/net/device/DeviceServiceAdapter.java b/core/api/src/main/java/org/onosproject/net/device/DeviceServiceAdapter.java
index 9c6887c..146a93a 100644
--- a/core/api/src/main/java/org/onosproject/net/device/DeviceServiceAdapter.java
+++ b/core/api/src/main/java/org/onosproject/net/device/DeviceServiceAdapter.java
@@ -56,6 +56,11 @@
     }
 
     @Override
+    public int getAvailableDeviceCount() {
+        return 0;
+    }
+
+    @Override
     public Iterable<Device> getDevices() {
         return Collections.emptyList();
     }
diff --git a/core/api/src/main/java/org/onosproject/net/utils/ForwardingDeviceService.java b/core/api/src/main/java/org/onosproject/net/utils/ForwardingDeviceService.java
index e1f8110..60ae84e 100644
--- a/core/api/src/main/java/org/onosproject/net/utils/ForwardingDeviceService.java
+++ b/core/api/src/main/java/org/onosproject/net/utils/ForwardingDeviceService.java
@@ -63,6 +63,11 @@
     }
 
     @Override
+    public int getAvailableDeviceCount() {
+        return delegate.getAvailableDeviceCount();
+    }
+
+    @Override
     public Iterable<Device> getDevices() {
         return delegate.getDevices();
     }
diff --git a/core/net/src/main/java/org/onosproject/net/device/impl/DeviceManager.java b/core/net/src/main/java/org/onosproject/net/device/impl/DeviceManager.java
index cc80502..c0bf128 100644
--- a/core/net/src/main/java/org/onosproject/net/device/impl/DeviceManager.java
+++ b/core/net/src/main/java/org/onosproject/net/device/impl/DeviceManager.java
@@ -209,6 +209,12 @@
     }
 
     @Override
+    public int getAvailableDeviceCount() {
+        checkPermission(DEVICE_READ);
+        return store.getAvailableDeviceCount();
+    }
+
+    @Override
     public Iterable<Device> getDevices() {
         checkPermission(DEVICE_READ);
         return store.getDevices();
diff --git a/core/net/src/test/java/org/onosproject/net/device/impl/DeviceManagerTest.java b/core/net/src/test/java/org/onosproject/net/device/impl/DeviceManagerTest.java
index 941944f..84028c4 100644
--- a/core/net/src/test/java/org/onosproject/net/device/impl/DeviceManagerTest.java
+++ b/core/net/src/test/java/org/onosproject/net/device/impl/DeviceManagerTest.java
@@ -144,6 +144,7 @@
         assertNotNull("one device expected", it.next());
         assertFalse("only one device expected", it.hasNext());
         assertEquals("incorrect device count", 1, service.getDeviceCount());
+        assertEquals("incorrect available device count", 1, service.getAvailableDeviceCount());
         assertTrue("device should be available", service.isAvailable(DID1));
     }
 
@@ -165,6 +166,7 @@
         validateEvents(DEVICE_AVAILABILITY_CHANGED);
 
         assertEquals("incorrect device count", 2, service.getDeviceCount());
+        assertEquals("incorrect available device count", 2, service.getAvailableDeviceCount());
     }
 
     @Test
@@ -225,8 +227,8 @@
         assertEquals("wrong port count", 2, service.getPorts(DID1).size());
 
         Port port = service.getPort(DID1, P1);
-        assertEquals("incorrect port", P1, service.getPort(DID1, P1).number());
-        assertEquals("incorrect state", true, service.getPort(DID1, P1).isEnabled());
+        assertEquals("incorrect port", P1, port.number());
+        assertEquals("incorrect state", true, port.isEnabled());
     }
 
     @Test
@@ -234,10 +236,12 @@
         connectDevice(DID1, SW1);
         connectDevice(DID2, SW2);
         assertEquals("incorrect device count", 2, service.getDeviceCount());
+        assertEquals("incorrect available device count", 2, service.getAvailableDeviceCount());
         admin.removeDevice(DID1);
         assertNull("device should not be found", service.getDevice(DID1));
         assertNotNull("device should be found", service.getDevice(DID2));
         assertEquals("incorrect device count", 1, service.getDeviceCount());
+        assertEquals("incorrect available device count", 1, service.getAvailableDeviceCount());
 
     }