mirror of
https://github.com/kata-containers/kata-containers.git
synced 2025-04-27 19:35:32 +00:00
This PR adds the checkmetrics scripts that will be used for the kata metrics CI. Fixes #7160 Signed-off-by: Gabriela Cervantes <gabriela.cervantes.tellez@intel.com>
90 lines
2.5 KiB
Go
90 lines
2.5 KiB
Go
// Copyright (c) 2023 Intel Corporation
|
|
//
|
|
// SPDX-License-Identifier: Apache-2.0
|
|
|
|
package main
|
|
|
|
import (
|
|
"os"
|
|
"testing"
|
|
|
|
"github.com/stretchr/testify/assert"
|
|
)
|
|
|
|
const badFileContents = `
|
|
this is not a valid toml file
|
|
`
|
|
|
|
func createBadFile(filename string) error {
|
|
return os.WriteFile(filename, []byte(badFileContents), os.FileMode(0640))
|
|
}
|
|
|
|
const goodFileContents = `
|
|
# This file contains baseline expectations
|
|
# for checked results by checkmetrics tool.
|
|
[[metric]]
|
|
# The name of the metrics test, must match
|
|
# that of the generated CSV file
|
|
name = "boot-times"
|
|
type = "json"
|
|
description = "measure container lifecycle timings"
|
|
# Min and Max values to set a 'range' that
|
|
# the median of the CSV Results data must fall
|
|
# within (inclusive)
|
|
checkvar = ".Results | .[] | .\"to-workload\".Result"
|
|
checktype = "mean"
|
|
minval = 1.3
|
|
maxval = 1.5
|
|
|
|
# ... repeat this for each metric ...
|
|
`
|
|
|
|
func createGoodFile(filename string) error {
|
|
return os.WriteFile(filename, []byte(goodFileContents), os.FileMode(0640))
|
|
}
|
|
|
|
func TestNewBasefile(t *testing.T) {
|
|
|
|
assert := assert.New(t)
|
|
|
|
tmpdir, err := os.MkdirTemp("", "cm-")
|
|
assert.NoError(err)
|
|
defer os.RemoveAll(tmpdir)
|
|
|
|
// Should fail to load a nil filename
|
|
_, err = newBasefile("")
|
|
assert.NotNil(err, "Did not error on empty filename")
|
|
|
|
// Should fail to load a file that does not exist
|
|
_, err = newBasefile("/some/file/that/does/not/exist")
|
|
assert.NotNil(err, "Did not error on non-existent file")
|
|
|
|
// Check a badly formed toml file
|
|
badFileName := tmpdir + "badFile.toml"
|
|
err = createBadFile(badFileName)
|
|
assert.NoError(err)
|
|
_, err = newBasefile(badFileName)
|
|
assert.NotNil(err, "Did not error on bad file contents")
|
|
|
|
// Check a well formed toml file
|
|
goodFileName := tmpdir + "goodFile.toml"
|
|
err = createGoodFile(goodFileName)
|
|
assert.NoError(err)
|
|
bf, err := newBasefile(goodFileName)
|
|
assert.Nil(err, "Error'd on good file contents")
|
|
|
|
// Now check we did load what we expected from the toml
|
|
t.Logf("Entry.Name: %v", bf.Metric[0].Name)
|
|
m := bf.Metric[0]
|
|
|
|
assert.Equal("boot-times", m.Name, "data loaded should match")
|
|
assert.Equal("measure container lifecycle timings", m.Description, "data loaded should match")
|
|
assert.Equal("json", m.Type, "data loaded should match")
|
|
assert.Equal("mean", m.CheckType, "data loaded should match")
|
|
assert.Equal(".Results | .[] | .\"to-workload\".Result", m.CheckVar, "data loaded should match")
|
|
assert.Equal(1.3, m.MinVal, "data loaded should match")
|
|
assert.Equal(1.5, m.MaxVal, "data loaded should match")
|
|
// Gap has not been calculated yet...
|
|
assert.Equal(0.0, m.Gap, "data loaded should match")
|
|
}
|