Mini Shell
# Licensed to the Apache Software Foundation (ASF) under one or more
# contributor license agreements. See the NOTICE file distributed with
# this work for additional information regarding copyright ownership.
# The ASF licenses this file to You 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.
import sys
import datetime
try:
import simplejson as json
except ImportError:
import json
from libcloud.utils.py3 import httplib
from libcloud.utils.py3 import urlencode
from libcloud.loadbalancer.base import LoadBalancer, Member, Algorithm
from libcloud.loadbalancer.types import MemberCondition
from libcloud.loadbalancer.drivers.rackspace import RackspaceLBDriver, \
RackspaceHealthMonitor, RackspaceHTTPHealthMonitor, \
RackspaceConnectionThrottle, RackspaceAccessRule
from libcloud.loadbalancer.drivers.rackspace import RackspaceAccessRuleType
from libcloud.common.types import LibcloudError
from libcloud.test import unittest
from libcloud.test import MockHttp
from libcloud.test.file_fixtures import LoadBalancerFileFixtures
from libcloud.test.file_fixtures import OpenStackFixtures
class RackspaceLBTests(unittest.TestCase):
def setUp(self):
RackspaceLBDriver.connectionCls.conn_class = RackspaceLBMockHttp
RackspaceLBMockHttp.type = None
self.driver = RackspaceLBDriver('user', 'key')
self.driver.connection.poll_interval = 0.0
# normally authentication happens lazily, but we force it here
self.driver.connection._populate_hosts_and_request_paths()
def test_force_auth_token_kwargs(self):
base_url = 'https://ord.loadbalancer.api.rackspacecloud.com/v1.0/11111'
kwargs = {
'ex_force_auth_token': 'some-auth-token',
'ex_force_base_url': base_url
}
driver = RackspaceLBDriver('user', 'key', **kwargs)
driver.list_balancers()
self.assertEqual(kwargs['ex_force_auth_token'],
driver.connection.auth_token)
self.assertEqual('/v1.0/11111',
driver.connection.request_path)
def test_force_auth_url_kwargs(self):
kwargs = {
'ex_force_auth_version': '2.0',
'ex_force_auth_url': 'https://identity.api.rackspace.com'
}
driver = RackspaceLBDriver('user', 'key', **kwargs)
self.assertEqual(kwargs['ex_force_auth_url'],
driver.connection._ex_force_auth_url)
self.assertEqual(kwargs['ex_force_auth_version'],
driver.connection._auth_version)
def test_gets_auth_2_0_endpoint_defaults_to_ord_region(self):
driver = RackspaceLBDriver('user', 'key',
ex_force_auth_version='2.0_password'
)
driver.connection._populate_hosts_and_request_paths()
self.assertEqual(
'https://ord.loadbalancers.api.rackspacecloud.com/v1.0/11111',
driver.connection.get_endpoint())
def test_gets_auth_2_0_endpoint_for_dfw(self):
driver = RackspaceLBDriver('user', 'key',
ex_force_auth_version='2.0_password',
ex_force_region='dfw'
)
driver.connection._populate_hosts_and_request_paths()
self.assertEqual(
'https://dfw.loadbalancers.api.rackspacecloud.com/v1.0/11111',
driver.connection.get_endpoint())
def test_list_protocols(self):
protocols = self.driver.list_protocols()
self.assertEqual(len(protocols), 10)
self.assertTrue('http' in protocols)
def test_ex_list_protocols_with_default_ports(self):
protocols = self.driver.ex_list_protocols_with_default_ports()
self.assertEqual(len(protocols), 10)
self.assertTrue(('http', 80) in protocols)
def test_list_supported_algorithms(self):
algorithms = self.driver.list_supported_algorithms()
self.assertTrue(Algorithm.RANDOM in algorithms)
self.assertTrue(Algorithm.ROUND_ROBIN in algorithms)
self.assertTrue(Algorithm.LEAST_CONNECTIONS in algorithms)
self.assertTrue(Algorithm.WEIGHTED_ROUND_ROBIN in algorithms)
self.assertTrue(Algorithm.WEIGHTED_LEAST_CONNECTIONS in algorithms)
def test_ex_list_algorithms(self):
algorithms = self.driver.ex_list_algorithm_names()
self.assertTrue("RANDOM" in algorithms)
self.assertTrue("ROUND_ROBIN" in algorithms)
self.assertTrue("LEAST_CONNECTIONS" in algorithms)
self.assertTrue("WEIGHTED_ROUND_ROBIN" in algorithms)
self.assertTrue("WEIGHTED_LEAST_CONNECTIONS" in algorithms)
def test_list_balancers(self):
balancers = self.driver.list_balancers()
self.assertEqual(len(balancers), 2)
self.assertEqual(balancers[0].name, "test0")
self.assertEqual(balancers[0].id, "8155")
self.assertEqual(balancers[0].port, 80)
self.assertEqual(balancers[0].ip, "1.1.1.25")
self.assertTrue(balancers[0].extra.get('service_name') is not None)
self.assertTrue(balancers[0].extra.get('uri') is not None)
self.assertEqual(balancers[1].name, "test1")
self.assertEqual(balancers[1].id, "8156")
def test_list_balancers_ex_member_address(self):
RackspaceLBMockHttp.type = 'EX_MEMBER_ADDRESS'
balancers = self.driver.list_balancers(ex_member_address='127.0.0.1')
self.assertEqual(len(balancers), 3)
self.assertEqual(balancers[0].name, "First Loadbalancer")
self.assertEqual(balancers[0].id, "1")
self.assertEqual(balancers[1].name, "Second Loadbalancer")
self.assertEqual(balancers[1].id, "2")
self.assertEqual(balancers[2].name, "Third Loadbalancer")
self.assertEqual(balancers[2].id, "8")
def test_create_balancer(self):
balancer = self.driver.create_balancer(name='test2',
port=80,
algorithm=Algorithm.ROUND_ROBIN,
members=(
Member(
None, '10.1.0.10', 80,
extra={'condition': MemberCondition.DISABLED,
'weight': 10}),
Member(None, '10.1.0.11', 80))
)
self.assertEqual(balancer.name, 'test2')
self.assertEqual(balancer.id, '8290')
def test_ex_create_balancer(self):
RackspaceLBDriver.connectionCls.conn_class = RackspaceLBWithVIPMockHttp
RackspaceLBMockHttp.type = None
driver = RackspaceLBDriver('user', 'key')
balancer = driver.ex_create_balancer(name='test2',
port=80,
algorithm=Algorithm.ROUND_ROBIN,
members=(
Member(
None, '10.1.0.11', 80),),
vip='12af'
)
self.assertEqual(balancer.name, 'test2')
self.assertEqual(balancer.id, '8290')
def test_destroy_balancer(self):
balancer = self.driver.list_balancers()[0]
ret = self.driver.destroy_balancer(balancer)
self.assertTrue(ret)
def test_ex_destroy_balancers(self):
balancers = self.driver.list_balancers()
ret = self.driver.ex_destroy_balancers(balancers)
self.assertTrue(ret)
def test_get_balancer(self):
balancer = self.driver.get_balancer(balancer_id='8290')
self.assertEqual(balancer.name, 'test2')
self.assertEqual(balancer.id, '8290')
def test_get_balancer_extra_vips(self):
balancer = self.driver.get_balancer(balancer_id='18940')
self.assertEqual(balancer.extra["virtualIps"],
[{"address": "50.56.49.149",
"id": 2359,
"type": "PUBLIC",
"ipVersion": "IPV4"}])
def test_get_balancer_extra_public_source_ipv4(self):
balancer = self.driver.get_balancer(balancer_id='18940')
self.assertEqual(balancer.extra["ipv4PublicSource"], '184.106.100.25')
def test_get_balancer_extra_public_source_ipv6(self):
balancer = self.driver.get_balancer(balancer_id='18940')
self.assertEqual(balancer.extra["ipv6PublicSource"],
'2001:4801:7901::6/64')
def test_get_balancer_extra_private_source_ipv4(self):
balancer = self.driver.get_balancer(balancer_id='18940')
self.assertEqual(balancer.extra["ipv4PrivateSource"], '10.183.252.25')
def test_get_balancer_extra_members(self):
balancer = self.driver.get_balancer(balancer_id='8290')
members = balancer.extra['members']
self.assertEqual(3, len(members))
self.assertEqual('10.1.0.11', members[0].ip)
self.assertEqual('10.1.0.10', members[1].ip)
self.assertEqual('10.1.0.9', members[2].ip)
def test_get_balancer_extra_created(self):
balancer = self.driver.get_balancer(balancer_id='8290')
created_8290 = datetime.datetime(2011, 4, 7, 16, 27, 50)
self.assertEqual(created_8290, balancer.extra['created'])
def test_get_balancer_extra_updated(self):
balancer = self.driver.get_balancer(balancer_id='8290')
updated_8290 = datetime.datetime(2011, 4, 7, 16, 28, 12)
self.assertEqual(updated_8290, balancer.extra['updated'])
def test_get_balancer_extra_access_list(self):
balancer = self.driver.get_balancer(balancer_id='94698')
access_list = balancer.extra['accessList']
self.assertEqual(3, len(access_list))
self.assertEqual(2883, access_list[0].id)
self.assertEqual("0.0.0.0/0", access_list[0].address)
self.assertEqual(RackspaceAccessRuleType.DENY,
access_list[0].rule_type)
self.assertEqual(2884, access_list[1].id)
self.assertEqual("2001:4801:7901::6/64",
access_list[1].address)
self.assertEqual(RackspaceAccessRuleType.ALLOW,
access_list[1].rule_type)
self.assertEqual(3006, access_list[2].id)
self.assertEqual("8.8.8.8/0", access_list[2].address)
self.assertEqual(RackspaceAccessRuleType.DENY,
access_list[2].rule_type)
def test_get_balancer_algorithm(self):
balancer = self.driver.get_balancer(balancer_id='8290')
self.assertEqual(balancer.extra["algorithm"], Algorithm.RANDOM)
def test_get_balancer_protocol(self):
balancer = self.driver.get_balancer(balancer_id='94695')
self.assertEqual(balancer.extra['protocol'], 'HTTP')
def test_get_balancer_weighted_round_robin_algorithm(self):
balancer = self.driver.get_balancer(balancer_id='94692')
self.assertEqual(balancer.extra["algorithm"],
Algorithm.WEIGHTED_ROUND_ROBIN)
def test_get_balancer_weighted_least_connections_algorithm(self):
balancer = self.driver.get_balancer(balancer_id='94693')
self.assertEqual(balancer.extra["algorithm"],
Algorithm.WEIGHTED_LEAST_CONNECTIONS)
def test_get_balancer_unknown_algorithm(self):
balancer = self.driver.get_balancer(balancer_id='94694')
self.assertFalse('algorithm' in balancer.extra)
def test_get_balancer_connect_health_monitor(self):
balancer = self.driver.get_balancer(balancer_id='94695')
balancer_health_monitor = balancer.extra["healthMonitor"]
self.assertEqual(balancer_health_monitor.type, "CONNECT")
self.assertEqual(balancer_health_monitor.delay, 10)
self.assertEqual(balancer_health_monitor.timeout, 5)
self.assertEqual(balancer_health_monitor.attempts_before_deactivation,
2)
def test_get_balancer_http_health_monitor(self):
balancer = self.driver.get_balancer(balancer_id='94696')
balancer_health_monitor = balancer.extra["healthMonitor"]
self.assertEqual(balancer_health_monitor.type, "HTTP")
self.assertEqual(balancer_health_monitor.delay, 10)
self.assertEqual(balancer_health_monitor.timeout, 5)
self.assertEqual(balancer_health_monitor.attempts_before_deactivation,
2)
self.assertEqual(balancer_health_monitor.path, "/")
self.assertEqual(balancer_health_monitor.status_regex,
"^[234][0-9][0-9]$")
self.assertEqual(balancer_health_monitor.body_regex,
"Hello World!")
def test_get_balancer_https_health_monitor(self):
balancer = self.driver.get_balancer(balancer_id='94697')
balancer_health_monitor = balancer.extra["healthMonitor"]
self.assertEqual(balancer_health_monitor.type, "HTTPS")
self.assertEqual(balancer_health_monitor.delay, 15)
self.assertEqual(balancer_health_monitor.timeout, 12)
self.assertEqual(balancer_health_monitor.attempts_before_deactivation,
5)
self.assertEqual(balancer_health_monitor.path, "/test")
self.assertEqual(balancer_health_monitor.status_regex,
"^[234][0-9][0-9]$")
self.assertEqual(balancer_health_monitor.body_regex, "abcdef")
def test_get_balancer_connection_throttle(self):
balancer = self.driver.get_balancer(balancer_id='94695')
balancer_connection_throttle = balancer.extra["connectionThrottle"]
self.assertEqual(balancer_connection_throttle.min_connections, 50)
self.assertEqual(balancer_connection_throttle.max_connections, 200)
self.assertEqual(balancer_connection_throttle.max_connection_rate, 50)
self.assertEqual(balancer_connection_throttle.rate_interval_seconds,
10)
def test_get_session_persistence(self):
balancer = self.driver.get_balancer(balancer_id='94695')
self.assertEqual(balancer.extra["sessionPersistenceType"],
"HTTP_COOKIE")
def test_get_connection_logging(self):
balancer = self.driver.get_balancer(balancer_id='94695')
self.assertEqual(balancer.extra["connectionLoggingEnabled"], True)
def test_get_error_page(self):
balancer = self.driver.get_balancer(balancer_id='18940')
error_page = self.driver.ex_get_balancer_error_page(balancer)
self.assertTrue("The service is temporarily unavailable" in error_page)
def test_get_access_list(self):
balancer = self.driver.get_balancer(balancer_id='18940')
deny_rule, allow_rule = self.driver.ex_balancer_access_list(balancer)
self.assertEqual(deny_rule.id, 2883)
self.assertEqual(deny_rule.rule_type, RackspaceAccessRuleType.DENY)
self.assertEqual(deny_rule.address, "0.0.0.0/0")
self.assertEqual(allow_rule.id, 2884)
self.assertEqual(allow_rule.address, "2001:4801:7901::6/64")
self.assertEqual(allow_rule.rule_type, RackspaceAccessRuleType.ALLOW)
def test_ex_create_balancer_access_rule(self):
balancer = self.driver.get_balancer(balancer_id='94698')
rule = RackspaceAccessRule(rule_type=RackspaceAccessRuleType.DENY,
address='0.0.0.0/0')
rule = self.driver.ex_create_balancer_access_rule(balancer, rule)
self.assertEqual(2883, rule.id)
def test_ex_create_balancer_access_rule_no_poll(self):
balancer = self.driver.get_balancer(balancer_id='94698')
rule = RackspaceAccessRule(rule_type=RackspaceAccessRuleType.DENY,
address='0.0.0.0/0')
resp = self.driver.ex_create_balancer_access_rule_no_poll(balancer,
rule)
self.assertTrue(resp)
def test_ex_create_balancer_access_rules(self):
balancer = self.driver.get_balancer(balancer_id='94699')
rules = [RackspaceAccessRule(rule_type=RackspaceAccessRuleType.ALLOW,
address='2001:4801:7901::6/64'),
RackspaceAccessRule(rule_type=RackspaceAccessRuleType.DENY,
address='8.8.8.8/0')]
rules = self.driver.ex_create_balancer_access_rules(balancer, rules)
self.assertEqual(2, len(rules))
self.assertEqual(2884, rules[0].id)
self.assertEqual(3006, rules[1].id)
def test_ex_create_balancer_access_rules_no_poll(self):
balancer = self.driver.get_balancer(balancer_id='94699')
rules = [RackspaceAccessRule(rule_type=RackspaceAccessRuleType.ALLOW,
address='2001:4801:7901::6/64'),
RackspaceAccessRule(rule_type=RackspaceAccessRuleType.DENY,
address='8.8.8.8/0')]
resp = self.driver.ex_create_balancer_access_rules_no_poll(balancer,
rules)
self.assertTrue(resp)
def test_ex_destroy_balancer_access_rule(self):
balancer = self.driver.get_balancer(balancer_id='94698')
rule = RackspaceAccessRule(id='1007',
rule_type=RackspaceAccessRuleType.ALLOW,
address="10.45.13.5/12"
)
balancer = self.driver.ex_destroy_balancer_access_rule(balancer, rule)
rule_ids = [r.id for r in balancer.extra['accessList']]
self.assertTrue(1007 not in rule_ids)
def test_ex_destroy_balancer_access_rule_no_poll(self):
balancer = self.driver.get_balancer(balancer_id='94698')
rule = RackspaceAccessRule(id=1007,
rule_type=RackspaceAccessRuleType.ALLOW,
address="10.45.13.5/12"
)
resp = self.driver.ex_destroy_balancer_access_rule_no_poll(balancer,
rule)
self.assertTrue(resp)
def test_ex_destroy_balancer_access_rules(self):
balancer = self.driver.get_balancer(balancer_id='94699')
balancer = self.driver.ex_destroy_balancer_access_rules(balancer,
balancer.extra['accessList'])
self.assertEqual('94699', balancer.id)
def test_ex_destroy_balancer_access_rules_no_poll(self):
balancer = self.driver.get_balancer(balancer_id='94699')
resp = self.driver.ex_destroy_balancer_access_rules_no_poll(balancer,
balancer.extra['accessList'])
self.assertTrue(resp)
def test_ex_update_balancer_health_monitor(self):
balancer = self.driver.get_balancer(balancer_id='94695')
monitor = RackspaceHealthMonitor(type='CONNECT', delay=10, timeout=5,
attempts_before_deactivation=2)
balancer = self.driver.ex_update_balancer_health_monitor(
balancer, monitor)
updated_monitor = balancer.extra['healthMonitor']
self.assertEqual('CONNECT', updated_monitor.type)
self.assertEqual(10, updated_monitor.delay)
self.assertEqual(5, updated_monitor.timeout)
self.assertEqual(2, updated_monitor.attempts_before_deactivation)
def test_ex_update_balancer_http_health_monitor(self):
balancer = self.driver.get_balancer(balancer_id='94696')
monitor = RackspaceHTTPHealthMonitor(type='HTTP', delay=10, timeout=5,
attempts_before_deactivation=2,
path='/',
status_regex='^[234][0-9][0-9]$',
body_regex='Hello World!')
balancer = self.driver.ex_update_balancer_health_monitor(
balancer, monitor)
updated_monitor = balancer.extra['healthMonitor']
self.assertEqual('HTTP', updated_monitor.type)
self.assertEqual(10, updated_monitor.delay)
self.assertEqual(5, updated_monitor.timeout)
self.assertEqual(2, updated_monitor.attempts_before_deactivation)
self.assertEqual('/', updated_monitor.path)
self.assertEqual('^[234][0-9][0-9]$', updated_monitor.status_regex)
self.assertEqual('Hello World!', updated_monitor.body_regex)
def test_ex_update_balancer_health_monitor_no_poll(self):
balancer = self.driver.get_balancer(balancer_id='94695')
monitor = RackspaceHealthMonitor(type='CONNECT', delay=10, timeout=5,
attempts_before_deactivation=2)
resp = self.driver.ex_update_balancer_health_monitor_no_poll(balancer,
monitor)
self.assertTrue(resp)
def test_ex_update_balancer_http_health_monitor_no_poll(self):
balancer = self.driver.get_balancer(balancer_id='94696')
monitor = RackspaceHTTPHealthMonitor(type='HTTP', delay=10, timeout=5,
attempts_before_deactivation=2,
path='/',
status_regex='^[234][0-9][0-9]$',
body_regex='Hello World!')
resp = self.driver.ex_update_balancer_health_monitor_no_poll(balancer,
monitor)
self.assertTrue(resp)
def test_ex_update_balancer_http_health_monitor_with_no_option_body_regex(self):
balancer = self.driver.get_balancer(balancer_id='94700')
monitor = RackspaceHTTPHealthMonitor(type='HTTP', delay=10, timeout=5,
attempts_before_deactivation=2,
path='/',
status_regex='^[234][0-9][0-9]$',
body_regex='')
balancer = self.driver.ex_update_balancer_health_monitor(
balancer, monitor)
updated_monitor = balancer.extra['healthMonitor']
self.assertEqual('HTTP', updated_monitor.type)
self.assertEqual(10, updated_monitor.delay)
self.assertEqual(5, updated_monitor.timeout)
self.assertEqual(2, updated_monitor.attempts_before_deactivation)
self.assertEqual('/', updated_monitor.path)
self.assertEqual('^[234][0-9][0-9]$', updated_monitor.status_regex)
self.assertEqual('', updated_monitor.body_regex)
def test_ex_disable_balancer_health_monitor(self):
balancer = self.driver.get_balancer(balancer_id='8290')
balancer = self.driver.ex_disable_balancer_health_monitor(balancer)
self.assertTrue('healthMonitor' not in balancer.extra)
def test_ex_disable_balancer_health_monitor_no_poll(self):
balancer = self.driver.get_balancer(balancer_id='8290')
resp = self.driver.ex_disable_balancer_health_monitor_no_poll(balancer)
self.assertTrue(resp)
def test_ex_update_balancer_connection_throttle(self):
balancer = self.driver.get_balancer(balancer_id='94695')
connection_throttle = RackspaceConnectionThrottle(max_connections=200,
min_connections=50,
max_connection_rate=50,
rate_interval_seconds=10)
balancer = self.driver.ex_update_balancer_connection_throttle(balancer,
connection_throttle)
updated_throttle = balancer.extra['connectionThrottle']
self.assertEqual(200, updated_throttle.max_connections)
self.assertEqual(50, updated_throttle.min_connections)
self.assertEqual(50, updated_throttle.max_connection_rate)
self.assertEqual(10, updated_throttle.rate_interval_seconds)
def test_ex_update_balancer_connection_throttle_no_poll(self):
balancer = self.driver.get_balancer(balancer_id='94695')
connection_throttle = RackspaceConnectionThrottle(max_connections=200,
min_connections=50,
max_connection_rate=50,
rate_interval_seconds=10)
resp = self.driver.ex_update_balancer_connection_throttle_no_poll(
balancer, connection_throttle)
self.assertTrue(resp)
def test_ex_disable_balancer_connection_throttle(self):
balancer = self.driver.get_balancer(balancer_id='8290')
balancer = self.driver.ex_disable_balancer_connection_throttle(
balancer)
self.assertTrue('connectionThrottle' not in balancer.extra)
def test_ex_disable_balancer_connection_throttle_no_poll(self):
balancer = self.driver.get_balancer(balancer_id='8290')
resp = self.driver.ex_disable_balancer_connection_throttle_no_poll(
balancer)
self.assertTrue(resp)
def test_ex_enable_balancer_connection_logging(self):
balancer = self.driver.get_balancer(balancer_id='94695')
balancer = self.driver.ex_enable_balancer_connection_logging(
balancer)
self.assertTrue(balancer.extra["connectionLoggingEnabled"])
def test_ex_enable_balancer_connection_logging_no_poll(self):
balancer = self.driver.get_balancer(balancer_id='94695')
resp = self.driver.ex_enable_balancer_connection_logging_no_poll(
balancer)
self.assertTrue(resp)
def test_ex_disable_balancer_connection_logging(self):
balancer = self.driver.get_balancer(balancer_id='8290')
balancer = self.driver.ex_disable_balancer_connection_logging(
balancer
)
self.assertFalse(balancer.extra["connectionLoggingEnabled"])
def test_ex_disable_balancer_connection_logging_no_poll(self):
balancer = self.driver.get_balancer(balancer_id='8290')
resp = self.driver.ex_disable_balancer_connection_logging_no_poll(
balancer
)
self.assertTrue(resp)
def test_ex_enable_balancer_session_persistence(self):
balancer = self.driver.get_balancer(balancer_id='94695')
balancer = self.driver.ex_enable_balancer_session_persistence(balancer)
persistence_type = balancer.extra['sessionPersistenceType']
self.assertEqual('HTTP_COOKIE', persistence_type)
def test_ex_enable_balancer_session_persistence_no_poll(self):
balancer = self.driver.get_balancer(balancer_id='94695')
resp = self.driver.ex_enable_balancer_session_persistence_no_poll(
balancer)
self.assertTrue(resp)
def test_disable_balancer_session_persistence(self):
balancer = self.driver.get_balancer(balancer_id='8290')
balancer = self.driver.ex_disable_balancer_session_persistence(
balancer)
self.assertTrue('sessionPersistenceType' not in balancer.extra)
def test_disable_balancer_session_persistence_no_poll(self):
balancer = self.driver.get_balancer(balancer_id='8290')
resp = self.driver.ex_disable_balancer_session_persistence_no_poll(
balancer)
self.assertTrue(resp)
def test_ex_update_balancer_error_page(self):
balancer = self.driver.get_balancer(balancer_id='8290')
content = "<html>Generic Error Page</html>"
balancer = self.driver.ex_update_balancer_error_page(
balancer, content)
error_page_content = self.driver.ex_get_balancer_error_page(balancer)
self.assertEqual(content, error_page_content)
def test_ex_update_balancer_error_page_no_poll(self):
balancer = self.driver.get_balancer(balancer_id='8290')
content = "<html>Generic Error Page</html>"
resp = self.driver.ex_update_balancer_error_page_no_poll(
balancer, content)
self.assertTrue(resp)
def test_ex_disable_balancer_custom_error_page_no_poll(self):
balancer = self.driver.get_balancer(balancer_id='94695')
resp = self.driver.ex_disable_balancer_custom_error_page_no_poll(
balancer)
self.assertTrue(resp)
def test_ex_disable_balancer_custom_error_page(self):
fixtures = LoadBalancerFileFixtures('rackspace')
error_page_fixture = json.loads(
fixtures.load('error_page_default.json'))
default_error_page = error_page_fixture['errorpage']['content']
balancer = self.driver.get_balancer(balancer_id='94695')
balancer = self.driver.ex_disable_balancer_custom_error_page(balancer)
error_page_content = self.driver.ex_get_balancer_error_page(balancer)
self.assertEqual(default_error_page, error_page_content)
def test_balancer_list_members(self):
expected = {'10.1.0.10:80', '10.1.0.11:80', '10.1.0.9:8080'}
balancer = self.driver.get_balancer(balancer_id='8290')
members = balancer.list_members()
self.assertEqual(len(members), 3)
self.assertEqual(members[0].balancer, balancer)
self.assertEqual(expected, set(["%s:%s" % (member.ip, member.port) for
member in members]))
def test_balancer_members_extra_weight(self):
balancer = self.driver.get_balancer(balancer_id='8290')
members = balancer.list_members()
self.assertEqual(12, members[0].extra['weight'])
self.assertEqual(8, members[1].extra['weight'])
def test_balancer_members_extra_condition(self):
balancer = self.driver.get_balancer(balancer_id='8290')
members = balancer.list_members()
self.assertEqual(MemberCondition.ENABLED,
members[0].extra['condition'])
self.assertEqual(MemberCondition.DISABLED,
members[1].extra['condition'])
self.assertEqual(MemberCondition.DRAINING,
members[2].extra['condition'])
def test_balancer_members_extra_status(self):
balancer = self.driver.get_balancer(balancer_id='8290')
members = balancer.list_members()
self.assertEqual('ONLINE', members[0].extra['status'])
self.assertEqual('OFFLINE', members[1].extra['status'])
self.assertEqual('DRAINING', members[2].extra['status'])
def test_balancer_attach_member(self):
balancer = self.driver.get_balancer(balancer_id='8290')
extra = {'condition': MemberCondition.DISABLED,
'weight': 10}
member = balancer.attach_member(Member(None, ip='10.1.0.12',
port='80', extra=extra))
self.assertEqual(member.ip, '10.1.0.12')
self.assertEqual(member.port, 80)
def test_balancer_attach_member_with_no_condition_specified(self):
balancer = self.driver.get_balancer(balancer_id='8291')
member = balancer.attach_member(Member(None, ip='10.1.0.12',
port='80'))
self.assertEqual(member.ip, '10.1.0.12')
self.assertEqual(member.port, 80)
def test_balancer_attach_members(self):
balancer = self.driver.get_balancer(balancer_id='8292')
members = [Member(None, ip='10.1.0.12', port='80'),
Member(None, ip='10.1.0.13', port='80')]
attached_members = self.driver.ex_balancer_attach_members(balancer,
members)
first_member = attached_members[0]
second_member = attached_members[1]
self.assertEqual(first_member.ip, '10.1.0.12')
self.assertEqual(first_member.port, 80)
self.assertEqual(second_member.ip, '10.1.0.13')
self.assertEqual(second_member.port, 80)
def test_balancer_detach_member(self):
balancer = self.driver.get_balancer(balancer_id='8290')
member = balancer.list_members()[0]
ret = balancer.detach_member(member)
self.assertTrue(ret)
def test_ex_detach_members(self):
balancer = self.driver.get_balancer(balancer_id='8290')
members = balancer.list_members()
balancer = self.driver.ex_balancer_detach_members(balancer, members)
self.assertEqual('8290', balancer.id)
def test_ex_detach_members_no_poll(self):
balancer = self.driver.get_balancer(balancer_id='8290')
members = balancer.list_members()
ret = self.driver.ex_balancer_detach_members_no_poll(balancer, members)
self.assertTrue(ret)
def test_update_balancer_protocol(self):
balancer = LoadBalancer(id='3130', name='LB_update',
state='PENDING_UPDATE', ip='10.34.4.3',
port=80, driver=self.driver)
updated_balancer = self.driver.update_balancer(
balancer, protocol='HTTPS')
self.assertEqual('HTTPS', updated_balancer.extra['protocol'])
def test_update_balancer_protocol_to_imapv2(self):
balancer = LoadBalancer(id='3135', name='LB_update',
state='PENDING_UPDATE', ip='10.34.4.3',
port=80, driver=self.driver)
updated_balancer = self.driver.update_balancer(
balancer, protocol='imapv2')
self.assertEqual('IMAPv2', updated_balancer.extra['protocol'])
def test_update_balancer_protocol_to_imapv3(self):
balancer = LoadBalancer(id='3136', name='LB_update',
state='PENDING_UPDATE', ip='10.34.4.3',
port=80, driver=self.driver)
updated_balancer = self.driver.update_balancer(
balancer, protocol='IMAPV3')
self.assertEqual('IMAPv3', updated_balancer.extra['protocol'])
def test_update_balancer_protocol_to_imapv4(self):
balancer = LoadBalancer(id='3137', name='LB_update',
state='PENDING_UPDATE', ip='10.34.4.3',
port=80, driver=self.driver)
updated_balancer = self.driver.update_balancer(
balancer, protocol='IMAPv4')
self.assertEqual('IMAPv4', updated_balancer.extra['protocol'])
def test_update_balancer_port(self):
balancer = LoadBalancer(id='3131', name='LB_update',
state='PENDING_UPDATE', ip='10.34.4.3',
port=80, driver=self.driver)
updated_balancer = self.driver.update_balancer(balancer, port=1337)
self.assertEqual(1337, updated_balancer.port)
def test_update_balancer_name(self):
balancer = LoadBalancer(id='3132', name='LB_update',
state='PENDING_UPDATE', ip='10.34.4.3',
port=80, driver=self.driver)
updated_balancer = self.driver.update_balancer(
balancer, name='new_lb_name')
self.assertEqual('new_lb_name', updated_balancer.name)
def test_update_balancer_algorithm(self):
balancer = LoadBalancer(id='3133', name='LB_update',
state='PENDING_UPDATE', ip='10.34.4.3',
port=80, driver=self.driver)
updated_balancer = self.driver.update_balancer(balancer,
algorithm=Algorithm.ROUND_ROBIN)
self.assertEqual(
Algorithm.ROUND_ROBIN, updated_balancer.extra['algorithm'])
def test_update_balancer_bad_algorithm_exception(self):
balancer = LoadBalancer(id='3134', name='LB_update',
state='PENDING_UPDATE', ip='10.34.4.3',
port=80, driver=self.driver)
try:
self.driver.update_balancer(balancer,
algorithm='HAVE_MERCY_ON_OUR_SERVERS')
except LibcloudError:
pass
else:
self.fail(
'Should have thrown an exception with bad algorithm value')
def test_ex_update_balancer_no_poll_protocol(self):
balancer = LoadBalancer(id='3130', name='LB_update',
state='PENDING_UPDATE', ip='10.34.4.3',
port=80, driver=self.driver)
action_succeeded = self.driver.ex_update_balancer_no_poll(
balancer,
protocol='HTTPS')
self.assertTrue(action_succeeded)
def test_ex_update_balancer_no_poll_port(self):
balancer = LoadBalancer(id='3131', name='LB_update',
state='PENDING_UPDATE', ip='10.34.4.3',
port=80, driver=self.driver)
action_succeeded = self.driver.ex_update_balancer_no_poll(
balancer,
port=1337)
self.assertTrue(action_succeeded)
def test_ex_update_balancer_no_poll_name(self):
balancer = LoadBalancer(id='3132', name='LB_update',
state='PENDING_UPDATE', ip='10.34.4.3',
port=80, driver=self.driver)
action_succeeded = self.driver.ex_update_balancer_no_poll(
balancer,
name='new_lb_name')
self.assertTrue(action_succeeded)
def test_ex_update_balancer_no_poll_algorithm(self):
balancer = LoadBalancer(id='3133', name='LB_update',
state='PENDING_UPDATE', ip='10.34.4.3',
port=80, driver=self.driver)
action_succeeded = self.driver.ex_update_balancer_no_poll(balancer,
algorithm=Algorithm.ROUND_ROBIN)
self.assertTrue(action_succeeded)
def test_ex_update_balancer_no_poll_bad_algorithm_exception(self):
balancer = LoadBalancer(id='3134', name='LB_update',
state='PENDING_UPDATE', ip='10.34.4.3',
port=80, driver=self.driver)
try:
self.driver.update_balancer(balancer,
algorithm='HAVE_MERCY_ON_OUR_SERVERS')
except LibcloudError:
pass
else:
self.fail('Should have thrown exception with bad algorithm value')
def test_ex_update_balancer_member_extra_attributes(self):
balancer = self.driver.get_balancer(balancer_id='8290')
members = self.driver.balancer_list_members(balancer)
first_member = members[0]
member = self.driver.ex_balancer_update_member(balancer, first_member,
condition=MemberCondition.ENABLED, weight=12)
self.assertEqual(MemberCondition.ENABLED, member.extra['condition'])
self.assertEqual(12, member.extra['weight'])
def test_ex_update_balancer_member_no_poll_extra_attributes(self):
balancer = self.driver.get_balancer(balancer_id='8290')
members = self.driver.balancer_list_members(balancer)
first_member = members[0]
resp = self.driver.ex_balancer_update_member_no_poll(
balancer, first_member,
condition=MemberCondition.ENABLED, weight=12)
self.assertTrue(resp)
def test_ex_list_current_usage(self):
balancer = self.driver.get_balancer(balancer_id='8290')
usage = self.driver.ex_list_current_usage(balancer=balancer)
self.assertEqual(
usage['loadBalancerUsageRecords'][0]['incomingTransferSsl'],
6182163)
class RackspaceUKLBTests(RackspaceLBTests):
def setUp(self):
RackspaceLBDriver.connectionCls.conn_class = RackspaceLBMockHttp
RackspaceLBMockHttp.type = None
self.driver = RackspaceLBDriver('user', 'key', region='lon')
# normally authentication happens lazily, but we force it here
self.driver.connection._populate_hosts_and_request_paths()
class RackspaceLBMockHttp(MockHttp, unittest.TestCase):
fixtures = LoadBalancerFileFixtures('rackspace')
auth_fixtures = OpenStackFixtures()
def _v2_0_tokens(self, method, url, body, headers):
body = self.fixtures.load('_v2_0__auth.json')
return (httplib.OK, body, headers,
httplib.responses[httplib.OK])
def _v1_0_11111_loadbalancers_protocols(self, method, url, body, headers):
body = self.fixtures.load('v1_slug_loadbalancers_protocols.json')
return (httplib.ACCEPTED, body, {},
httplib.responses[httplib.ACCEPTED])
def _v1_0_11111_loadbalancers_algorithms(self, method, url, body, headers):
if method == "GET":
body = self.fixtures.load('v1_slug_loadbalancers_algorithms.json')
return (httplib.ACCEPTED, body, {},
httplib.responses[httplib.ACCEPTED])
raise NotImplementedError
def _v1_0_11111_loadbalancers(self, method, url, body, headers):
if method == "GET":
body = self.fixtures.load('v1_slug_loadbalancers.json')
return (httplib.OK, body, {}, httplib.responses[httplib.OK])
elif method == "POST":
json_body = json.loads(body)
loadbalancer_json = json_body['loadBalancer']
member_1_json, member_2_json = loadbalancer_json['nodes']
self.assertEqual(loadbalancer_json['protocol'], 'HTTP')
self.assertEqual(loadbalancer_json['algorithm'], 'ROUND_ROBIN')
self.assertEqual(loadbalancer_json['virtualIps'][0]['type'],
'PUBLIC')
self.assertEqual(member_1_json['condition'], 'DISABLED')
self.assertEqual(member_1_json['weight'], 10)
self.assertEqual(member_2_json['condition'], 'ENABLED')
body = self.fixtures.load('v1_slug_loadbalancers_post.json')
return (httplib.ACCEPTED, body, {},
httplib.responses[httplib.ACCEPTED])
elif method == 'DELETE':
balancers = self.fixtures.load('v1_slug_loadbalancers.json')
balancers_json = json.loads(balancers)
for balancer in balancers_json['loadBalancers']:
id = balancer['id']
self.assertTrue(urlencode([('id', id)]) in url,
msg='Did not delete balancer with id %d' % id)
return (httplib.ACCEPTED, '', {}, httplib.responses[httplib.ACCEPTED])
raise NotImplementedError
def _v1_0_11111_loadbalancers_EX_MEMBER_ADDRESS(self, method, url, body, headers):
body = self.fixtures.load('v1_slug_loadbalancers_nodeaddress.json')
return (httplib.OK, body, {}, httplib.responses[httplib.OK])
def _v1_0_11111_loadbalancers_8155(self, method, url, body, headers):
if method == "DELETE":
return (httplib.ACCEPTED, "", {}, httplib.responses[httplib.ACCEPTED])
raise NotImplementedError
def _v1_0_11111_loadbalancers_8290(self, method, url, body, headers):
if method == "GET":
body = self.fixtures.load('v1_slug_loadbalancers_8290.json')
return (httplib.OK, body, {}, httplib.responses[httplib.OK])
raise NotImplementedError
def _v1_0_11111_loadbalancers_8290_nodes(self, method, url, body, headers):
if method == "GET":
body = self.fixtures.load('v1_slug_loadbalancers_8290_nodes.json')
return (httplib.OK, body, {}, httplib.responses[httplib.OK])
elif method == "POST":
json_body = json.loads(body)
json_node = json_body['nodes'][0]
self.assertEqual('DISABLED', json_node['condition'])
self.assertEqual(10, json_node['weight'])
response_body = self.fixtures.load(
'v1_slug_loadbalancers_8290_nodes_post.json')
return (httplib.ACCEPTED, response_body, {},
httplib.responses[httplib.ACCEPTED])
elif method == "DELETE":
nodes = self.fixtures.load('v1_slug_loadbalancers_8290_nodes.json')
json_nodes = json.loads(nodes)
for node in json_nodes['nodes']:
id = node['id']
self.assertTrue(urlencode([('id', id)]) in url,
msg='Did not delete member with id %d' % id)
return (httplib.ACCEPTED, '', {}, httplib.responses[httplib.ACCEPTED])
raise NotImplementedError
def _v1_0_11111_loadbalancers_8291(self, method, url, body, headers):
if method == "GET":
body = self.fixtures.load('v1_slug_loadbalancers_8291.json')
return (httplib.OK, body, {}, httplib.responses[httplib.OK])
raise NotImplementedError
def _v1_0_11111_loadbalancers_8291_nodes(self, method, url, body, headers):
if method == "POST":
json_body = json.loads(body)
json_node = json_body['nodes'][0]
self.assertEqual('ENABLED', json_node['condition'])
response_body = self.fixtures.load(
'v1_slug_loadbalancers_8290_nodes_post.json')
return (httplib.ACCEPTED, response_body, {},
httplib.responses[httplib.ACCEPTED])
raise NotImplementedError
def _v1_0_11111_loadbalancers_8292(self, method, url, body, headers):
if method == "GET":
body = self.fixtures.load('v1_slug_loadbalancers_8292.json')
return (httplib.OK, body, {}, httplib.responses[httplib.OK])
raise NotImplementedError
def _v1_0_11111_loadbalancers_8292_nodes(self, method, url, body, headers):
if method == "POST":
json_body = json.loads(body)
json_node_1 = json_body['nodes'][0]
json_node_2 = json_body['nodes'][1]
self.assertEqual('10.1.0.12', json_node_1['address'])
self.assertEqual('10.1.0.13', json_node_2['address'])
response_body = self.fixtures.load(
'v1_slug_loadbalancers_8292_nodes_post.json')
return (httplib.ACCEPTED, response_body, {},
httplib.responses[httplib.ACCEPTED])
raise NotImplementedError
def _v1_0_11111_loadbalancers_8290_nodes_30944(self, method, url, body, headers):
if method == "PUT":
json_body = json.loads(body)
self.assertEqual('ENABLED', json_body['condition'])
self.assertEqual(12, json_body['weight'])
return (httplib.ACCEPTED, '', {}, httplib.responses[httplib.ACCEPTED])
elif method == "DELETE":
return (httplib.ACCEPTED, "", {}, httplib.responses[httplib.ACCEPTED])
raise NotImplementedError
def _v1_0_11111_loadbalancers_8290_healthmonitor(self, method, url, body, headers):
if method == "DELETE":
return (httplib.ACCEPTED, '', {}, httplib.responses[httplib.ACCEPTED])
raise NotImplementedError
def _v1_0_11111_loadbalancers_8290_connectionthrottle(self, method, url, body, headers):
if method == 'DELETE':
return (httplib.ACCEPTED, '', {}, httplib.responses[httplib.ACCEPTED])
raise NotImplementedError
def _v1_0_11111_loadbalancers_8290_connectionlogging(self, method, url, body, headers):
# Connection Logging uses a PUT to disable connection logging
if method == 'PUT':
json_body = json.loads(body)
self.assertFalse(json_body["connectionLogging"]["enabled"])
return (httplib.ACCEPTED, '', {}, httplib.responses[httplib.ACCEPTED])
raise NotImplementedError
def _v1_0_11111_loadbalancers_8290_sessionpersistence(self, method, url, body, headers):
if method == 'DELETE':
return (httplib.ACCEPTED, '', {}, httplib.responses[httplib.ACCEPTED])
raise NotImplementedError
def _v1_0_11111_loadbalancers_8290_errorpage(self, method, url, body, headers):
if method == 'GET':
body = self.fixtures.load(
'v1_slug_loadbalancers_8290_errorpage.json')
return (httplib.OK, body, {}, httplib.responses[httplib.OK])
elif method == 'PUT':
json_body = json.loads(body)
self.assertEqual('<html>Generic Error Page</html>',
json_body['errorpage']['content'])
return (httplib.ACCEPTED, '', {}, httplib.responses[httplib.ACCEPTED])
raise NotImplementedError
def _v1_0_11111_loadbalancers_18940(self, method, url, body, headers):
if method == "GET":
body = self.fixtures.load(
"v1_slug_loadbalancers_18940_ex_public_ips.json")
return (httplib.OK, body, {}, httplib.responses[httplib.OK])
raise NotImplementedError
def _v1_0_11111_loadbalancers_18945(self, method, url, body, headers):
if method == "GET":
body = self.fixtures.load(
"v1_slug_loadbalancers_18945_ex_public_ips.json")
return (httplib.OK, body, {}, httplib.responses[httplib.OK])
raise NotImplementedError
def _v1_0_11111_loadbalancers_18940_errorpage(self, method, url, body, headers):
if method == "GET":
body = self.fixtures.load(
"v1_slug_loadbalancers_18940_errorpage.json")
return (httplib.OK, body, {}, httplib.responses[httplib.OK])
raise NotImplementedError
def _v1_0_11111_loadbalancers_18940_accesslist(self, method, url, body, headers):
if method == 'GET':
body = self.fixtures.load(
'v1_slug_loadbalancers_18940_accesslist.json')
return (httplib.OK, body, {}, httplib.responses[httplib.OK])
raise NotImplementedError
def _v1_0_11111_loadbalancers_18941(self, method, url, body, headers):
if method == "GET":
body = self.fixtures.load(
"v1_slug_loadbalancers_18941_ex_private_ips.json")
return (httplib.OK, body, {}, httplib.responses[httplib.OK])
raise NotImplementedError
def _v1_0_11111_loadbalancers_94692(self, method, url, body, headers):
if method == "GET":
body = self.fixtures.load(
"v1_slug_loadbalancers_94692_weighted_round_robin.json")
return (httplib.OK, body, {}, httplib.responses[httplib.OK])
raise NotImplementedError
def _v1_0_11111_loadbalancers_94693(self, method, url, body, headers):
if method == "GET":
body = self.fixtures.load(
"v1_slug_loadbalancers_94693_weighted_least_connections.json")
return (httplib.OK, body, {}, httplib.responses[httplib.OK])
raise NotImplementedError
def _v1_0_11111_loadbalancers_94694(self, method, url, body, headers):
if method == "GET":
body = self.fixtures.load(
"v1_slug_loadbalancers_94694_unknown_algorithm.json")
return (httplib.OK, body, {}, httplib.responses[httplib.OK])
raise NotImplementedError
def _v1_0_11111_loadbalancers_94695(self, method, url, body, headers):
if method == "GET":
body = self.fixtures.load(
"v1_slug_loadbalancers_94695_full_details.json")
return (httplib.OK, body, {}, httplib.responses[httplib.OK])
raise NotImplementedError
def _v1_0_11111_loadbalancers_94695_healthmonitor(self, method, url, body, headers):
if method == 'PUT':
json_body = json.loads(body)
self.assertEqual('CONNECT', json_body['type'])
self.assertEqual(10, json_body['delay'])
self.assertEqual(5, json_body['timeout'])
self.assertEqual(2, json_body['attemptsBeforeDeactivation'])
return (httplib.ACCEPTED, '', {}, httplib.responses[httplib.ACCEPTED])
raise NotImplementedError
def _v1_0_11111_loadbalancers_94695_connectionthrottle(self, method, url, body, headers):
if method == 'PUT':
json_body = json.loads(body)
self.assertEqual(50, json_body['minConnections'])
self.assertEqual(200, json_body['maxConnections'])
self.assertEqual(50, json_body['maxConnectionRate'])
self.assertEqual(10, json_body['rateInterval'])
return (httplib.ACCEPTED, '', {}, httplib.responses[httplib.ACCEPTED])
raise NotImplementedError
def _v1_0_11111_loadbalancers_94695_connectionlogging(self, method, url, body, headers):
if method == 'PUT':
json_body = json.loads(body)
self.assertTrue(json_body["connectionLogging"]["enabled"])
return (httplib.ACCEPTED, '', {}, httplib.responses[httplib.ACCEPTED])
raise NotImplementedError
def _v1_0_11111_loadbalancers_94695_sessionpersistence(self, method, url, body, headers):
if method == 'PUT':
json_body = json.loads(body)
persistence_type = json_body[
'sessionPersistence']['persistenceType']
self.assertEqual('HTTP_COOKIE', persistence_type)
return (httplib.ACCEPTED, '', {}, httplib.responses[httplib.ACCEPTED])
raise NotImplementedError
def _v1_0_11111_loadbalancers_94695_errorpage(self, method, url, body, headers):
if method == 'GET':
body = self.fixtures.load("error_page_default.json")
return (httplib.OK, body, {}, httplib.responses[httplib.OK])
elif method == 'DELETE':
return (httplib.OK, '', {}, httplib.responses[httplib.OK])
raise NotImplementedError
def _v1_0_11111_loadbalancers_94696(self, method, url, body, headers):
if method == "GET":
body = self.fixtures.load(
"v1_slug_loadbalancers_94696_http_health_monitor.json")
return (httplib.OK, body, {}, httplib.responses[httplib.OK])
raise NotImplementedError
def _v1_0_11111_loadbalancers_94696_healthmonitor(self, method, url, body, headers):
if method == 'PUT':
json_body = json.loads(body)
self.assertEqual('HTTP', json_body['type'])
self.assertEqual(10, json_body['delay'])
self.assertEqual(5, json_body['timeout'])
self.assertEqual(2, json_body['attemptsBeforeDeactivation'])
self.assertEqual('/', json_body['path'])
self.assertEqual('^[234][0-9][0-9]$', json_body['statusRegex'])
self.assertEqual('Hello World!', json_body['bodyRegex'])
return (httplib.ACCEPTED, '', {}, httplib.responses[httplib.ACCEPTED])
raise NotImplementedError
def _v1_0_11111_loadbalancers_94697(self, method, url, body, headers):
if method == "GET":
body = self.fixtures.load(
"v1_slug_loadbalancers_94697_https_health_monitor.json")
return (httplib.OK, body, {}, httplib.responses[httplib.OK])
raise NotImplementedError
def _v1_0_11111_loadbalancers_94698(self, method, url, body, headers):
if method == "GET":
body = self.fixtures.load(
"v1_slug_loadbalancers_94698_with_access_list.json")
return (httplib.OK, body, {}, httplib.responses[httplib.OK])
raise NotImplementedError
def _v1_0_11111_loadbalancers_94698_accesslist(self, method, url, body, headers):
if method == 'GET':
body = self.fixtures.load(
'v1_slug_loadbalancers_94698_accesslist.json')
return (httplib.OK, body, {}, httplib.responses[httplib.OK])
elif method == 'POST':
json_body = json.loads(body)
self.assertEqual('0.0.0.0/0', json_body['networkItem']['address'])
self.assertEqual('DENY', json_body['networkItem']['type'])
return (httplib.ACCEPTED, '', {}, httplib.responses[httplib.ACCEPTED])
raise NotImplementedError
def _v1_0_11111_loadbalancers_94699(self, method, url, body, headers):
if method == 'GET':
# Use the same fixture for batch deletes as for single deletes
body = self.fixtures.load(
'v1_slug_loadbalancers_94698_with_access_list.json')
json_body = json.loads(body)
json_body['loadBalancer']['id'] = 94699
updated_body = json.dumps(json_body)
return (httplib.OK, updated_body, {}, httplib.responses[httplib.OK])
raise NotImplementedError
def _v1_0_11111_loadbalancers_94699_accesslist(self, method, url, body, headers):
if method == 'DELETE':
fixture = 'v1_slug_loadbalancers_94698_with_access_list.json'
fixture_json = json.loads(self.fixtures.load(fixture))
access_list_json = fixture_json['loadBalancer']['accessList']
for access_rule in access_list_json:
id = access_rule['id']
self.assertTrue(urlencode([('id', id)]) in url,
msg='Did not delete access rule with id %d' % id)
return (httplib.ACCEPTED, '', {}, httplib.responses[httplib.ACCEPTED])
elif method == 'POST':
json_body = json.loads(body)
access_list = json_body['accessList']
self.assertEqual('ALLOW', access_list[0]['type'])
self.assertEqual('2001:4801:7901::6/64', access_list[0]['address'])
self.assertEqual('DENY', access_list[1]['type'])
self.assertEqual('8.8.8.8/0', access_list[1]['address'])
return (httplib.ACCEPTED, '', {}, httplib.responses[httplib.ACCEPTED])
raise NotImplementedError
def _v1_0_11111_loadbalancers_94698_accesslist_1007(self, method, url, body, headers):
if method == 'DELETE':
return (httplib.ACCEPTED, '', {}, httplib.responses[httplib.ACCEPTED])
raise NotImplementedError
def _v1_0_11111_loadbalancers_94700(self, method, url, body, headers):
if method == "GET":
body = self.fixtures.load(
"v1_slug_loadbalancers_94700_http_health_monitor_no_body_regex.json")
return (httplib.OK, body, {}, httplib.responses[httplib.OK])
raise NotImplementedError
def _v1_0_11111_loadbalancers_94700_healthmonitor(self, method, url, body, headers):
if method == 'PUT':
json_body = json.loads(body)
self.assertEqual('HTTP', json_body['type'])
self.assertEqual(10, json_body['delay'])
self.assertEqual(5, json_body['timeout'])
self.assertEqual(2, json_body['attemptsBeforeDeactivation'])
self.assertEqual('/', json_body['path'])
self.assertEqual('^[234][0-9][0-9]$', json_body['statusRegex'])
self.assertFalse('bodyRegex' in json_body)
return (httplib.ACCEPTED, '', {}, httplib.responses[httplib.ACCEPTED])
raise NotImplementedError
def _v1_0_11111_loadbalancers_3130(self, method, url, body, headers):
""" update_balancer(b, protocol='HTTPS'), then get_balancer('3130') """
if method == "PUT":
json_body = json.loads(body)
self.assertDictEqual(json_body, {'protocol': 'HTTPS'})
return (httplib.ACCEPTED, "", {}, httplib.responses[httplib.ACCEPTED])
elif method == "GET":
response_body = json.loads(
self.fixtures.load("v1_slug_loadbalancers_3xxx.json"))
response_body['loadBalancer']['id'] = 3130
response_body['loadBalancer']['protocol'] = 'HTTPS'
return (httplib.OK, json.dumps(response_body), {}, httplib.responses[httplib.OK])
raise NotImplementedError
def _v1_0_11111_loadbalancers_3131(self, method, url, body, headers):
""" update_balancer(b, port=443), then get_balancer('3131') """
if method == "PUT":
json_body = json.loads(body)
self.assertDictEqual(json_body, {'port': 1337})
return (httplib.ACCEPTED, "", {}, httplib.responses[httplib.ACCEPTED])
elif method == "GET":
response_body = json.loads(
self.fixtures.load("v1_slug_loadbalancers_3xxx.json"))
response_body['loadBalancer']['id'] = 3131
response_body['loadBalancer']['port'] = 1337
return (httplib.OK, json.dumps(response_body), {}, httplib.responses[httplib.OK])
raise NotImplementedError
def _v1_0_11111_loadbalancers_3132(self, method, url, body, headers):
""" update_balancer(b, name='new_lb_name'), then get_balancer('3132') """
if method == "PUT":
json_body = json.loads(body)
self.assertDictEqual(json_body, {'name': 'new_lb_name'})
return (httplib.ACCEPTED, "", {}, httplib.responses[httplib.ACCEPTED])
elif method == "GET":
response_body = json.loads(
self.fixtures.load("v1_slug_loadbalancers_3xxx.json"))
response_body['loadBalancer']['id'] = 3132
response_body['loadBalancer']['name'] = 'new_lb_name'
return (httplib.OK, json.dumps(response_body), {}, httplib.responses[httplib.OK])
raise NotImplementedError
def _v1_0_11111_loadbalancers_3133(self, method, url, body, headers):
""" update_balancer(b, algorithm='ROUND_ROBIN'), then get_balancer('3133') """
if method == "PUT":
json_body = json.loads(body)
self.assertDictEqual(json_body, {'algorithm': 'ROUND_ROBIN'})
return (httplib.ACCEPTED, "", {}, httplib.responses[httplib.ACCEPTED])
elif method == "GET":
response_body = json.loads(
self.fixtures.load("v1_slug_loadbalancers_3xxx.json"))
response_body['loadBalancer']['id'] = 3133
response_body['loadBalancer']['algorithm'] = 'ROUND_ROBIN'
return (httplib.OK, json.dumps(response_body), {}, httplib.responses[httplib.OK])
raise NotImplementedError
def _v1_0_11111_loadbalancers_3134(self, method, url, body, headers):
""" update.balancer(b, algorithm='HAVE_MERCY_ON_OUR_SERVERS') """
if method == "PUT":
return (httplib.BAD_REQUEST, "", {}, httplib.responses[httplib.BAD_REQUEST])
raise NotImplementedError
def _v1_0_11111_loadbalancers_3135(self, method, url, body, headers):
""" update_balancer(b, protocol='IMAPv3'), then get_balancer('3135') """
if method == "PUT":
json_body = json.loads(body)
self.assertDictEqual(json_body, {'protocol': 'IMAPv2'})
return (httplib.ACCEPTED, "", {}, httplib.responses[httplib.ACCEPTED])
elif method == "GET":
response_body = json.loads(
self.fixtures.load("v1_slug_loadbalancers_3xxx.json"))
response_body['loadBalancer']['id'] = 3135
response_body['loadBalancer']['protocol'] = 'IMAPv2'
return (httplib.OK, json.dumps(response_body), {}, httplib.responses[httplib.OK])
raise NotImplementedError
def _v1_0_11111_loadbalancers_3136(self, method, url, body, headers):
""" update_balancer(b, protocol='IMAPv3'), then get_balancer('3136') """
if method == "PUT":
json_body = json.loads(body)
self.assertDictEqual(json_body, {'protocol': 'IMAPv3'})
return (httplib.ACCEPTED, "", {}, httplib.responses[httplib.ACCEPTED])
elif method == "GET":
response_body = json.loads(
self.fixtures.load("v1_slug_loadbalancers_3xxx.json"))
response_body['loadBalancer']['id'] = 3136
response_body['loadBalancer']['protocol'] = 'IMAPv3'
return (httplib.OK, json.dumps(response_body), {}, httplib.responses[httplib.OK])
raise NotImplementedError
def _v1_0_11111_loadbalancers_3137(self, method, url, body, headers):
""" update_balancer(b, protocol='IMAPv3'), then get_balancer('3137') """
if method == "PUT":
json_body = json.loads(body)
self.assertDictEqual(json_body, {'protocol': 'IMAPv4'})
return (httplib.ACCEPTED, "", {}, httplib.responses[httplib.ACCEPTED])
elif method == "GET":
response_body = json.loads(
self.fixtures.load("v1_slug_loadbalancers_3xxx.json"))
response_body['loadBalancer']['id'] = 3137
response_body['loadBalancer']['protocol'] = 'IMAPv4'
return (httplib.OK, json.dumps(response_body), {}, httplib.responses[httplib.OK])
raise NotImplementedError
def _v1_0_11111_loadbalancers_8290_usage_current(self, method, url, body,
headers):
if method == 'GET':
body = self.fixtures.load(
'v1_0_slug_loadbalancers_8290_usage_current.json')
return (httplib.OK, body, {}, httplib.responses[httplib.OK])
raise NotImplementedError
class RackspaceLBWithVIPMockHttp(MockHttp, unittest.TestCase):
fixtures = LoadBalancerFileFixtures('rackspace')
auth_fixtures = OpenStackFixtures()
def _v2_0_tokens(self, method, url, body, headers):
body = self.fixtures.load('_v2_0__auth.json')
return (httplib.OK, body, headers,
httplib.responses[httplib.OK])
def _v1_0_11111_loadbalancers(self, method, url, body, headers):
if method == "GET":
body = self.fixtures.load('v1_slug_loadbalancers.json')
return (httplib.OK, body, {}, httplib.responses[httplib.OK])
elif method == "POST":
json_body = json.loads(body)
loadbalancer_json = json_body['loadBalancer']
self.assertEqual(loadbalancer_json['virtualIps'][0]['id'], '12af')
body = self.fixtures.load('v1_slug_loadbalancers_post.json')
return (httplib.ACCEPTED, body, {},
httplib.responses[httplib.ACCEPTED])
raise NotImplementedError
if __name__ == "__main__":
sys.exit(unittest.main())
Zerion Mini Shell 1.0