def test_create_exception(self): data = self.load_from_file('loadbalancer/single_tag.json') url = self.base_url + "load_balancers/" responses.add(responses.POST, url, body=data, status=201, content_type='application/json') rule = digitalocean.ForwardingRule(entry_port=80, entry_protocol='http', target_port=80, target_protocol='http') check = digitalocean.HealthCheck() sticky = digitalocean.StickySessions(type='none') lb = digitalocean.LoadBalancer(name='example-lb-01', region='nyc3', algorithm='round_robin', forwarding_rules=[rule], health_check=check, sticky_sessions=sticky, redirect_http_to_https=False, tag='web', droplet_ids=[123456, 789456], vpc_uuid=self.vpc_uuid, token=self.token) with self.assertRaises(ValueError) as context: lb.create() self.assertEqual('droplet_ids and tag are mutually exclusive args', str(context.exception))
def test_create_tag(self): data = self.load_from_file('loadbalancer/single_tag.json') url = self.base_url + "load_balancers" responses.add(responses.POST, url, body=data, status=201, content_type='application/json') rule1 = digitalocean.ForwardingRule(entry_port=80, entry_protocol='http', target_port=80, target_protocol='http') rule2 = digitalocean.ForwardingRule(entry_port=443, entry_protocol='https', target_port=443, target_protocol='https', tls_passthrough=True) check = digitalocean.HealthCheck() sticky = digitalocean.StickySessions(type='none') lb = digitalocean.LoadBalancer(name='example-lb-01', region='nyc3', algorithm='round_robin', size='lb-small', forwarding_rules=[rule1, rule2], health_check=check, sticky_sessions=sticky, redirect_http_to_https=False, tag='web:prod', vpc_uuid=self.vpc_uuid, token=self.token).create() resp_rules = lb.forwarding_rules self.assertEqual(responses.calls[0].request.url, self.base_url + 'load_balancers') self.assertEqual(lb.id, '4de7ac8b-495b-4884-9a69-1050c6793cd6') self.assertEqual(lb.algorithm, 'round_robin') self.assertEqual(lb.ip, '104.131.186.248') self.assertEqual(lb.name, 'example-lb-01') self.assertEqual(lb.size, 'lb-small') self.assertEqual(len(resp_rules), 2) self.assertEqual(resp_rules[0].entry_protocol, 'http') self.assertEqual(resp_rules[0].entry_port, 80) self.assertEqual(resp_rules[0].target_protocol, 'http') self.assertEqual(resp_rules[0].target_port, 80) self.assertEqual(resp_rules[0].tls_passthrough, False) self.assertEqual(lb.health_check.protocol, 'http') self.assertEqual(lb.health_check.port, 80) self.assertEqual(lb.sticky_sessions.type, 'none') self.assertEqual(lb.tag, 'web:prod') self.assertEqual(lb.droplet_ids, [3164444, 3164445]) self.assertEqual(lb.redirect_http_to_https, False) self.assertEqual(lb.enable_proxy_protocol, False) self.assertEqual(lb.enable_backend_keepalive, False) self.assertEqual(lb.vpc_uuid, self.vpc_uuid)
def test_create_ids(self): data = self.load_from_file('loadbalancer/single.json') url = self.base_url + "load_balancers/" responses.add(responses.POST, url, body=data, status=201, content_type='application/json') rule1 = digitalocean.ForwardingRule(entry_port=80, entry_protocol='http', target_port=80, target_protocol='http') rule2 = digitalocean.ForwardingRule(entry_port=443, entry_protocol='https', target_port=443, target_protocol='https', tls_passthrough=True) check = digitalocean.HealthCheck() sticky = digitalocean.StickySessions(type='none') lb = digitalocean.LoadBalancer(name='example-lb-01', region='nyc3', algorithm='round_robin', forwarding_rules=[rule1, rule2], health_check=check, sticky_sessions=sticky, redirect_http_to_https=False, droplet_ids=[3164444, 3164445], vpc_uuid=self.vpc_uuid, token=self.token).create() resp_rules = lb.forwarding_rules self.assert_url_query_equal(responses.calls[0].request.url, url) self.assertEqual(lb.id, self.lb_id) self.assertEqual(lb.algorithm, 'round_robin') self.assertEqual(lb.ip, '104.131.186.241') self.assertEqual(lb.name, 'example-lb-01') self.assertEqual(len(resp_rules), 2) self.assertEqual(resp_rules[0].entry_protocol, 'http') self.assertEqual(resp_rules[0].entry_port, 80) self.assertEqual(resp_rules[0].target_protocol, 'http') self.assertEqual(resp_rules[0].target_port, 80) self.assertEqual(resp_rules[0].tls_passthrough, False) self.assertEqual(lb.health_check.protocol, 'http') self.assertEqual(lb.health_check.port, 80) self.assertEqual(lb.sticky_sessions.type, 'none') self.assertEqual(lb.droplet_ids, [3164444, 3164445]) self.assertEqual(lb.vpc_uuid, self.vpc_uuid)
db_droplet = digitalocean.Droplet(**db_cfg) db_droplet.create() db_nodes.append(db_droplet) print("DB created") for i in db_nodes: wait_for_droplet(i) rule = digitalocean.ForwardingRule( entry_protocol=cfg["loadbalancer"]["entry_protocol"], entry_port=cfg["loadbalancer"]["entry_port"], target_protocol=cfg["loadbalancer"]["target_protocol"], target_port=cfg["loadbalancer"]["target_port"]) hc = digitalocean.HealthCheck( protocol="tcp", port=cfg["loadbalancer"]["hc_port"], check_interval_seconds=3, response_timeout_seconds=3, healthy_threshold=2, unhealthy_threshold=2, path=None) rules = [] rules.append(rule) balancer = digitalocean.LoadBalancer(name="prod", token=cfg["token"], region="lon1", forwarding_rules=rules, health_check=hc) balancer.create(region="lon1", algorithm=cfg["loadbalancer"]["algorithm"], health_check=hc) balancer.load() print("creating balancer")
def test_save(self): data1 = self.load_from_file('loadbalancer/single.json') url = '{0}load_balancers/{1}'.format(self.base_url, self.lb_id) responses.add(responses.GET, url, body=data1, status=200, content_type='application/json') self.lb.load() rules = self.lb.forwarding_rules self.assert_get_url_equal(responses.calls[0].request.url, url) self.assertEqual(self.lb.id, self.lb_id) self.assertEqual(self.lb.region['slug'], 'nyc3') self.assertEqual(self.lb.algorithm, 'round_robin') self.assertEqual(self.lb.ip, '104.131.186.241') self.assertEqual(self.lb.name, 'example-lb-01') self.assertEqual(len(rules), 2) self.assertEqual(rules[0].entry_protocol, 'http') self.assertEqual(rules[0].entry_port, 80) self.assertEqual(rules[0].target_protocol, 'http') self.assertEqual(rules[0].target_port, 80) self.assertEqual(rules[0].tls_passthrough, False) self.assertEqual(rules[1].entry_protocol, 'https') self.assertEqual(rules[1].entry_port, 444) self.assertEqual(rules[1].target_protocol, 'https') self.assertEqual(rules[1].target_port, 443) self.assertEqual(rules[1].tls_passthrough, True) self.assertEqual(self.lb.health_check.protocol, 'http') self.assertEqual(self.lb.health_check.port, 80) self.assertEqual(self.lb.health_check.path, '/') self.assertEqual(self.lb.health_check.check_interval_seconds, 10) self.assertEqual(self.lb.health_check.response_timeout_seconds, 5) self.assertEqual(self.lb.health_check.healthy_threshold, 5) self.assertEqual(self.lb.health_check.unhealthy_threshold, 3) self.assertEqual(self.lb.sticky_sessions.type, 'none') self.assertEqual(self.lb.droplet_ids, [3164444, 3164445]) self.assertEqual(self.lb.tag, '') self.assertEqual(self.lb.redirect_http_to_https, False) self.assertEqual(self.lb.vpc_uuid, self.vpc_uuid) data2 = self.load_from_file('loadbalancer/save.json') url = '{0}load_balancers/{1}'.format(self.base_url, self.lb_id) responses.add(responses.PUT, url, body=data2, status=202, content_type='application/json') self.lb.algorithm = 'least_connections' self.lb.sticky_sessions.type = 'cookies' self.lb.sticky_sessions.cookie_name = 'DO_LB' self.lb.sticky_sessions.cookie_ttl_seconds = 300 self.lb.droplet_ids = [34153248, 34153250] self.lb.vpc_uuid = self.vpc_uuid res = self.lb.save() lb = digitalocean.LoadBalancer(**res['load_balancer']) lb.health_check = digitalocean.HealthCheck(**res['load_balancer']['health_check']) lb.sticky_sessions = digitalocean.StickySessions(**res['load_balancer']['sticky_sessions']) rules = list() for rule in lb.forwarding_rules: rules.append(digitalocean.ForwardingRule(**rule)) self.assertEqual(lb.id, self.lb_id) self.assertEqual(lb.region['slug'], 'nyc3') self.assertEqual(lb.algorithm, 'least_connections') self.assertEqual(lb.ip, '104.131.186.241') self.assertEqual(lb.name, 'example-lb-01') self.assertEqual(len(rules), 2) self.assertEqual(rules[0].entry_protocol, 'http') self.assertEqual(rules[0].entry_port, 80) self.assertEqual(rules[0].target_protocol, 'http') self.assertEqual(rules[0].target_port, 80) self.assertEqual(rules[0].tls_passthrough, False) self.assertEqual(rules[1].entry_protocol, 'https') self.assertEqual(rules[1].entry_port, 444) self.assertEqual(rules[1].target_protocol, 'https') self.assertEqual(rules[1].target_port, 443) self.assertEqual(rules[1].tls_passthrough, True) self.assertEqual(lb.health_check.protocol, 'http') self.assertEqual(lb.health_check.port, 80) self.assertEqual(lb.health_check.path, '/') self.assertEqual(lb.health_check.check_interval_seconds, 10) self.assertEqual(lb.health_check.response_timeout_seconds, 5) self.assertEqual(lb.health_check.healthy_threshold, 5) self.assertEqual(lb.health_check.unhealthy_threshold, 3) self.assertEqual(lb.sticky_sessions.type, 'cookies') self.assertEqual(lb.sticky_sessions.cookie_name, 'DO_LB') self.assertEqual(lb.sticky_sessions.cookie_ttl_seconds, 300) self.assertEqual(lb.droplet_ids, [34153248, 34153250]) self.assertEqual(lb.tag, '') self.assertEqual(lb.redirect_http_to_https, False) self.assertEqual(self.lb.vpc_uuid, self.vpc_uuid)