def test_kill_pod_SSHing(): label_runner = LabelRunner(NodeInventory(None), None, None, RemoteExecutor()) #Pactch action of switching to SSHing mode k8s_inventory = MagicMock() k8s_inventory.delete_pods = False label_runner.k8s_inventory = k8s_inventory # Patch action of getting nodes to execute kill command on test_node = Node(1) get_node_by_ip_mock = MagicMock(return_value=test_node) label_runner.inventory.get_node_by_ip = get_node_by_ip_mock # Patch action of choosing container execute_mock = MagicMock() label_runner.executor.execute = execute_mock mock_pod = Pod(name='test', namespace='test') mock_pod.container_ids = ["docker://container1"] mock_pod.labels = {"seal/force-kill": "false"} label_runner.kill_pod(mock_pod) mock_pod = Pod(name='test', namespace='test') mock_pod.container_ids = ["docker://container1"] mock_pod.labels = {} label_runner.kill_pod(mock_pod) execute_mock.assert_called_with("sudo docker kill -s SIGTERM container1", nodes=[test_node])
def test_update_nodes(client): server_state_mock = MagicMock() server_state_mock.start_node = MagicMock(return_value=True) server_state_mock.stop_node = MagicMock(return_value=True) test_node = Node(1, ip='0.0.0.0') server_state_mock.get_nodes = MagicMock(return_value=[test_node]) with mock.patch("powerfulseal.web.server.server_state", server_state_mock): result = client.post('/api/nodes', data=json.dumps({ 'action': 'start', 'ip': '0.0.0.0' }), content_type='application/json') assert result.status_code == 200 assert server_state_mock.start_node.call_count == 1 assert server_state_mock.stop_node.call_count == 0 result = client.post('/api/nodes', data=json.dumps({ 'action': 'stop', 'ip': '0.0.0.0' }), content_type='application/json') assert result.status_code == 200 assert server_state_mock.start_node.call_count == 1 assert server_state_mock.stop_node.call_count == 1
def test_kill_pod_APIcalling(): label_runner = LabelRunner(NodeInventory(None), None, None, RemoteExecutor()) # Patch action of getting nodes to execute kill command on test_node = Node(1) get_node_by_ip_mock = MagicMock(return_value=test_node) label_runner.inventory.get_node_by_ip = get_node_by_ip_mock #Pactch action of switching to APIcalling mode k8s_inventory = MagicMock() k8s_inventory.delete_pods = True label_runner.k8s_inventory = k8s_inventory # Patch action of choosing container k8s_client_mock = MagicMock() label_runner.k8s_inventory.k8s_client = k8s_client_mock delete_pods_mock = MagicMock() label_runner.k8s_inventory.k8s_client.delete_pods = delete_pods_mock metric_collector = MagicMock() label_runner.metric_collector = metric_collector add_pod_killed_metric_mock = MagicMock() label_runner.metric_collector.add_pod_killed_metric = add_pod_killed_metric_mock mock_pod = Pod(name='test', namespace='test') mock_pod.container_ids = ["docker://container1"] label_runner.kill_pod(mock_pod) delete_pods_mock.assert_called_with([mock_pod]) add_pod_killed_metric_mock.assert_called_with(mock_pod)
def test_kill_pod_forced_SSHing(): label_runner = LabelRunner(NodeInventory(None), None, None, SSHExecutor()) # patch metrics collector label_runner.metric_collector = MagicMock() # Patch action of switching to SSHing mode k8s_inventory = MagicMock() label_runner.k8s_inventory = k8s_inventory # Patch action of getting nodes to execute kill command on test_node = Node(1) get_node_by_ip_mock = MagicMock(return_value=test_node) label_runner.inventory.get_node_by_ip = get_node_by_ip_mock # Patch action of choosing container execute_mock = MagicMock() label_runner.executor.execute = execute_mock mock_pod = Pod(name='test', namespace='test') mock_pod.container_ids = ["docker://container1"] mock_pod.labels = {"seal/force-kill": "true"} label_runner.kill_pod(mock_pod) execute_mock.assert_called_once_with( "sudo docker kill -s SIGKILL container1", nodes=[test_node])
def nodes(): return [ Node(id="id1", ip="198.168.1.1", extIp="10.22.66.1", az="AZ1", no=1, name="node1"), Node(id="id2", ip="198.168.2.1", extIp="10.22.66.2", az="AZ2", no=2, name="node2"), Node(id="id3", ip="198.168.3.1", extIp="10.22.66.3", az="AZ2", no=3, name="node3"), ]
def test_kill_pod_forced(): label_runner = LabelRunner(NodeInventory(None), None, None, RemoteExecutor()) # Patch action of getting nodes to execute kill command on test_node = Node(1) get_node_by_ip_mock = MagicMock(return_value=test_node) label_runner.inventory.get_node_by_ip = get_node_by_ip_mock # Patch action of choosing container execute_mock = MagicMock() label_runner.executor.execute = execute_mock mock_pod = MagicMock() mock_pod.container_ids = ["docker://container1"] mock_pod.labels = {"seal/force-kill": "true"} label_runner.kill_pod(mock_pod) execute_mock.assert_called_once_with("sudo docker kill -s SIGKILL container1", nodes=[test_node])
def test_kill_pod(): server_state = ServerState(None, NodeInventory(None), None, None, RemoteExecutor(), None, None, None) # Patch action of getting nodes to execute kill command on test_node = Node(1) get_node_by_ip_mock = MagicMock(return_value=test_node) server_state.inventory.get_node_by_ip = get_node_by_ip_mock # Patch action of choosing container execute_mock = MagicMock() server_state.executor.execute = execute_mock mock_pod = MagicMock() mock_pod.container_ids = ["docker://container1"] server_state.kill_pod(mock_pod, True) execute_mock.assert_called_once_with( "sudo docker kill -s SIGKILL container1", nodes=[test_node])
def test_get_nodes(client): server_state_mock = MagicMock() test_node = Node(1, name='a', ip='0.0.0.0', az='A', groups='a', no=1, state=NodeState.UP) server_state_mock.get_nodes = MagicMock(return_value=[test_node]) with mock.patch("powerfulseal.web.server.server_state", server_state_mock): result = client.get('/api/nodes') server_state_mock.get_nodes.assert_called_once() data = json.loads(result.data.decode("utf-8")) assert len(data['nodes']) == 1 # Ensure that the state is converted to an integer assert isinstance(data['nodes'][0]['state'], int) assert data['nodes'][0]['state'] == NodeState.UP
def test_kill_pod(): demo_runner = DemoRunner(NodeInventory(None), None, None, RemoteExecutor(), None) # Patch action of getting nodes to execute kill command on test_node = Node(1) get_node_by_ip_mock = MagicMock(return_value=test_node) demo_runner.inventory.get_node_by_ip = get_node_by_ip_mock # Patch action of choosing container execute_mock = MagicMock() demo_runner.executor.execute = execute_mock mock_pod = MagicMock() mock_pod.container_ids = ["docker://container1"] demo_runner.kill_pod(mock_pod) mock_pod = MagicMock() mock_pod.container_ids = ["docker://container1"] demo_runner.kill_pod(mock_pod) execute_mock.assert_called_with("sudo docker kill -s SIGTERM container1", nodes=[test_node])
def test_nodes_are_deduplicated(): collection = set() collection.add(Node(**EXAMPLE_NODE_ARGS)) collection.add(Node(**EXAMPLE_NODE_ARGS)) assert len(collection) == 1
def test_node_raises_on_bad_state(state): with pytest.raises(ValueError): Node(id="something", state=state)
def node(): return Node(**EXAMPLE_NODE_ARGS)