blob: 89d37fbc06c232109cd628c6278fabaefc741cd8 [file] [log] [blame]
// Copyright 2018 The Fuchsia Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file
package catapult_test
import (
"reflect"
"testing"
"fuchsia.googlesource.com/testing/catapult"
"github.com/kr/pretty"
)
func TestAddHistogram(t *testing.T) {
t.Run("When the HistogramSet is empty", func(t *testing.T) {
histogramSet := catapult.HistogramSet{}
histogram := catapult.Histogram{Name: "test_histogram"}
expectedJSON := []interface{}{histogram}
histogramSet.AddHistogram(histogram)
if !reflect.DeepEqual(histogramSet.ToJSON(), expectedJSON) {
t.Errorf("Invalid HistogramSet. Got %+v. Expected %+v",
pretty.Sprint(histogramSet.ToJSON()),
pretty.Sprint(expectedJSON),
)
}
})
t.Run("When the HistogramSet contains other Histograms", func(t *testing.T) {
histogramSet := catapult.HistogramSet{}
histogram1 := catapult.Histogram{Name: "test_histogram_1"}
histogram2 := catapult.Histogram{Name: "test_histogram_2"}
expectedJSON := []interface{}{histogram1, histogram2}
histogramSet.AddHistogram(histogram1)
histogramSet.AddHistogram(histogram2)
if !reflect.DeepEqual(histogramSet.ToJSON(), expectedJSON) {
t.Errorf("Invalid HistogramSet. Got %+v. Expected %+v",
pretty.Sprint(histogramSet.ToJSON()),
pretty.Sprint(expectedJSON),
)
}
})
t.Run("When the HistogramSet contains other Diagnostics", func(t *testing.T) {
histogramSet := catapult.HistogramSet{}
histogram := catapult.Histogram{
Name: "test_histogram",
Diagnostics: make(map[string]string),
}
diagnostic := &catapult.GenericSetDiagnostic{
Type: catapult.DiagnosticTypeGenericSet,
Values: []interface{}{"test_value"},
GUID: "test_guid",
}
// Should return an error without modifying the HistogramSet
// because all Histograms must be added before any Diagnotics
// are added.
expectedJSON := []interface{}{diagnostic}
histogramSet.AddSharedDiagnostic("test_diagnostic", diagnostic)
if histogramSet.AddHistogram(histogram) == nil {
t.Errorf("expected an error when adding a Histogram after a Diagnostic")
}
if !reflect.DeepEqual(histogramSet.ToJSON(), expectedJSON) {
t.Errorf("Invalid HistogramSet. Got %+v. Expected %+v",
pretty.Sprint(histogramSet.ToJSON()),
pretty.Sprint(expectedJSON),
)
}
})
}
func TestAddSharedDiagnostic(t *testing.T) {
t.Run("When there are no Histograms in the set", func(t *testing.T) {
diagnostic := &catapult.GenericSetDiagnostic{
Type: catapult.DiagnosticTypeGenericSet,
GUID: "test_guid",
Values: []interface{}{"test_value"},
}
histogramSet := catapult.HistogramSet{}
histogramSet.AddSharedDiagnostic("test_diagnostic", diagnostic)
expectedJSON := []interface{}{diagnostic}
if !reflect.DeepEqual(histogramSet.ToJSON(), expectedJSON) {
t.Errorf("Invalid HistogramSet. Got: %+v\nExpected: %+v",
pretty.Sprint(histogramSet.ToJSON()),
pretty.Sprint(expectedJSON))
}
})
t.Run("When there are existing Histograms in the set", func(t *testing.T) {
diagnostic := &catapult.GenericSetDiagnostic{
Type: catapult.DiagnosticTypeGenericSet,
GUID: "test_guid",
Values: []interface{}{"test_value"},
}
histogramSet := catapult.HistogramSet{}
histogramSet.AddHistogram(catapult.Histogram{
Name: "test_histogram_1",
Diagnostics: make(map[string]string),
})
histogramSet.AddHistogram(catapult.Histogram{
Name: "test_histogram_2",
// Intentionally leaving this Diagnostics map as nil to
// make sure the map still recieves a reference to the
// new Diagnostic.
})
histogramSet.AddSharedDiagnostic("test_diagnostic", diagnostic)
// Each histogram in the set should have a reference to the diagnostic in its
// Diagnostics map.
expectedJSON := []interface{}{
diagnostic,
catapult.Histogram{
Name: "test_histogram_1",
Diagnostics: map[string]string{"test_diagnostic": "test_guid"},
},
catapult.Histogram{
Name: "test_histogram_2",
Diagnostics: map[string]string{"test_diagnostic": "test_guid"},
},
}
if !reflect.DeepEqual(histogramSet.ToJSON(), expectedJSON) {
t.Errorf("Invalid HistogramSet. Got: %+v\nExpected: %+v",
pretty.Sprint(histogramSet.ToJSON()),
pretty.Sprint(expectedJSON))
}
})
}