Skip to content

Commit

Permalink
feat #9212: move reader/writer tests over
Browse files Browse the repository at this point in the history
  • Loading branch information
dgnorton committed Dec 8, 2017
1 parent f1bccac commit c780da1
Show file tree
Hide file tree
Showing 2 changed files with 281 additions and 0 deletions.
220 changes: 220 additions & 0 deletions tsdb/engine/tsm1/digest_test.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,220 @@
package tsm1_test

import (
"io"
"os"
"path/filepath"
"testing"

"github.com/influxdata/influxdb/tsdb/engine/tsm1"
)

func TestDigest_None(t *testing.T) {
dir := MustTempDir()
dataDir := filepath.Join(dir, "data")
if err := os.Mkdir(dataDir, 0755); err != nil {
t.Fatalf("create data dir: %v", err)
}

df := MustTempFile(dir)

if err := tsm1.Digest(dir, df); err != nil {
t.Fatalf("digest error: %v", err)
}

if _, err := df.Seek(0, io.SeekStart); err != nil {
t.Fatalf("seek error: %v", err)
}

r, err := tsm1.NewDigestReader(df)
if err != nil {
t.Fatalf("NewDigestReader error: %v", err)
}

var count int
for {
_, _, err := r.ReadTimeSpan()
if err == io.EOF {
break
}

count++
}

if got, exp := count, 0; got != exp {
t.Fatalf("count mismatch: got %v, exp %v", got, exp)
}
}

func TestDigest_One(t *testing.T) {
dir := MustTempDir()
dataDir := filepath.Join(dir, "data")
if err := os.Mkdir(dataDir, 0755); err != nil {
t.Fatalf("create data dir: %v", err)
}

a1 := tsm1.NewValue(1, 1.1)
writes := map[string][]tsm1.Value{
"cpu,host=A#!~#value": []tsm1.Value{a1},
}
MustWriteTSM(dir, 1, writes)

df := MustTempFile(dir)

if err := tsm1.Digest(dir, df); err != nil {
t.Fatalf("digest error: %v", err)
}

if _, err := df.Seek(0, io.SeekStart); err != nil {
t.Fatalf("seek error: %v", err)
}

r, err := tsm1.NewDigestReader(df)
if err != nil {
t.Fatalf("NewDigestReader error: %v", err)
}

var count int
for {
key, _, err := r.ReadTimeSpan()
if err == io.EOF {
break
}

if got, exp := key, "cpu,host=A#!~#value"; got != exp {
t.Fatalf("key mismatch: got %v, exp %v", got, exp)
}

count++
}

if got, exp := count, 1; got != exp {
t.Fatalf("count mismatch: got %v, exp %v", got, exp)
}
}

func TestDigest_TimeFilter(t *testing.T) {
dir := MustTempDir()
dataDir := filepath.Join(dir, "data")
if err := os.Mkdir(dataDir, 0755); err != nil {
t.Fatalf("create data dir: %v", err)
}

a1 := tsm1.NewValue(1, 1.1)
writes := map[string][]tsm1.Value{
"cpu,host=A#!~#value": []tsm1.Value{a1},
}
MustWriteTSM(dir, 1, writes)

a2 := tsm1.NewValue(2, 2.1)
writes = map[string][]tsm1.Value{
"cpu,host=A#!~#value": []tsm1.Value{a2},
}
MustWriteTSM(dir, 2, writes)

a3 := tsm1.NewValue(3, 3.1)
writes = map[string][]tsm1.Value{
"cpu,host=A#!~#value": []tsm1.Value{a3},
}
MustWriteTSM(dir, 3, writes)

df := MustTempFile(dir)

if err := tsm1.DigestWithOptions(dir, tsm1.DigestOptions{MinTime: 2, MaxTime: 2}, df); err != nil {
t.Fatalf("digest error: %v", err)
}

if _, err := df.Seek(0, io.SeekStart); err != nil {
t.Fatalf("seek error: %v", err)
}

r, err := tsm1.NewDigestReader(df)
if err != nil {
t.Fatalf("NewDigestReader error: %v", err)
}

var count int
for {
key, ts, err := r.ReadTimeSpan()
if err == io.EOF {
break
}

if got, exp := key, "cpu,host=A#!~#value"; got != exp {
t.Fatalf("key mismatch: got %v, exp %v", got, exp)
}

for _, tr := range ts.Ranges {
if got, exp := tr.Max, int64(2); got != exp {
t.Fatalf("min time not filtered: got %v, exp %v", got, exp)
}
}

count++
}

if got, exp := count, 1; got != exp {
t.Fatalf("count mismatch: got %v, exp %v", got, exp)
}
}

func TestDigest_KeyFilter(t *testing.T) {
dir := MustTempDir()
dataDir := filepath.Join(dir, "data")
if err := os.Mkdir(dataDir, 0755); err != nil {
t.Fatalf("create data dir: %v", err)
}

a1 := tsm1.NewValue(1, 1.1)
writes := map[string][]tsm1.Value{
"cpu,host=A#!~#value": []tsm1.Value{a1},
}
MustWriteTSM(dir, 1, writes)

a2 := tsm1.NewValue(2, 2.1)
writes = map[string][]tsm1.Value{
"cpu,host=B#!~#value": []tsm1.Value{a2},
}
MustWriteTSM(dir, 2, writes)

a3 := tsm1.NewValue(3, 3.1)
writes = map[string][]tsm1.Value{
"cpu,host=C#!~#value": []tsm1.Value{a3},
}
MustWriteTSM(dir, 3, writes)

df := MustTempFile(dir)

if err := tsm1.DigestWithOptions(dir, tsm1.DigestOptions{
MinKey: []byte("cpu,host=B#!~#value"),
MaxKey: []byte("cpu,host=B#!~#value")}, df); err != nil {
t.Fatalf("digest error: %v", err)
}

if _, err := df.Seek(0, io.SeekStart); err != nil {
t.Fatalf("seek error: %v", err)
}

r, err := tsm1.NewDigestReader(df)
if err != nil {
t.Fatalf("NewDigestReader error: %v", err)
}

var count int
for {
key, _, err := r.ReadTimeSpan()
if err == io.EOF {
break
}

if got, exp := key, "cpu,host=B#!~#value"; got != exp {
t.Fatalf("key mismatch: got %v, exp %v", got, exp)
}

count++
}

if got, exp := count, 1; got != exp {
t.Fatalf("count mismatch: got %v, exp %v", got, exp)
}
}
61 changes: 61 additions & 0 deletions tsdb/engine/tsm1/digest_writer_test.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,61 @@
package tsm1_test

import (
"io"
"os"
"reflect"
"testing"

"github.com/influxdata/influxdb/tsdb/engine/tsm1"
)

func TestEngine_DigestWriterReader(t *testing.T) {
f := MustTempFile("")
w, err := tsm1.NewDigestWriter(f)
if err != nil {
t.Fatalf("NewDigestWriter: %v", err)
}

ts := &tsm1.DigestTimeSpan{}
ts.Add(1, 2, 3, 4)

if err := w.WriteTimeSpan("cpu", ts); err != nil {
t.Fatalf("WriteTimeSpan: %v", err)
}

if err := w.Close(); err != nil {
t.Fatalf("Close: %v", err)
}

f, err = os.Open(f.Name())
if err != nil {
t.Fatalf("Open: %v", err)
}

r, err := tsm1.NewDigestReader(f)
if err != nil {
t.Fatalf("NewDigestReader: %v", err)
}
for {

key, ts, err := r.ReadTimeSpan()
if err == io.EOF {
break
} else if err != nil {
t.Fatalf("ReadTimeSpan: %v", err)
}

if exp, got := "cpu", key; exp != got {
t.Fatalf("key mismatch: exp %v, got %v", exp, got)
}

if exp, got := 1, len(ts.Ranges); exp != got {
t.Fatalf("range len mismatch: exp %v, got %v", exp, got)
}

exp := tsm1.DigestTimeRange{Min: 1, Max: 2, N: 3, CRC: 4}
if got := ts.Ranges[0]; !reflect.DeepEqual(exp, got) {
t.Fatalf("time range mismatch: exp %v, got %v", exp, got)
}
}
}

0 comments on commit c780da1

Please sign in to comment.