mirror of
				https://github.com/kata-containers/kata-containers.git
				synced 2025-10-30 17:03:57 +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")
 | |
| }
 |