summaryrefslogtreecommitdiff
path: root/tests
diff options
context:
space:
mode:
authorScott Moser <smoser@brickies.net>2016-09-12 15:49:09 -0400
committerScott Moser <smoser@brickies.net>2016-09-12 15:49:09 -0400
commit4610e3268996fdfff0cbaabce1198829466fdd78 (patch)
tree78bfa08f9dff0e77e945663775097217ae8ff8ae /tests
parentb7d3e3b4064dcf500d02a95291d0d4b66ae2bf83 (diff)
parent65ace7b35494dba1747eece815754ab8573d83d8 (diff)
downloadvyos-cloud-init-4610e3268996fdfff0cbaabce1198829466fdd78.tar.gz
vyos-cloud-init-4610e3268996fdfff0cbaabce1198829466fdd78.zip
merge from master at 0.7.7-31-g65ace7b
Diffstat (limited to 'tests')
-rw-r--r--tests/unittests/test_datasource/test_configdrive.py22
-rw-r--r--tests/unittests/test_datasource/test_ovf.py83
2 files changed, 102 insertions, 3 deletions
diff --git a/tests/unittests/test_datasource/test_configdrive.py b/tests/unittests/test_datasource/test_configdrive.py
index 98ff97a7..6e00abf4 100644
--- a/tests/unittests/test_datasource/test_configdrive.py
+++ b/tests/unittests/test_datasource/test_configdrive.py
@@ -1,4 +1,4 @@
-from copy import copy
+from copy import copy, deepcopy
import json
import os
import shutil
@@ -101,7 +101,7 @@ NETWORK_DATA_2 = {
"type": "vif", "id": "eth1", "vif_id": "vif-foo2"}]
}
-# This network data ha 'tap' type for a link.
+# This network data ha 'tap' or null type for a link.
NETWORK_DATA_3 = {
"services": [{"type": "dns", "address": "172.16.36.11"},
{"type": "dns", "address": "172.16.36.12"}],
@@ -132,7 +132,7 @@ NETWORK_DATA_3 = {
"type": "tap", "id": "tap77a0dc5b-72",
"vif_id": "77a0dc5b-720e-41b7-bfa7-1b2ff62e0d48"},
{"ethernet_mac_address": "fa:16:3e:a8:14:69", "mtu": None,
- "type": "tap", "id": "tap7d6b7bec-93",
+ "type": None, "id": "tap7d6b7bec-93",
"vif_id": "7d6b7bec-93e6-4c03-869a-ddc5014892d5"}
]
}
@@ -704,6 +704,22 @@ class TestConvertNetworkData(TestCase):
self.assertIn("address 10.0.1.5", eni_rendering)
self.assertIn("auto enp0s1.602", eni_rendering)
+ def test_mac_addrs_can_be_upper_case(self):
+ # input mac addresses on rackspace may be upper case
+ my_netdata = deepcopy(NETWORK_DATA)
+ for link in my_netdata['links']:
+ link['ethernet_mac_address'] = link['ethernet_mac_address'].upper()
+
+ ncfg = openstack.convert_net_json(my_netdata, known_macs=KNOWN_MACS)
+ config_name2mac = {}
+ for n in ncfg['config']:
+ if n['type'] == 'physical':
+ config_name2mac[n['name']] = n['mac_address']
+
+ expected = {'nic0': 'fa:16:3e:05:30:fe', 'enp0s1': 'fa:16:3e:69:b0:58',
+ 'enp0s2': 'fa:16:3e:d4:57:ad'}
+ self.assertEqual(expected, config_name2mac)
+
def cfg_ds_from_dir(seed_d):
cfg_ds = ds.DataSourceConfigDrive(settings.CFG_BUILTIN, None,
diff --git a/tests/unittests/test_datasource/test_ovf.py b/tests/unittests/test_datasource/test_ovf.py
new file mode 100644
index 00000000..5f8e7e44
--- /dev/null
+++ b/tests/unittests/test_datasource/test_ovf.py
@@ -0,0 +1,83 @@
+# vi: ts=4 expandtab
+#
+# Copyright (C) 2016 Canonical Ltd.
+#
+# Author: Scott Moser <scott.moser@canonical.com>
+#
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU General Public License version 3, as
+# published by the Free Software Foundation.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+import base64
+
+from .. import helpers as test_helpers
+
+from cloudinit.sources import DataSourceOVF as dsovf
+
+OVF_ENV_CONTENT = """<?xml version="1.0" encoding="UTF-8"?>
+<Environment xmlns="http://schemas.dmtf.org/ovf/environment/1"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xmlns:oe="http://schemas.dmtf.org/ovf/environment/1"
+ xsi:schemaLocation="http://schemas.dmtf.org/ovf/environment/1 ../dsp8027.xsd"
+ oe:id="WebTier">
+ <!-- Information about hypervisor platform -->
+ <oe:PlatformSection>
+ <Kind>ESX Server</Kind>
+ <Version>3.0.1</Version>
+ <Vendor>VMware, Inc.</Vendor>
+ <Locale>en_US</Locale>
+ </oe:PlatformSection>
+ <!--- Properties defined for this virtual machine -->
+ <PropertySection>
+{properties}
+ </PropertySection>
+</Environment>
+"""
+
+
+def fill_properties(props, template=OVF_ENV_CONTENT):
+ lines = []
+ prop_tmpl = '<Property oe:key="{key}" oe:value="{val}"/>'
+ for key, val in props.items():
+ lines.append(prop_tmpl.format(key=key, val=val))
+ indent = " "
+ properties = ''.join([indent + l + "\n" for l in lines])
+ return template.format(properties=properties)
+
+
+class TestReadOvfEnv(test_helpers.TestCase):
+ def test_with_b64_userdata(self):
+ user_data = "#!/bin/sh\necho hello world\n"
+ user_data_b64 = base64.b64encode(user_data.encode()).decode()
+ props = {"user-data": user_data_b64, "password": "passw0rd",
+ "instance-id": "inst-001"}
+ env = fill_properties(props)
+ md, ud, cfg = dsovf.read_ovf_environment(env)
+ self.assertEqual({"instance-id": "inst-001"}, md)
+ self.assertEqual(user_data.encode(), ud)
+ self.assertEqual({'password': "passw0rd"}, cfg)
+
+ def test_with_non_b64_userdata(self):
+ user_data = "my-user-data"
+ props = {"user-data": user_data, "instance-id": "inst-001"}
+ env = fill_properties(props)
+ md, ud, cfg = dsovf.read_ovf_environment(env)
+ self.assertEqual({"instance-id": "inst-001"}, md)
+ self.assertEqual(user_data.encode(), ud)
+ self.assertEqual({}, cfg)
+
+ def test_with_no_userdata(self):
+ props = {"password": "passw0rd", "instance-id": "inst-001"}
+ env = fill_properties(props)
+ md, ud, cfg = dsovf.read_ovf_environment(env)
+ self.assertEqual({"instance-id": "inst-001"}, md)
+ self.assertEqual({'password': "passw0rd"}, cfg)
+ self.assertEqual(None, ud)