Fix for JIRA ONOS-4620. Whenever networkconfiguration is deleted even the queued will be removed

Change-Id: I8d7f1a873af90cf86ea34f1a2b1585ef4c3e46e4
diff --git a/core/net/src/main/java/org/onosproject/net/config/impl/NetworkConfigManager.java b/core/net/src/main/java/org/onosproject/net/config/impl/NetworkConfigManager.java
index 151ea3d..bf33a25 100644
--- a/core/net/src/main/java/org/onosproject/net/config/impl/NetworkConfigManager.java
+++ b/core/net/src/main/java/org/onosproject/net/config/impl/NetworkConfigManager.java
@@ -261,6 +261,18 @@
          }
     }
 
+     @Override
+     public <S> void removeConfig(S subject) {
+        checkPermission(CONFIG_WRITE);
+        store.clearConfig(subject);
+     }
+
+     @Override
+     public <S> void removeConfig() {
+         checkPermission(CONFIG_WRITE);
+         store.clearConfig();
+     }
+
     // Auxiliary store delegate to receive notification about changes in
     // the network configuration store state - by the store itself.
     private class InternalStoreDelegate implements NetworkConfigStoreDelegate {
diff --git a/core/net/src/test/java/org/onosproject/net/config/impl/NetworkConfigManagerTest.java b/core/net/src/test/java/org/onosproject/net/config/impl/NetworkConfigManagerTest.java
index 2c52de6..3b5f3a0 100644
--- a/core/net/src/test/java/org/onosproject/net/config/impl/NetworkConfigManagerTest.java
+++ b/core/net/src/test/java/org/onosproject/net/config/impl/NetworkConfigManagerTest.java
@@ -239,4 +239,43 @@
         assertThat(configService.getSubjectFactory(String.class), notNullValue());
         assertThat(configService.getSubjectFactory("key1"), notNullValue());
     }
+
+    /**
+     * Tests creation, query and removal of a configuration including queued.
+     */
+    @Test
+    public void testRemoveConfig() {
+
+        assertThat(configService.getSubjectFactory(String.class), nullValue());
+        assertThat(configService.getSubjectFactory("key"), nullValue());
+
+        registry.registerConfigFactory(config1Factory);
+        registry.registerConfigFactory(config2Factory);
+        configService.applyConfig("configKey", BasicConfig1.class, new ObjectMapper().createObjectNode());
+
+        configService.applyConfig("key1", "key", "config1", new ObjectMapper().createObjectNode());
+        configService.applyConfig("key1", "keyxx", "config3", new ObjectMapper().createObjectNode());
+        configService.applyConfig("key2", "key1", "config4", new ObjectMapper().createObjectNode());
+
+        configService.removeConfig();
+
+        Set<String> subjects = configService.getSubjects(factory1.subjectClass());
+        assertThat(subjects.size(), is(0));
+
+        Set<String> subjects2 = configService.getSubjects(factory2.subjectClass());
+        assertThat(subjects2.size(), is(0));
+
+        configService.applyConfig("key1", "key", "config1", new ObjectMapper().createObjectNode());
+        configService.applyConfig("key1", "keyxx", "config3", new ObjectMapper().createObjectNode());
+        configService.applyConfig("key1", "key1", "config4", new ObjectMapper().createObjectNode());
+
+        @SuppressWarnings("unchecked")
+        Set<String> configs = configService.getSubjects(
+        configService.getSubjectFactory("key1").subjectClass());
+
+        configs.forEach(c -> configService.removeConfig(c));
+        Set<String> newConfig1 = configService.getSubjects(factory1.subjectClass());
+
+        assertThat(newConfig1, notNullValue());
+    }
 }