summaryrefslogtreecommitdiff
path: root/tests/protocol/test_hostplugin.py
diff options
context:
space:
mode:
Diffstat (limited to 'tests/protocol/test_hostplugin.py')
-rw-r--r--tests/protocol/test_hostplugin.py85
1 files changed, 85 insertions, 0 deletions
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()