summaryrefslogtreecommitdiff
path: root/tests/protocol
diff options
context:
space:
mode:
authorDaniel Watkins <daniel.watkins@canonical.com>2016-09-13 16:11:47 +0100
committerusd-importer <ubuntu-server@lists.ubuntu.com>2016-09-14 10:39:12 +0000
commit5009a9d0f3606fc08a80ec0d59076d8dc48d2f25 (patch)
treead67eef74c5208178950db6ee28195e2137fa713 /tests/protocol
parent0f7cef5b52162d1ebb31a738bd8fc9febe1fbda6 (diff)
downloadvyos-walinuxagent-5009a9d0f3606fc08a80ec0d59076d8dc48d2f25.tar.gz
vyos-walinuxagent-5009a9d0f3606fc08a80ec0d59076d8dc48d2f25.zip
Import patches-unapplied version 2.1.5-0ubuntu1 to ubuntu/yakkety-proposed
Imported using git-ubuntu import. Changelog parent: 0f7cef5b52162d1ebb31a738bd8fc9febe1fbda6 New changelog entries: * New upstream release (LP: #1603581) - d/patches/disable-auto-update.patch: - The new version introduces auto-updating of the agent to its latest version via an internal mechanism; disable this - d/patches/fix_shebangs.patch: - Dropped in favour of the dh_python3 --shebang option. - Refreshed d/patches/disable_udev_overrides.patch
Diffstat (limited to 'tests/protocol')
-rw-r--r--tests/protocol/__init__.py3
-rw-r--r--tests/protocol/mockmetadata.py7
-rw-r--r--tests/protocol/mockwiredata.py20
-rw-r--r--tests/protocol/test_hostplugin.py85
-rw-r--r--tests/protocol/test_metadata.py11
-rw-r--r--tests/protocol/test_protocol_util.py81
-rw-r--r--tests/protocol/test_restapi.py5
-rw-r--r--tests/protocol/test_wire.py15
8 files changed, 194 insertions, 33 deletions
diff --git a/tests/protocol/__init__.py b/tests/protocol/__init__.py
index 9bdb27e..2ef4c16 100644
--- a/tests/protocol/__init__.py
+++ b/tests/protocol/__init__.py
@@ -14,6 +14,3 @@
#
# Requires Python 2.4+ and Openssl 1.0+
#
-# Implements parts of RFC 2131, 1541, 1497 and
-# http://msdn.microsoft.com/en-us/library/cc227282%28PROT.10%29.aspx
-# http://msdn.microsoft.com/en-us/library/cc227259%28PROT.13%29.aspx
diff --git a/tests/protocol/mockmetadata.py b/tests/protocol/mockmetadata.py
index 0f7b568..dce3367 100644
--- a/tests/protocol/mockmetadata.py
+++ b/tests/protocol/mockmetadata.py
@@ -14,13 +14,10 @@
#
# Requires Python 2.4+ and Openssl 1.0+
#
-# Implements parts of RFC 2131, 1541, 1497 and
-# http://msdn.microsoft.com/en-us/library/cc227282%28PROT.10%29.aspx
-# http://msdn.microsoft.com/en-us/library/cc227259%28PROT.13%29.aspx
from tests.tools import *
-from azurelinuxagent.future import httpclient
-from azurelinuxagent.utils.cryptutil import CryptUtil
+from azurelinuxagent.common.future import httpclient
+from azurelinuxagent.common.utils.cryptutil import CryptUtil
DATA_FILE = {
"identity": "metadata/identity.json",
diff --git a/tests/protocol/mockwiredata.py b/tests/protocol/mockwiredata.py
index 6ffd19c..c789de5 100644
--- a/tests/protocol/mockwiredata.py
+++ b/tests/protocol/mockwiredata.py
@@ -14,13 +14,10 @@
#
# Requires Python 2.4+ and Openssl 1.0+
#
-# Implements parts of RFC 2131, 1541, 1497 and
-# http://msdn.microsoft.com/en-us/library/cc227282%28PROT.10%29.aspx
-# http://msdn.microsoft.com/en-us/library/cc227259%28PROT.13%29.aspx
from tests.tools import *
-from azurelinuxagent.future import httpclient
-from azurelinuxagent.utils.cryptutil import CryptUtil
+from azurelinuxagent.common.future import httpclient
+from azurelinuxagent.common.utils.cryptutil import CryptUtil
DATA_FILE = {
"version_info": "wire/version_info.xml",
@@ -30,6 +27,7 @@ DATA_FILE = {
"certs": "wire/certs.xml",
"ext_conf": "wire/ext_conf.xml",
"manifest": "wire/manifest.xml",
+ "ga_manifest" : "wire/ga_manifest.xml",
"trans_prv": "wire/trans_prv",
"trans_cert": "wire/trans_cert",
"test_ext": "ext/sample_ext.zip"
@@ -44,6 +42,15 @@ DATA_FILE_EXT_NO_SETTINGS["ext_conf"] = "wire/ext_conf_no_settings.xml"
DATA_FILE_EXT_NO_PUBLIC = DATA_FILE.copy()
DATA_FILE_EXT_NO_PUBLIC["ext_conf"] = "wire/ext_conf_no_public.xml"
+DATA_FILE_EXT_AUTOUPGRADE = DATA_FILE.copy()
+DATA_FILE_EXT_AUTOUPGRADE["ext_conf"] = "wire/ext_conf_autoupgrade.xml"
+
+DATA_FILE_EXT_INTERNALVERSION = DATA_FILE.copy()
+DATA_FILE_EXT_INTERNALVERSION["ext_conf"] = "wire/ext_conf_internalversion.xml"
+
+DATA_FILE_EXT_AUTOUPGRADE_INTERNALVERSION = DATA_FILE.copy()
+DATA_FILE_EXT_AUTOUPGRADE_INTERNALVERSION["ext_conf"] = "wire/ext_conf_autoupgrade_internalversion.xml"
+
class WireProtocolData(object):
def __init__(self, data_files=DATA_FILE):
self.version_info = load_data(data_files.get("version_info"))
@@ -53,6 +60,7 @@ class WireProtocolData(object):
self.certs = load_data(data_files.get("certs"))
self.ext_conf = load_data(data_files.get("ext_conf"))
self.manifest = load_data(data_files.get("manifest"))
+ self.ga_manifest = load_data(data_files.get("ga_manifest"))
self.trans_prv = load_data(data_files.get("trans_prv"))
self.trans_cert = load_data(data_files.get("trans_cert"))
self.ext = load_bin_data(data_files.get("test_ext"))
@@ -73,6 +81,8 @@ class WireProtocolData(object):
content = self.ext_conf
elif "manifest.xml" in url:
content = self.manifest
+ elif "manifest_of_ga.xml" in url:
+ content = self.ga_manifest
elif "ExampleHandlerLinux" in url:
content = self.ext
resp = MagicMock()
diff --git a/tests/protocol/test_hostplugin.py b/tests/protocol/test_hostplugin.py
new file mode 100644
index 0000000..65c8465
--- /dev/null
+++ b/tests/protocol/test_hostplugin.py
@@ -0,0 +1,85 @@
+# Copyright 2014 Microsoft Corporation
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+# Requires Python 2.4+ and Openssl 1.0+
+#
+
+from tests.tools import *
+import unittest
+import azurelinuxagent.common.protocol.wire as wire
+import azurelinuxagent.common.protocol.restapi as restapi
+
+wireserver_url = "168.63.129.16"
+sas_url = "http://sas_url"
+api_versions = '["2015-09-01"]'
+
+
+class TestHostPlugin(AgentTestCase):
+ def test_fallback(self):
+ with patch.object(wire.HostPluginProtocol,
+ "put_vm_status") as patch_put:
+ with patch.object(wire.StatusBlob, "upload") as patch_upload:
+ patch_upload.return_value = False
+ wire_protocol_client = wire.WireProtocol(wireserver_url).client
+ wire_protocol_client.ext_conf = wire.ExtensionsConfig(None)
+ wire_protocol_client.ext_conf.status_upload_blob = sas_url
+ wire_protocol_client.upload_status_blob()
+ self.assertTrue(patch_put.call_count == 1,
+ "Fallback was not engaged")
+ self.assertTrue(patch_put.call_args[0][1] == sas_url)
+
+ def test_no_fallback(self):
+ with patch.object(wire.HostPluginProtocol,
+ "put_vm_status") as patch_put:
+ with patch.object(wire.StatusBlob, "upload") as patch_upload:
+ patch_upload.return_value = True
+ wire_protocol_client = wire.WireProtocol(wireserver_url).client
+ wire_protocol_client.ext_conf = wire.ExtensionsConfig(None)
+ wire_protocol_client.ext_conf.status_upload_blob = sas_url
+ wire_protocol_client.upload_status_blob()
+ self.assertTrue(patch_put.call_count == 0,
+ "Fallback was engaged")
+
+ def test_init_put(self):
+ expected_url = "http://168.63.129.16:32526/status"
+ expected_headers = {'x-ms-version': '2015-09-01'}
+ expected_content = '{"content": "b2s=", ' \
+ '"headers": [{"headerName": "x-ms-version", ' \
+ '"headerValue": "2014-02-14"}, ' \
+ '{"headerName": "x-ms-blob-type", "headerValue": ' \
+ '"BlockBlob"}], ' \
+ '"requestUri": "http://sas_url"}'
+
+ host_client = wire.HostPluginProtocol(wireserver_url)
+ self.assertFalse(host_client.is_initialized)
+ self.assertTrue(host_client.api_versions is None)
+ status_blob = wire.StatusBlob(None)
+ status_blob.vm_status = "ok"
+ status_blob.type = "BlockBlob"
+ with patch.object(wire.HostPluginProtocol,
+ "get_api_versions") as patch_get:
+ patch_get.return_value = api_versions
+ with patch.object(restapi.restutil, "http_put") as patch_put:
+ patch_put.return_value = MagicMock()
+ host_client.put_vm_status(status_blob, sas_url)
+ self.assertTrue(host_client.is_initialized)
+ self.assertFalse(host_client.api_versions is None)
+ self.assertTrue(patch_put.call_count == 1)
+ self.assertTrue(patch_put.call_args[0][0] == expected_url)
+ self.assertTrue(patch_put.call_args[0][1] == expected_content)
+ self.assertTrue(patch_put.call_args[0][2] == expected_headers)
+
+
+if __name__ == '__main__':
+ unittest.main()
diff --git a/tests/protocol/test_metadata.py b/tests/protocol/test_metadata.py
index fca1a82..e2ef57a 100644
--- a/tests/protocol/test_metadata.py
+++ b/tests/protocol/test_metadata.py
@@ -14,17 +14,14 @@
#
# Requires Python 2.4+ and Openssl 1.0+
#
-# Implements parts of RFC 2131, 1541, 1497 and
-# http://msdn.microsoft.com/en-us/library/cc227282%28PROT.10%29.aspx
-# http://msdn.microsoft.com/en-us/library/cc227259%28PROT.13%29.aspx
from tests.tools import *
from tests.protocol.mockmetadata import *
-from azurelinuxagent.utils.restutil import httpclient
-from azurelinuxagent.protocol.metadata import MetadataProtocol
+from azurelinuxagent.common.utils.restutil import httpclient
+from azurelinuxagent.common.protocol.metadata import MetadataProtocol
@patch("time.sleep")
-@patch("azurelinuxagent.protocol.metadata.restutil")
+@patch("azurelinuxagent.common.protocol.metadata.restutil")
class TestWireProtocolGetters(AgentTestCase):
def _test_getters(self, test_data, mock_restutil ,_):
mock_restutil.http_get.side_effect = test_data.mock_http_get
@@ -33,7 +30,7 @@ class TestWireProtocolGetters(AgentTestCase):
protocol.detect()
protocol.get_vminfo()
protocol.get_certs()
- ext_handlers, etag= protocol.get_ext_handlers()
+ ext_handlers, etag = protocol.get_ext_handlers()
for ext_handler in ext_handlers.extHandlers:
protocol.get_ext_handler_pkgs(ext_handler)
diff --git a/tests/protocol/test_protocol_util.py b/tests/protocol/test_protocol_util.py
new file mode 100644
index 0000000..cb9a06f
--- /dev/null
+++ b/tests/protocol/test_protocol_util.py
@@ -0,0 +1,81 @@
+# Copyright 2014 Microsoft Corporation
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+# Requires Python 2.4+ and Openssl 1.0+
+#
+
+from tests.tools import *
+from azurelinuxagent.common.exception import *
+from azurelinuxagent.common.protocol import get_protocol_util, \
+ TAG_FILE_NAME
+
+@patch("time.sleep")
+class TestProtocolUtil(AgentTestCase):
+
+ @patch("azurelinuxagent.common.protocol.util.MetadataProtocol")
+ @patch("azurelinuxagent.common.protocol.util.WireProtocol")
+ def test_detect_protocol(self, WireProtocol, MetadataProtocol, _):
+ WireProtocol.return_value = MagicMock()
+ MetadataProtocol.return_value = MagicMock()
+
+ protocol_util = get_protocol_util()
+
+ protocol_util.dhcp_handler = MagicMock()
+ protocol_util.dhcp_handler.endpoint = "foo.bar"
+
+ #Test wire protocol is available
+ protocol = protocol_util.get_protocol()
+ self.assertEquals(WireProtocol.return_value, protocol)
+
+ #Test wire protocol is not available
+ protocol_util.clear_protocol()
+ WireProtocol.return_value.detect.side_effect = ProtocolError()
+
+ protocol = protocol_util.get_protocol()
+ self.assertEquals(MetadataProtocol.return_value, protocol)
+
+ #Test no protocol is available
+ protocol_util.clear_protocol()
+ WireProtocol.return_value.detect.side_effect = ProtocolError()
+
+ MetadataProtocol.return_value.detect.side_effect = ProtocolError()
+ self.assertRaises(ProtocolError, protocol_util.get_protocol)
+
+ def test_detect_protocol_by_file(self, _):
+ protocol_util = get_protocol_util()
+ protocol_util._detect_wire_protocol = Mock()
+ protocol_util._detect_metadata_protocol = Mock()
+
+ tag_file = os.path.join(self.tmp_dir, TAG_FILE_NAME)
+
+ #Test tag file doesn't exist
+ protocol_util.get_protocol_by_file()
+ protocol_util._detect_wire_protocol.assert_any_call()
+ protocol_util._detect_metadata_protocol.assert_not_called()
+
+ #Test tag file exists
+ protocol_util.clear_protocol()
+ protocol_util._detect_wire_protocol.reset_mock()
+ protocol_util._detect_metadata_protocol.reset_mock()
+ with open(tag_file, "w+") as tag_fd:
+ tag_fd.write("")
+
+ protocol_util.get_protocol_by_file()
+ protocol_util._detect_metadata_protocol.assert_any_call()
+ protocol_util._detect_wire_protocol.assert_not_called()
+
+
+if __name__ == '__main__':
+ unittest.main()
+
diff --git a/tests/protocol/test_restapi.py b/tests/protocol/test_restapi.py
index 656ecc6..e4b65c9 100644
--- a/tests/protocol/test_restapi.py
+++ b/tests/protocol/test_restapi.py
@@ -14,9 +14,6 @@
#
# Requires Python 2.4+ and Openssl 1.0+
#
-# Implements parts of RFC 2131, 1541, 1497 and
-# http://msdn.microsoft.com/en-us/library/cc227282%28PROT.10%29.aspx
-# http://msdn.microsoft.com/en-us/library/cc227259%28PROT.13%29.aspx
from tests.tools import *
import uuid
@@ -24,7 +21,7 @@ import unittest
import os
import shutil
import time
-from azurelinuxagent.protocol.restapi import *
+from azurelinuxagent.common.protocol.restapi import *
class SampleDataContract(DataContract):
def __init__(self):
diff --git a/tests/protocol/test_wire.py b/tests/protocol/test_wire.py
index 4c38c13..bd3acaf 100644
--- a/tests/protocol/test_wire.py
+++ b/tests/protocol/test_wire.py
@@ -14,9 +14,6 @@
#
# Requires Python 2.4+ and Openssl 1.0+
#
-# Implements parts of RFC 2131, 1541, 1497 and
-# http://msdn.microsoft.com/en-us/library/cc227282%28PROT.10%29.aspx
-# http://msdn.microsoft.com/en-us/library/cc227259%28PROT.13%29.aspx
from tests.tools import *
from tests.protocol.mockwiredata import *
@@ -24,18 +21,18 @@ import uuid
import unittest
import os
import time
-from azurelinuxagent.utils.restutil import httpclient
-from azurelinuxagent.utils.cryptutil import CryptUtil
-from azurelinuxagent.protocol.restapi import *
-from azurelinuxagent.protocol.wire import WireClient, WireProtocol, \
+from azurelinuxagent.common.utils.restutil import httpclient
+from azurelinuxagent.common.utils.cryptutil import CryptUtil
+from azurelinuxagent.common.protocol.restapi import *
+from azurelinuxagent.common.protocol.wire import WireClient, WireProtocol, \
TRANSPORT_PRV_FILE_NAME, \
TRANSPORT_CERT_FILE_NAME
data_with_bom = b'\xef\xbb\xbfhehe'
@patch("time.sleep")
-@patch("azurelinuxagent.protocol.wire.CryptUtil")
-@patch("azurelinuxagent.protocol.wire.restutil")
+@patch("azurelinuxagent.common.protocol.wire.CryptUtil")
+@patch("azurelinuxagent.common.protocol.wire.restutil")
class TestWireProtocolGetters(AgentTestCase):
def _test_getters(self, test_data, mock_restutil, MockCryptUtil, _):