This struct is supposed to use an easier algorithm for scanning query log files. The end goal is allow us scanning multiple query log files.
60 lines
1.4 KiB
Go
60 lines
1.4 KiB
Go
package querylog
|
|
|
|
import (
|
|
"io"
|
|
"os"
|
|
"strings"
|
|
"testing"
|
|
|
|
"github.com/stretchr/testify/assert"
|
|
)
|
|
|
|
// Check adding and loading (with filtering) entries from disk and memory
|
|
func TestQLogFile(t *testing.T) {
|
|
conf := Config{
|
|
Enabled: true,
|
|
Interval: 1,
|
|
MemSize: 100,
|
|
}
|
|
conf.BaseDir = prepareTestDir()
|
|
defer func() { _ = os.RemoveAll(conf.BaseDir) }()
|
|
l := newQueryLog(conf)
|
|
|
|
// add disk entries
|
|
addEntry(l, "example.org", "1.2.3.4", "0.1.2.4")
|
|
addEntry(l, "example.org", "1.2.3.4", "0.1.2.5")
|
|
|
|
// write to disk
|
|
_ = l.flushLogBuffer(true)
|
|
|
|
// create the new QLogFile instance
|
|
q, err := NewQLogFile(l.logFile)
|
|
assert.Nil(t, err)
|
|
assert.NotNil(t, q)
|
|
|
|
// seek to the start
|
|
pos, err := q.SeekStart()
|
|
assert.Nil(t, err)
|
|
assert.True(t, pos > 0)
|
|
|
|
// read first line
|
|
line, err := q.ReadNext()
|
|
assert.Nil(t, err)
|
|
assert.True(t, strings.Contains(line, "0.1.2.5"), line)
|
|
assert.True(t, strings.HasPrefix(line, "{"), line)
|
|
assert.True(t, strings.HasSuffix(line, "}"), line)
|
|
|
|
// read second line
|
|
line, err = q.ReadNext()
|
|
assert.Nil(t, err)
|
|
assert.Equal(t, int64(0), q.position)
|
|
assert.True(t, strings.Contains(line, "0.1.2.4"), line)
|
|
assert.True(t, strings.HasPrefix(line, "{"), line)
|
|
assert.True(t, strings.HasSuffix(line, "}"), line)
|
|
|
|
// try reading again (there's nothing to read anymore)
|
|
line, err = q.ReadNext()
|
|
assert.Equal(t, io.EOF, err)
|
|
assert.Equal(t, "", line)
|
|
}
|