This module provides a mechanism for capturing and comparing expected metric results.
A scraper test typically looks something like this:
func TestScraper(t *testing.T) {
cfg := createDefaultConfig().(*Config)
require.NoError(t, cfg.Validate())
scraper := newScraper(componenttest.NewNopReceiverCreateSettings(), cfg)
err := scraper.start(context.Background(), componenttest.NewNopHost())
require.NoError(t, err)
actualMetrics, err := scraper.scrape(context.Background())
require.NoError(t, err)
expectedFile := filepath.Join("testdata", "scraper", "expected.json")
expectedMetrics, err := golden.ReadMetrics(expectedFile)
require.NoError(t, err)
require.NoError(t, scrapertest.CompareMetrics(expectedMetrics, actualMetrics))
}
The easiest way to capture the expected result in a file is golden.WriteMetrics
.
When writing a new test:
- Write the test as if the expected file exists.
- Follow the steps below for updating an existing test.
When updating an existing test:
- Add a call to
golden.WriteMetrics
in the appropriate place. - Run the test once.
- Remove the call to
golden.WriteMetrics
.
func TestScraper(t *testing.T) {
cfg := createDefaultConfig().(*Config)
require.NoError(t, cfg.Validate())
scraper := newScraper(componenttest.NewNopReceiverCreateSettings(), cfg)
err := scraper.start(context.Background(), componenttest.NewNopHost())
require.NoError(t, err)
actualMetrics, err := scraper.scrape(context.Background())
require.NoError(t, err)
expectedFile := filepath.Join("testdata", "scraper", "expected.json")
golden.WriteMetrics(expectedFile, actualMetrics) // This line is temporary! TODO remove this!!
expectedMetrics, err := golden.ReadMetrics(expectedFile)
require.NoError(t, err)
require.NoError(t, scrapertest.CompareMetrics(expectedMetrics, actualMetrics))
}