pin_test.go 1.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859
  1. package source
  2. import "testing"
  3. type pinnableQuerier struct {
  4. *MockMetricsQuerier
  5. pinned *MockMetricsQuerier
  6. released int
  7. }
  8. func (p *pinnableQuerier) Pin() (MetricsQuerier, func()) {
  9. return p.pinned, func() { p.released++ }
  10. }
  11. type metricsOnlyDataSource struct {
  12. OpenCostDataSource
  13. metrics MetricsQuerier
  14. }
  15. func (m *metricsOnlyDataSource) Metrics() MetricsQuerier { return m.metrics }
  16. func TestPinMetrics(t *testing.T) {
  17. plain := NewMockMetricsQuerier()
  18. got, release := PinMetrics(plain)
  19. if got != plain {
  20. t.Errorf("expected a non-pinnable querier to be returned unchanged")
  21. }
  22. release()
  23. p := &pinnableQuerier{MockMetricsQuerier: NewMockMetricsQuerier(), pinned: NewMockMetricsQuerier()}
  24. got, release = PinMetrics(p)
  25. if got != p.pinned {
  26. t.Errorf("expected the pinned querier")
  27. }
  28. release()
  29. if p.released != 1 {
  30. t.Errorf("expected release to be forwarded, got %d", p.released)
  31. }
  32. }
  33. func TestPinDataSource(t *testing.T) {
  34. plain := &metricsOnlyDataSource{metrics: NewMockMetricsQuerier()}
  35. got, release := PinDataSource(plain)
  36. if got != plain {
  37. t.Errorf("expected a data source with a non-pinnable querier to be returned unchanged")
  38. }
  39. release()
  40. p := &pinnableQuerier{MockMetricsQuerier: NewMockMetricsQuerier(), pinned: NewMockMetricsQuerier()}
  41. ds := &metricsOnlyDataSource{metrics: p}
  42. got, release = PinDataSource(ds)
  43. if got.Metrics() != p.pinned || got.Metrics() != p.pinned {
  44. t.Errorf("expected every Metrics() call to return the pinned querier")
  45. }
  46. release()
  47. if p.released != 1 {
  48. t.Errorf("expected release to be forwarded, got %d", p.released)
  49. }
  50. }