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

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