RIFT OSM R1 Initial Submission
[osm/SO.git] / common / python / rift / mano / config_data / test / test_converter.py
diff --git a/common/python/rift/mano/config_data/test/test_converter.py b/common/python/rift/mano/config_data/test/test_converter.py
new file mode 100644 (file)
index 0000000..1bfd7d7
--- /dev/null
@@ -0,0 +1,424 @@
+
+# 
+#   Copyright 2016 RIFT.IO Inc
+#
+#   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.
+#
+
+import pytest
+import uuid
+from gi.repository import NsdYang, VnfdYang
+from ..config import ConfigPrimitiveConvertor
+import yaml
+
+@pytest.fixture(scope="function")
+def nsd():
+    catalog = NsdYang.YangData_Nsd_NsdCatalog()
+    nsd = catalog.nsd.add()
+    nsd.id = str(uuid.uuid1())
+    return nsd
+
+@pytest.fixture(scope="function")
+def vnfd():
+    catalog = VnfdYang.YangData_Vnfd_VnfdCatalog()
+    vnfd = catalog.vnfd.add()
+    vnfd.id = str(uuid.uuid1())
+    return vnfd
+
+@pytest.fixture(scope="session")
+def convertor():
+    return ConfigPrimitiveConvertor()
+
+def test_nsd_config(nsd, convertor):
+        nsd.service_primitive.add().from_dict(
+            {
+                "parameter_group": [
+                    {
+                        "parameter": [
+                            {
+                                "data_type": "INTEGER",
+                                "default_value": "3000",
+                                "name": "Vlan ID",
+                                "mandatory": True
+                            }
+                        ],
+                        "name": "PE1",
+                        "mandatory": False
+                    },
+                    {
+                        "parameter": [
+                            {
+                                "data_type": "INTEGER",
+                                "default_value": "3000",
+                                "name": "Vlan ID",
+                                "mandatory": True
+                            }
+                        ],
+                        "name": "PE2",
+                        "mandatory": False
+                    }
+                ],
+                "parameter": [
+                    {
+                        "data_type": "INTEGER",
+                        "default_value": "10",
+                        "name": "Tunnel Key",
+                        "mandatory": True,
+                    }
+                ],
+                "name": "Add SP Test Corporation",
+                "user_defined_script": "add_corporation.py"
+            })
+
+        expected_yaml = """Add SP Test Corporation:
+  parameter:
+    Tunnel Key: '10'
+  parameter_group:
+    PE1:
+      Vlan ID: '3000'
+    PE2:
+      Vlan ID: '3000'
+"""
+
+        assert expected_yaml == \
+               convertor.extract_nsd_config(nsd)
+
+
+def test_nsd_multiple_config(nsd, convertor):
+        nsd.service_primitive.add().from_dict(
+            {
+                "parameter_group": [{
+                        "parameter": [
+                            {
+                                "data_type": "INTEGER",
+                                "default_value": "3000",
+                                "name": "Vlan ID",
+                                "mandatory": True
+                            }
+                        ],
+                        "name": "PE1",
+                        "mandatory": False
+                    }],
+                "parameter": [
+                    {
+                        "data_type": "INTEGER",
+                        "default_value": "10",
+                        "name": "Tunnel Key",
+                        "mandatory": True,
+                    }
+                ],
+                "name": "Add SP Test Corporation",
+                "user_defined_script": "add_corporation.py"
+            })
+
+        nsd.service_primitive.add().from_dict(
+            {
+                "parameter_group": [{
+                        "parameter": [
+                            {
+                                "data_type": "INTEGER",
+                                "default_value": "3000",
+                                "name": "Vlan ID",
+                                "mandatory": True
+                            }
+                        ],
+                        "name": "PE2",
+                        "mandatory": False
+                    }],
+                "parameter": [
+                    {
+                        "data_type": "INTEGER",
+                        "default_value": "10",
+                        "name": "Tunnel Key",
+                        "mandatory": True,
+                    }
+                ],
+                "name": "Add SP Test Corporation 2",
+                "user_defined_script": "add_corporation.py"
+            })
+
+        expected_yaml = """Add SP Test Corporation:
+  parameter:
+    Tunnel Key: '10'
+  parameter_group:
+    PE1:
+      Vlan ID: '3000'
+Add SP Test Corporation 2:
+  parameter:
+    Tunnel Key: '10'
+  parameter_group:
+    PE2:
+      Vlan ID: '3000'
+"""
+
+        assert yaml.load(expected_yaml) == \
+               yaml.load(convertor.extract_nsd_config(nsd))
+
+
+def test_vnfd_config(vnfd, convertor):
+    vnf_config = vnfd.vnf_configuration
+
+    # Set the initital-config
+    vnf_config.initial_config_primitive.add().from_dict({
+            "seq": 1,
+            "name": "config",
+            "parameter": [
+                {"name": "vpe-router", "value": "<rw_mgmt_ip>"},
+                {"name": "user", "value": "root"},
+                {"name": "pass", "value": "6windos"}
+            ]
+        })
+
+    vnf_config.initial_config_primitive.add().from_dict({
+            "name": "configure-interface",
+            "seq": 2,
+            "parameter": [
+                {"value": "10.10.10.2/30", "name": "cidr"}
+            ],
+        })
+
+    expected_yaml = """initial_config_primitive:
+  config:
+    parameter:
+      pass: 6windos
+      user: root
+      vpe-router: <rw_mgmt_ip>
+  configure-interface:
+    parameter:
+      cidr: 10.10.10.2/30
+"""
+
+    assert expected_yaml == convertor.extract_vnfd_config(vnfd)
+
+def test_vnfd_config_prim(vnfd, convertor):
+    vnf_config = vnfd.vnf_configuration
+
+    # Set the initital-config
+    vnf_config.initial_config_primitive.add().from_dict({
+            "seq": 1,
+            "name": "config",
+            "parameter": [
+                {"name": "vpe-router", "value": "<rw_mgmt_ip>"},
+                {"name": "user", "value": "root"},
+                {"name": "pass", "value": "6windos"}
+            ]
+        })
+
+    vnf_config.initial_config_primitive.add().from_dict({
+            "name": "configure-interface",
+            "seq": 2,
+            "parameter": [
+                {"value": "10.10.10.2/30", "name": "cidr"}
+            ],
+        })
+
+    vnf_config.service_primitive.add().from_dict({
+        "name": "PE1",
+        "parameter": [
+                {"name": "Foo", "default_value": "Bar"}
+        ]
+        })
+
+    expected_yaml = """service_primitive:
+  PE1:
+    parameter:
+      Foo: Bar
+initial_config_primitive:
+  config:
+    parameter:
+      pass: 6windos
+      user: root
+      vpe-router: <rw_mgmt_ip>
+  configure-interface:
+    parameter:
+      cidr: 10.10.10.2/30
+"""
+
+    assert expected_yaml == convertor.extract_vnfd_config(vnfd)
+
+
+
+def test_vnfd_merge(vnfd, convertor):
+    vnf_config = vnfd.vnf_configuration
+
+    # Set the initital-config
+    vnf_config.initial_config_primitive.add().from_dict({
+            "seq": 1,
+            "name": "config",
+            "parameter": [{"name": "vpe-router"},
+                          {"name": "user"},
+                          {"name": "pass"}
+            ]
+        })
+
+    vnf_config.initial_config_primitive.add().from_dict({
+            "name": "configure-interface",
+            "seq": 2,
+            "parameter": [{"name": "cidr"}],
+        })
+
+    vnf_config.service_primitive.add().from_dict({
+        "name": "PE1",
+        "parameter": [{"name": "Foo",}]
+        })
+
+    ip_yaml = """service_primitive:
+  PE1:
+    parameter:
+      Foo: Bar
+initial_config_primitive:
+  config:
+    parameter:
+      pass: 6windos
+      user: root
+      vpe-router: <rw_mgmt_ip>
+  configure-interface:
+    parameter:
+      cidr: 10.10.10.2/30
+"""
+
+    catalog = VnfdYang.YangData_Vnfd_VnfdCatalog()
+    expected_vnfd = catalog.vnfd.add()
+    vnf_config = expected_vnfd.vnf_configuration
+    expected_vnfd.id = vnfd.id
+
+    # Set the initital-confi
+    vnf_config.initial_config_primitive.add().from_dict({
+            "seq": 1,
+            "name": "config",
+            "parameter": [
+                {"name": "vpe-router", "value": "<rw_mgmt_ip>"},
+                {"name": "user", "value": "root"},
+                {"name": "pass", "value": "6windos"}
+            ]
+        })
+
+    vnf_config.initial_config_primitive.add().from_dict({
+            "name": "configure-interface",
+            "seq": 2,
+            "parameter": [
+                {"value": "10.10.10.2/30", "name": "cidr"}
+            ],
+        })
+
+    vnf_config.service_primitive.add().from_dict({
+        "name": "PE1",
+        "parameter": [
+                {"name": "Foo", "default_value": "Bar"}
+        ]
+        })
+
+    convertor.merge_vnfd_config(vnfd, yaml.load(ip_yaml))
+
+    assert vnfd.as_dict() == expected_vnfd.as_dict()
+
+
+def test_nsd_merge(nsd, convertor):
+        nsd.service_primitive.add().from_dict(
+            {
+                "parameter_group": [
+                    {
+                        "parameter": [
+                            {
+                                "data_type": "INTEGER",
+                                "default_value": "3000",
+                                "name": "Vlan ID",
+                                "mandatory": True
+                            }
+                        ],
+                        "name": "PE1",
+                        "mandatory": False
+                    },
+                    {
+                        "parameter": [
+                            {
+                                "data_type": "INTEGER",
+                                "default_value": "3000",
+                                "name": "Vlan ID",
+                                "mandatory": True
+                            }
+                        ],
+                        "name": "PE2",
+                        "mandatory": False
+                    }
+                ],
+                "parameter": [
+                    {
+                        "data_type": "INTEGER",
+                        "default_value": "10",
+                        "name": "Tunnel Key",
+                        "mandatory": True,
+                    }
+                ],
+                "name": "Add SP Test Corporation",
+                "user_defined_script": "add_corporation.py"
+            })
+
+        ip_yaml = """Add SP Test Corporation:
+  parameter:
+    Tunnel Key: '10'
+  parameter_group:
+    PE1:
+      Vlan ID: '3000'
+    PE2:
+      Vlan ID: '3000'
+"""
+
+        catalog = NsdYang.YangData_Nsd_NsdCatalog()
+        expected_nsd = catalog.nsd.add()
+        expected_nsd.id = nsd.id
+        expected_nsd.service_primitive.add().from_dict(
+            {
+                "parameter_group": [
+                    {
+                        "parameter": [
+                            {
+                                "data_type": "INTEGER",
+                                "default_value": "3000",
+                                "name": "Vlan ID",
+                                "mandatory": True
+                            }
+                        ],
+                        "name": "PE1",
+                        "mandatory": False
+                    },
+                    {
+                        "parameter": [
+                            {
+                                "data_type": "INTEGER",
+                                "default_value": "3000",
+                                "name": "Vlan ID",
+                                "mandatory": True
+                            }
+                        ],
+                        "name": "PE2",
+                        "mandatory": False
+                    }
+                ],
+                "parameter": [
+                    {
+                        "data_type": "INTEGER",
+                        "default_value": "10",
+                        "name": "Tunnel Key",
+                        "mandatory": True,
+                    }
+                ],
+                "name": "Add SP Test Corporation",
+                "user_defined_script": "add_corporation.py"
+            })
+
+        convertor.merge_nsd_config(nsd, yaml.load(ip_yaml))
+
+        assert nsd.as_dict() == expected_nsd.as_dict()
+
+