summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--cloudinit/user_data.py4
-rw-r--r--tests/unittests/test_datasource/test_azure.py14
-rw-r--r--tests/unittests/test_udprocess.py30
3 files changed, 44 insertions, 4 deletions
diff --git a/cloudinit/user_data.py b/cloudinit/user_data.py
index 8fd7fba5..b11894ce 100644
--- a/cloudinit/user_data.py
+++ b/cloudinit/user_data.py
@@ -336,8 +336,8 @@ def convert_string(raw_data, headers=None):
raw_data = ''
if not headers:
headers = {}
- data = util.decomp_gzip(raw_data)
- if "mime-version:" in str(data[0:4096]).lower():
+ data = util.decode_binary(util.decomp_gzip(raw_data))
+ if "mime-version:" in data[0:4096].lower():
msg = email.message_from_string(data)
for (key, val) in headers.items():
_replace_header(msg, key, val)
diff --git a/tests/unittests/test_datasource/test_azure.py b/tests/unittests/test_datasource/test_azure.py
index 38d70fcd..8112c69b 100644
--- a/tests/unittests/test_datasource/test_azure.py
+++ b/tests/unittests/test_datasource/test_azure.py
@@ -1,5 +1,5 @@
from cloudinit import helpers
-from cloudinit.util import b64e, load_file
+from cloudinit.util import b64e, decode_binary, load_file
from cloudinit.sources import DataSourceAzure
from ..helpers import TestCase, populate_dir
@@ -231,9 +231,19 @@ class TestAzureDataSource(TestCase):
self.assertEqual(defuser['passwd'],
crypt.crypt(odata['UserPassword'], defuser['passwd'][0:pos]))
+ def test_userdata_plain(self):
+ mydata = "FOOBAR"
+ odata = {'UserData': {'text': mydata, 'encoding': 'plain'}}
+ data = {'ovfcontent': construct_valid_ovf_env(data=odata)}
+
+ dsrc = self._get_ds(data)
+ ret = dsrc.get_data()
+ self.assertTrue(ret)
+ self.assertEqual(decode_binary(dsrc.userdata_raw), mydata)
+
def test_userdata_found(self):
mydata = "FOOBAR"
- odata = {'UserData': b64e(mydata)}
+ odata = {'UserData': {'text': b64e(mydata), 'encoding': 'base64'}}
data = {'ovfcontent': construct_valid_ovf_env(data=odata)}
dsrc = self._get_ds(data)
diff --git a/tests/unittests/test_udprocess.py b/tests/unittests/test_udprocess.py
new file mode 100644
index 00000000..39adbf9d
--- /dev/null
+++ b/tests/unittests/test_udprocess.py
@@ -0,0 +1,30 @@
+from . import helpers
+
+from six.moves import filterfalse
+
+from cloudinit import user_data as ud
+from cloudinit import util
+
+def count_messages(root):
+ am = 0
+ for m in root.walk():
+ if ud.is_skippable(m):
+ continue
+ am += 1
+ return am
+
+
+class TestUDProcess(helpers.ResourceUsingTestCase):
+
+ def testBytesInPayload(self):
+ msg = b'#cloud-config\napt_update: True\n'
+ ud_proc = ud.UserDataProcessor(self.getCloudPaths())
+ message = ud_proc.process(msg)
+ self.assertTrue(count_messages(message) == 1)
+
+ def testStringInPayload(self):
+ msg = '#cloud-config\napt_update: True\n'
+
+ ud_proc = ud.UserDataProcessor(self.getCloudPaths())
+ message = ud_proc.process(msg)
+ self.assertTrue(count_messages(message) == 1)