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

Side by Side Diff: traceservice/proto/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: clean 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 unified diff | Download patch
OLDNEW
(Empty)
1 package traceservice
2
3 import (
4 "encoding/binary"
5 "fmt"
6 "math"
7 "os"
8 "testing"
9 "time"
10
11 "github.com/stretchr/testify/assert"
12 "go.skia.org/infra/go/util"
13 "go.skia.org/infra/perf/go/types"
14 "golang.org/x/net/context"
15 )
16
17 const (
18 FILENAME = "/tmp/tracestore_test.db"
19 )
20
21 func cleanup() {
22 if err := os.Remove(FILENAME); err != nil {
23 fmt.Printf("Failed to clean up %s: %s", FILENAME, err)
24 }
25 }
26 func TestCommitID(t *testing.T) {
27 // Test that CommitIDs round trip through byte slices.
28 now := time.Unix(time.Now().Unix(), 0)
29 c := &CommitID{
30 Timestamp: now.Unix(),
31 Id: "abc1234",
32 Source: "master",
33 }
34 cp, err := CommitIDFromBytes(CommitIDToBytes(c))
35 assert.NoError(t, err)
36 assert.Equal(t, c, cp)
37
38 // Handle error conditions such as empty byte slices.
39 _, err = CommitIDFromBytes([]byte{})
40 assert.Error(t, err)
41
42 b := CommitIDToBytes(c)
43 short1 := b[:8]
44 _, err = CommitIDFromBytes(short1)
45 assert.Error(t, err, "Input []byte has malformed time.")
46
47 _, err = CommitIDFromBytes([]byte("fred!barney"))
48 assert.Error(t, err, "Input []byte value too few seperators.")
49 }
50
51 func TestImpl(t *testing.T) {
52 ts, err := NewTraceServiceServer(FILENAME)
53 assert.NoError(t, err)
54 defer util.Close(ts)
55 defer cleanup()
56
57 now := time.Now()
58
59 first := now.Unix()
60 second := now.Add(time.Minute).Unix()
61
62 commitIDs := []*CommitID{
63 &CommitID{
64 Timestamp: first,
65 Id: "abc123",
66 Source: "master",
67 },
68 &CommitID{
69 Timestamp: second,
70 Id: "xyz789",
71 Source: "master",
72 },
73 }
74
75 params := &AddParamsRequest{
76 Params: map[string]*Params{
77 "key:8888:android": &Params{
78 Params: map[string]string{
79 "config": "8888",
80 "platform": "android",
81 "type": "skp",
82 },
83 },
84 "key:gpu:win8": &Params{
85 Params: map[string]string{
86 "config": "gpu",
87 "platform": "win8",
88 "type": "skp",
89 },
90 },
91 },
92 }
93
94 ctx := context.Background()
95
96 // Confirm that these traceids don't have Params stored in the db yet.
97 missingRequest := &MissingParamsRequest{
98 Traceids: []string{"key:8888:android", "key:gpu:win8"},
99 }
100 missingResp, err := ts.MissingParams(ctx, missingRequest)
101 assert.NoError(t, err)
102 assert.Equal(t, missingResp.Traceids, missingRequest.Traceids)
103
104 // Now add the Params for them.
105 _, err = ts.AddParams(ctx, params)
106 assert.NoError(t, err)
107
108 // Confirm the missing list is now empty.
109 nowMissing, err := ts.MissingParams(ctx, missingRequest)
110 assert.Equal(t, []string{}, nowMissing.Traceids)
111
112 addReq := &AddRequest{
113 Commitid: commitIDs[0],
114 Entries: map[string][]byte{
115 "key:gpu:win8": types.BytesFromFloat64(1.234),
116 "key:8888:android": types.BytesFromFloat64(0.01),
117 },
118 }
119
120 // Add a commit.
121 _, err = ts.Add(ctx, addReq)
122 assert.NoError(t, err)
123
124 // List, GetValues, and GetParams for the added commit.
125 listReq := &ListRequest{
126 Begin: first,
127 End: second,
128 }
129 listResp, err := ts.List(ctx, listReq)
130 assert.NoError(t, err)
131 assert.Equal(t, 1, len(listResp.Commitids))
132 assert.Equal(t, "abc123", listResp.Commitids[0].Id)
133
134 valuesReq := &GetValuesRequest{
135 Commitid: commitIDs[0],
136 }
137 valuesResp, err := ts.GetValues(ctx, valuesReq)
138 assert.NoError(t, err)
139 assert.Equal(t, 2, len(valuesResp.Values))
140 assert.Equal(t, 0.01, math.Float64frombits(binary.LittleEndian.Uint64(va luesResp.Values["key:8888:android"])))
141 assert.Equal(t, 1.234, math.Float64frombits(binary.LittleEndian.Uint64(v aluesResp.Values["key:gpu:win8"])))
142
143 paramsReq := &GetParamsRequest{
144 Traceids: []string{"key:8888:android", "key:gpu:win8"},
145 }
146 paramsResp, err := ts.GetParams(ctx, paramsReq)
147 assert.NoError(t, err)
148 assert.Equal(t, "8888", paramsResp.Params["key:8888:android"].Params["co nfig"])
149 assert.Equal(t, "win8", paramsResp.Params["key:gpu:win8"].Params["platfo rm"])
150
151 // Remove the commit.
152 removeRequest := &RemoveRequest{
153 Commitid: commitIDs[0],
154 }
155 _, err = ts.Remove(ctx, removeRequest)
156 assert.NoError(t, err)
157
158 listResp, err = ts.List(ctx, listReq)
159 assert.NoError(t, err)
160 assert.Equal(t, 0, len(listResp.Commitids))
161 }
162
163 func TestAtomize(t *testing.T) {
164 ts, err := NewTraceServiceServer(FILENAME)
165 assert.NoError(t, err)
166 defer util.Close(ts)
167 defer cleanup()
168
169 ids, err := ts.atomize([]string{"foo"})
170 assert.NoError(t, err)
171 assert.Equal(t, uint64(1), ids["foo"])
172
173 ids, err = ts.atomize([]string{"foo"})
174 assert.NoError(t, err)
175 assert.Equal(t, uint64(1), ids["foo"])
176
177 ids, err = ts.atomize([]string{"bar"})
178 assert.NoError(t, err)
179 assert.Equal(t, uint64(2), ids["bar"])
180
181 ids, err = ts.atomize([]string{"foo"})
182 assert.NoError(t, err)
183 assert.Equal(t, uint64(1), ids["foo"])
184
185 }
186
187 func TestCommitInfo(t *testing.T) {
188 // Test roundtripping through []byte.
189 c := &commitinfo{
190 Values: map[uint64][]byte{
191 uint64(1): []byte("foo"),
192 uint64(3): []byte(""),
193 uint64(0xffffffff): []byte("last"),
194 },
195 }
196 cp, err := newCommitInfo(c.ToBytes())
197 if err != nil {
198 t.Fatalf("Failed newCommitInfo: %s", err)
199 }
200 assert.Equal(t, 3, len(cp.Values))
201 assert.Equal(t, "foo", string(cp.Values[uint64(1)]))
202 assert.Equal(t, c, cp)
203
204 // Test error handling.
205 cnil, err := newCommitInfo(nil)
206 if err != nil {
207 t.Fatalf("Failed newCommitInfo: %s", err)
208 }
209 assert.Equal(t, 0, len(cnil.Values))
210
211 b := c.ToBytes()
212
213 // Test inputs that should fail.
214 _, err = newCommitInfo(b[1:])
215 assert.Error(t, err)
216
217 _, err = newCommitInfo(b[:len(b)-1])
218 assert.Error(t, err)
219 }
OLDNEW
« traceservice/proto/impl.go ('K') | « traceservice/proto/traceservice.pb.go ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698