drydock/python/tests/unit/test_k8sdriver_promenade_cl...

179 lines
5.5 KiB
Python

# Copyright 2018 AT&T Intellectual Property. All other rights reserved.
#
# 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.
from unittest import mock
from urllib.parse import urlparse
import pytest
import responses
import drydock_provisioner.error as errors
from drydock_provisioner.drivers.kubernetes.promenade_driver.promenade_client \
import PromenadeSession, PromenadeClient
PROM_URL = urlparse('http://promhost:80/api/v1.0')
PROM_HOST = 'promhost'
@mock.patch('drydock_provisioner.drivers.kubernetes'
'.promenade_driver.promenade_client'
'.PromenadeSession._get_prom_url',
return_value=PROM_URL)
@mock.patch('drydock_provisioner.drivers.kubernetes'
'.promenade_driver.promenade_client'
'.PromenadeSession.set_auth',
return_value=None)
@responses.activate
def test_put(patch1, patch2):
"""
Test put functionality
"""
responses.add(
responses.PUT,
'http://promhost:80/api/v1.0/node-label/n1',
body='{"key1":"label1"}',
status=200)
prom_session = PromenadeSession()
result = prom_session.put(
'v1.0/node-label/n1', body='{"key1":"label1"}', timeout=(60, 60))
assert PROM_HOST == prom_session.host
assert result.status_code == 200
@mock.patch('drydock_provisioner.drivers.kubernetes'
'.promenade_driver.promenade_client'
'.PromenadeSession._get_prom_url',
return_value=PROM_URL)
@mock.patch('drydock_provisioner.drivers.kubernetes'
'.promenade_driver.promenade_client'
'.PromenadeSession.set_auth',
return_value=None)
@responses.activate
def test_get(patch1, patch2):
"""
Test get functionality
"""
responses.add(
responses.GET, 'http://promhost:80/api/v1.0/node-label/n1', status=200)
prom_session = PromenadeSession()
result = prom_session.get('v1.0/node-label/n1', timeout=(60, 60))
assert result.status_code == 200
@mock.patch('drydock_provisioner.drivers.kubernetes'
'.promenade_driver.promenade_client'
'.PromenadeSession._get_prom_url',
return_value=PROM_URL)
@mock.patch('drydock_provisioner.drivers.kubernetes'
'.promenade_driver.promenade_client'
'.PromenadeSession.set_auth',
return_value=None)
@responses.activate
def test_post(patch1, patch2):
"""
Test post functionality
"""
responses.add(
responses.POST,
'http://promhost:80/api/v1.0/node-label/n1',
body='{"key1":"label1"}',
status=200)
prom_session = PromenadeSession()
result = prom_session.post(
'v1.0/node-label/n1', body='{"key1":"label1"}', timeout=(60, 60))
assert PROM_HOST == prom_session.host
assert result.status_code == 200
@mock.patch('drydock_provisioner.drivers.kubernetes'
'.promenade_driver.promenade_client'
'.PromenadeSession._get_prom_url',
return_value=PROM_URL)
@mock.patch('drydock_provisioner.drivers.kubernetes'
'.promenade_driver.promenade_client'
'.PromenadeSession.set_auth',
return_value=None)
@responses.activate
def test_relabel_node(patch1, patch2):
"""
Test relabel node call from Promenade
Client
"""
responses.add(
responses.PUT,
'http://promhost:80/api/v1.0/node-labels/n1',
body='{"key1":"label1"}',
status=200)
prom_client = PromenadeClient()
result = prom_client.relabel_node('n1', {"key1": "label1"})
assert result == {"key1": "label1"}
@mock.patch('drydock_provisioner.drivers.kubernetes'
'.promenade_driver.promenade_client'
'.PromenadeSession._get_prom_url',
return_value=PROM_URL)
@mock.patch('drydock_provisioner.drivers.kubernetes'
'.promenade_driver.promenade_client'
'.PromenadeSession.set_auth',
return_value=None)
@responses.activate
def test_relabel_node_403_status(patch1, patch2):
"""
Test relabel node with 403 resp status
"""
responses.add(
responses.PUT,
'http://promhost:80/api/v1.0/node-labels/n1',
body='{"key1":"label1"}',
status=403)
prom_client = PromenadeClient()
with pytest.raises(errors.ClientForbiddenError):
prom_client.relabel_node('n1', {"key1": "label1"})
@mock.patch('drydock_provisioner.drivers.kubernetes'
'.promenade_driver.promenade_client'
'.PromenadeSession._get_prom_url',
return_value=PROM_URL)
@mock.patch('drydock_provisioner.drivers.kubernetes'
'.promenade_driver.promenade_client'
'.PromenadeSession.set_auth',
return_value=None)
@responses.activate
def test_relabel_node_401_status(patch1, patch2):
"""
Test relabel node with 401 resp status
"""
responses.add(
responses.PUT,
'http://promhost:80/api/v1.0/node-labels/n1',
body='{"key1":"label1"}',
status=401)
prom_client = PromenadeClient()
with pytest.raises(errors.ClientUnauthorizedError):
prom_client.relabel_node('n1', {"key1": "label1"})