def test__stopped(module_patch, sleep_patch):
    mock_module = setup_module(module_patch)
    setup_monit(mock_module, MONIT_OUTPUT % "Stopped")
    sleep_patch.return_value = None

    main()

    assert sleep_patch.call_count == 3
    verify_monit(mock_module, 4)
    mock_module.fail_json.assert_called_once_with(
        msg="Process %s did not transition to active within %i seconds" % (
            TEST_PARAMS["name"][0], TEST_PARAMS["timeout_seconds"]))
def test__status_ok(module_patch, sleep_patch):
    mock_module = setup_module(module_patch)
    setup_monit(mock_module, MONIT_OUTPUT % "Status ok")
    sleep_patch.return_value = None

    main()

    sleep_patch.assert_not_called()
    verify_monit(mock_module, 1)
    state = create_expected_state("Status ok", 1)
    mock_module.fail_json.assert_not_called()
    mock_module.exit_json.assert_called_once_with(changed=True,
                                                  name=TEST_PARAMS["name"][0],
                                                  state=state)
def test__wrong_process(module_patch, sleep_patch):
    params = dict(TEST_PARAMS)
    params["name"] = ["foobar"]
    mock_module = setup_module(module_patch, params)
    setup_monit(mock_module, MONIT_OUTPUT % "Stopped")
    sleep_patch.return_value = None

    main()

    assert sleep_patch.call_count == 3
    assert mock_module.run_command.call_count == 4
    mock_module.fail_json.assert_called_once_with(
        msg="Process %s did not transition to active within %i seconds" % (
            "foobar", TEST_PARAMS["timeout_seconds"]))
def test__restart_failed(module_patch, sleep_patch):
    mock_module = setup_module(module_patch)
    setup_monit(mock_module, MONIT_OUTPUT % "Failed")
    sleep_patch.return_value = None

    main()

    assert sleep_patch.call_count == 3
    assert mock_module.run_command.call_count == 5
    mock_module.run_command.assert_has_calls(
        [call("/usr/bin/monit restart " + TEST_PARAMS["name"][0],
              check_rc=True)])
    mock_module.fail_json.assert_called_once_with(
        msg="Process %s did not transition to active within %i seconds" % (
            TEST_PARAMS["name"][0], TEST_PARAMS["timeout_seconds"]))
def test__waiting(module_patch, sleep_patch):
    mock_module = setup_module(module_patch)
    setup_monit(mock_module, MONIT_OUTPUT % "Waiting")
    mock_module.run_command.side_effect = [
        (0, MONIT_OUTPUT % "Waiting", ""),
        (0, MONIT_OUTPUT % "Waiting", ""),
        (0, MONIT_OUTPUT % "Running", "")]
    sleep_patch.return_value = None

    main()

    assert sleep_patch.call_count == 2
    verify_monit(mock_module, 3)
    state = create_expected_state("Running", 3)
    mock_module.fail_json.assert_not_called()
    mock_module.exit_json.assert_called_once_with(changed=True,
                                                  name=TEST_PARAMS["name"][0],
                                                  state=state)
def test__restart_success(module_patch, sleep_patch):
    mock_module = setup_module(module_patch)
    setup_monit(mock_module, MONIT_OUTPUT % "Failed")
    mock_module.run_command.side_effect = [
        (0, MONIT_OUTPUT % "Failed", ""),
        (0, MONIT_OUTPUT % "Failed", ""),
        (0, MONIT_OUTPUT % "Failed", ""),
        (0, MONIT_OUTPUT % "Running", "")]
    sleep_patch.return_value = None

    main()

    assert sleep_patch.call_count == 2
    assert mock_module.run_command.call_count == 4
    mock_module.run_command.assert_has_calls(
        [call("/usr/bin/monit restart " + TEST_PARAMS["name"][0],
              check_rc=True)])
    state = create_expected_state("Running", 3)
    mock_module.fail_json.assert_not_called()
    mock_module.exit_json.assert_called_once_with(changed=True,
                                                  name=TEST_PARAMS["name"][0],
                                                  state=state)