mirror of
https://github.com/kata-containers/kata-containers.git
synced 2025-04-27 19:35:32 +00:00
This PR adds the vendor for the checkmetrics. Signed-off-by: Gabriela Cervantes <gabriela.cervantes.tellez@intel.com>
201 lines
4.2 KiB
Go
201 lines
4.2 KiB
Go
// Copyright (c) 2023 Intel Corporation
|
|
//
|
|
// SPDX-License-Identifier: Apache-2.0
|
|
|
|
package main
|
|
|
|
import (
|
|
"bytes"
|
|
"os"
|
|
"testing"
|
|
|
|
"github.com/stretchr/testify/assert"
|
|
)
|
|
|
|
const BadFileContents = `
|
|
this is not a valid json file
|
|
`
|
|
|
|
func CreateBadFile(filename string) error {
|
|
return os.WriteFile(filename, []byte(BadFileContents), os.FileMode(0640))
|
|
}
|
|
|
|
const GoodFileContents = `
|
|
{
|
|
"env" : {
|
|
"Runtime": "/usr/share/defaults/kata-containers/configuration.toml",
|
|
"RuntimeVersion": "0.1.0",
|
|
"Hypervisor": "/usr/bin/qemu-lite-system-x86_64",
|
|
"HypervisorVersion": " QEMU emulator version 2.7.0, Copyright (c) 2003-2016 Fabrice Bellard and the QEMU Project developers",
|
|
"Shim": "/usr/local/bin/containerd-shim-kata-v2",
|
|
"ShimVersion": " kata-shim version 2.4.0-rc0"
|
|
},
|
|
"date" : {
|
|
"ns": 1522162042326099526,
|
|
"Date": "2018-03-27 15:47:22 +0100"
|
|
},
|
|
"Config": [
|
|
{
|
|
"containers": 20,
|
|
"ksm": 0,
|
|
"auto": "",
|
|
"waittime": 5,
|
|
"image": "busybox",
|
|
"command": "sh"
|
|
}
|
|
],
|
|
"Results": [
|
|
{
|
|
"average": {
|
|
"Result": 10.56,
|
|
"Units" : "KB"
|
|
},
|
|
"qemus": {
|
|
"Result": 1.95,
|
|
"Units" : "KB"
|
|
},
|
|
"shims": {
|
|
"Result": 2.40,
|
|
"Units" : "KB"
|
|
},
|
|
"proxys": {
|
|
"Result": 3.21,
|
|
"Units" : "KB"
|
|
}
|
|
},
|
|
{
|
|
"average": {
|
|
"Result": 20.56,
|
|
"Units" : "KB"
|
|
},
|
|
"qemus": {
|
|
"Result": 4.95,
|
|
"Units" : "KB"
|
|
},
|
|
"shims": {
|
|
"Result": 5.40,
|
|
"Units" : "KB"
|
|
},
|
|
"proxys": {
|
|
"Result": 6.21,
|
|
"Units" : "KB"
|
|
}
|
|
},
|
|
{
|
|
"average": {
|
|
"Result": 30.56,
|
|
"Units" : "KB"
|
|
},
|
|
"qemus": {
|
|
"Result": 7.95,
|
|
"Units" : "KB"
|
|
},
|
|
"shims": {
|
|
"Result": 8.40,
|
|
"Units" : "KB"
|
|
},
|
|
"proxys": {
|
|
"Result": 9.21,
|
|
"Units" : "KB"
|
|
}
|
|
}
|
|
]
|
|
}
|
|
`
|
|
|
|
func CreateFile(filename string, contents string) error {
|
|
return os.WriteFile(filename, []byte(contents), os.FileMode(0640))
|
|
}
|
|
|
|
func TestLoad(t *testing.T) {
|
|
assert := assert.New(t)
|
|
|
|
// Set up and create a json results file
|
|
tmpdir, err := os.MkdirTemp("", "cm-")
|
|
assert.NoError(err)
|
|
defer os.RemoveAll(tmpdir)
|
|
|
|
// Check a badly formed JSON file
|
|
badFileName := tmpdir + "badFile.json"
|
|
err = CreateBadFile(badFileName)
|
|
assert.NoError(err)
|
|
|
|
// Set up our basic metrics struct
|
|
var m = metrics{
|
|
Name: "name",
|
|
Description: "desc",
|
|
Type: "type",
|
|
CheckType: "json",
|
|
CheckVar: ".Results | .[] | .average.Result",
|
|
MinVal: 1.9,
|
|
MaxVal: 2.1,
|
|
Gap: 0,
|
|
stats: statistics{
|
|
Results: []float64{1.0, 2.0, 3.0},
|
|
Iterations: 0,
|
|
Mean: 0.0,
|
|
Min: 0.0,
|
|
Max: 0.0,
|
|
Range: 0.0,
|
|
RangeSpread: 0.0,
|
|
SD: 0.0,
|
|
CoV: 0.0}}
|
|
|
|
err = (&jsonRecord{}).load(badFileName, &m)
|
|
assert.Error(err, "Did not error on bad file contents")
|
|
|
|
// Check the well formed file
|
|
goodFileName := tmpdir + "goodFile.json"
|
|
err = CreateFile(goodFileName, GoodFileContents)
|
|
assert.NoError(err)
|
|
|
|
err = (&jsonRecord{}).load(goodFileName, &m)
|
|
assert.NoError(err, "Error'd on good file contents")
|
|
|
|
t.Logf("m now %+v", m)
|
|
|
|
// And check some of the values we get from that JSON read
|
|
assert.Equal(3, m.stats.Iterations, "Should be equal")
|
|
assert.Equal(10.56, m.stats.Min, "Should be equal")
|
|
assert.Equal(30.56, m.stats.Max, "Should be equal")
|
|
|
|
// Check we default to json type
|
|
m2 := m
|
|
m2.CheckType = ""
|
|
err = (&jsonRecord{}).load(goodFileName, &m)
|
|
assert.NoError(err, "Error'd on no type file contents")
|
|
|
|
}
|
|
|
|
func TestReadInts(t *testing.T) {
|
|
assert := assert.New(t)
|
|
|
|
good := bytes.NewReader([]byte("1 2 3"))
|
|
bad := bytes.NewReader([]byte("1 2 3.0"))
|
|
|
|
_, err := readInts(bad)
|
|
assert.Error(err, "Should fail")
|
|
|
|
ints, err := readInts(good)
|
|
assert.NoError(err, "Should fail")
|
|
assert.Equal(1, ints[0], "Should be equal")
|
|
assert.Equal(2, ints[1], "Should be equal")
|
|
assert.Equal(3, ints[2], "Should be equal")
|
|
}
|
|
|
|
func TestReadFloats(t *testing.T) {
|
|
assert := assert.New(t)
|
|
|
|
good := bytes.NewReader([]byte("1.0 2.0 3.0"))
|
|
bad := bytes.NewReader([]byte("1.0 2.0 blah"))
|
|
|
|
_, err := readFloats(bad)
|
|
assert.Error(err, "Should fail")
|
|
|
|
floats, err := readFloats(good)
|
|
assert.NoError(err, "Should fail")
|
|
assert.Equal(1.0, floats[0], "Should be equal")
|
|
assert.Equal(2.0, floats[1], "Should be equal")
|
|
assert.Equal(3.0, floats[2], "Should be equal")
|
|
}
|