mirror of
https://github.com/ClickHouse/ClickHouse.git
synced 2024-12-18 20:32:43 +00:00
add some tests
This commit is contained in:
parent
63562cbb20
commit
dda3463944
@ -120,4 +120,78 @@ TEST_F(ProxyConfigurationResolverProviderTests, ListBoth)
|
|||||||
ASSERT_EQ(https_proxy_configuration.port, https_list_proxy_server.getPort());
|
ASSERT_EQ(https_proxy_configuration.port, https_list_proxy_server.getPort());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
TEST_F(ProxyConfigurationResolverProviderTests, RemoteResolverIsBasedOnProtocolConfigurationHTTP)
|
||||||
|
{
|
||||||
|
/*
|
||||||
|
* Since there is no way to call `ProxyConfigurationResolver::resolve` on remote resolver,
|
||||||
|
* it is hard to verify the remote resolver was actually picked. One hackish way to assert
|
||||||
|
* the remote resolver was OR was not picked based on the configuration, is to use the
|
||||||
|
* environment resolver. Since the environment resolver is always returned as a fallback,
|
||||||
|
* we can assert the remote resolver was not picked if `ProxyConfigurationResolver::resolve`
|
||||||
|
* succeeds and returns an environment proxy configuration.
|
||||||
|
* */
|
||||||
|
EnvironmentProxySetter setter(http_env_proxy_server, https_env_proxy_server);
|
||||||
|
|
||||||
|
ConfigurationPtr config = Poco::AutoPtr(new Poco::Util::MapConfiguration());
|
||||||
|
|
||||||
|
config->setString("proxy", "");
|
||||||
|
config->setString("proxy.https", "");
|
||||||
|
config->setString("proxy.https.resolver", "");
|
||||||
|
config->setString("proxy.https.resolver.endpoint", "http://resolver:8080/hostname");
|
||||||
|
|
||||||
|
// even tho proxy protocol / scheme is http, it should not be picked (prior to this PR, it would be picked)
|
||||||
|
config->setString("proxy.https.resolver.proxy_scheme", "http");
|
||||||
|
config->setString("proxy.https.resolver.proxy_port", "80");
|
||||||
|
config->setString("proxy.https.resolver.proxy_cache_time", "10");
|
||||||
|
|
||||||
|
context->setConfig(config);
|
||||||
|
|
||||||
|
auto http_proxy_configuration = DB::ProxyConfigurationResolverProvider::get(DB::ProxyConfiguration::Protocol::HTTP, *config)->resolve();
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Asserts env proxy is used and not the remote resolver. If the remote resolver is picked, it is an error because
|
||||||
|
* there is no `http` specification for remote resolver
|
||||||
|
* */
|
||||||
|
ASSERT_EQ(http_proxy_configuration.host, http_env_proxy_server.getHost());
|
||||||
|
ASSERT_EQ(http_proxy_configuration.port, http_env_proxy_server.getPort());
|
||||||
|
ASSERT_EQ(http_proxy_configuration.protocol, DB::ProxyConfiguration::protocolFromString(http_env_proxy_server.getScheme()));
|
||||||
|
}
|
||||||
|
|
||||||
|
TEST_F(ProxyConfigurationResolverProviderTests, RemoteResolverIsBasedOnProtocolConfigurationHTTPS)
|
||||||
|
{
|
||||||
|
/*
|
||||||
|
* Since there is no way to call `ProxyConfigurationResolver::resolve` on remote resolver,
|
||||||
|
* it is hard to verify the remote resolver was actually picked. One hackish way to assert
|
||||||
|
* the remote resolver was OR was not picked based on the configuration, is to use the
|
||||||
|
* environment resolver. Since the environment resolver is always returned as a fallback,
|
||||||
|
* we can assert the remote resolver was not picked if `ProxyConfigurationResolver::resolve`
|
||||||
|
* succeeds and returns an environment proxy configuration.
|
||||||
|
* */
|
||||||
|
EnvironmentProxySetter setter(http_env_proxy_server, https_env_proxy_server);
|
||||||
|
|
||||||
|
ConfigurationPtr config = Poco::AutoPtr(new Poco::Util::MapConfiguration());
|
||||||
|
|
||||||
|
config->setString("proxy", "");
|
||||||
|
config->setString("proxy.http", "");
|
||||||
|
config->setString("proxy.http.resolver", "");
|
||||||
|
config->setString("proxy.http.resolver.endpoint", "http://resolver:8080/hostname");
|
||||||
|
|
||||||
|
// even tho proxy protocol / scheme is https, it should not be picked (prior to this PR, it would be picked)
|
||||||
|
config->setString("proxy.http.resolver.proxy_scheme", "https");
|
||||||
|
config->setString("proxy.http.resolver.proxy_port", "80");
|
||||||
|
config->setString("proxy.http.resolver.proxy_cache_time", "10");
|
||||||
|
|
||||||
|
context->setConfig(config);
|
||||||
|
|
||||||
|
auto http_proxy_configuration = DB::ProxyConfigurationResolverProvider::get(DB::ProxyConfiguration::Protocol::HTTPS, *config)->resolve();
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Asserts env proxy is used and not the remote resolver. If the remote resolver is picked, it is an error because
|
||||||
|
* there is no `http` specification for remote resolver
|
||||||
|
* */
|
||||||
|
ASSERT_EQ(http_proxy_configuration.host, https_env_proxy_server.getHost());
|
||||||
|
ASSERT_EQ(http_proxy_configuration.port, https_env_proxy_server.getPort());
|
||||||
|
ASSERT_EQ(http_proxy_configuration.protocol, DB::ProxyConfiguration::protocolFromString(https_env_proxy_server.getScheme()));
|
||||||
|
}
|
||||||
|
|
||||||
// remote resolver is tricky to be tested in unit tests
|
// remote resolver is tricky to be tested in unit tests
|
||||||
|
Loading…
Reference in New Issue
Block a user