Example #1
0
def test_session_headers_and_request_headers_combine():
    """Should merge headers directly specified over any headers in a specified Session"""
    session = requests.Session()
    session.headers = {
        'session-header': 'mySession',
        'conflict-header': 'session-loses'
    }
    resp = Response()
    resp.status_code = 200
    httsleep = HttSleeper(URL, {'status_code': 200},
                          session=session,
                          headers={
                              'req-header': 'myRequest',
                              'conflict-header': 'req-wins'
                          })
    with mock.patch('requests.adapters.HTTPAdapter.send') as mock_adapter_send:
        mock_adapter_send.return_value = resp
        httsleep.run()
        assert mock_adapter_send.called
        args, kwargs = mock_adapter_send.call_args
    assert args[0].headers == {
        'conflict-header': 'req-wins',
        'req-header': 'myRequest',
        'session-header': 'mySession'
    }
Example #2
0
def test_empty_until():
    with pytest.raises(ValueError):
        HttSleeper(URL)
    with pytest.raises(ValueError):
        HttSleeper(URL, {})
    with pytest.raises(ValueError):
        HttSleeper(URL, [{}])
Example #3
0
def test_multiple_alarms():
    error_msg = {'status': 'ERROR'}
    responses = [
        httpretty.Response(body=json.dumps(error_msg), status=500),
        httpretty.Response(body='Internal Server Error', status=500),
        httpretty.Response(body='success', status=200)
    ]
    httpretty.register_uri(httpretty.GET, URL, responses=responses)
    alarms = [{
        'text': 'Internal Server Error',
        'status_code': 500
    }, {
        'json': error_msg,
        'status_code': 500
    }]
    with mock.patch('httsleep.main.sleep'):
        httsleep = HttSleeper(URL, {'status_code': 200}, alarms=alarms)
        try:
            httsleep.run()
        except Alarm as e:
            assert e.response.status_code == 500
            assert e.response.json() == error_msg
            assert e.alarm == {'json': error_msg, 'status_code': 500}
        else:
            pytest.fail("No exception raised!")
Example #4
0
def test_run_success():
    """Should return response when a success criteria has been reached"""
    httpretty.register_uri(httpretty.GET, URL, body='<html></html>', status=200)
    with mock.patch('httsleep.main.sleep') as mock_sleep:
        httsleep = HttSleeper(URL, {'status_code': 200})
        resp = httsleep.run()
        assert resp.status_code == 200
        assert not mock_sleep.called
Example #5
0
def test_jsonpath_condition():
    payload = {'status': 'SUCCESS'}
    responses = [httpretty.Response(body=json.dumps(payload), status=200)]
    httpretty.register_uri(httpretty.GET, URL, responses=responses)
    with mock.patch('httsleep.main.sleep'):
        httsleep = HttSleeper(URL, {'jsonpath': [{'expression': 'status', 'value': 'SUCCESS'}]})
        resp = httsleep.run()
    assert resp.status_code == 200
    assert resp.json() == payload
Example #6
0
def test_jsonpath_condition_multiple_values():
    payload = {'foo': [{'bar': 1}, {'bar': 2}]}
    responses = [httpretty.Response(body=json.dumps(payload), status=200)]
    httpretty.register_uri(httpretty.GET, URL, responses=responses)
    with mock.patch('httsleep.main.sleep'):
        httsleep = HttSleeper(URL, {'jsonpath': [{'expression': 'foo[*].bar', 'value': [1, 2]}]})
        resp = httsleep.run()
    assert resp.status_code == 200
    assert resp.json() == payload
Example #7
0
def test_ignore_exceptions():
    responses = [httpretty.Response(body=ConnectionError),
                 httpretty.Response(body="{}", status=200)]
    httpretty.register_uri(httpretty.GET, URL, responses=responses)
    with mock.patch('httsleep.main.sleep'):
        httsleep = HttSleeper(URL, {'json': {}}, ignore_exceptions=[ConnectionError])
        resp = httsleep.run()
    assert resp.status_code == 200
    assert resp.text == "{}"
Example #8
0
def test_json_condition():
    expected = {'my_key': 'my_value'}
    responses = [httpretty.Response(body=json.dumps({'error': 'not found'}), status=404),
                 httpretty.Response(body=json.dumps(expected), status=200)]
    httpretty.register_uri(httpretty.GET, URL, responses=responses)
    with mock.patch('httsleep.main.sleep'):
        httsleep = HttSleeper(URL, {'json': expected})
        resp = httsleep.run()
    assert resp.status_code == 200
    assert resp.json() == expected
Example #9
0
def test_text_condition():
    expected = 'you got it!'
    responses = [httpretty.Response(body='not found', status=404),
                 httpretty.Response(body=expected, status=200)]
    httpretty.register_uri(httpretty.GET, URL, responses=responses)
    with mock.patch('httsleep.main.sleep'):
        httsleep = HttSleeper(URL, {'text': expected})
        resp = httsleep.run()
    assert resp.status_code == 200
    assert resp.text == expected
Example #10
0
def test_invalid_alarms():
    with pytest.raises(ValueError):
        HttSleeper(URL, CONDITION, alarms={'lol': 'invalid'})
    with pytest.raises(ValueError):
        HttSleeper(URL,
                   CONDITION,
                   alarms={
                       'status_code': 500,
                       'lol': 'invalid'
                   })
Example #11
0
def test_run_alarm():
    """Should raise an Alarm when a failure criteria has been reached"""
    httpretty.register_uri(httpretty.GET,
                           URL,
                           body='<html></html>',
                           status=400)
    httsleep = HttSleeper(URL, {'status_code': 200},
                          alarms={'status_code': 400})
    with pytest.raises(Alarm):
        httsleep.run()
Example #12
0
def test_run_max_retries():
    """Should raise an exception when max_retries is reached"""
    responses = [httpretty.Response(body="Internal Server Error", status=500),
                 httpretty.Response(body="Internal Server Error", status=500),
                 httpretty.Response(body="Internal Server Error", status=500)]
    httpretty.register_uri(httpretty.GET, URL, responses=responses)
    with mock.patch('httsleep.main.sleep'):
        httsleep = HttSleeper(URL, {'status_code': 200}, max_retries=2)
        with pytest.raises(StopIteration):
            httsleep.run()
Example #13
0
def test_max_retries():
    obj = HttSleeper(URL, CONDITION)
    assert obj.max_retries == DEFAULT_MAX_RETRIES

    obj = HttSleeper(URL, CONDITION, max_retries=123)
    assert obj.max_retries == 123

    obj = HttSleeper(URL, CONDITION, max_retries=None)
    assert obj.max_retries == None

    with pytest.raises(ValueError):
        HttSleeper(URL, CONDITION, max_retries='five')
Example #14
0
def test_propagate_verify():
    """Should tell requests to skip SSL verification if verify==False"""
    resp = Response()
    resp.status_code = 200
    httsleep = HttSleeper(URL, {'status_code': 200}, verify=False)
    with mock.patch('requests.adapters.HTTPAdapter.send') as mock_adapter_send:
        mock_adapter_send.return_value = resp
        httsleep.run()
        assert mock_adapter_send.called
        args, kwargs = mock_adapter_send.call_args
    assert 'verify' in kwargs
    assert kwargs['verify'] == False
Example #15
0
def test_multiple_success_conditions():
    responses = [httpretty.Response(body='first response', status=200),
                 httpretty.Response(body='second response', status=200),
                 httpretty.Response(body='third response', status=200)]
    httpretty.register_uri(httpretty.GET, URL, responses=responses)
    conditions = [{'text': 'third response', 'status_code': 200},
                  {'text': 'second response', 'status_code': 200}]
    with mock.patch('httsleep.main.sleep'):
        httsleep = HttSleeper(URL, conditions)
        resp = httsleep.run()
    assert resp.status_code == 200
    assert resp.text == 'second response'
Example #16
0
def test_default_sends_verify_true():
    """Should not send a value for 'verify' to requests by default"""
    resp = Response()
    resp.status_code = 200
    httsleep = HttSleeper(URL, {'status_code': 200})
    with mock.patch('requests.adapters.HTTPAdapter.send') as mock_adapter_send:
        mock_adapter_send.return_value = resp
        httsleep.run()
        assert mock_adapter_send.called
        args, kwargs = mock_adapter_send.call_args
    assert 'verify' in kwargs
    assert kwargs['verify'] == True
Example #17
0
def test_default_uses_default_session():
    """Should use a default Session object unless one is specified"""
    resp = Response()
    resp.status_code = 200
    httsleep = HttSleeper(URL, {'status_code': 200})
    with mock.patch('requests.adapters.HTTPAdapter.send') as mock_adapter_send:
        mock_adapter_send.return_value = resp
        httsleep.run()
        assert mock_adapter_send.called
        args, kwargs = mock_adapter_send.call_args
    assert args[0].headers == requests.utils.default_headers()
    assert 'verify' in kwargs
    assert kwargs['verify'] == True
Example #18
0
def test_request_verify_overrules_session_verify():
    """Should give precedence to the 'verify' setting in the request, over that in a specified Session"""
    session = requests.Session()
    session.verify = '/path/to/ca/bundle'
    resp = Response()
    resp.status_code = 200
    httsleep = HttSleeper(URL, {'status_code': 200},
                          session=session,
                          verify='/override/path')
    with mock.patch('requests.adapters.HTTPAdapter.send') as mock_adapter_send:
        mock_adapter_send.return_value = resp
        httsleep.run()
        assert mock_adapter_send.called
        args, kwargs = mock_adapter_send.call_args
    assert 'verify' in kwargs
    assert kwargs['verify'] == '/override/path'
Example #19
0
def test_run_sleep_custom_interval():
    responses = [httpretty.Response(body="Internal Server Error", status=500),
                 httpretty.Response(body="<html></html>", status=200)]
    httpretty.register_uri(httpretty.GET, URL, responses=responses)
    with mock.patch('httsleep.main.sleep') as mock_sleep:
        resp = HttSleeper(URL, {'status_code': 200}, polling_interval=6).run()
        assert mock_sleep.called_once_with(6)
Example #20
0
def test_run_sleep_default_interval():
    responses = [httpretty.Response(body="Internal Server Error", status=500),
                 httpretty.Response(body="<html></html>", status=200)]
    httpretty.register_uri(httpretty.GET, URL, responses=responses)
    with mock.patch('httsleep.main.sleep') as mock_sleep:
        resp = HttSleeper(URL, {'status_code': 200}).run()
        assert mock_sleep.called_once_with(DEFAULT_POLLING_INTERVAL)
Example #21
0
def test_session():
    session = requests.Session()
    session.headers = {'Content-Type': 'test/type'}
    session.verify = False
    obj = HttSleeper(URL, CONDITION, session=session)
    assert obj.session.headers == session.headers
    assert obj.session.verify == session.verify
Example #22
0
def test_propagate_session():
    """Should propagate a Session's headers, verify setting, cookies etc. when specified"""
    session = requests.Session()
    session.cookies = {'tasty-cookie': 'chocolate'}
    session.headers = {'Content-Type': 'test/type'}
    session.verify = '/session/verify'
    resp = Response()
    resp.status_code = 200
    httsleep = HttSleeper(URL, {'status_code': 200}, session=session)
    with mock.patch('requests.adapters.HTTPAdapter.send') as mock_adapter_send:
        mock_adapter_send.return_value = resp
        httsleep.run()
        assert mock_adapter_send.called
        args, kwargs = mock_adapter_send.call_args
    assert args[0].headers == {
        'Content-Type': 'test/type',
        'Cookie': 'tasty-cookie=chocolate'
    }
    assert 'verify' in kwargs
    assert kwargs['verify'] == '/session/verify'
Example #23
0
def test_run_retries():
    """Should retry until a success condition is reached"""
    responses = [httpretty.Response(body="Internal Server Error", status=500),
                 httpretty.Response(body="Internal Server Error", status=500),
                 httpretty.Response(body="<html></html>", status=200)]
    httpretty.register_uri(httpretty.GET, URL, responses=responses)
    with mock.patch('httsleep.main.sleep') as mock_sleep:
        resp = HttSleeper(URL, {'status_code': 200}).run()
        assert mock_sleep.called
        assert mock_sleep.call_count == 2
    assert resp.status_code == 200
    assert resp.text == '<html></html>'
Example #24
0
def test_kwarg_condition():
    def myfunc(*args):
        return

    obj = HttSleeper(URL, status_code=200)
    assert obj.until == [{'status_code': 200}]
    obj = HttSleeper(URL, json={'status': 'SUCCESS'})
    assert obj.until == [{'json': {'status': 'SUCCESS'}}]
    obj = HttSleeper(URL,
                     jsonpath={
                         'expression': 'status',
                         'value': 'SUCCESS'
                     })
    assert obj.until == [{
        'jsonpath': {
            'expression': 'status',
            'value': 'SUCCESS'
        }
    }]
    obj = HttSleeper(URL, text='done')
    assert obj.until == [{'text': 'done'}]
    obj = HttSleeper(URL, callback=myfunc)
    assert obj.until == [{'callback': myfunc}]
    obj = HttSleeper(URL,
                     status_code=200,
                     callback=myfunc,
                     json={'status': 'success'})
    assert obj.until == [{
        'status_code': 200,
        'callback': myfunc,
        'json': {
            'status': 'success'
        }
    }]
Example #25
0
def test_callback_condition():
    def my_func(req):
        if 'very very' in req.text:
            return True
        return False
    text = "Some very very long text here with <b>maybe</b> some html too"
    responses = [httpretty.Response(body='not found', status=404),
                 httpretty.Response(body=text, status=200)]
    httpretty.register_uri(httpretty.GET, URL, responses=responses)
    with mock.patch('httsleep.main.sleep'):
        resp = HttSleeper(URL, {'callback': my_func}).run()
    assert resp.status_code == 200
    assert resp.text == text
Example #26
0
def test_invalid_until():
    with pytest.raises(ValueError):
        HttSleeper(URL, {'lol': 'invalid'})
    with pytest.raises(ValueError):
        HttSleeper(URL, {'status_code': 200, 'lol': 'invalid'})
Example #27
0
def test_until():
    obj = HttSleeper(URL, CONDITION)
    assert obj.until == [CONDITION]
Example #28
0
def test_ignore_exceptions_default_value():
    obj = HttSleeper(URL, CONDITION)
    assert obj.ignore_exceptions == tuple()

    obj = HttSleeper(URL, CONDITION, ignore_exceptions=[ValueError, Exception])
    assert obj.ignore_exceptions == (ValueError, Exception)
Example #29
0
def test_verify():
    obj = HttSleeper(URL, CONDITION, verify=False)
    assert obj.kwargs == {'verify': False}
Example #30
0
def test_default_session():
    obj = HttSleeper(URL, CONDITION)
    assert obj.session.headers == requests.utils.default_headers()