Skip to content

Commit

Permalink
Fix proxy URL construction in remote configuration.
Browse files Browse the repository at this point in the history
closes #2213
  • Loading branch information
jortel committed Sep 13, 2016
1 parent c4781ae commit f71a0b2
Show file tree
Hide file tree
Showing 2 changed files with 90 additions and 11 deletions.
15 changes: 11 additions & 4 deletions plugins/pulp_ostree/plugins/importers/steps.py
Expand Up @@ -2,6 +2,7 @@

from gettext import gettext as _
from logging import getLogger
from urlparse import urlparse, urlunparse

from gnupg import GPG

Expand Down Expand Up @@ -400,11 +401,17 @@ def proxy_url(self):
port = self.config.get(importer_constants.KEY_PROXY_PORT)
user = self.config.get(importer_constants.KEY_PROXY_USER)
password = self.config.get(importer_constants.KEY_PROXY_PASS)
if host and port:
url = ':'.join((host, str(port)))
if host:
host = host.split('://', 1)
if len(host) == 1:
host = ('http', host[0])
host = '://'.join(host)
parsed = list(urlparse(host))
if port:
parsed[1] = '{}:{}'.format(parsed[1], port)
if user and password:
auth = ':'.join((user, password))
url = '@'.join((auth, url))
parsed[1] = '{}:{}@{}'.format(user, password, parsed[1])
url = urlunparse(parsed)
return url

def add(self):
Expand Down
86 changes: 79 additions & 7 deletions plugins/test/unit/plugins/importers/test_steps.py
Expand Up @@ -584,10 +584,10 @@ def test_gpg_key(self, fake_gpg):
self.assertEqual(key_ids, [k['keyid'] for k in key_list])

def test_proxy_url(self):
host = 'proxy-host'
port = 'proxy-port'
user = 'proxy-user'
password = 'proxy-password'
host = 'http://dog.com'
port = '3128'
user = 'jake'
password = 'bark'
config = {
importer_constants.KEY_PROXY_HOST: host,
importer_constants.KEY_PROXY_PORT: port,
Expand All @@ -597,16 +597,88 @@ def test_proxy_url(self):
step = Mock()
step.get_config.return_value = config

proxy_url = '@'.join(
(':'.join((user, password)),
':'.join((host, port))))
proxy_url = 'http://jake:bark@dog.com:3128'

# test
remote = Remote(step, None)

# validation
self.assertEqual(remote.proxy_url, proxy_url)

def test_proxy_url_without_scheme(self):
host = 'dog.com'
port = '3128'
user = 'jake'
password = 'bark'
config = {
importer_constants.KEY_PROXY_HOST: host,
importer_constants.KEY_PROXY_PORT: port,
importer_constants.KEY_PROXY_USER: user,
importer_constants.KEY_PROXY_PASS: password,
}
step = Mock()
step.get_config.return_value = config

proxy_url = 'http://jake:bark@dog.com:3128'

# test
remote = Remote(step, None)

# validation
self.assertEqual(remote.proxy_url, proxy_url)

def test_proxy_url_without_port(self):
host = 'http://dog.com'
port = None
user = 'jake'
password = 'bark'
config = {
importer_constants.KEY_PROXY_HOST: host,
importer_constants.KEY_PROXY_PORT: port,
importer_constants.KEY_PROXY_USER: user,
importer_constants.KEY_PROXY_PASS: password,
}
step = Mock()
step.get_config.return_value = config

proxy_url = 'http://jake:bark@dog.com'

# test
remote = Remote(step, None)

# validation
self.assertEqual(remote.proxy_url, proxy_url)

def test_proxy_without_auth(self):
host = 'http://dog.com'
port = '3128'
config = {
importer_constants.KEY_PROXY_HOST: host,
importer_constants.KEY_PROXY_PORT: port,
}
step = Mock()
step.get_config.return_value = config

proxy_url = 'http://dog.com:3128'

# test
remote = Remote(step, None)

# validation
self.assertEqual(remote.proxy_url, proxy_url)

def test_proxy_without_host(self):
config = {
}
step = Mock()
step.get_config.return_value = config

# test
remote = Remote(step, None)

# validation
self.assertEqual(remote.proxy_url, None)

@patch(MODULE + '.lib')
@patch(MODULE + '.Remote.url', PropertyMock())
@patch(MODULE + '.Remote.remote_id', PropertyMock())
Expand Down

0 comments on commit f71a0b2

Please sign in to comment.