summaryrefslogtreecommitdiff
path: root/tests/unittests/test__init__.py
diff options
context:
space:
mode:
Diffstat (limited to 'tests/unittests/test__init__.py')
-rw-r--r--tests/unittests/test__init__.py92
1 files changed, 59 insertions, 33 deletions
diff --git a/tests/unittests/test__init__.py b/tests/unittests/test__init__.py
index 7b6f8c4e..e6f4c318 100644
--- a/tests/unittests/test__init__.py
+++ b/tests/unittests/test__init__.py
@@ -1,16 +1,18 @@
# This file is part of cloud-init. See LICENSE file for license information.
+import logging
import os
import shutil
import tempfile
+from cloudinit.cmd import main
from cloudinit import handlers
from cloudinit import helpers
from cloudinit import settings
from cloudinit import url_helper
from cloudinit import util
-from .helpers import TestCase, ExitStack, mock
+from .helpers import TestCase, TempDirTestCase, ExitStack, mock
class FakeModule(handlers.Handler):
@@ -170,44 +172,68 @@ class TestHandlerHandlePart(TestCase):
self.data, self.ctype, self.filename, self.payload)
-class TestCmdlineUrl(TestCase):
- def test_invalid_content(self):
- url = "http://example.com/foo"
- key = "mykey"
- payload = b"0"
- cmdline = "ro %s=%s bar=1" % (key, url)
+class TestCmdlineUrl(TempDirTestCase):
+ def test_parse_cmdline_url_nokey_raises_keyerror(self):
+ self.assertRaises(
+ KeyError, main.parse_cmdline_url, 'root=foo bar single')
- with mock.patch('cloudinit.url_helper.readurl',
- return_value=url_helper.StringResponse(payload)):
- self.assertEqual(
- util.get_cmdline_url(names=[key], starts="xxxxxx",
- cmdline=cmdline),
- (key, url, None))
+ def test_parse_cmdline_url_found(self):
+ cmdline = 'root=foo bar single url=http://example.com arg1 -v'
+ self.assertEqual(
+ ('url', 'http://example.com'), main.parse_cmdline_url(cmdline))
- def test_valid_content(self):
- url = "http://example.com/foo"
- key = "mykey"
- payload = b"xcloud-config\nmydata: foo\nbar: wark\n"
+ @mock.patch('cloudinit.cmd.main.util.read_file_or_url')
+ def test_invalid_content(self, m_read):
+ key = "cloud-config-url"
+ url = 'http://example.com/foo'
cmdline = "ro %s=%s bar=1" % (key, url)
+ m_read.return_value = url_helper.StringResponse(b"unexpected blob")
- with mock.patch('cloudinit.url_helper.readurl',
- return_value=url_helper.StringResponse(payload)):
- self.assertEqual(
- util.get_cmdline_url(names=[key], starts=b"xcloud-config",
- cmdline=cmdline),
- (key, url, payload))
+ fpath = self.tmp_path("test_valid")
+ lvl, msg = main.attempt_cmdline_url(
+ fpath, network=True, cmdline=cmdline)
+ self.assertEqual(logging.WARN, lvl)
+ self.assertIn(url, msg)
+ self.assertFalse(os.path.exists(fpath))
- def test_no_key_found(self):
+ @mock.patch('cloudinit.cmd.main.util.read_file_or_url')
+ def test_valid_content(self, m_read):
url = "http://example.com/foo"
- key = "mykey"
- cmdline = "ro %s=%s bar=1" % (key, url)
-
- with mock.patch('cloudinit.url_helper.readurl',
- return_value=url_helper.StringResponse(b'')):
- self.assertEqual(
- util.get_cmdline_url(names=["does-not-appear"],
- starts="#cloud-config", cmdline=cmdline),
- (None, None, None))
+ payload = b"#cloud-config\nmydata: foo\nbar: wark\n"
+ cmdline = "ro %s=%s bar=1" % ('cloud-config-url', url)
+
+ m_read.return_value = url_helper.StringResponse(payload)
+ fpath = self.tmp_path("test_valid")
+ lvl, msg = main.attempt_cmdline_url(
+ fpath, network=True, cmdline=cmdline)
+ self.assertEqual(util.load_file(fpath, decode=False), payload)
+ self.assertEqual(logging.INFO, lvl)
+ self.assertIn(url, msg)
+
+ @mock.patch('cloudinit.cmd.main.util.read_file_or_url')
+ def test_no_key_found(self, m_read):
+ cmdline = "ro mykey=http://example.com/foo root=foo"
+ fpath = self.tmp_path("test_no_key_found")
+ lvl, msg = main.attempt_cmdline_url(
+ fpath, network=True, cmdline=cmdline)
+
+ m_read.assert_not_called()
+ self.assertFalse(os.path.exists(fpath))
+ self.assertEqual(logging.DEBUG, lvl)
+
+ @mock.patch('cloudinit.cmd.main.util.read_file_or_url')
+ def test_exception_warns(self, m_read):
+ url = "http://example.com/foo"
+ cmdline = "ro cloud-config-url=%s root=LABEL=bar" % url
+ fpath = self.tmp_path("test_no_key_found")
+ m_read.side_effect = url_helper.UrlError(
+ cause="Unexpected Error", url="http://example.com/foo")
+
+ lvl, msg = main.attempt_cmdline_url(
+ fpath, network=True, cmdline=cmdline)
+ self.assertEqual(logging.WARN, lvl)
+ self.assertIn(url, msg)
+ self.assertFalse(os.path.exists(fpath))
# vi: ts=4 expandtab