class RackspaceTests(unittest.TestCase): def setUp(self): RackspaceMonitoringDriver.connectionCls.conn_classes = ( RackspaceMockHttp, RackspaceMockHttp) RackspaceMonitoringDriver.connectionCls.auth_url = \ 'https://auth.api.example.com/v1.1/' RackspaceMockHttp.type = None self.driver = RackspaceMonitoringDriver(key=RACKSPACE_PARAMS[0], secret=RACKSPACE_PARAMS[1]) def test_list_monitoring_zones(self): result = list(self.driver.list_monitoring_zones()) self.assertEqual(len(result), 1) self.assertEqual(result[0].id, 'mzxJ4L2IU') def test_list_entities(self): result = list(self.driver.list_entities()) self.assertEqual(len(result), 6) self.assertEqual(result[0].id, 'en8B9YwUn6') self.assertEqual(result[0].label, 'bar') def test_list_checks(self): en = self.driver.list_entities()[0] result = list(self.driver.list_checks(entity=en)) self.assertEqual(len(result), 1) self.assertEqual(result[0].label, 'bar') self.assertEqual(result[0].details['url'], 'http://www.foo.com') self.assertEqual(result[0].details['method'], 'GET') def test_list_alarms(self): en = self.driver.list_entities()[0] result = list(self.driver.list_alarms(entity=en)) self.assertEqual(len(result), 1) self.assertEqual(result[0].check_id, 'chhJwYeArX') self.assertEqual(result[0].notification_plan_id, 'npIXxOAn5') def test_list_check_types(self): result = list(self.driver.list_check_types()) self.assertEqual(len(result), 2) self.assertEqual(result[0].id, 'remote.dns') self.assertTrue(result[0].is_remote) def test_list_metrics(self): en = self.driver.list_entities()[0] ch = self.driver.list_checks(entity=en)[0] result = list(self.driver.list_metrics(entity_id=en.id, check_id=ch.id)) self.assertEqual(len(result), 3) self.assertEqual(result[0].name, 'mzGRD.constdbl') def test_list_notification_types(self): result = list(self.driver.list_notification_types()) self.assertEqual(len(result), 1) self.assertEqual(result[0].id, 'webhook') def test_list_notifications(self): result = list(self.driver.list_notifications()) self.assertEqual(len(result), 2) self.assertEqual(result[0].type, 'webhook') self.assertEqual(result[0].details['url'], 'http://www.postbin.org/lulz') def test_list_notification_plans(self): result = list(self.driver.list_notification_plans()) self.assertEqual(len(result), 8) self.assertEqual(result[0].label, 'test-notification-plan') def test_list_agents(self): result = list(self.driver.list_agents()) self.assertEqual(len(result), 3) self.assertEqual(result[0].id, '612deec7-1a3d-429f-c2a2-aadc59') def test_list_agent_connections(self): result = list(self.driver.list_agent_connections('612deec7-1a3d-429f-c2a2-aadc59')) self.assertEqual(len(result), 2) self.assertEqual(result[0].id, 'cn0ElI4abc') self.assertEqual(result[0].agent_ip, '192.168.0.1') self.assertEqual(result[1].id, 'cnAAAAAAAA') self.assertEqual(result[1].agent_ip, '192.168.0.1') def test_get_agent_host_info(self): result = self.driver.get_agent_host_info('aaaaa', 'cpus') self.assertEqual(len(result), 1) self.assertEqual(result[0]['vendor'], 'AMD') self.assertEqual(result[0]['name'], 'cpu.0') self.assertEqual(result[0]['total_cores'], 1) result = self.driver.get_agent_host_info('aaaaa', 'memory') self.assertEqual(result['actual_free'], 2684153856) self.assertEqual(result['free'], 236662784) self.assertEqual(result['ram'], 4016) self.assertEqual(result['total'], 4208316416) self.assertEqual(result['used'], 3971653632) self.assertEqual(result['used_percent'], 36.217869792422) result = self.driver.get_agent_host_info('aaaaa', 'system') self.assertEqual(result['name'], 'Linux') self.assertEqual(result['arch'], 'x86_64') self.assertEqual(result['version'], '2.6.32-33-server') self.assertEqual(result['vendor'], 'Ubuntu') self.assertEqual(result['vendor_version'], '10.04') self.assertEqual(result['vendor_code_name'], 'lucid') self.assertEqual(result['description'], 'Ubuntu 10.04') result = self.driver.get_agent_host_info('aaaaa', 'network_interfaces') self.assertEqual(len(result), 2) self.assertEqual(result[0]['address'], '127.0.0.1') self.assertEqual(result[0]['broadcast'], '0.0.0.0') self.assertEqual(result[1]['address'], '192.168.0.2') self.assertEqual(result[1]['broadcast'], '192.168.0.255') result = self.driver.get_agent_host_info('aaaaa', 'processes') self.assertEqual(len(result), 1) self.assertEqual(result[0]['pid'], 13702) self.assertEqual(result[0]['time_sys'], 570) self.assertEqual(result[0]['memory_page_faults'], 37742) result = self.driver.get_agent_host_info('aaaaa', 'disks') self.assertEqual(len(result), 1) self.assertEqual(result[0]['queue'], 0.024919932106766) self.assertEqual(result[0]['name'], '/') self.assertEqual(result[0]['wtime'], 517366712) result = self.driver.get_agent_host_info('aaaaa', 'filesystems') self.assertEqual(len(result), 1) self.assertEqual(result[0]['dir_name'], '/') self.assertEqual(result[0]['dev_name'], '/dev/xvda1') self.assertEqual(result[0]['type_name'], 'local') self.assertEqual(result[0]['sys_type_name'], 'ext3') def test_get_entity_targets(self): result = self.driver.get_entity_agent_targets('aaaaa', 'agent.disk') self.assertEqual(len(result), 1) self.assertEqual(result[0]['targets'][0], '/') self.assertEqual(result[0]['targets'][1], '/dev') def test_get_entity_host_info(self): result = self.driver.get_entity_host_info('aaaaa', 'cpus') self.assertEqual(len(result), 1) self.assertEqual(result[0]['vendor'], 'AMD') self.assertEqual(result[0]['name'], 'cpu.0') self.assertEqual(result[0]['total_cores'], 1) result = self.driver.get_entity_host_info('aaaaa', 'memory') self.assertEqual(result['actual_free'], 2684153856) self.assertEqual(result['free'], 236662784) self.assertEqual(result['ram'], 4016) self.assertEqual(result['total'], 4208316416) self.assertEqual(result['used'], 3971653632) self.assertEqual(result['used_percent'], 36.217869792422) result = self.driver.get_entity_host_info('aaaaa', 'system') self.assertEqual(result['name'], 'Linux') self.assertEqual(result['arch'], 'x86_64') self.assertEqual(result['version'], '2.6.32-33-server') self.assertEqual(result['vendor'], 'Ubuntu') self.assertEqual(result['vendor_version'], '10.04') self.assertEqual(result['vendor_code_name'], 'lucid') self.assertEqual(result['description'], 'Ubuntu 10.04') result = self.driver.get_entity_host_info('aaaaa', 'network_interfaces') self.assertEqual(len(result), 2) self.assertEqual(result[0]['address'], '127.0.0.1') self.assertEqual(result[0]['broadcast'], '0.0.0.0') self.assertEqual(result[1]['address'], '192.168.0.2') self.assertEqual(result[1]['broadcast'], '192.168.0.255') result = self.driver.get_entity_host_info('aaaaa', 'processes') self.assertEqual(len(result), 1) self.assertEqual(result[0]['pid'], 13702) self.assertEqual(result[0]['time_sys'], 570) self.assertEqual(result[0]['memory_page_faults'], 37742) result = self.driver.get_entity_host_info('aaaaa', 'disks') self.assertEqual(len(result), 1) self.assertEqual(result[0]['queue'], 0.024919932106766) self.assertEqual(result[0]['name'], '/') self.assertEqual(result[0]['wtime'], 517366712) result = self.driver.get_entity_host_info('aaaaa', 'filesystems') self.assertEqual(len(result), 1) self.assertEqual(result[0]['dir_name'], '/') self.assertEqual(result[0]['dev_name'], '/dev/xvda1') self.assertEqual(result[0]['type_name'], 'local') self.assertEqual(result[0]['sys_type_name'], 'ext3') def test_ex_list_alarm_notification_history_checks(self): entity = self.driver.list_entities()[0] alarm = self.driver.list_alarms(entity=entity)[0] result = self.driver.ex_list_alarm_notification_history_checks( entity=entity, alarm=alarm) self.assertEqual(len(result['check_ids']), 2) def test_ex_list_alarm_notification_history(self): entity = self.driver.list_entities()[0] alarm = self.driver.list_alarms(entity=entity)[0] check = self.driver.list_checks(entity=entity)[0] result = self.driver.ex_list_alarm_notification_history(entity=entity, alarm=alarm, check=check) self.assertEqual(len(result), 1) self.assertTrue('timestamp' in result[0]) self.assertTrue('notification_plan_id' in result[0]) self.assertTrue('state' in result[0]) self.assertTrue('transaction_id' in result[0]) self.assertTrue('notification_results' in result[0]) def test_test_alarm(self): entity = self.driver.list_entities()[0] criteria = ('if (metric[\"code\"] == \"404\") { return CRITICAL, ', ' \"not found\" } return OK') check_data = [] result = self.driver.test_alarm(entity=entity, criteria=criteria, check_data=check_data) self.assertTrue('timestamp' in result[0]) self.assertTrue('computed_state' in result[0]) self.assertTrue('status' in result[0]) def test_check(self): entity = self.driver.list_entities()[0] check_data = {'label': 'test', 'monitoring_zones': ['mzA'], 'target_alias': 'default', 'details': {'url': 'http://www.google.com'}, 'type': 'remote.http'} result = self.driver.test_check(entity=entity) self.assertTrue('available' in result[0]) self.assertTrue('monitoring_zone_id' in result[0]) self.assertTrue('available' in result[0]) self.assertTrue('metrics' in result[0]) def test_delete_entity_success(self): entity = self.driver.list_entities()[0] result = self.driver.delete_entity(entity=entity) self.assertTrue(result) def test_delete_entity_children_exist(self): entity = self.driver.list_entities()[1] RackspaceMockHttp.type = 'CHILDREN_EXIST' try: self.driver.delete_entity(entity=entity) except RackspaceMonitoringValidationError: pass else: self.fail('Exception was not thrown') def test_delete_check_success(self): en = self.driver.list_entities()[0] check = self.driver.list_checks(entity=en)[0] check.delete() def test_delete_alarm(self): en = self.driver.list_entities()[0] alarm = self.driver.list_alarms(entity=en)[0] alarm.delete() def test_create_notification_plan_with_metadata(self): notification = self.driver.list_notifications()[0] notif_plan = self.driver.create_notification_plan( label="demo", critical_state=[notification.id], metadata={ "cli": "rackmoncli" }) if hasattr(self, 'assetIsNotNone'): self.assertIsNotNone(notif_plan) self.assertIsNotNone(notif_plan.metadata) else: self.assertTrue(notif_plan is not None) self.assertTrue(notif_plan.metadata is not None) self.assertEqual(notif_plan.metadata, { "cli": "rackmoncli" }) def test_create_notification_with_metadata(self): notification = self.driver.create_notification( label="demo notification", type="email", details={ "address": "*****@*****.**" }, metadata={ "cli": "rackmoncli" } ) if hasattr(self, 'assetIsNotNone'): self.assertIsNotNone(notification) self.assertIsNotNone(notification.metadata) else: self.assertTrue(notification is not None) self.assertTrue(notification.metadata is not None) self.assertEqual(notification.metadata, { "cli": "rackmoncli" }) def test_create_alarm_with_metadata(self): notification_plan = self.driver.list_notification_plans()[0] en = self.driver.list_entities()[0] check = self.driver.list_checks(entity=en)[0] alarm = self.driver.create_alarm( en, label="demo alarm", check_id=check.id, criteria=("if (metric[\"duration\"] >= 2) { " "return new AlarmStatus(OK); } " "return new AlarmStatus(CRITICAL);"), notification_plan_id=notification_plan.id, metadata={ "cli": "rackmoncli" } ) if hasattr(self, 'assetIsNotNone'): self.assertIsNotNone(alarm) self.assertIsNotNone(alarm.metadata) else: self.assertTrue(alarm is not None) self.assertTrue(alarm.metadata is not None) self.assertEqual(alarm.metadata, { "cli": "rackmoncli" }) def test_delete_notification(self): notification = self.driver.list_notifications()[0] notification.delete() def test_delete_notification_plan(self): notification_plan = self.driver.list_notification_plans()[0] notification_plan.delete() def test_views_metric_list(self): metric_list = self.driver.ex_views_metric_list() self.assertTrue(len(metric_list) > 0) def test_list_agent_tokens(self): tokens = self.driver.list_agent_tokens() fixture = RackspaceMockHttp.fixtures.load('agent_tokens.json') fixture_tokens = json.loads(fixture) first_token = fixture_tokens["values"][0]["token"] self.assertEqual(tokens[0].token, first_token) self.assertEqual(len(tokens), 11) def test_delete_agent_token(self): agent_token = self.driver.list_agent_tokens()[0] self.assertTrue(self.driver.delete_agent_token( agent_token=agent_token)) def test_get_monitoring_zone(self): monitoring_zone = self.driver \ .get_monitoring_zone(monitoring_zone_id='mzord') self.assertEqual(monitoring_zone.id, 'mzord') self.assertEqual(monitoring_zone.label, 'ord') self.assertEqual(monitoring_zone.country_code, 'US') def test_ex_traceroute(self): monitoring_zone = self.driver.list_monitoring_zones()[0] result = self.driver.ex_traceroute(monitoring_zone=monitoring_zone, target='google.com') self.assertEqual(result[0]['number'], 1) self.assertEqual(result[0]['rtts'], [0.572, 0.586, 0.683]) self.assertEqual(result[0]['ip'], '50.57.61.2') def test__url_to_obj_ids(self): pairs = [ ['http://127.0.0.1:50000/v1.0/7777/entities/enSTkViNvw', {'entity_id': 'enSTkViNvw'}], ['https://monitoring.api.rackspacecloud.com/v1.0/7777/entities/enSTkViNvw', {'entity_id': 'enSTkViNvw'}], ['https://monitoring.api.rackspacecloud.com/v2.0/7777/entities/enSTkViNvu', {'entity_id': 'enSTkViNvu'}], ['https://monitoring.api.rackspacecloud.com/v2.0/7777/alarms/alfoo', {'alarm_id': 'alfoo'}], ['https://monitoring.api.rackspacecloud.com/v2.0/7777/entities/enFoo/checks/chBar', {'entity_id': 'enFoo', 'check_id': 'chBar'}], ['https://monitoring.api.rackspacecloud.com/v2.0/7777/entities/enFoo/alarms/alBar', {'entity_id': 'enFoo', 'alarm_id': 'alBar'}], ] for url, expected in pairs: result = self.driver._url_to_obj_ids(url) self.assertEqual(result, expected) def test_force_base_url(self): RackspaceMonitoringDriver.connectionCls.conn_classes = ( RackspaceMockHttp, RackspaceMockHttp) RackspaceMonitoringDriver.connectionCls.auth_url = \ 'https://auth.api.example.com/v1.1/' RackspaceMockHttp.type = None driver = RackspaceMonitoringDriver(key=RACKSPACE_PARAMS[0], secret=RACKSPACE_PARAMS[1], ex_force_base_url='http://www.todo.com') driver.list_entities() self.assertEqual(driver.connection._ex_force_base_url, 'http://www.todo.com/23213') def test_force_base_url_trailing_slash(self): RackspaceMonitoringDriver.connectionCls.conn_classes = ( RackspaceMockHttp, RackspaceMockHttp) RackspaceMonitoringDriver.connectionCls.auth_url = \ 'https://auth.api.example.com/v1.1/' RackspaceMockHttp.type = None driver = RackspaceMonitoringDriver(key=RACKSPACE_PARAMS[0], secret=RACKSPACE_PARAMS[1], ex_force_base_url='http://www.todo.com/') driver.list_entities() self.assertEqual(driver.connection._ex_force_base_url, 'http://www.todo.com/23213') def test_force_auth_token(self): RackspaceMonitoringDriver.connectionCls.conn_classes = ( RackspaceMockHttp, RackspaceMockHttp) RackspaceMonitoringDriver.connectionCls.auth_url = \ 'https://auth.api.example.com/v1.1/' RackspaceMockHttp.type = None driver = RackspaceMonitoringDriver(key=RACKSPACE_PARAMS[0], secret=RACKSPACE_PARAMS[1], ex_force_base_url='http://www.todo.com', ex_force_auth_token='matoken') driver.list_entities() self.assertEqual(driver.connection._ex_force_base_url, 'http://www.todo.com') self.assertEqual(driver.connection.auth_token, 'matoken') def test_force_base_url_is_none(self): RackspaceMonitoringDriver.connectionCls.conn_classes = ( RackspaceMockHttp, RackspaceMockHttp) RackspaceMonitoringDriver.connectionCls.auth_url = \ 'https://auth.api.example.com/v1.1/' RackspaceMockHttp.type = None driver = RackspaceMonitoringDriver(key=RACKSPACE_PARAMS[0], secret=RACKSPACE_PARAMS[1]) driver.list_entities() self.assertEqual(driver.connection._ex_force_base_url, 'https://monitoring.api.rackspacecloud.com/v1.0/23213')