def test_network_latency_checks(aggregator): consul_check = ConsulCheck( common.CHECK_NAME, {}, [consul_mocks.MOCK_CONFIG_NETWORK_LATENCY_CHECKS]) my_mocks = consul_mocks._get_consul_mocks() consul_mocks.mock_check(consul_check, my_mocks) # We start out as the leader, and stay that way consul_check._last_known_leader = consul_mocks.mock_get_cluster_leader_A() consul_check.check(None) latency = [] for m_name, metrics in aggregator._metrics.items(): if m_name.startswith('consul.net.'): latency.extend(metrics) latency.sort() # Make sure we have the expected number of metrics assert 19 == len(latency) # Only 3 dc-latency metrics since we only do source = self dc = [m for m in latency if '.dc.latency.' in m[0]] assert 3 == len(dc) assert 1.6746410750238774 == dc[0][2] # 16 latency metrics, 2 nodes * 8 metrics each node = [m for m in latency if '.node.latency.' in m[0]] assert 16 == len(node) assert 0.26577747932995816 == node[0][2]
def test_new_leader_event(aggregator): consul_check = ConsulCheck(common.CHECK_NAME, {}, [consul_mocks.MOCK_CONFIG_LEADER_CHECK]) my_mocks = consul_mocks._get_consul_mocks() my_mocks['_get_cluster_leader'] = consul_mocks.mock_get_cluster_leader_B consul_mocks.mock_check(consul_check, my_mocks) consul_check._last_known_leader = 'My Old Leader' consul_check.check(None) assert len(aggregator.events) == 1 event = aggregator.events[0] assert event['event_type'] == 'consul.new_leader' assert 'prev_consul_leader:My Old Leader' in event['tags'] assert 'curr_consul_leader:My New Leader' in event['tags']
def test_check_network_latency(benchmark, num_nodes): consul_check = ConsulCheck(common.CHECK_NAME, {}, [consul_mocks.MOCK_CONFIG_NETWORK_LATENCY_CHECKS]) my_mocks = consul_mocks._get_consul_mocks() consul_mocks.mock_check(consul_check, my_mocks) nodes = consul_mocks.mock_get_coord_nodes_benchmark(num_nodes) consul_check._get_coord_nodes = lambda: nodes # We start out as the leader, and stay that way consul_check._last_known_leader = consul_mocks.mock_get_cluster_leader_A() agent_dc = consul_check._get_agent_datacenter() tags = ['consul_datacenter:{}'.format(agent_dc)] benchmark(consul_check.check_network_latency, agent_dc, tags)
def test_self_leader_event(aggregator): consul_check = ConsulCheck(common.CHECK_NAME, {}, [consul_mocks.MOCK_CONFIG_SELF_LEADER_CHECK]) my_mocks = consul_mocks._get_consul_mocks() consul_check._last_known_leader = 'My Old Leader' our_url = consul_mocks.mock_get_cluster_leader_A() other_url = consul_mocks.mock_get_cluster_leader_B() # We become the leader my_mocks['_get_cluster_leader'] = consul_mocks.mock_get_cluster_leader_A consul_mocks.mock_check(consul_check, my_mocks) consul_check.check(None) assert len(aggregator.events) == 1 assert our_url == consul_check._last_known_leader event = aggregator.events[0] assert event['event_type'] == 'consul.new_leader' assert 'prev_consul_leader:My Old Leader' in event['tags'] assert 'curr_consul_leader:{}'.format(our_url) in event['tags'] # We are already the leader, no new events aggregator.reset() consul_check.check(None) assert len(aggregator.events) == 0 # We lose the leader, no new events my_mocks['_get_cluster_leader'] = consul_mocks.mock_get_cluster_leader_B consul_mocks.mock_check(consul_check, my_mocks) aggregator.reset() consul_check.check(None) assert len(aggregator.events) == 0 assert other_url == consul_check._last_known_leader # We regain the leadership my_mocks['_get_cluster_leader'] = consul_mocks.mock_get_cluster_leader_A consul_mocks.mock_check(consul_check, my_mocks) aggregator.reset() consul_check.check(None) assert len(aggregator.events) == 1 assert our_url == consul_check._last_known_leader event = aggregator.events[0] assert event['event_type'] == 'consul.new_leader' assert 'prev_consul_leader:{}'.format(other_url) in event['tags'] assert 'curr_consul_leader:{}'.format(our_url) in event['tags']