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: common/tsmon/store/storetest/testing.go

Issue 2123853002: Added unit annotation supports onto tsmon in go. (Closed) Base URL: https://chromium.googlesource.com/external/github.com/luci/luci-go@master
Patch Set: Specify the unit of logdog/collector/subscription/processing_time_ms with types.Milliseconds Created 4 years, 5 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 | « common/tsmon/store/inmemory.go ('k') | common/tsmon/types/cell.go » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2015 The LUCI Authors. All rights reserved. 1 // Copyright 2015 The LUCI Authors. All rights reserved.
2 // Use of this source code is governed under the Apache License, Version 2.0 2 // Use of this source code is governed under the Apache License, Version 2.0
3 // that can be found in the LICENSE file. 3 // that can be found in the LICENSE file.
4 4
5 // Package storetest is imported exclusively by tests for Store implementations. 5 // Package storetest is imported exclusively by tests for Store implementations.
6 package storetest 6 package storetest
7 7
8 import ( 8 import (
9 "bytes" 9 "bytes"
10 "fmt" 10 "fmt"
(...skipping 149 matching lines...) Expand 10 before | Expand all | Expand 10 after
160 wantIncrSuccess: false, 160 wantIncrSuccess: false,
161 }, 161 },
162 } 162 }
163 163
164 Convey("Set and get", t, func() { 164 Convey("Set and get", t, func() {
165 Convey("With no fields", func() { 165 Convey("With no fields", func() {
166 for i, test := range tests { 166 for i, test := range tests {
167 Convey(fmt.Sprintf("%d. %s", i, test.typ), func( ) { 167 Convey(fmt.Sprintf("%d. %s", i, test.typ), func( ) {
168 var m types.Metric 168 var m types.Metric
169 if test.bucketer != nil { 169 if test.bucketer != nil {
170 » » » » » » m = &fakeDistributionMetric{Fake Metric{"m", "", []field.Field{}, test.typ}, test.bucketer} 170 » » » » » » m = &fakeDistributionMetric{Fake Metric{
171 » » » » » » » types.MetricInfo{"m", "" , []field.Field{}, test.typ},
172 » » » » » » » types.MetricMetadata{}}, test.bucketer}
171 } else { 173 } else {
172 » » » » » » m = &FakeMetric{"m", "", []field .Field{}, test.typ} 174 » » » » » » m = &FakeMetric{
175 » » » » » » » types.MetricInfo{"m", "" , []field.Field{}, test.typ},
176 » » » » » » » types.MetricMetadata{},
177 » » » » » » }
173 } 178 }
174 179
175 s := opts.Factory() 180 s := opts.Factory()
176 s.Register(m) 181 s.Register(m)
177 182
178 // Value should be nil initially. 183 // Value should be nil initially.
179 v, err := s.Get(ctx, m, time.Time{}, []i nterface{}{}) 184 v, err := s.Get(ctx, m, time.Time{}, []i nterface{}{})
180 So(err, ShouldBeNil) 185 So(err, ShouldBeNil)
181 So(v, ShouldBeNil) 186 So(v, ShouldBeNil)
182 187
(...skipping 13 matching lines...) Expand all
196 } 201 }
197 }) 202 })
198 } 203 }
199 }) 204 })
200 205
201 Convey("With fields", func() { 206 Convey("With fields", func() {
202 for i, test := range tests { 207 for i, test := range tests {
203 Convey(fmt.Sprintf("%d. %s", i, test.typ), func( ) { 208 Convey(fmt.Sprintf("%d. %s", i, test.typ), func( ) {
204 var m types.Metric 209 var m types.Metric
205 if test.bucketer != nil { 210 if test.bucketer != nil {
206 » » » » » » m = &fakeDistributionMetric{Fake Metric{"m", "", []field.Field{field.String("f")}, test.typ}, test.bucketer} 211 » » » » » » m = &fakeDistributionMetric{Fake Metric{
212 » » » » » » » types.MetricInfo{"m", "" , []field.Field{field.String("f")}, test.typ},
213 » » » » » » » types.MetricMetadata{}}, test.bucketer}
207 } else { 214 } else {
208 » » » » » » m = &FakeMetric{"m", "", []field .Field{field.String("f")}, test.typ} 215 » » » » » » m = &FakeMetric{
216 » » » » » » » types.MetricInfo{"m", "" , []field.Field{field.String("f")}, test.typ},
217 » » » » » » » types.MetricMetadata{}}
209 } 218 }
210 219
211 s := opts.Factory() 220 s := opts.Factory()
212 s.Register(m) 221 s.Register(m)
213 222
214 // Values should be nil initially. 223 // Values should be nil initially.
215 v, err := s.Get(ctx, m, time.Time{}, mak eInterfaceSlice("one")) 224 v, err := s.Get(ctx, m, time.Time{}, mak eInterfaceSlice("one"))
216 So(err, ShouldBeNil) 225 So(err, ShouldBeNil)
217 So(v, ShouldBeNil) 226 So(v, ShouldBeNil)
218 v, err = s.Get(ctx, m, time.Time{}, make InterfaceSlice("two")) 227 v, err = s.Get(ctx, m, time.Time{}, make InterfaceSlice("two"))
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after
254 263
255 Convey("With a fixed reset time", func() { 264 Convey("With a fixed reset time", func() {
256 for i, test := range tests { 265 for i, test := range tests {
257 if !test.wantSetSuccess { 266 if !test.wantSetSuccess {
258 continue 267 continue
259 } 268 }
260 269
261 Convey(fmt.Sprintf("%d. %s", i, test.typ), func( ) { 270 Convey(fmt.Sprintf("%d. %s", i, test.typ), func( ) {
262 var m types.Metric 271 var m types.Metric
263 if test.bucketer != nil { 272 if test.bucketer != nil {
264 » » » » » » m = &fakeDistributionMetric{Fake Metric{"m", "", []field.Field{}, test.typ}, test.bucketer} 273 » » » » » » m = &fakeDistributionMetric{Fake Metric{
274 » » » » » » » types.MetricInfo{"m", "" , []field.Field{}, test.typ},
275 » » » » » » » types.MetricMetadata{}}, test.bucketer}
265 } else { 276 } else {
266 » » » » » » m = &FakeMetric{"m", "", []field .Field{}, test.typ} 277 » » » » » » m = &FakeMetric{
278 » » » » » » » types.MetricInfo{"m", "" , []field.Field{}, test.typ},
279 » » » » » » » types.MetricMetadata{}}
267 } 280 }
268 281
269 s := opts.Factory() 282 s := opts.Factory()
270 s.Register(m) 283 s.Register(m)
271 opts.RegistrationFinished(s) 284 opts.RegistrationFinished(s)
272 285
273 // Do the set with a fixed time. 286 // Do the set with a fixed time.
274 t := time.Date(1972, 5, 6, 7, 8, 9, 0, t ime.UTC) 287 t := time.Date(1972, 5, 6, 7, 8, 9, 0, t ime.UTC)
275 So(s.Set(ctx, m, t, []interface{}{}, tes t.values[0]), ShouldBeNil) 288 So(s.Set(ctx, m, t, []interface{}{}, tes t.values[0]), ShouldBeNil)
276 289
(...skipping 22 matching lines...) Expand all
299 312
300 Convey("With a target set in the context", func() { 313 Convey("With a target set in the context", func() {
301 for i, test := range tests { 314 for i, test := range tests {
302 if !test.wantSetSuccess { 315 if !test.wantSetSuccess {
303 continue 316 continue
304 } 317 }
305 318
306 Convey(fmt.Sprintf("%d. %s", i, test.typ), func( ) { 319 Convey(fmt.Sprintf("%d. %s", i, test.typ), func( ) {
307 var m types.Metric 320 var m types.Metric
308 if test.bucketer != nil { 321 if test.bucketer != nil {
309 » » » » » » m = &fakeDistributionMetric{Fake Metric{"m", "", []field.Field{}, test.typ}, test.bucketer} 322 » » » » » » m = &fakeDistributionMetric{Fake Metric{
323 » » » » » » » types.MetricInfo{"m", "" , []field.Field{}, test.typ},
324 » » » » » » » types.MetricMetadata{}}, test.bucketer}
310 } else { 325 } else {
311 » » » » » » m = &FakeMetric{"m", "", []field .Field{}, test.typ} 326 » » » » » » m = &FakeMetric{
327 » » » » » » » types.MetricInfo{"m", "" , []field.Field{}, test.typ},
328 » » » » » » » types.MetricMetadata{}}
312 } 329 }
313 330
314 s := opts.Factory() 331 s := opts.Factory()
315 s.Register(m) 332 s.Register(m)
316 opts.RegistrationFinished(s) 333 opts.RegistrationFinished(s)
317 334
318 // Create a context with a different tar get. 335 // Create a context with a different tar get.
319 t := target.Task{} 336 t := target.Task{}
320 t.AsProto().ServiceName = proto.String(" foo") 337 t.AsProto().ServiceName = proto.String(" foo")
321 ctxWithTarget := target.Set(ctx, &t) 338 ctxWithTarget := target.Set(ctx, &t)
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after
354 }) 371 })
355 } 372 }
356 }) 373 })
357 374
358 Convey("With a decreasing value", func() { 375 Convey("With a decreasing value", func() {
359 for i, test := range tests { 376 for i, test := range tests {
360 if !test.typ.IsCumulative() || test.bucketer != nil { 377 if !test.typ.IsCumulative() || test.bucketer != nil {
361 continue 378 continue
362 } 379 }
363 Convey(fmt.Sprintf("%d. %s", i, test.typ), func( ) { 380 Convey(fmt.Sprintf("%d. %s", i, test.typ), func( ) {
364 » » » » » m := &FakeMetric{"m", "", []field.Field{ }, test.typ} 381 » » » » » m := &FakeMetric{
382 » » » » » » types.MetricInfo{"m", "", []fiel d.Field{}, test.typ},
383 » » » » » » types.MetricMetadata{}}
365 s := opts.Factory() 384 s := opts.Factory()
366 s.Register(m) 385 s.Register(m)
367 386
368 // Set the bigger value. 387 // Set the bigger value.
369 So(s.Set(ctx, m, time.Time{}, []interfac e{}{}, test.values[1]), ShouldBeNil) 388 So(s.Set(ctx, m, time.Time{}, []interfac e{}{}, test.values[1]), ShouldBeNil)
370 389
371 // Setting the smaller value should fail . 390 // Setting the smaller value should fail .
372 So(s.Set(ctx, m, time.Time{}, []interfac e{}{}, test.values[0]), ShouldNotBeNil) 391 So(s.Set(ctx, m, time.Time{}, []interfac e{}{}, test.values[0]), ShouldNotBeNil)
373 }) 392 })
374 } 393 }
375 }) 394 })
376 }) 395 })
377 396
378 Convey("Increment and get", t, func() { 397 Convey("Increment and get", t, func() {
379 Convey("With no fields", func() { 398 Convey("With no fields", func() {
380 for i, test := range tests { 399 for i, test := range tests {
381 Convey(fmt.Sprintf("%d. %s", i, test.typ), func( ) { 400 Convey(fmt.Sprintf("%d. %s", i, test.typ), func( ) {
382 var m types.Metric 401 var m types.Metric
383 if test.bucketer != nil { 402 if test.bucketer != nil {
384 » » » » » » m = &fakeDistributionMetric{Fake Metric{"m", "", []field.Field{}, test.typ}, test.bucketer} 403 » » » » » » m = &fakeDistributionMetric{Fake Metric{
404 » » » » » » » types.MetricInfo{"m", "" , []field.Field{}, test.typ},
405 » » » » » » » types.MetricMetadata{}}, test.bucketer}
406
385 } else { 407 } else {
386 » » » » » » m = &FakeMetric{"m", "", []field .Field{}, test.typ} 408 » » » » » » m = &FakeMetric{
409 » » » » » » » types.MetricInfo{"m", "" , []field.Field{}, test.typ},
410 » » » » » » » types.MetricMetadata{}}
387 } 411 }
388 412
389 s := opts.Factory() 413 s := opts.Factory()
390 s.Register(m) 414 s.Register(m)
391 415
392 // Value should be nil initially. 416 // Value should be nil initially.
393 v, err := s.Get(ctx, m, time.Time{}, []i nterface{}{}) 417 v, err := s.Get(ctx, m, time.Time{}, []i nterface{}{})
394 So(err, ShouldBeNil) 418 So(err, ShouldBeNil)
395 So(v, ShouldBeNil) 419 So(v, ShouldBeNil)
396 420
(...skipping 19 matching lines...) Expand all
416 } 440 }
417 }) 441 })
418 } 442 }
419 }) 443 })
420 444
421 Convey("With fields", func() { 445 Convey("With fields", func() {
422 for i, test := range tests { 446 for i, test := range tests {
423 Convey(fmt.Sprintf("%d. %s", i, test.typ), func( ) { 447 Convey(fmt.Sprintf("%d. %s", i, test.typ), func( ) {
424 var m types.Metric 448 var m types.Metric
425 if test.bucketer != nil { 449 if test.bucketer != nil {
426 » » » » » » m = &fakeDistributionMetric{Fake Metric{"m", "", []field.Field{field.String("f")}, test.typ}, test.bucketer} 450 » » » » » » m = &fakeDistributionMetric{Fake Metric{
451 » » » » » » » types.MetricInfo{"m", "" , []field.Field{field.String("f")}, test.typ},
452 » » » » » » » types.MetricMetadata{}}, test.bucketer}
427 } else { 453 } else {
428 » » » » » » m = &FakeMetric{"m", "", []field .Field{field.String("f")}, test.typ} 454 » » » » » » m = &FakeMetric{
455 » » » » » » » types.MetricInfo{"m", "" , []field.Field{field.String("f")}, test.typ},
456 » » » » » » » types.MetricMetadata{}}
429 } 457 }
430 458
431 s := opts.Factory() 459 s := opts.Factory()
432 s.Register(m) 460 s.Register(m)
433 461
434 // Values should be nil initially. 462 // Values should be nil initially.
435 v, err := s.Get(ctx, m, time.Time{}, mak eInterfaceSlice("one")) 463 v, err := s.Get(ctx, m, time.Time{}, mak eInterfaceSlice("one"))
436 So(err, ShouldBeNil) 464 So(err, ShouldBeNil)
437 So(v, ShouldBeNil) 465 So(v, ShouldBeNil)
438 v, err = s.Get(ctx, m, time.Time{}, make InterfaceSlice("two")) 466 v, err = s.Get(ctx, m, time.Time{}, make InterfaceSlice("two"))
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after
470 498
471 Convey("With a fixed reset time", func() { 499 Convey("With a fixed reset time", func() {
472 for i, test := range tests { 500 for i, test := range tests {
473 if !test.wantIncrSuccess { 501 if !test.wantIncrSuccess {
474 continue 502 continue
475 } 503 }
476 504
477 Convey(fmt.Sprintf("%d. %s", i, test.typ), func( ) { 505 Convey(fmt.Sprintf("%d. %s", i, test.typ), func( ) {
478 var m types.Metric 506 var m types.Metric
479 if test.bucketer != nil { 507 if test.bucketer != nil {
480 » » » » » » m = &fakeDistributionMetric{Fake Metric{"m", "", []field.Field{}, test.typ}, test.bucketer} 508 » » » » » » m = &fakeDistributionMetric{Fake Metric{
509 » » » » » » » types.MetricInfo{"m", "" , []field.Field{}, test.typ},
510 » » » » » » » types.MetricMetadata{}}, test.bucketer}
481 } else { 511 } else {
482 » » » » » » m = &FakeMetric{"m", "", []field .Field{}, test.typ} 512 » » » » » » m = &FakeMetric{
513 » » » » » » » types.MetricInfo{"m", "" , []field.Field{}, test.typ},
514 » » » » » » » types.MetricMetadata{}}
483 } 515 }
484 516
485 s := opts.Factory() 517 s := opts.Factory()
486 s.Register(m) 518 s.Register(m)
487 opts.RegistrationFinished(s) 519 opts.RegistrationFinished(s)
488 520
489 // Do the incr with a fixed time. 521 // Do the incr with a fixed time.
490 t := time.Date(1972, 5, 6, 7, 8, 9, 0, t ime.UTC) 522 t := time.Date(1972, 5, 6, 7, 8, 9, 0, t ime.UTC)
491 So(s.Incr(ctx, m, t, []interface{}{}, te st.deltas[0]), ShouldBeNil) 523 So(s.Incr(ctx, m, t, []interface{}{}, te st.deltas[0]), ShouldBeNil)
492 524
(...skipping 14 matching lines...) Expand all
507 539
508 Convey("With a target set in the context", func() { 540 Convey("With a target set in the context", func() {
509 for i, test := range tests { 541 for i, test := range tests {
510 if !test.wantIncrSuccess { 542 if !test.wantIncrSuccess {
511 continue 543 continue
512 } 544 }
513 545
514 Convey(fmt.Sprintf("%d. %s", i, test.typ), func( ) { 546 Convey(fmt.Sprintf("%d. %s", i, test.typ), func( ) {
515 var m types.Metric 547 var m types.Metric
516 if test.bucketer != nil { 548 if test.bucketer != nil {
517 » » » » » » m = &fakeDistributionMetric{Fake Metric{"m", "", []field.Field{}, test.typ}, test.bucketer} 549 » » » » » » m = &fakeDistributionMetric{
550 » » » » » » » FakeMetric{types.MetricI nfo{"m", "", []field.Field{}, test.typ},
551 » » » » » » » » types.MetricMeta data{}},
552 » » » » » » » test.bucketer}
518 } else { 553 } else {
519 » » » » » » m = &FakeMetric{"m", "", []field .Field{}, test.typ} 554 » » » » » » m = &FakeMetric{
555 » » » » » » » types.MetricInfo{"m", "" , []field.Field{}, test.typ},
556 » » » » » » » types.MetricMetadata{}}
520 } 557 }
521 558
522 s := opts.Factory() 559 s := opts.Factory()
523 s.Register(m) 560 s.Register(m)
524 opts.RegistrationFinished(s) 561 opts.RegistrationFinished(s)
525 562
526 // Create a context with a different tar get. 563 // Create a context with a different tar get.
527 t := target.Task{} 564 t := target.Task{}
528 t.AsProto().ServiceName = proto.String(" foo") 565 t.AsProto().ServiceName = proto.String(" foo")
529 ctxWithTarget := target.Set(ctx, &t) 566 ctxWithTarget := target.Set(ctx, &t)
(...skipping 21 matching lines...) Expand all
551 So(coll.Data[1].Task.GetServiceName(), S houldEqual, t.AsProto().GetServiceName()) 588 So(coll.Data[1].Task.GetServiceName(), S houldEqual, t.AsProto().GetServiceName())
552 }) 589 })
553 } 590 }
554 }) 591 })
555 }) 592 })
556 593
557 Convey("GetAll", t, func() { 594 Convey("GetAll", t, func() {
558 ctx, tc := testclock.UseTime(context.Background(), testclock.Tes tTimeLocal) 595 ctx, tc := testclock.UseTime(context.Background(), testclock.Tes tTimeLocal)
559 596
560 s := opts.Factory() 597 s := opts.Factory()
561 » » foo := &FakeMetric{"foo", "", []field.Field{}, types.NonCumulati veIntType} 598 » » foo := &FakeMetric{
562 » » bar := &FakeMetric{"bar", "", []field.Field{field.String("f")}, types.StringType} 599 » » » types.MetricInfo{"foo", "", []field.Field{}, types.NonCu mulativeIntType},
563 » » baz := &FakeMetric{"baz", "", []field.Field{field.String("f")}, types.NonCumulativeFloatType} 600 » » » types.MetricMetadata{}}
601 » » bar := &FakeMetric{
602 » » » types.MetricInfo{"bar", "", []field.Field{field.String(" f")}, types.StringType},
603 » » » types.MetricMetadata{}}
604 » » baz := &FakeMetric{
605 » » » types.MetricInfo{"baz", "", []field.Field{field.String(" f")}, types.NonCumulativeFloatType},
606 » » » types.MetricMetadata{}}
564 s.Register(foo) 607 s.Register(foo)
565 s.Register(bar) 608 s.Register(bar)
566 s.Register(baz) 609 s.Register(baz)
567 opts.RegistrationFinished(s) 610 opts.RegistrationFinished(s)
568 611
569 // Add test records. We increment the test clock each time so th at the added 612 // Add test records. We increment the test clock each time so th at the added
570 // records sort deterministically using sortableCellSlice. 613 // records sort deterministically using sortableCellSlice.
571 for _, m := range []struct { 614 for _, m := range []struct {
572 metric types.Metric 615 metric types.Metric
573 fieldvals []interface{} 616 fieldvals []interface{}
(...skipping 11 matching lines...) Expand all
585 628
586 got := s.GetAll(ctx) 629 got := s.GetAll(ctx)
587 sort.Sort(sortableCellSlice(got)) 630 sort.Sort(sortableCellSlice(got))
588 want := []types.Cell{ 631 want := []types.Cell{
589 { 632 {
590 types.MetricInfo{ 633 types.MetricInfo{
591 Name: "foo", 634 Name: "foo",
592 Fields: []field.Field{}, 635 Fields: []field.Field{},
593 ValueType: types.NonCumulativeIntType, 636 ValueType: types.NonCumulativeIntType,
594 }, 637 },
638 types.MetricMetadata{},
595 types.CellData{ 639 types.CellData{
596 FieldVals: []interface{}{}, 640 FieldVals: []interface{}{},
597 Value: int64(42), 641 Value: int64(42),
598 }, 642 },
599 }, 643 },
600 { 644 {
601 types.MetricInfo{ 645 types.MetricInfo{
602 Name: "bar", 646 Name: "bar",
603 Fields: []field.Field{field.String("f ")}, 647 Fields: []field.Field{field.String("f ")},
604 ValueType: types.StringType, 648 ValueType: types.StringType,
605 }, 649 },
650 types.MetricMetadata{},
606 types.CellData{ 651 types.CellData{
607 FieldVals: makeInterfaceSlice("one"), 652 FieldVals: makeInterfaceSlice("one"),
608 Value: "hello", 653 Value: "hello",
609 }, 654 },
610 }, 655 },
611 { 656 {
612 types.MetricInfo{ 657 types.MetricInfo{
613 Name: "bar", 658 Name: "bar",
614 Fields: []field.Field{field.String("f ")}, 659 Fields: []field.Field{field.String("f ")},
615 ValueType: types.StringType, 660 ValueType: types.StringType,
616 }, 661 },
662 types.MetricMetadata{},
617 types.CellData{ 663 types.CellData{
618 FieldVals: makeInterfaceSlice("two"), 664 FieldVals: makeInterfaceSlice("two"),
619 Value: "world", 665 Value: "world",
620 }, 666 },
621 }, 667 },
622 { 668 {
623 types.MetricInfo{ 669 types.MetricInfo{
624 Name: "baz", 670 Name: "baz",
625 Fields: []field.Field{field.String("f ")}, 671 Fields: []field.Field{field.String("f ")},
626 ValueType: types.NonCumulativeFloatType, 672 ValueType: types.NonCumulativeFloatType,
627 }, 673 },
674 types.MetricMetadata{},
628 types.CellData{ 675 types.CellData{
629 FieldVals: makeInterfaceSlice("three"), 676 FieldVals: makeInterfaceSlice("three"),
630 Value: 1.23, 677 Value: 1.23,
631 }, 678 },
632 }, 679 },
633 { 680 {
634 types.MetricInfo{ 681 types.MetricInfo{
635 Name: "baz", 682 Name: "baz",
636 Fields: []field.Field{field.String("f ")}, 683 Fields: []field.Field{field.String("f ")},
637 ValueType: types.NonCumulativeFloatType, 684 ValueType: types.NonCumulativeFloatType,
638 }, 685 },
686 types.MetricMetadata{},
639 types.CellData{ 687 types.CellData{
640 FieldVals: makeInterfaceSlice("four"), 688 FieldVals: makeInterfaceSlice("four"),
641 Value: 4.56, 689 Value: 4.56,
642 }, 690 },
643 }, 691 },
644 } 692 }
645 So(len(got), ShouldEqual, len(want)) 693 So(len(got), ShouldEqual, len(want))
646 694
647 for i, g := range got { 695 for i, g := range got {
648 w := want[i] 696 w := want[i]
649 697
650 Convey(fmt.Sprintf("%d", i), func() { 698 Convey(fmt.Sprintf("%d", i), func() {
651 So(g.Name, ShouldEqual, w.Name) 699 So(g.Name, ShouldEqual, w.Name)
652 So(len(g.Fields), ShouldEqual, len(w.Fields)) 700 So(len(g.Fields), ShouldEqual, len(w.Fields))
653 So(g.ValueType, ShouldEqual, w.ValueType) 701 So(g.ValueType, ShouldEqual, w.ValueType)
654 So(g.FieldVals, ShouldResemble, w.FieldVals) 702 So(g.FieldVals, ShouldResemble, w.FieldVals)
655 So(g.Value, ShouldEqual, w.Value) 703 So(g.Value, ShouldEqual, w.Value)
656 }) 704 })
657 } 705 }
658 }) 706 })
659 707
660 Convey("Concurrency", t, func() { 708 Convey("Concurrency", t, func() {
661 const numIterations = 100 709 const numIterations = 100
662 const numGoroutines = 32 710 const numGoroutines = 32
663 711
664 Convey("Incr", func(c C) { 712 Convey("Incr", func(c C) {
665 s := opts.Factory() 713 s := opts.Factory()
666 » » » m := &FakeMetric{"m", "", []field.Field{}, types.Cumulat iveIntType} 714 » » » m := &FakeMetric{
715 » » » » types.MetricInfo{"m", "", []field.Field{}, types .CumulativeIntType},
716 » » » » types.MetricMetadata{}}
667 s.Register(m) 717 s.Register(m)
668 718
669 wg := sync.WaitGroup{} 719 wg := sync.WaitGroup{}
670 f := func(n int) { 720 f := func(n int) {
671 defer wg.Done() 721 defer wg.Done()
672 for i := 0; i < numIterations; i++ { 722 for i := 0; i < numIterations; i++ {
673 c.So(s.Incr(ctx, m, time.Time{}, []inter face{}{}, int64(1)), ShouldBeNil) 723 c.So(s.Incr(ctx, m, time.Time{}, []inter face{}{}, int64(1)), ShouldBeNil)
674 } 724 }
675 } 725 }
676 726
677 for n := 0; n < numGoroutines; n++ { 727 for n := 0; n < numGoroutines; n++ {
678 wg.Add(1) 728 wg.Add(1)
679 go f(n) 729 go f(n)
680 } 730 }
681 wg.Wait() 731 wg.Wait()
682 732
683 val, err := s.Get(ctx, m, time.Time{}, []interface{}{}) 733 val, err := s.Get(ctx, m, time.Time{}, []interface{}{})
684 So(val, ShouldEqual, numIterations*numGoroutines) 734 So(val, ShouldEqual, numIterations*numGoroutines)
685 So(err, ShouldBeNil) 735 So(err, ShouldBeNil)
686 }) 736 })
687 }) 737 })
688 738
689 Convey("Different targets", t, func() { 739 Convey("Different targets", t, func() {
690 Convey("Gets from context", func() { 740 Convey("Gets from context", func() {
691 s := opts.Factory() 741 s := opts.Factory()
692 » » » m := &FakeMetric{"m", "", []field.Field{}, types.NonCumu lativeIntType} 742 » » » m := &FakeMetric{
743 » » » » types.MetricInfo{"m", "", []field.Field{}, types .NonCumulativeIntType},
744 » » » » types.MetricMetadata{}}
693 s.Register(m) 745 s.Register(m)
694 opts.RegistrationFinished(s) 746 opts.RegistrationFinished(s)
695 747
696 t := target.Task{} 748 t := target.Task{}
697 t.AsProto().ServiceName = proto.String("foo") 749 t.AsProto().ServiceName = proto.String("foo")
698 ctxWithTarget := target.Set(ctx, &t) 750 ctxWithTarget := target.Set(ctx, &t)
699 751
700 So(s.Set(ctx, m, time.Time{}, []interface{}{}, int64(42) ), ShouldBeNil) 752 So(s.Set(ctx, m, time.Time{}, []interface{}{}, int64(42) ), ShouldBeNil)
701 So(s.Set(ctxWithTarget, m, time.Time{}, []interface{}{}, int64(43)), ShouldBeNil) 753 So(s.Set(ctxWithTarget, m, time.Time{}, []interface{}{}, int64(43)), ShouldBeNil)
702 754
(...skipping 18 matching lines...) Expand all
721 } 773 }
722 }) 774 })
723 }) 775 })
724 } 776 }
725 777
726 func makeInterfaceSlice(v ...interface{}) []interface{} { 778 func makeInterfaceSlice(v ...interface{}) []interface{} {
727 return v 779 return v
728 } 780 }
729 781
730 // FakeMetric is a fake Metric implementation. 782 // FakeMetric is a fake Metric implementation.
731 type FakeMetric types.MetricInfo 783 type FakeMetric struct {
784 » types.MetricInfo
785 » types.MetricMetadata
786 }
732 787
733 // Info implements Metric.Info. 788 // Info implements Metric.Info
734 func (m *FakeMetric) Info() types.MetricInfo { return types.MetricInfo(*m) } 789 func (m *FakeMetric) Info() types.MetricInfo { return m.MetricInfo }
790
791 // Metadata implements Metric.Metadata
792 func (m *FakeMetric) Metadata() types.MetricMetadata { return m.MetricMetadata }
735 793
736 // SetFixedResetTime implements Metric.SetFixedResetTime. 794 // SetFixedResetTime implements Metric.SetFixedResetTime.
737 func (m *FakeMetric) SetFixedResetTime(t time.Time) {} 795 func (m *FakeMetric) SetFixedResetTime(t time.Time) {}
738 796
739 type fakeDistributionMetric struct { 797 type fakeDistributionMetric struct {
740 FakeMetric 798 FakeMetric
741 799
742 bucketer *distribution.Bucketer 800 bucketer *distribution.Bucketer
743 } 801 }
744 802
745 func (m *fakeDistributionMetric) Bucketer() *distribution.Bucketer { return m.bu cketer } 803 func (m *fakeDistributionMetric) Bucketer() *distribution.Bucketer { return m.bu cketer }
746 804
747 type sortableCellSlice []types.Cell 805 type sortableCellSlice []types.Cell
748 806
749 func (s sortableCellSlice) Len() int { return len(s) } 807 func (s sortableCellSlice) Len() int { return len(s) }
750 func (s sortableCellSlice) Less(i, j int) bool { 808 func (s sortableCellSlice) Less(i, j int) bool {
751 return s[i].ResetTime.UnixNano() < s[j].ResetTime.UnixNano() 809 return s[i].ResetTime.UnixNano() < s[j].ResetTime.UnixNano()
752 } 810 }
753 func (s sortableCellSlice) Swap(i, j int) { s[i], s[j] = s[j], s[i] } 811 func (s sortableCellSlice) Swap(i, j int) { s[i], s[j] = s[j], s[i] }
754 812
755 type sortableDataSlice []*pb.MetricsData 813 type sortableDataSlice []*pb.MetricsData
756 814
757 func (s sortableDataSlice) Len() int { return len(s) } 815 func (s sortableDataSlice) Len() int { return len(s) }
758 func (s sortableDataSlice) Less(i, j int) bool { 816 func (s sortableDataSlice) Less(i, j int) bool {
759 a, _ := proto.Marshal(s[i]) 817 a, _ := proto.Marshal(s[i])
760 b, _ := proto.Marshal(s[j]) 818 b, _ := proto.Marshal(s[j])
761 return bytes.Compare(a, b) > 0 819 return bytes.Compare(a, b) > 0
762 } 820 }
763 func (s sortableDataSlice) Swap(i, j int) { s[i], s[j] = s[j], s[i] } 821 func (s sortableDataSlice) Swap(i, j int) { s[i], s[j] = s[j], s[i] }
OLDNEW
« no previous file with comments | « common/tsmon/store/inmemory.go ('k') | common/tsmon/types/cell.go » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698