ONOS-3356 Fixed NPE when processing configuration of a non-existent device.

Change-Id: I00369a67c406634b2ee7d379cad6e0fc41842388
diff --git a/core/net/src/main/java/org/onosproject/net/device/impl/BasicDeviceOperator.java b/core/net/src/main/java/org/onosproject/net/device/impl/BasicDeviceOperator.java
index fa90eb6..3240342 100644
--- a/core/net/src/main/java/org/onosproject/net/device/impl/BasicDeviceOperator.java
+++ b/core/net/src/main/java/org/onosproject/net/device/impl/BasicDeviceOperator.java
@@ -51,7 +51,7 @@
      * @return DeviceDescription based on both sources
      */
     public static DeviceDescription combine(BasicDeviceConfig bdc, DeviceDescription descr) {
-        if (bdc == null) {
+        if (bdc == null || descr == null) {
             return descr;
         }
 
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 9215d3a..03281be 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
@@ -740,7 +740,7 @@
                     Device dev = getDevice(did);
                     DeviceDescription desc = (dev == null) ? null : BasicDeviceOperator.descriptionOf(dev);
                     desc = BasicDeviceOperator.combine(cfg, desc);
-                    if (getProvider(did) != null) {
+                    if (desc != null && getProvider(did) != null) {
                         de = store.createOrUpdateDevice(getProvider(did).id(), did, desc);
                     }
                 }
@@ -754,7 +754,7 @@
                     OpticalPortConfig opc = networkConfigService.getConfig(cpt, OpticalPortConfig.class);
                     PortDescription desc = OpticalPortOperator.descriptionOf(dpt);
                     desc = OpticalPortOperator.combine(opc, desc);
-                    if (getProvider(did) != null) {
+                    if (desc != null && getProvider(did) != null) {
                         de = store.updatePortStatus(getProvider(did).id(), did, desc);
                     }
                 }
diff --git a/tools/test/bin/onos-netcfg b/tools/test/bin/onos-netcfg
new file mode 100755
index 0000000..23900ec
--- /dev/null
+++ b/tools/test/bin/onos-netcfg
@@ -0,0 +1,15 @@
+#!/bin/bash
+# -----------------------------------------------------------------------------
+# ONOS network configuration uploader.
+# -----------------------------------------------------------------------------
+
+[ ! -d "$ONOS_ROOT" ] && echo "ONOS_ROOT is not defined" >&2 && exit 1
+. $ONOS_ROOT/tools/build/envDefaults
+
+node="${1:-$OCI}"
+file="${2:-$ONOS_ROOT/tools/test/topos/oe-linear-3.json}"
+url="${3}"
+
+curl -sS --fail -L --user $ONOS_WEB_USER:$ONOS_WEB_PASS \
+    -X POST -H 'Content-Type:application/json' \
+    http://$node:8181/onos/v1/network/configuration/${url} -d@$file