예제 #1
0
def test_logtail_shrink(mocker, tmpdir):
    mocker.patch('logstapo.logtail.debug_echo')
    warning_echo = mocker.patch('logstapo.logtail.warning_echo')
    log = tmpdir.join('test.log')
    log.write('hello\nworld\n')
    assert list(logtail(log.strpath)) == ['hello', 'world']
    log.write('hello\nbar\n')
    assert not warning_echo.called
    assert list(logtail(log.strpath)) == ['hello', 'bar']
    assert warning_echo.called
예제 #2
0
def test_logtail_shrink(mocker, tmpdir):
    mocker.patch('logstapo.logtail.debug_echo')
    warning_echo = mocker.patch('logstapo.logtail.warning_echo')
    log = tmpdir.join('test.log')
    log.write('hello\nworld\n')
    assert list(logtail(log.strpath)) == ['hello', 'world']
    log.write('hello\nbar\n')
    assert not warning_echo.called
    assert list(logtail(log.strpath)) == ['hello', 'bar']
    assert warning_echo.called
예제 #3
0
def test_logtail_rotated_unreadable(mocker, tmpdir):
    mocker.patch('logstapo.logtail.debug_echo')
    warning_echo = mocker.patch('logstapo.logtail.warning_echo')
    log = tmpdir.join('test.log')
    rotated = tmpdir.join('test.log.1')
    log.write('hello\nworld\n')
    assert list(logtail(log.strpath)) == ['hello', 'world']
    log.rename(rotated)
    rotated.chmod(0o000)
    log.write('new\n')
    assert not warning_echo.called
    assert list(logtail(log.strpath)) == ['new']
    assert warning_echo.called
예제 #4
0
def test_logtail_rotated_wrong_inode(mocker, tmpdir):
    mocker.patch('logstapo.logtail.debug_echo')
    mocker.patch('logstapo.logtail.warning_echo')
    log = tmpdir.join('test.log')
    rotated = tmpdir.join('test.log.1')
    log.write('hello\nworld\n')
    assert list(logtail(log.strpath)) == ['hello', 'world']
    # copy it so the rotated file has a different inode
    log.copy(rotated)
    rotated.write('bar\n', 'a')
    log.remove()
    log.write('foo\n')
    assert list(logtail(log.strpath)) == ['foo']
예제 #5
0
def test_logtail_rotated_wrong_inode(mocker, tmpdir):
    mocker.patch('logstapo.logtail.debug_echo')
    mocker.patch('logstapo.logtail.warning_echo')
    log = tmpdir.join('test.log')
    rotated = tmpdir.join('test.log.1')
    log.write('hello\nworld\n')
    assert list(logtail(log.strpath)) == ['hello', 'world']
    # copy it so the rotated file has a different inode
    log.copy(rotated)
    rotated.write('bar\n', 'a')
    log.remove()
    log.write('foo\n')
    assert list(logtail(log.strpath)) == ['foo']
예제 #6
0
def test_logtail_rotated_unreadable(mocker, tmpdir):
    mocker.patch('logstapo.logtail.debug_echo')
    warning_echo = mocker.patch('logstapo.logtail.warning_echo')
    log = tmpdir.join('test.log')
    rotated = tmpdir.join('test.log.1')
    log.write('hello\nworld\n')
    assert list(logtail(log.strpath)) == ['hello', 'world']
    log.rename(rotated)
    rotated.chmod(0o000)
    log.write('new\n')
    assert not warning_echo.called
    assert list(logtail(log.strpath)) == ['new']
    assert warning_echo.called
예제 #7
0
def test_logtail_bad_offset_file(mocker, tmpdir):
    mocker.patch('logstapo.logtail.debug_echo')
    warning_echo = mocker.patch('logstapo.logtail.warning_echo')
    log = tmpdir.join('test.log')
    offset = tmpdir.join('test.log.offset')
    log.write('hello\nworld\n')
    assert list(logtail(log.strpath)) == ['hello', 'world']
    offset.write('')
    assert list(logtail(log.strpath)) == ['hello', 'world']
    offset.chmod(0o400)
    log.write('foo\n', 'a')
    assert not warning_echo.called
    assert list(logtail(log.strpath)) == ['foo']
    assert warning_echo.called
    assert list(logtail(log.strpath)) == ['foo']
예제 #8
0
def test_logtail_bad_offset_file(mocker, tmpdir):
    mocker.patch('logstapo.logtail.debug_echo')
    warning_echo = mocker.patch('logstapo.logtail.warning_echo')
    log = tmpdir.join('test.log')
    offset = tmpdir.join('test.log.offset')
    log.write('hello\nworld\n')
    assert list(logtail(log.strpath)) == ['hello', 'world']
    offset.write('')
    assert list(logtail(log.strpath)) == ['hello', 'world']
    offset.chmod(0o400)
    log.write('foo\n', 'a')
    assert not warning_echo.called
    assert list(logtail(log.strpath)) == ['foo']
    assert warning_echo.called
    assert list(logtail(log.strpath)) == ['foo']
예제 #9
0
def test_logtail_dryrun(mocker, tmpdir, dry_run):
    mocker.patch('logstapo.logtail.debug_echo')
    mocker.patch('logstapo.logtail.warning_echo')
    log = tmpdir.join('test.log')
    offset = tmpdir.join('test.log.offset')
    log.write('hello\nworld\n')
    assert list(logtail(log.strpath, dry_run=dry_run)) == ['hello', 'world']
    assert offset.check() == (not dry_run)
예제 #10
0
def test_logtail_dryrun(mocker, tmpdir, dry_run):
    mocker.patch('logstapo.logtail.debug_echo')
    mocker.patch('logstapo.logtail.warning_echo')
    log = tmpdir.join('test.log')
    offset = tmpdir.join('test.log.offset')
    log.write('hello\nworld\n')
    assert list(logtail(log.strpath, dry_run=dry_run)) == ['hello', 'world']
    assert offset.check() == (not dry_run)
예제 #11
0
def test_logtail_bad_charset(mocker, tmpdir):
    mocker.patch('logstapo.logtail.debug_echo')
    mocker.patch('logstapo.logtail.warning_echo')
    log = tmpdir.join('test.log')
    garbage = bytes(bytearray(range(33, 256)))
    # proper utf8
    log.write('möp\n'.encode('utf-8'), mode='wb')
    # not utf8
    log.write('möp\n'.encode('latin1'), mode='ab')
    # pure garbage
    log.write(garbage, mode='ab')
    lines = list(logtail(log.strpath))
    assert lines == ['möp',
                     'm\N{REPLACEMENT CHARACTER}p',
                     ''.join(chr(x) if x < 128 else '\N{REPLACEMENT CHARACTER}' for x in garbage)]
예제 #12
0
def test_logtail_bad_charset(mocker, tmpdir):
    mocker.patch('logstapo.logtail.debug_echo')
    mocker.patch('logstapo.logtail.warning_echo')
    log = tmpdir.join('test.log')
    garbage = bytes(bytearray(range(33, 256)))
    # proper utf8
    log.write('möp\n'.encode('utf-8'), mode='wb')
    # not utf8
    log.write('möp\n'.encode('latin1'), mode='ab')
    # pure garbage
    log.write(garbage, mode='ab')
    lines = list(logtail(log.strpath))
    assert lines == [
        'möp', 'm\N{REPLACEMENT CHARACTER}p', ''.join(
            chr(x) if x < 128 else '\N{REPLACEMENT CHARACTER}'
            for x in garbage)
    ]
예제 #13
0
def test_logtail_invalid(mocker, tmpdir):
    warning_echo = mocker.patch('logstapo.logtail.warning_echo')
    assert list(logtail(tmpdir.join('nosuchfile').strpath)) == []
    assert warning_echo.called
예제 #14
0
def _iter_log_lines(file, dry_run):
    yield from logtail(file, dry_run=dry_run)
예제 #15
0
def test_logtail_invalid(mocker, tmpdir):
    warning_echo = mocker.patch('logstapo.logtail.warning_echo')
    assert list(logtail(tmpdir.join('nosuchfile').strpath)) == []
    assert warning_echo.called