github.com/argoproj/argo-cd/v3@v3.2.1/util/lua/health_test.go (about) 1 package lua 2 3 import ( 4 "os" 5 "path/filepath" 6 "strings" 7 "testing" 8 9 "github.com/argoproj/gitops-engine/pkg/health" 10 "github.com/stretchr/testify/assert" 11 "github.com/stretchr/testify/require" 12 "k8s.io/apimachinery/pkg/apis/meta/v1/unstructured" 13 "sigs.k8s.io/yaml" 14 ) 15 16 type TestStructure struct { 17 Tests []IndividualTest `yaml:"tests"` 18 } 19 20 type IndividualTest struct { 21 InputPath string `yaml:"inputPath"` 22 HealthStatus health.HealthStatus `yaml:"healthStatus"` 23 } 24 25 func getObj(t *testing.T, path string) *unstructured.Unstructured { 26 t.Helper() 27 yamlBytes, err := os.ReadFile(path) 28 require.NoError(t, err) 29 obj := make(map[string]any) 30 err = yaml.Unmarshal(yamlBytes, &obj) 31 require.NoError(t, err) 32 33 return &unstructured.Unstructured{Object: obj} 34 } 35 36 func TestLuaHealthScript(t *testing.T) { 37 err := filepath.Walk("../../resource_customizations", func(path string, _ os.FileInfo, err error) error { 38 if !strings.Contains(path, "health.lua") { 39 return nil 40 } 41 require.NoError(t, err) 42 dir := filepath.Dir(path) 43 yamlBytes, err := os.ReadFile(dir + "/health_test.yaml") 44 require.NoError(t, err) 45 var resourceTest TestStructure 46 err = yaml.Unmarshal(yamlBytes, &resourceTest) 47 require.NoError(t, err) 48 for i := range resourceTest.Tests { 49 test := resourceTest.Tests[i] 50 t.Run(filepath.Join(strings.TrimPrefix(dir, "../../resource_customizations/"), test.InputPath), func(t *testing.T) { 51 vm := VM{ 52 UseOpenLibs: true, 53 } 54 obj := getObj(t, filepath.Join(dir, test.InputPath)) 55 script, _, err := vm.GetHealthScript(obj) 56 require.NoError(t, err) 57 result, err := vm.ExecuteHealthLua(obj, script) 58 require.NoError(t, err) 59 assert.Equal(t, &test.HealthStatus, result) 60 }) 61 } 62 return nil 63 }) 64 assert.NoError(t, err) 65 }