summaryrefslogtreecommitdiff
path: root/tests/unittests/test_util.py
diff options
context:
space:
mode:
authorChristian Ehrhardt <christian.ehrhardt@canonical.com>2016-08-10 16:43:14 +0200
committerScott Moser <smoser@brickies.net>2016-08-18 11:02:44 -0400
commitd861415ff9ab816b1183b8c58ec35348be4fd458 (patch)
treed3cc08c685f58208979c0fc6e941320cc1347b2b /tests/unittests/test_util.py
parent648dbbf6b090c81e989f1ab70bf99f4de16a6a70 (diff)
downloadvyos-cloud-init-d861415ff9ab816b1183b8c58ec35348be4fd458.tar.gz
vyos-cloud-init-d861415ff9ab816b1183b8c58ec35348be4fd458.zip
Apt: add new apt configuration format
This adds an improved apt configuration format that is fully backwards compatible with previous behavior. This is mostly copied from curtin's implementation. It does: * clean up and centralizes many of the top level 'apt_*' values that previously existed into a single top level 'apt'key. * support a 'source' in apt/sources/entry that has only a key * documents new features and adds tests. See the added doc/examples/cloud-config-apt.txt for more information.
Diffstat (limited to 'tests/unittests/test_util.py')
-rw-r--r--tests/unittests/test_util.py69
1 files changed, 69 insertions, 0 deletions
diff --git a/tests/unittests/test_util.py b/tests/unittests/test_util.py
index 73369cd3..d2031f59 100644
--- a/tests/unittests/test_util.py
+++ b/tests/unittests/test_util.py
@@ -508,4 +508,73 @@ class TestReadSeeded(helpers.TestCase):
self.assertEqual(found_md, {'key1': 'val1'})
self.assertEqual(found_ud, ud)
+
+class TestSubp(helpers.TestCase):
+
+ stdin2err = ['bash', '-c', 'cat >&2']
+ stdin2out = ['cat']
+ utf8_invalid = b'ab\xaadef'
+ utf8_valid = b'start \xc3\xa9 end'
+ utf8_valid_2 = b'd\xc3\xa9j\xc8\xa7'
+
+ def printf_cmd(self, *args):
+ # bash's printf supports \xaa. So does /usr/bin/printf
+ # but by using bash, we remove dependency on another program.
+ return(['bash', '-c', 'printf "$@"', 'printf'] + list(args))
+
+ def test_subp_handles_utf8(self):
+ # The given bytes contain utf-8 accented characters as seen in e.g.
+ # the "deja dup" package in Ubuntu.
+ cmd = self.printf_cmd(self.utf8_valid_2)
+ (out, _err) = util.subp(cmd, capture=True)
+ self.assertEqual(out, self.utf8_valid_2.decode('utf-8'))
+
+ def test_subp_respects_decode_false(self):
+ (out, err) = util.subp(self.stdin2out, capture=True, decode=False,
+ data=self.utf8_valid)
+ self.assertTrue(isinstance(out, bytes))
+ self.assertTrue(isinstance(err, bytes))
+ self.assertEqual(out, self.utf8_valid)
+
+ def test_subp_decode_ignore(self):
+ # this executes a string that writes invalid utf-8 to stdout
+ (out, _err) = util.subp(self.printf_cmd('abc\\xaadef'),
+ capture=True, decode='ignore')
+ self.assertEqual(out, 'abcdef')
+
+ def test_subp_decode_strict_valid_utf8(self):
+ (out, _err) = util.subp(self.stdin2out, capture=True,
+ decode='strict', data=self.utf8_valid)
+ self.assertEqual(out, self.utf8_valid.decode('utf-8'))
+
+ def test_subp_decode_invalid_utf8_replaces(self):
+ (out, _err) = util.subp(self.stdin2out, capture=True,
+ data=self.utf8_invalid)
+ expected = self.utf8_invalid.decode('utf-8', errors='replace')
+ self.assertEqual(out, expected)
+
+ def test_subp_decode_strict_raises(self):
+ args = []
+ kwargs = {'args': self.stdin2out, 'capture': True,
+ 'decode': 'strict', 'data': self.utf8_invalid}
+ self.assertRaises(UnicodeDecodeError, util.subp, *args, **kwargs)
+
+ def test_subp_capture_stderr(self):
+ data = b'hello world'
+ (out, err) = util.subp(self.stdin2err, capture=True,
+ decode=False, data=data)
+ self.assertEqual(err, data)
+ self.assertEqual(out, b'')
+
+ def test_returns_none_if_no_capture(self):
+ (out, err) = util.subp(self.stdin2out, data=b'', capture=False)
+ self.assertEqual(err, None)
+ self.assertEqual(out, None)
+
+ def test_bunch_of_slashes_in_path(self):
+ self.assertEqual("/target/my/path/",
+ util.target_path("/target/", "//my/path/"))
+ self.assertEqual("/target/my/path/",
+ util.target_path("/target/", "///my/path/"))
+
# vi: ts=4 expandtab