def test_get_outages_include_ok(mocker):
    """Test .get_outages."""
    finish = arrow.utcnow()
    start = finish.replace(days=-30)
    mocker.patch('uptime_report.backends.pingdom.Pingdom')
    b = pingdom.PingdomBackend('user', 'pass', 'key', include_ok=True)
    check = mocker.Mock(id=173494)
    data = [{
        'time': start.replace(minutes=+3).timestamp,
        'probeid': 1,
        'status': 'up'
    }, {
        'time': start.replace(minutes=+2).timestamp,
        'probeid': 1,
        'status': 'down'
    }, {
        'time': start.replace(minutes=+1).timestamp,
        'probeid': 1,
        'status': 'up'
    }]
    check.results.side_effect = [{'results': data}]
    pingdom.Pingdom.return_value.getChecks.side_effect = [[check]]
    it = b.get_outages(start=start.timestamp, finish=finish.timestamp)
    outages = list(it)
    check.results.assert_called_once_with(offset=0,
                                          limit=1000,
                                          time_from=start.timestamp,
                                          time_to=finish.timestamp)
    assert len(outages) == 1
    assert outages[0].start.timestamp == start.replace(minutes=+2).timestamp
    assert outages[0].finish.timestamp == start.replace(minutes=+3).timestamp
def test_get_max_results(mocker):
    """Test .get_results with more than the maximum number."""
    finish = arrow.utcnow()
    start = finish.replace(days=-30)
    mocker.patch('uptime_report.backends.pingdom.Pingdom')
    b = pingdom.PingdomBackend('user', 'pass', 'key')
    check = mocker.Mock()
    data = {'time': start.timestamp, 'probeid': 1, 'status': 'down'}
    check.results.side_effect = [{'results': [data] * 1000}] * 45
    pingdom.Pingdom.return_value.getChecks.side_effect = [[check]]
    with pytest.raises(Exception, message='Maximum value for offset reached.'):
        list(b.get_results(start=start.timestamp, finish=finish.timestamp))
def test_get_no_results(mocker):
    """Test .get_results with no results."""
    finish = arrow.utcnow()
    start = finish.replace(days=-30)
    mocker.patch('uptime_report.backends.pingdom.Pingdom')
    b = pingdom.PingdomBackend('user', 'pass', 'key')
    check = mocker.Mock()
    check.results.side_effect = [{'results': []}]
    pingdom.Pingdom.return_value.getChecks.side_effect = [[check]]
    it = b.get_results(start=start.timestamp, finish=finish.timestamp)
    results = list(it)
    check.results.assert_called_once_with(offset=0,
                                          limit=1000,
                                          time_from=start.timestamp,
                                          time_to=finish.timestamp)
    assert len(results) == 0
def test_get_results(mocker):
    """Test .get_results with a result."""
    finish = arrow.utcnow()
    start = finish.replace(days=-30)
    mocker.patch('uptime_report.backends.pingdom.Pingdom')
    b = pingdom.PingdomBackend('user', 'pass', 'key')
    check = mocker.Mock()
    data = {'time': start.timestamp, 'probeid': 1, 'status': 'down'}
    check.results.side_effect = [{'results': [data]}]
    pingdom.Pingdom.return_value.getChecks.side_effect = [[check]]
    it = b.get_results(start=start.timestamp, finish=finish.timestamp)
    results = list(it)
    check.results.assert_called_once_with(offset=0,
                                          limit=1000,
                                          time_from=start.timestamp,
                                          time_to=finish.timestamp)
    assert len(results) == 1
    assert results[0].time.timestamp == data['time']
    assert results[0].meta == {'probeid': data['probeid'], 'desc': None}
    assert results[0].check == check
    assert results[0].type == pingdom.ResultType.DOWN
def test_get_checks(mocker):
    """Test .get_checks()."""
    mocker.patch('uptime_report.backends.pingdom.Pingdom')
    b = pingdom.PingdomBackend('user', 'pass', 'key')
    pingdom.Pingdom.return_value.getChecks.side_effect = [range(3)]
    assert list(b.get_checks()) == list(range(3))
def test_new_connection(mocker):
    """Test PingdomBackend forwards parameters to PingdomLib."""
    mocker.patch('uptime_report.backends.pingdom.Pingdom')
    pingdom.PingdomBackend('user', 'pass', 'key')
    pingdom.Pingdom.assert_called_once_with('user', 'pass', 'key')