Cleaned up Integration Test setup 33/7233/2
authorMadhu Venugopal <mavenugo@gmail.com>
Tue, 20 May 2014 05:42:55 +0000 (22:42 -0700)
committerMadhu Venugopal <mavenugo@gmail.com>
Wed, 21 May 2014 03:13:27 +0000 (20:13 -0700)
1. Removed integration-test.properties from library and plugins
2. Removed unused json files from plugins.
3. Fixed all the places where some random default ipaddress / port is used
4. Forcing inclusion of ovsdbserver.ipaddress System Property when running integration Tests by an AssertFail.
5. Fixed a bug in OvsdbTestDeletePortIT

Change-Id: Icf5990fb11f66c90c0ec9c8cb30af8907ab121e6
Signed-off-by: Madhu Venugopal <mavenugo@gmail.com>
12 files changed:
library/pom.xml
library/src/test/java/org/opendaylight/ovsdb/lib/OvsDBClientTestIT.java
library/src/test/java/org/opendaylight/ovsdb/lib/OvsdbTestBase.java
library/src/test/resources/org/opendaylight/ovsdb/lib/message/integration-test.properties [deleted file]
plugin/pom.xml
plugin/src/test/java/org/opendaylight/ovsdb/plugin/OvsdbTestBase.java
plugin/src/test/java/org/opendaylight/ovsdb/plugin/OvsdbTestDeletePortIT.java
plugin/src/test/resources/logback.xml [deleted file]
plugin/src/test/resources/org/opendaylight/ovsdb/lib/message/integration-test.properties [deleted file]
plugin/src/test/resources/org/opendaylight/ovsdb/lib/message/monitor_response1.json [deleted file]
plugin/src/test/resources/org/opendaylight/ovsdb/lib/message/monitor_response_sample.json [deleted file]
plugin/src/test/resources/org/opendaylight/ovsdb/lib/schema/test_schema.json [deleted file]

index b281bf32a776b4b64602e8bdee1d2aef90bf8b1b..5270dbe1cc9f942223867c2d4e3a59e8481578e1 100755 (executable)
@@ -12,9 +12,6 @@
   <packaging>bundle</packaging>
 
   <properties>
-    <!-- used for filtering the integration test resource -->
-    <ovsdbserver.ipaddress>192.168.56.10</ovsdbserver.ipaddress>
-    <ovsdbserver.port>6640</ovsdbserver.port>
     <skip.integrationtest>true</skip.integrationtest>
   </properties>
   <dependencies>
index 40a2356a8a4916b9af99f15354d624d82b2ae8a3..26ba3a673d0257233c4de814f47da10502394d5e 100644 (file)
@@ -106,7 +106,7 @@ public class OvsDBClientTestIT extends OvsdbTestBase {
         });
 
         //for (int i = 0; i < 5 && results.isEmpty(); i++) { //wait 5 seconds to get a result
-        for (int i = 0; i < 500 ; i++) { //wait 5 seconds to get a result
+        for (int i = 0; i < 5 ; i++) { //wait 5 seconds to get a result
             System.out.println("waiting");
             Thread.sleep(1000);
         }
index dbf337bad6fb6f525fd87edabd13bfd7f5ee4a94..c70f79a0543f35777f4b2f04aaedf80a5ea85e10 100644 (file)
@@ -22,11 +22,12 @@ import io.netty.handler.codec.string.StringEncoder;
 import io.netty.util.CharsetUtil;
 
 import java.io.IOException;
-import java.io.InputStream;
 import java.net.InetAddress;
 import java.util.Properties;
 import java.util.concurrent.ExecutionException;
 
+import junit.framework.Assert;
+
 import org.opendaylight.ovsdb.lib.jsonrpc.JsonRpcDecoder;
 import org.opendaylight.ovsdb.lib.jsonrpc.JsonRpcEndpoint;
 import org.opendaylight.ovsdb.lib.jsonrpc.JsonRpcServiceBinderHandler;
@@ -37,20 +38,12 @@ import com.fasterxml.jackson.databind.DeserializationFeature;
 import com.fasterxml.jackson.databind.ObjectMapper;
 
 public abstract class OvsdbTestBase implements OvsdbRPC.Callback{
-    private final static String identifier = "TEST";
-
-    public Properties loadProperties() throws IOException {
-        InputStream is = this
-                .getClass()
-                .getClassLoader()
-                .getResourceAsStream(
-                        "org/opendaylight/ovsdb/lib/message/integration-test.properties");
-        if (is == null) {
-            throw new IOException("Unable to load integration-test.properties");
-        }
-        Properties props = new Properties();
-        props.load(is);
+    private final static String SERVER_IPADDRESS = "ovsdbserver.ipaddress";
+    private final static String SERVER_PORT = "ovsdbserver.port";
+    private final static String DEFAULT_SERVER_PORT = "6640";
 
+    public Properties loadProperties() {
+        Properties props = new Properties(System.getProperties());
         return props;
     }
 
@@ -101,12 +94,16 @@ public abstract class OvsdbTestBase implements OvsdbRPC.Callback{
 
     public OvsdbRPC getTestConnection() throws IOException {
         Properties props = loadProperties();
-        String address = props.getProperty("ovsdbserver.ipaddress");
-        String port = props.getProperty("ovsdbserver.port", "6640");
+        String address = props.getProperty(SERVER_IPADDRESS);
+        String port = props.getProperty(SERVER_PORT, DEFAULT_SERVER_PORT);
 
+        if (address == null) {
+            Assert.fail("Integration Test requires a valid ovsdbserver.ipaddress value.\n" +
+                        "Usage : mvn -Pintegrationtest -Dovsdbserver.ipaddress=x.x.x.x -Dovsdbserver.port=yyyy verify");
+        }
         Channel channel = this.connect(address, port);
         if (channel == null) {
-            throw new IOException("Failed to connecto to ovsdb server");
+            throw new IOException("Failed to connect to ovsdb server");
         }
         try {
             return this.handleNewConnection(channel);
diff --git a/library/src/test/resources/org/opendaylight/ovsdb/lib/message/integration-test.properties b/library/src/test/resources/org/opendaylight/ovsdb/lib/message/integration-test.properties
deleted file mode 100644 (file)
index 16978d1..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-ovsdbserver.ipaddress=192.168.111.135
-ovsdbserver.port=5000
\ No newline at end of file
index 663b8d895e43986b0e4a155c449eb0ce5c2616c1..623afc06b3fb4ae3b75cbdbf359a4f7998a89807 100755 (executable)
@@ -13,8 +13,6 @@
 
   <properties>
     <!-- used for filtering the integration test resource -->
-    <ovsdbserver.ipaddress>192.168.56.10</ovsdbserver.ipaddress>
-    <ovsdbserver.port>6640</ovsdbserver.port>
     <skip.integrationtest>true</skip.integrationtest>
   </properties>
   <dependencies>
index 9629ce593eca67f90ac34c7aec7dd5d12116f9e1..18d929a6ce0941ae28a04fc7191e677e7730b4e8 100644 (file)
 package org.opendaylight.ovsdb.plugin;
 
 import java.io.IOException;
-import java.io.InputStream;
 import java.util.HashMap;
 import java.util.Map;
 import java.util.Properties;
 
+import junit.framework.Assert;
+
 import org.opendaylight.controller.sal.connection.ConnectionConstants;
 import org.opendaylight.controller.sal.core.Node;
 import org.opendaylight.controller.sal.core.NodeConnector;
 
 public abstract class OvsdbTestBase {
     private final static String identifier = "TEST";
+    private final static String SERVER_IPADDRESS = "ovsdbserver.ipaddress";
+    private final static String SERVER_PORT = "ovsdbserver.port";
+    private final static String DEFAULT_SERVER_PORT = "6640";
 
     public Properties loadProperties() throws IOException {
-        InputStream is = this
-                .getClass()
-                .getClassLoader()
-                .getResourceAsStream(
-                        "org/opendaylight/ovsdb/lib/message/integration-test.properties");
-        if (is == null) {
-            throw new IOException("Unable to load integration-test.properties");
-        }
-        Properties props = new Properties();
-        props.load(is);
-
+        Properties props = new Properties(System.getProperties());
         return props;
     }
 
@@ -48,6 +42,14 @@ public abstract class OvsdbTestBase {
     }
 
     public TestObjects getTestConnection() throws IOException {
+        Properties props = loadProperties();
+        String address = props.getProperty(SERVER_IPADDRESS);
+        String port = props.getProperty(SERVER_PORT, DEFAULT_SERVER_PORT);
+
+        if (address == null) {
+            Assert.fail("Usage : mvn -Pintegrationtest -Dovsdbserver.ipaddress=x.x.x.x -Dovsdbserver.port=yyyy verify");
+        }
+
         Node.NodeIDType.registerIDType("OVS", String.class);
         NodeConnector.NodeConnectorIDType.registerIDType("OVS", String.class,
                 "OVS");
@@ -59,11 +61,9 @@ public abstract class OvsdbTestBase {
 
         connectionService.setInventoryServiceInternal(inventoryService);
         Map<ConnectionConstants, String> params = new HashMap<ConnectionConstants, String>();
-        Properties props = loadProperties();
-        params.put(ConnectionConstants.ADDRESS,
-                props.getProperty("ovsdbserver.ipaddress"));
-        params.put(ConnectionConstants.PORT,
-                props.getProperty("ovsdbserver.port", "6640"));
+
+        params.put(ConnectionConstants.ADDRESS, address);
+        params.put(ConnectionConstants.PORT, port);
 
         Node node = connectionService.connect(identifier, params);
         if (node == null) {
index dd5925862f276fc6f63f885a8f9af693c209512c..d83432b6fa254a8004faad2fc00c464af6ad9285 100644 (file)
@@ -11,35 +11,19 @@ package org.opendaylight.ovsdb.plugin;
 
 import org.junit.Test;
 import org.opendaylight.controller.sal.core.Node;
-import org.opendaylight.controller.sal.core.NodeConnector;
-import org.opendaylight.controller.sal.connection.ConnectionConstants;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-import java.util.HashMap;
-import java.util.Map;
-
-public class OvsdbTestDeletePortIT {
+public class OvsdbTestDeletePortIT extends OvsdbTestBase {
     private static final Logger logger = LoggerFactory
             .getLogger(OvsdbTestAddPortIT.class);
 
     @Test
     public void deletePort() throws Throwable{
-        Node.NodeIDType.registerIDType("OVS", String.class);
-        NodeConnector.NodeConnectorIDType.registerIDType("OVS", String.class, "OVS");
-
-        ConnectionService connectionService = new ConnectionService();
-        connectionService.init();
-        String identifier = "TEST";
-        Map<ConnectionConstants, String> params = new HashMap<ConnectionConstants, String>();
-        params.put(ConnectionConstants.ADDRESS, "10.12.0.78");
-        params.put(ConnectionConstants.PORT, "6634");
+        TestObjects testObjects = getTestConnection();
+        ConnectionService connectionService = testObjects.connectionService;
+        Node node = testObjects.node;
 
-        Node node = connectionService.connect(identifier, params);
-        if(node == null){
-            logger.error("Could not connect to ovsdb server");
-            return;
-        }
         /**
          * Deletes an existing port from an existing bridge
          * Ex. ovs-vsctl del-port ovsbr0 tap0
diff --git a/plugin/src/test/resources/logback.xml b/plugin/src/test/resources/logback.xml
deleted file mode 100644 (file)
index 70118ce..0000000
+++ /dev/null
@@ -1,25 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-
-<configuration>
-
-    <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
-        <!-- encoders are assigned the type
-             ch.qos.logback.classic.encoder.PatternLayoutEncoder by default -->
-        <encoder>
-            <pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{5} - %msg%n</pattern>
-        </encoder>
-    </appender>
-
-    <logger name="org.opendaylight.ovsdb.lib.jsonrpc.JsonRpcEndpoint" level="TRACE" additivity="false">
-        <appender-ref ref="STDOUT" />
-    </logger>
-
-    <!--<logger name="com.lordofthejars.foo" level="INFO" additivity="false">-->
-        <!--<appender-ref ref="STDOUT" />-->
-    <!--</logger>-->
-
-    <root level="INFO">
-        <appender-ref ref="STDOUT" />
-    </root>
-
-</configuration>
\ No newline at end of file
diff --git a/plugin/src/test/resources/org/opendaylight/ovsdb/lib/message/integration-test.properties b/plugin/src/test/resources/org/opendaylight/ovsdb/lib/message/integration-test.properties
deleted file mode 100644 (file)
index 16978d1..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-ovsdbserver.ipaddress=192.168.111.135
-ovsdbserver.port=5000
\ No newline at end of file
diff --git a/plugin/src/test/resources/org/opendaylight/ovsdb/lib/message/monitor_response1.json b/plugin/src/test/resources/org/opendaylight/ovsdb/lib/message/monitor_response1.json
deleted file mode 100644 (file)
index 21b3f76..0000000
+++ /dev/null
@@ -1,89 +0,0 @@
-{
-    "Bridge": {
-        "788de61c-0e4f-43d8-a068-259e75aabbba": {
-            "new": {
-                "controller": [
-                    "set",
-                    []
-                ],
-                "fail_mode": [
-                    "set",
-                    []
-                ],
-                "name": "br0",
-                "ports": [
-                    "set",
-                    [
-                        [
-                            "uuid",
-                            "f6018e7a-7ca5-4e72-a744-a9b434f47011"
-                        ],
-                        [
-                            "uuid",
-                            "fe3c89fd-2ff3-44d8-9f27-f9c7ac2a693d"
-                        ]
-                    ]
-                ]
-            }
-        }
-    },
-   "Port": {
-        "f6018e7a-7ca5-4e72-a744-a9b434f47011": {
-            "new": {
-                "interfaces": [
-                    "uuid",
-                    "13548b08-dca3-4d4b-9e9b-f50c237dcb9e"
-                ],
-                "name": "vif0",
-                "tag": [
-                    "set",
-                    []
-                ],
-                "trunks": [
-                    "set",
-                    []
-                ]
-            }
-        },
-        "fe3c89fd-2ff3-44d8-9f27-f9c7ac2a693d": {
-            "new": {
-                "interfaces": [
-                    "uuid",
-                    "88ae29fb-8c91-41a9-a14f-a74126e790c0"
-                ],
-                "name": "br0",
-                "tag": [
-                    "set",
-                    []
-                ],
-                "trunks": [
-                    "set",
-                    []
-                ]
-            }
-        }
-    },
-        "Interface": {
-            "13548b08-dca3-4d4b-9e9b-f50c237dcb9e": {
-                "new": {
-                    "name": "vif0",
-                    "options": [
-                        "map",
-                        [["remote_ip","192.168.1.165"]]
-                    ],
-                    "type": ""
-                }
-            },
-            "88ae29fb-8c91-41a9-a14f-a74126e790c0": {
-                "new": {
-                    "name": "br0",
-                    "options": [
-                        "map",
-                        []
-                    ],
-                    "type": "internal"
-                }
-            }
-        }
-
-}
diff --git a/plugin/src/test/resources/org/opendaylight/ovsdb/lib/message/monitor_response_sample.json b/plugin/src/test/resources/org/opendaylight/ovsdb/lib/message/monitor_response_sample.json
deleted file mode 100644 (file)
index b214944..0000000
+++ /dev/null
@@ -1,104 +0,0 @@
-{
-    "Bridge": {
-        "788de61c-0e4f-43d8-a068-259e75aabbba": {
-            "new": {
-                "controller": [
-                    "set",
-                    []
-                ],
-                "fail_mode": [
-                    "set",
-                    []
-                ],
-                "name": "br0",
-                "ports": [
-                    "set",
-                    [
-                        [
-                            "uuid",
-                            "f6018e7a-7ca5-4e72-a744-a9b434f47011"
-                        ],
-                        [
-                            "uuid",
-                            "fe3c89fd-2ff3-44d8-9f27-f9c7ac2a693d"
-                        ]
-                    ]
-                ]
-            }
-        }
-    },
-    "Interface": {
-        "13548b08-dca3-4d4b-9e9b-f50c237dcb9e": {
-            "new": {
-                "name": "vif0",
-                "options": [
-                    "map",
-                    []
-                ],
-                "type": ""
-            }
-        },
-        "88ae29fb-8c91-41a9-a14f-a74126e790c0": {
-            "new": {
-                "name": "br0",
-                "options": [
-                    "map",
-                    []
-                ],
-                "type": "internal"
-            }
-        }
-    },
-    "Open_vSwitch": {
-        "987c42d0-eab0-43d9-a32b-4246973706c2": {
-            "new": {
-                "bridges": [
-                    "uuid",
-                    "788de61c-0e4f-43d8-a068-259e75aabbba"
-                ],
-                "cur_cfg": 7,
-                "manager_options": [
-                    "set",
-                    []
-                ],
-                "ovs_version": "1.4.3"
-            }
-        }
-    },
-    "Port": {
-        "f6018e7a-7ca5-4e72-a744-a9b434f47011": {
-            "new": {
-                "interfaces": [
-                    "uuid",
-                    "13548b08-dca3-4d4b-9e9b-f50c237dcb9e"
-                ],
-                "name": "vif0",
-                "tag": [
-                    "set",
-                    []
-                ],
-                "trunks": [
-                    "set",
-                    []
-                ]
-            }
-        },
-        "fe3c89fd-2ff3-44d8-9f27-f9c7ac2a693d": {
-            "new": {
-                "interfaces": [
-                    "uuid",
-                    "88ae29fb-8c91-41a9-a14f-a74126e790c0"
-                ],
-                "name": "br0",
-                "tag": [
-                    "set",
-                    []
-                ],
-                "trunks": [
-                    "set",
-                    []
-                ]
-            }
-        }
-    }
-}
diff --git a/plugin/src/test/resources/org/opendaylight/ovsdb/lib/schema/test_schema.json b/plugin/src/test/resources/org/opendaylight/ovsdb/lib/schema/test_schema.json
deleted file mode 100644 (file)
index f7f8405..0000000
+++ /dev/null
@@ -1,1150 +0,0 @@
-{
-  "id": 0,
-  "result": {
-    "tables": {
-      "Port": {
-        "columns": {
-          "name": {
-            "mutable": false,
-            "type": "string"
-          },
-          "statistics": {
-            "ephemeral": true,
-            "type": {
-              "key": "string",
-              "min": 0,
-              "value": "integer",
-              "max": "unlimited"
-            }
-          },
-          "vlan_mode": {
-            "type": {
-              "key": {
-                "type": "string",
-                "enum": [
-                  "set",
-                  [
-                    "access",
-                    "native-tagged",
-                    "native-untagged",
-                    "trunk"
-                  ]
-                ]
-              },
-              "min": 0
-            }
-          },
-          "qos": {
-            "type": {
-              "key": {
-                "type": "uuid",
-                "refTable": "QoS"
-              },
-              "min": 0
-            }
-          },
-          "status": {
-            "ephemeral": true,
-            "type": {
-              "key": "string",
-              "min": 0,
-              "value": "string",
-              "max": "unlimited"
-            }
-          },
-          "trunks": {
-            "type": {
-              "key": {
-                "maxInteger": 4095,
-                "minInteger": 0,
-                "type": "integer"
-              },
-              "min": 0,
-              "max": 4096
-            }
-          },
-          "mac": {
-            "type": {
-              "key": "string",
-              "min": 0
-            }
-          },
-          "interfaces": {
-            "type": {
-              "key": {
-                "type": "uuid",
-                "refTable": "Interface"
-              },
-              "max": "unlimited"
-            }
-          },
-          "bond_downdelay": {
-            "type": "integer"
-          },
-          "bond_mode": {
-            "type": {
-              "key": {
-                "type": "string",
-                "enum": [
-                  "set",
-                  [
-                    "active-backup",
-                    "balance-slb",
-                    "balance-tcp",
-                    "stable"
-                  ]
-                ]
-              },
-              "min": 0
-            }
-          },
-          "bond_updelay": {
-            "type": "integer"
-          },
-          "external_ids": {
-            "type": {
-              "key": "string",
-              "min": 0,
-              "value": "string",
-              "max": "unlimited"
-            }
-          },
-          "other_config": {
-            "type": {
-              "key": "string",
-              "min": 0,
-              "value": "string",
-              "max": "unlimited"
-            }
-          },
-          "tag": {
-            "type": {
-              "key": {
-                "maxInteger": 4095,
-                "minInteger": 0,
-                "type": "integer"
-              },
-              "min": 0
-            }
-          },
-          "bond_fake_iface": {
-            "type": "boolean"
-          },
-          "fake_bridge": {
-            "type": "boolean"
-          },
-          "lacp": {
-            "type": {
-              "key": {
-                "type": "string",
-                "enum": [
-                  "set",
-                  [
-                    "active",
-                    "off",
-                    "passive"
-                  ]
-                ]
-              },
-              "min": 0
-            }
-          }
-        },
-        "indexes": [
-          [
-            "name"
-          ]
-        ]
-      },
-      "Manager": {
-        "columns": {
-          "is_connected": {
-            "ephemeral": true,
-            "type": "boolean"
-          },
-          "target": {
-            "type": "string"
-          },
-          "other_config": {
-            "type": {
-              "key": "string",
-              "min": 0,
-              "value": "string",
-              "max": "unlimited"
-            }
-          },
-          "external_ids": {
-            "type": {
-              "key": "string",
-              "min": 0,
-              "value": "string",
-              "max": "unlimited"
-            }
-          },
-          "max_backoff": {
-            "type": {
-              "key": {
-                "minInteger": 1000,
-                "type": "integer"
-              },
-              "min": 0
-            }
-          },
-          "connection_mode": {
-            "type": {
-              "key": {
-                "type": "string",
-                "enum": [
-                  "set",
-                  [
-                    "in-band",
-                    "out-of-band"
-                  ]
-                ]
-              },
-              "min": 0
-            }
-          },
-          "status": {
-            "ephemeral": true,
-            "type": {
-              "key": "string",
-              "min": 0,
-              "value": "string",
-              "max": "unlimited"
-            }
-          },
-          "inactivity_probe": {
-            "type": {
-              "key": "integer",
-              "min": 0
-            }
-          }
-        },
-        "indexes": [
-          [
-            "target"
-          ]
-        ]
-      },
-      "Bridge": {
-        "columns": {
-          "name": {
-            "mutable": false,
-            "type": "string"
-          },
-          "flood_vlans": {
-            "type": {
-              "key": {
-                "maxInteger": 4095,
-                "minInteger": 0,
-                "type": "integer"
-              },
-              "min": 0,
-              "max": 4096
-            }
-          },
-          "netflow": {
-            "type": {
-              "key": {
-                "type": "uuid",
-                "refTable": "NetFlow"
-              },
-              "min": 0
-            }
-          },
-          "mirrors": {
-            "type": {
-              "key": {
-                "type": "uuid",
-                "refTable": "Mirror"
-              },
-              "min": 0,
-              "max": "unlimited"
-            }
-          },
-          "status": {
-            "ephemeral": true,
-            "type": {
-              "key": "string",
-              "min": 0,
-              "value": "string",
-              "max": "unlimited"
-            }
-          },
-          "datapath_id": {
-            "ephemeral": true,
-            "type": {
-              "key": "string",
-              "min": 0
-            }
-          },
-          "controller": {
-            "type": {
-              "key": {
-                "type": "uuid",
-                "refTable": "Controller"
-              },
-              "min": 0,
-              "max": "unlimited"
-            }
-          },
-          "protocols": {
-            "type": {
-              "key": {
-                "type": "string",
-                "enum": [
-                  "set",
-                  [
-                    "OpenFlow10",
-                    "OpenFlow12",
-                    "OpenFlow13"
-                  ]
-                ]
-              },
-              "min": 0,
-              "max": "unlimited"
-            }
-          },
-          "fail_mode": {
-            "type": {
-              "key": {
-                "type": "string",
-                "enum": [
-                  "set",
-                  [
-                    "secure",
-                    "standalone"
-                  ]
-                ]
-              },
-              "min": 0
-            }
-          },
-          "ports": {
-            "type": {
-              "key": {
-                "type": "uuid",
-                "refTable": "Port"
-              },
-              "min": 0,
-              "max": "unlimited"
-            }
-          },
-          "external_ids": {
-            "type": {
-              "key": "string",
-              "min": 0,
-              "value": "string",
-              "max": "unlimited"
-            }
-          },
-          "flow_tables": {
-            "type": {
-              "key": {
-                "maxInteger": 254,
-                "minInteger": 0,
-                "type": "integer"
-              },
-              "min": 0,
-              "value": {
-                "type": "uuid",
-                "refTable": "Flow_Table"
-              },
-              "max": "unlimited"
-            }
-          },
-          "sflow": {
-            "type": {
-              "key": {
-                "type": "uuid",
-                "refTable": "sFlow"
-              },
-              "min": 0
-            }
-          },
-          "datapath_type": {
-            "type": "string"
-          },
-          "other_config": {
-            "type": {
-              "key": "string",
-              "min": 0,
-              "value": "string",
-              "max": "unlimited"
-            }
-          },
-          "stp_enable": {
-            "type": "boolean"
-          }
-        },
-        "indexes": [
-          [
-            "name"
-          ]
-        ]
-      },
-      "Interface": {
-        "columns": {
-          "options": {
-            "type": {
-              "key": "string",
-              "min": 0,
-              "value": "string",
-              "max": "unlimited"
-            }
-          },
-          "name": {
-            "mutable": false,
-            "type": "string"
-          },
-          "statistics": {
-            "ephemeral": true,
-            "type": {
-              "key": "string",
-              "min": 0,
-              "value": "integer",
-              "max": "unlimited"
-            }
-          },
-          "link_speed": {
-            "ephemeral": true,
-            "type": {
-              "key": "integer",
-              "min": 0
-            }
-          },
-          "mtu": {
-            "ephemeral": true,
-            "type": {
-              "key": "integer",
-              "min": 0
-            }
-          },
-          "mac_in_use": {
-            "ephemeral": true,
-            "type": {
-              "key": "string",
-              "min": 0
-            }
-          },
-          "type": {
-            "type": "string"
-          },
-          "ingress_policing_rate": {
-            "type": {
-              "key": {
-                "minInteger": 0,
-                "type": "integer"
-              }
-            }
-          },
-          "cfm_remote_opstate": {
-            "ephemeral": true,
-            "type": {
-              "key": {
-                "type": "string",
-                "enum": [
-                  "set",
-                  [
-                    "down",
-                    "up"
-                  ]
-                ]
-              },
-              "min": 0
-            }
-          },
-          "status": {
-            "ephemeral": true,
-            "type": {
-              "key": "string",
-              "min": 0,
-              "value": "string",
-              "max": "unlimited"
-            }
-          },
-          "mac": {
-            "type": {
-              "key": "string",
-              "min": 0
-            }
-          },
-          "ofport": {
-            "type": {
-              "key": "integer",
-              "min": 0
-            }
-          },
-          "cfm_fault_status": {
-            "ephemeral": true,
-            "type": {
-              "key": "string",
-              "min": 0,
-              "max": "unlimited"
-            }
-          },
-          "duplex": {
-            "ephemeral": true,
-            "type": {
-              "key": {
-                "type": "string",
-                "enum": [
-                  "set",
-                  [
-                    "full",
-                    "half"
-                  ]
-                ]
-              },
-              "min": 0
-            }
-          },
-          "lacp_current": {
-            "ephemeral": true,
-            "type": {
-              "key": "boolean",
-              "min": 0
-            }
-          },
-          "cfm_fault": {
-            "ephemeral": true,
-            "type": {
-              "key": "boolean",
-              "min": 0
-            }
-          },
-          "external_ids": {
-            "type": {
-              "key": "string",
-              "min": 0,
-              "value": "string",
-              "max": "unlimited"
-            }
-          },
-          "other_config": {
-            "type": {
-              "key": "string",
-              "min": 0,
-              "value": "string",
-              "max": "unlimited"
-            }
-          },
-          "admin_state": {
-            "ephemeral": true,
-            "type": {
-              "key": {
-                "type": "string",
-                "enum": [
-                  "set",
-                  [
-                    "down",
-                    "up"
-                  ]
-                ]
-              },
-              "min": 0
-            }
-          },
-          "link_state": {
-            "ephemeral": true,
-            "type": {
-              "key": {
-                "type": "string",
-                "enum": [
-                  "set",
-                  [
-                    "down",
-                    "up"
-                  ]
-                ]
-              },
-              "min": 0
-            }
-          },
-          "cfm_remote_mpids": {
-            "ephemeral": true,
-            "type": {
-              "key": "integer",
-              "min": 0,
-              "max": "unlimited"
-            }
-          },
-          "cfm_mpid": {
-            "type": {
-              "key": "integer",
-              "min": 0
-            }
-          },
-          "ofport_request": {
-            "type": {
-              "key": {
-                "maxInteger": 65279,
-                "minInteger": 1,
-                "type": "integer"
-              },
-              "min": 0
-            }
-          },
-          "ingress_policing_burst": {
-            "type": {
-              "key": {
-                "minInteger": 0,
-                "type": "integer"
-              }
-            }
-          },
-          "cfm_health": {
-            "ephemeral": true,
-            "type": {
-              "key": {
-                "maxInteger": 100,
-                "minInteger": 0,
-                "type": "integer"
-              },
-              "min": 0
-            }
-          },
-          "link_resets": {
-            "ephemeral": true,
-            "type": {
-              "key": "integer",
-              "min": 0
-            }
-          }
-        },
-        "indexes": [
-          [
-            "name"
-          ]
-        ]
-      },
-      "SSL": {
-        "columns": {
-          "ca_cert": {
-            "type": "string"
-          },
-          "private_key": {
-            "type": "string"
-          },
-          "bootstrap_ca_cert": {
-            "type": "boolean"
-          },
-          "external_ids": {
-            "type": {
-              "key": "string",
-              "min": 0,
-              "value": "string",
-              "max": "unlimited"
-            }
-          },
-          "certificate": {
-            "type": "string"
-          }
-        },
-        "maxRows": 1
-      },
-      "Open_vSwitch": {
-        "columns": {
-          "ovs_version": {
-            "type": {
-              "key": "string",
-              "min": 0
-            }
-          },
-          "system_version": {
-            "type": {
-              "key": "string",
-              "min": 0
-            }
-          },
-          "bridges": {
-            "type": {
-              "key": {
-                "type": "uuid",
-                "refTable": "Bridge"
-              },
-              "min": 0,
-              "max": "unlimited"
-            }
-          },
-          "statistics": {
-            "ephemeral": true,
-            "type": {
-              "key": "string",
-              "min": 0,
-              "value": "string",
-              "max": "unlimited"
-            }
-          },
-          "other_config": {
-            "type": {
-              "key": "string",
-              "min": 0,
-              "value": "string",
-              "max": "unlimited"
-            }
-          },
-          "external_ids": {
-            "type": {
-              "key": "string",
-              "min": 0,
-              "value": "string",
-              "max": "unlimited"
-            }
-          },
-          "next_cfg": {
-            "type": "integer"
-          },
-          "manager_options": {
-            "type": {
-              "key": {
-                "type": "uuid",
-                "refTable": "Manager"
-              },
-              "min": 0,
-              "max": "unlimited"
-            }
-          },
-          "system_type": {
-            "type": {
-              "key": "string",
-              "min": 0
-            }
-          },
-          "ssl": {
-            "type": {
-              "key": {
-                "type": "uuid",
-                "refTable": "SSL"
-              },
-              "min": 0
-            }
-          },
-          "db_version": {
-            "type": {
-              "key": "string",
-              "min": 0
-            }
-          },
-          "cur_cfg": {
-            "type": "integer"
-          }
-        },
-        "maxRows": 1,
-        "isRoot": true
-      },
-      "Queue": {
-        "columns": {
-          "external_ids": {
-            "type": {
-              "key": "string",
-              "min": 0,
-              "value": "string",
-              "max": "unlimited"
-            }
-          },
-          "other_config": {
-            "type": {
-              "key": "string",
-              "min": 0,
-              "value": "string",
-              "max": "unlimited"
-            }
-          },
-          "dscp": {
-            "type": {
-              "key": {
-                "maxInteger": 63,
-                "minInteger": 0,
-                "type": "integer"
-              },
-              "min": 0
-            }
-          }
-        },
-        "isRoot": true
-      },
-      "NetFlow": {
-        "columns": {
-          "engine_type": {
-            "type": {
-              "key": {
-                "maxInteger": 255,
-                "minInteger": 0,
-                "type": "integer"
-              },
-              "min": 0
-            }
-          },
-          "targets": {
-            "type": {
-              "key": "string",
-              "max": "unlimited"
-            }
-          },
-          "add_id_to_interface": {
-            "type": "boolean"
-          },
-          "active_timeout": {
-            "type": {
-              "key": {
-                "minInteger": -1,
-                "type": "integer"
-              }
-            }
-          },
-          "external_ids": {
-            "type": {
-              "key": "string",
-              "min": 0,
-              "value": "string",
-              "max": "unlimited"
-            }
-          },
-          "engine_id": {
-            "type": {
-              "key": {
-                "maxInteger": 255,
-                "minInteger": 0,
-                "type": "integer"
-              },
-              "min": 0
-            }
-          }
-        }
-      },
-      "Mirror": {
-        "columns": {
-          "name": {
-            "type": "string"
-          },
-          "output_port": {
-            "type": {
-              "key": {
-                "refType": "weak",
-                "type": "uuid",
-                "refTable": "Port"
-              },
-              "min": 0
-            }
-          },
-          "output_vlan": {
-            "type": {
-              "key": {
-                "maxInteger": 4095,
-                "minInteger": 1,
-                "type": "integer"
-              },
-              "min": 0
-            }
-          },
-          "statistics": {
-            "ephemeral": true,
-            "type": {
-              "key": "string",
-              "min": 0,
-              "value": "integer",
-              "max": "unlimited"
-            }
-          },
-          "external_ids": {
-            "type": {
-              "key": "string",
-              "min": 0,
-              "value": "string",
-              "max": "unlimited"
-            }
-          },
-          "select_dst_port": {
-            "type": {
-              "key": {
-                "refType": "weak",
-                "type": "uuid",
-                "refTable": "Port"
-              },
-              "min": 0,
-              "max": "unlimited"
-            }
-          },
-          "select_all": {
-            "type": "boolean"
-          },
-          "select_vlan": {
-            "type": {
-              "key": {
-                "maxInteger": 4095,
-                "minInteger": 0,
-                "type": "integer"
-              },
-              "min": 0,
-              "max": 4096
-            }
-          },
-          "select_src_port": {
-            "type": {
-              "key": {
-                "refType": "weak",
-                "type": "uuid",
-                "refTable": "Port"
-              },
-              "min": 0,
-              "max": "unlimited"
-            }
-          }
-        }
-      },
-      "QoS": {
-        "columns": {
-          "queues": {
-            "type": {
-              "key": {
-                "maxInteger": 4294967295,
-                "minInteger": 0,
-                "type": "integer"
-              },
-              "min": 0,
-              "value": {
-                "type": "uuid",
-                "refTable": "Queue"
-              },
-              "max": "unlimited"
-            }
-          },
-          "other_config": {
-            "type": {
-              "key": "string",
-              "min": 0,
-              "value": "string",
-              "max": "unlimited"
-            }
-          },
-          "external_ids": {
-            "type": {
-              "key": "string",
-              "min": 0,
-              "value": "string",
-              "max": "unlimited"
-            }
-          },
-          "type": {
-            "type": "string"
-          }
-        },
-        "isRoot": true
-      },
-      "Controller": {
-        "columns": {
-          "is_connected": {
-            "ephemeral": true,
-            "type": "boolean"
-          },
-          "enable_async_messages": {
-            "type": {
-              "key": "boolean",
-              "min": 0
-            }
-          },
-          "controller_rate_limit": {
-            "type": {
-              "key": {
-                "minInteger": 100,
-                "type": "integer"
-              },
-              "min": 0
-            }
-          },
-          "target": {
-            "type": "string"
-          },
-          "external_ids": {
-            "type": {
-              "key": "string",
-              "min": 0,
-              "value": "string",
-              "max": "unlimited"
-            }
-          },
-          "other_config": {
-            "type": {
-              "key": "string",
-              "min": 0,
-              "value": "string",
-              "max": "unlimited"
-            }
-          },
-          "local_netmask": {
-            "type": {
-              "key": "string",
-              "min": 0
-            }
-          },
-          "local_gateway": {
-            "type": {
-              "key": "string",
-              "min": 0
-            }
-          },
-          "max_backoff": {
-            "type": {
-              "key": {
-                "minInteger": 1000,
-                "type": "integer"
-              },
-              "min": 0
-            }
-          },
-          "local_ip": {
-            "type": {
-              "key": "string",
-              "min": 0
-            }
-          },
-          "connection_mode": {
-            "type": {
-              "key": {
-                "type": "string",
-                "enum": [
-                  "set",
-                  [
-                    "in-band",
-                    "out-of-band"
-                  ]
-                ]
-              },
-              "min": 0
-            }
-          },
-          "status": {
-            "ephemeral": true,
-            "type": {
-              "key": "string",
-              "min": 0,
-              "value": "string",
-              "max": "unlimited"
-            }
-          },
-          "role": {
-            "ephemeral": true,
-            "type": {
-              "key": {
-                "type": "string",
-                "enum": [
-                  "set",
-                  [
-                    "master",
-                    "other",
-                    "slave"
-                  ]
-                ]
-              },
-              "min": 0
-            }
-          },
-          "inactivity_probe": {
-            "type": {
-              "key": "integer",
-              "min": 0
-            }
-          },
-          "controller_burst_limit": {
-            "type": {
-              "key": {
-                "minInteger": 25,
-                "type": "integer"
-              },
-              "min": 0
-            }
-          }
-        }
-      },
-      "Flow_Table": {
-        "columns": {
-          "groups": {
-            "type": {
-              "key": "string",
-              "min": 0,
-              "max": "unlimited"
-            }
-          },
-          "name": {
-            "type": {
-              "key": "string",
-              "min": 0
-            }
-          },
-          "overflow_policy": {
-            "type": {
-              "key": {
-                "type": "string",
-                "enum": [
-                  "set",
-                  [
-                    "evict",
-                    "refuse"
-                  ]
-                ]
-              },
-              "min": 0
-            }
-          },
-          "flow_limit": {
-            "type": {
-              "key": {
-                "minInteger": 0,
-                "type": "integer"
-              },
-              "min": 0
-            }
-          }
-        }
-      },
-      "sFlow": {
-        "columns": {
-          "polling": {
-            "type": {
-              "key": "integer",
-              "min": 0
-            }
-          },
-          "targets": {
-            "type": {
-              "key": "string",
-              "max": "unlimited"
-            }
-          },
-          "header": {
-            "type": {
-              "key": "integer",
-              "min": 0
-            }
-          },
-          "agent": {
-            "type": {
-              "key": "string",
-              "min": 0
-            }
-          },
-          "external_ids": {
-            "type": {
-              "key": "string",
-              "min": 0,
-              "value": "string",
-              "max": "unlimited"
-            }
-          },
-          "sampling": {
-            "type": {
-              "key": "integer",
-              "min": 0
-            }
-          }
-        }
-      }
-    },
-    "cksum": "2180939265 17455",
-    "name": "Open_vSwitch",
-    "version": "6.12.0"
-  },
-  "error": null
-}