Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(247)

Unified Diff: trace/service/traceservice_test.go

Issue 1411663004: Create gRPC client and server, traceservice, that stores trace data in a BoltDB backend. (Closed) Base URL: https://skia.googlesource.com/buildbot@master
Patch Set: fix vet Created 5 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « trace/service/traceservice.pb.go ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: trace/service/traceservice_test.go
diff --git a/trace/service/traceservice_test.go b/trace/service/traceservice_test.go
new file mode 100644
index 0000000000000000000000000000000000000000..88954bed8b0c5100965fab938a934ffe0548a46d
--- /dev/null
+++ b/trace/service/traceservice_test.go
@@ -0,0 +1,234 @@
+package traceservice
+
+import (
+ "encoding/binary"
+ "fmt"
+ "math"
+ "os"
+ "testing"
+ "time"
+
+ "github.com/stretchr/testify/assert"
+ "go.skia.org/infra/go/util"
+ "go.skia.org/infra/perf/go/types"
+ "golang.org/x/net/context"
+)
+
+const (
+ FILENAME = "/tmp/tracestore_test.db"
+)
+
+func cleanup() {
+ if err := os.Remove(FILENAME); err != nil {
+ fmt.Printf("Failed to clean up %s: %s", FILENAME, err)
+ }
+}
+func TestCommitID(t *testing.T) {
+ // Test that CommitIDs round trip through byte slices.
+ now := time.Unix(time.Now().Unix(), 0)
+ c := &CommitID{
+ Timestamp: now.Unix(),
+ Id: "abc1234",
+ Source: "master",
+ }
+ b, err := CommitIDToBytes(c)
+ if err != nil {
+ t.Fatalf("Failed to convert CommitID to []byte: %s", err)
+ }
+ cp, err := CommitIDFromBytes(b)
+ assert.NoError(t, err)
+ assert.Equal(t, c, cp)
+
+ // Handle error conditions such as empty byte slices.
+ _, err = CommitIDFromBytes([]byte{})
+ assert.Error(t, err)
+
+ b, err = CommitIDToBytes(c)
+ if err != nil {
+ t.Fatalf("Failed to convert CommitID to []byte: %s", err)
+ }
+ short1 := b[:8]
+ _, err = CommitIDFromBytes(short1)
+ assert.Error(t, err, "Input []byte has malformed time.")
+
+ _, err = CommitIDFromBytes([]byte("fred!barney"))
+ assert.Error(t, err, "Input []byte value too few seperators.")
+
+ bad_cid := &CommitID{
+ Timestamp: now.Unix(),
+ Id: "abc!1234",
+ Source: "master",
+ }
+ _, err = CommitIDToBytes(bad_cid)
+ assert.NotNil(t, err)
+}
+
+func TestImpl(t *testing.T) {
+ ts, err := NewTraceServiceServer(FILENAME)
+ assert.NoError(t, err)
+ defer util.Close(ts)
+ defer cleanup()
+
+ now := time.Now()
+
+ first := now.Unix()
+ second := now.Add(time.Minute).Unix()
+
+ commitIDs := []*CommitID{
+ &CommitID{
+ Timestamp: first,
+ Id: "abc123",
+ Source: "master",
+ },
+ &CommitID{
+ Timestamp: second,
+ Id: "xyz789",
+ Source: "master",
+ },
+ }
+
+ params := &AddParamsRequest{
+ Params: map[string]*Params{
+ "key:8888:android": &Params{
+ Params: map[string]string{
+ "config": "8888",
+ "platform": "android",
+ "type": "skp",
+ },
+ },
+ "key:gpu:win8": &Params{
+ Params: map[string]string{
+ "config": "gpu",
+ "platform": "win8",
+ "type": "skp",
+ },
+ },
+ },
+ }
+
+ ctx := context.Background()
+
+ // Confirm that these traceids don't have Params stored in the db yet.
+ missingRequest := &MissingParamsRequest{
+ Traceids: []string{"key:8888:android", "key:gpu:win8"},
+ }
+ missingResp, err := ts.MissingParams(ctx, missingRequest)
+ assert.NoError(t, err)
+ assert.Equal(t, missingResp.Traceids, missingRequest.Traceids)
+
+ // Now add the Params for them.
+ _, err = ts.AddParams(ctx, params)
+ assert.NoError(t, err)
+
+ // Confirm the missing list is now empty.
+ nowMissing, err := ts.MissingParams(ctx, missingRequest)
+ assert.Equal(t, []string{}, nowMissing.Traceids)
+
+ addReq := &AddRequest{
+ Commitid: commitIDs[0],
+ Entries: map[string][]byte{
+ "key:gpu:win8": types.BytesFromFloat64(1.234),
+ "key:8888:android": types.BytesFromFloat64(0.01),
+ },
+ }
+
+ // Add a commit.
+ _, err = ts.Add(ctx, addReq)
+ assert.NoError(t, err)
+
+ // List, GetValues, and GetParams for the added commit.
+ listReq := &ListRequest{
+ Begin: first,
+ End: second,
+ }
+ listResp, err := ts.List(ctx, listReq)
+ assert.NoError(t, err)
+ assert.Equal(t, 1, len(listResp.Commitids))
+ assert.Equal(t, "abc123", listResp.Commitids[0].Id)
+
+ valuesReq := &GetValuesRequest{
+ Commitid: commitIDs[0],
+ }
+ valuesResp, err := ts.GetValues(ctx, valuesReq)
+ assert.NoError(t, err)
+ assert.Equal(t, 2, len(valuesResp.Values))
+ assert.Equal(t, 0.01, math.Float64frombits(binary.LittleEndian.Uint64(valuesResp.Values["key:8888:android"])))
+ assert.Equal(t, 1.234, math.Float64frombits(binary.LittleEndian.Uint64(valuesResp.Values["key:gpu:win8"])))
+
+ paramsReq := &GetParamsRequest{
+ Traceids: []string{"key:8888:android", "key:gpu:win8"},
+ }
+ paramsResp, err := ts.GetParams(ctx, paramsReq)
+ assert.NoError(t, err)
+ assert.Equal(t, "8888", paramsResp.Params["key:8888:android"].Params["config"])
+ assert.Equal(t, "win8", paramsResp.Params["key:gpu:win8"].Params["platform"])
+
+ // Remove the commit.
+ removeRequest := &RemoveRequest{
+ Commitid: commitIDs[0],
+ }
+ _, err = ts.Remove(ctx, removeRequest)
+ assert.NoError(t, err)
+
+ listResp, err = ts.List(ctx, listReq)
+ assert.NoError(t, err)
+ assert.Equal(t, 0, len(listResp.Commitids))
+}
+
+func TestAtomize(t *testing.T) {
+ ts, err := NewTraceServiceServer(FILENAME)
+ assert.NoError(t, err)
+ defer util.Close(ts)
+ defer cleanup()
+
+ ids, err := ts.atomize([]string{"foo"})
+ assert.NoError(t, err)
+ assert.Equal(t, uint64(1), ids["foo"])
+
+ ids, err = ts.atomize([]string{"foo"})
+ assert.NoError(t, err)
+ assert.Equal(t, uint64(1), ids["foo"])
+
+ ids, err = ts.atomize([]string{"bar"})
+ assert.NoError(t, err)
+ assert.Equal(t, uint64(2), ids["bar"])
+
+ ids, err = ts.atomize([]string{"foo"})
+ assert.NoError(t, err)
+ assert.Equal(t, uint64(1), ids["foo"])
+
+}
+
+func TestCommitInfo(t *testing.T) {
+ // Test roundtripping through []byte.
+ c := &commitinfo{
+ Values: map[uint64][]byte{
+ uint64(1): []byte("foo"),
+ uint64(3): []byte(""),
+ uint64(0xffffffff): []byte("last"),
+ },
+ }
+ cp, err := newCommitInfo(c.ToBytes())
+ if err != nil {
+ t.Fatalf("Failed newCommitInfo: %s", err)
+ }
+ assert.Equal(t, 3, len(cp.Values))
+ assert.Equal(t, "foo", string(cp.Values[uint64(1)]))
+ assert.Equal(t, c, cp)
+
+ // Test error handling.
+ cnil, err := newCommitInfo(nil)
+ if err != nil {
+ t.Fatalf("Failed newCommitInfo: %s", err)
+ }
+ assert.Equal(t, 0, len(cnil.Values))
+
+ b := c.ToBytes()
+
+ // Test inputs that should fail.
+ _, err = newCommitInfo(b[1:])
+ assert.Error(t, err)
+
+ _, err = newCommitInfo(b[:len(b)-1])
+ assert.Error(t, err)
+}
« no previous file with comments | « trace/service/traceservice.pb.go ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698