Complete Feature 6297 51/7551/1
authorAdam Israel <adam.israel@canonical.com>
Mon, 27 May 2019 12:39:19 +0000 (08:39 -0400)
committerAdam Israel <adam.israel@canonical.com>
Mon, 27 May 2019 12:44:17 +0000 (08:44 -0400)
This makes feature 6297 functionally complete, with a bug fix and an
integration test that demonstrates the functionality

Change-Id: I1d993f81ce19778ff8cf0c93514837fb88f4eac0
Signed-off-by: Adam Israel <adam.israel@canonical.com>
n2vc/vnf.py
tests/integration/test_charm_relate.py [new file with mode: 0644]

index a68e657..0d9530e 100644 (file)
@@ -339,6 +339,7 @@ class N2VC:
         # Loop through relations
         for cfg in configs:
             if 'juju' in cfg:
         # Loop through relations
         for cfg in configs:
             if 'juju' in cfg:
+                juju = cfg['juju']
                 if 'relation' in juju:
                     for rel in juju['relation']:
                         try:
                 if 'relation' in juju:
                     for rel in juju['relation']:
                         try:
diff --git a/tests/integration/test_charm_relate.py b/tests/integration/test_charm_relate.py
new file mode 100644 (file)
index 0000000..7a5609e
--- /dev/null
@@ -0,0 +1,185 @@
+"""
+Deploy a multi-vdu, multi-charm VNF
+"""
+
+import asyncio
+import logging
+import pytest
+from .. import base
+
+
+# @pytest.mark.serial
+class TestCharm(base.TestN2VC):
+
+    NSD_YAML = """
+    nsd:nsd-catalog:
+        nsd:
+        -   id: multivdurelate-ns
+            name: multivdurelate-ns
+            short-name: multivdurelate-ns
+            description: NS with 1 VNF connected by datanet and mgmtnet VLs
+            version: '1.0'
+            logo: osm.png
+            constituent-vnfd:
+            -   vnfd-id-ref: multivdurelate-vnf
+                member-vnf-index: '1'
+            vld:
+            -   id: mgmtnet
+                name: mgmtnet
+                short-name: mgmtnet
+                type: ELAN
+                mgmt-network: 'true'
+                vim-network-name: mgmt
+                vnfd-connection-point-ref:
+                -   vnfd-id-ref: multivdurelate-vnf
+                    member-vnf-index-ref: '1'
+                    vnfd-connection-point-ref: vnf-mgmt
+                -   vnfd-id-ref: multivdurelate-vnf
+                    member-vnf-index-ref: '2'
+                    vnfd-connection-point-ref: vnf-mgmt
+            -   id: datanet
+                name: datanet
+                short-name: datanet
+                type: ELAN
+                vnfd-connection-point-ref:
+                -   vnfd-id-ref: multivdurelate-vnf
+                    member-vnf-index-ref: '1'
+                    vnfd-connection-point-ref: vnf-data
+                -   vnfd-id-ref: multivdurelate-vnf
+                    member-vnf-index-ref: '2'
+                    vnfd-connection-point-ref: vnf-data
+    """
+
+    VNFD_YAML = """
+    vnfd:vnfd-catalog:
+        vnfd:
+        -   id: multivdurelate-vnf
+            name: multivdurelate-vnf
+            short-name: multivdurelate-vnf
+            version: '1.0'
+            description: A VNF consisting of 1 VDUs w/proxy charm
+            logo: osm.png
+            connection-point:
+            -   id: vnf-mgmt
+                name: vnf-mgmt
+                short-name: vnf-mgmt
+                type: VPORT
+            -   id: vnf-data
+                name: vnf-data
+                short-name: vnf-data
+                type: VPORT
+            mgmt-interface:
+                cp: vnf-mgmt
+            internal-vld:
+            -   id: internal
+                name: internal
+                short-name: internal
+                type: ELAN
+                internal-connection-point:
+                -   id-ref: mgmtVM-internal
+                -   id-ref: dataVM-internal
+            vdu:
+            -   id: mgmtVM
+                name: mgmtVM
+                image: xenial
+                count: '1'
+                vm-flavor:
+                    vcpu-count: '1'
+                    memory-mb: '1024'
+                    storage-gb: '10'
+                interface:
+                -   name: mgmtVM-eth0
+                    position: '1'
+                    type: EXTERNAL
+                    virtual-interface:
+                        type: VIRTIO
+                    external-connection-point-ref: vnf-mgmt
+                -   name: mgmtVM-eth1
+                    position: '2'
+                    type: INTERNAL
+                    virtual-interface:
+                        type: VIRTIO
+                    internal-connection-point-ref: mgmtVM-internal
+                internal-connection-point:
+                -   id: mgmtVM-internal
+                    name: mgmtVM-internal
+                    short-name: mgmtVM-internal
+                    type: VPORT
+                cloud-init-file: cloud-config.txt
+                vdu-configuration:
+                    juju:
+                        charm: proxy-ci
+                        proxy: true
+                        # Relation needs to map to the vdu providing or
+                        # requiring, so that we can map to the deployed app.
+                        relation:
+                        -   provides: dataVM:db
+                            requires: mgmtVM:app
+                    initial-config-primitive:
+                    -   seq: '1'
+                        name: test
+            -   id: dataVM
+                name: dataVM
+                image: xenial
+                count: '1'
+                vm-flavor:
+                    vcpu-count: '1'
+                    memory-mb: '1024'
+                    storage-gb: '10'
+                interface:
+                -   name: dataVM-eth0
+                    position: '1'
+                    type: EXTERNAL
+                    virtual-interface:
+                        type: VIRTIO
+                    external-connection-point-ref: vnf-mgmt
+                -   name: dataVM-eth1
+                    position: '2'
+                    type: INTERNAL
+                    virtual-interface:
+                        type: VIRTIO
+                    internal-connection-point-ref: dataVM-internal
+                internal-connection-point:
+                -   id: dataVM-internal
+                    name: dataVM-internal
+                    short-name: dataVM-internal
+                    type: VPORT
+                cloud-init-file: cloud-config.txt
+                vdu-configuration:
+                    juju:
+                        charm: proxy-ci
+                        proxy: true
+                    initial-config-primitive:
+                    -   seq: '1'
+                        name: test
+
+    """
+
+    # @pytest.mark.serial
+    @pytest.mark.asyncio
+    async def test_multivdu_relate(self, event_loop):
+        """Deploy and execute the initial-config-primitive of a VNF."""
+
+        if self.nsd and self.vnfd:
+            vnf_index = 0
+
+            for config in self.get_config():
+                juju = config['juju']
+                charm = juju['charm']
+
+                await self.deploy(
+                    vnf_index,
+                    charm,
+                    config,
+                    event_loop,
+                )
+                vnf_index += 1
+
+            while await self.running():
+                logging.debug("Waiting for test to finish...")
+                await asyncio.sleep(15)
+
+            # assert False
+            logging.debug("test_multivdu_relate stopped")
+
+        return 'ok'