def test_http_request(self, HTTPConnection, HTTPSConnection): mock_http_conn = MagicMock() mock_http_resp = MagicMock() mock_http_conn.getresponse = Mock(return_value=mock_http_resp) HTTPConnection.return_value = mock_http_conn HTTPSConnection.return_value = mock_http_conn mock_http_resp.read = Mock(return_value="_(:3| <)_") # Test http get resp = restutil._http_request("GET", "foo", "bar") self.assertNotEquals(None, resp) self.assertEquals("_(:3| <)_", resp.read()) # Test https get resp = restutil._http_request("GET", "foo", "bar", secure=True) self.assertNotEquals(None, resp) self.assertEquals("_(:3| <)_", resp.read()) # Test http get with proxy mock_http_resp.read = Mock(return_value="_(:3| <)_") resp = restutil._http_request("GET", "foo", "bar", proxy_host="foo.bar", proxy_port=23333) self.assertNotEquals(None, resp) self.assertEquals("_(:3| <)_", resp.read()) # Test https get resp = restutil._http_request("GET", "foo", "bar", secure=True) self.assertNotEquals(None, resp) self.assertEquals("_(:3| <)_", resp.read()) # Test https get with proxy mock_http_resp.read = Mock(return_value="_(:3| <)_") resp = restutil._http_request("GET", "foo", "bar", proxy_host="foo.bar", proxy_port=23333, secure=True) self.assertNotEquals(None, resp) self.assertEquals("_(:3| <)_", resp.read())
def mock_http_get(self, url, *args, **kwargs): content = None if url.count(u"identity?") > 0: content = self.identity elif url.count(u"certificates") > 0: content = self.certificates elif url.count(u"certificates_data") > 0: content = self.certificates_data elif url.count(u"extensionHandlers") > 0: content = self.ext_handlers elif url.count(u"versionUri") > 0: content = self.ext_handler_pkgs else: raise Exception("Bad url {0}".format(url)) resp = MagicMock() resp.status = httpclient.OK if content is None: resp.read = Mock(return_value=None) else: resp.read = Mock(return_value=content.encode("utf-8")) return resp
def mock_http_post(self, url, *args, **kwargs): content = None resp = MagicMock() resp.status = httpclient.OK if url.endswith('/HealthService'): self.call_counts['/HealthService'] += 1 content = '' else: raise Exception("Bad url {0}".format(url)) resp.read = Mock(return_value=content.encode("utf-8")) return resp
def mock_http_put(self, url, *args, **kwargs): # pylint: disable=unused-argument content = None resp = MagicMock() resp.status = httpclient.OK if url.endswith('/vmAgentLog'): self.call_counts['/vmAgentLog'] += 1 content = '' else: raise Exception("Bad url {0}".format(url)) resp.read = Mock(return_value=content.encode("utf-8")) return resp
def mock_http_put(self, url, data, **_): content = '' resp = MagicMock() resp.status = httpclient.OK if url.endswith('/vmAgentLog'): self.call_counts['/vmAgentLog'] += 1 elif url.endswith('/StatusBlob'): self.call_counts['/StatusBlob'] += 1 self.status_blobs.append(data) else: raise Exception("Bad url {0}".format(url)) resp.read = Mock(return_value=content.encode("utf-8")) return resp
def test_http_request_proxy_with_no_proxy_check(self, _http_request, sleep, mock_get_http_proxy): # pylint: disable=unused-argument mock_http_resp = MagicMock() mock_http_resp.read = Mock(return_value="hehe") _http_request.return_value = mock_http_resp mock_get_http_proxy.return_value = "host", 1234 # Return a host/port combination no_proxy_list = ["foo.com", "www.google.com", "168.63.129.16"] with patch.dict(os.environ, {'no_proxy': ",".join(no_proxy_list)}): # Test http get resp = restutil.http_get("http://foo.com", use_proxy=True) self.assertEqual("hehe", resp.read()) self.assertEqual(0, mock_get_http_proxy.call_count) # Test http get resp = restutil.http_get("http://bar.com", use_proxy=True) self.assertEqual("hehe", resp.read()) self.assertEqual(1, mock_get_http_proxy.call_count)
def test_http_request_with_retry(self, _http_request, sleep): mock_httpresp = MagicMock() mock_httpresp.read = Mock(return_value="hehe") _http_request.return_value = mock_httpresp #Test http get resp = restutil.http_get("http://foo.bar") self.assertEquals("hehe", resp.read()) #Test https get resp = restutil.http_get("https://foo.bar") self.assertEquals("hehe", resp.read()) #Test http failure _http_request.side_effect = httpclient.HTTPException("Http failure") self.assertRaises(restutil.HttpError, restutil.http_get, "http://foo.bar") #Test http failure _http_request.side_effect = IOError("IO failure") self.assertRaises(restutil.HttpError, restutil.http_get, "http://foo.bar")
def mock_http_get(self, url, *args, **kwargs): content = None resp = MagicMock() resp.status = httpclient.OK if "comp=versions" in url: # wire server versions content = self.version_info self.call_counts["comp=versions"] += 1 elif "/versions" in url: # HostPlugin versions content = '["2015-09-01"]' self.call_counts["/versions"] += 1 elif url.endswith("/health"): # HostPlugin health content = '' self.call_counts["/health"] += 1 elif "goalstate" in url: content = self.goal_state self.call_counts["goalstate"] += 1 elif "hostingenvuri" in url: content = self.hosting_env self.call_counts["hostingenvuri"] += 1 elif "sharedconfiguri" in url: content = self.shared_config self.call_counts["sharedconfiguri"] += 1 elif "certificatesuri" in url: content = self.certs self.call_counts["certificatesuri"] += 1 elif "extensionsconfiguri" in url: content = self.ext_conf self.call_counts["extensionsconfiguri"] += 1 elif "remoteaccessinfouri" in url: content = self.remote_access self.call_counts["remoteaccessinfouri"] += 1 elif ".vmSettings" in url or ".settings" in url: content = self.in_vm_artifacts_profile self.call_counts["in_vm_artifacts_profile"] += 1 else: # A stale GoalState results in a 400 from the HostPlugin # for which the HTTP handler in restutil raises ResourceGoneError if self.emulate_stale_goal_state: if "extensionArtifact" in url: self.emulate_stale_goal_state = False self.call_counts["extensionArtifact"] += 1 raise ResourceGoneError() else: raise HttpError() # For HostPlugin requests, replace the URL with that passed # via the x-ms-artifact-location header if "extensionArtifact" in url: self.call_counts["extensionArtifact"] += 1 if "headers" not in kwargs: raise ValueError("HostPlugin request is missing the HTTP headers: {0}", kwargs) if "x-ms-artifact-location" not in kwargs["headers"]: raise ValueError("HostPlugin request is missing the x-ms-artifact-location header: {0}", kwargs) url = kwargs["headers"]["x-ms-artifact-location"] if "manifest.xml" in url: content = self.manifest self.call_counts["manifest.xml"] += 1 elif "manifest_of_ga.xml" in url: content = self.ga_manifest self.call_counts["manifest_of_ga.xml"] += 1 elif "ExampleHandlerLinux" in url: content = self.ext self.call_counts["ExampleHandlerLinux"] += 1 resp.read = Mock(return_value=content) return resp elif ".vmSettings" in url or ".settings" in url: content = self.in_vm_artifacts_profile self.call_counts["in_vm_artifacts_profile"] += 1 else: raise Exception("Bad url {0}".format(url)) resp.read = Mock(return_value=content.encode("utf-8")) return resp