예제 #1
0
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])
예제 #2
0
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
예제 #3
0
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)
예제 #4
0
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])
예제 #8
0
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
예제 #9
0
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])
예제 #10
0
def test_nodes_are_deduplicated():
    collection = set()
    collection.add(Node(**EXAMPLE_NODE_ARGS))
    collection.add(Node(**EXAMPLE_NODE_ARGS))
    assert len(collection) == 1
예제 #11
0
def test_node_raises_on_bad_state(state):
    with pytest.raises(ValueError):
        Node(id="something", state=state)
예제 #12
0
def node():
    return Node(**EXAMPLE_NODE_ARGS)