add check that kustomization is empty

This commit is contained in:
koba1t
2022-12-28 21:16:32 +09:00
parent d3184da4c6
commit 2c2b2ab825
5 changed files with 88 additions and 10 deletions

View File

@@ -298,6 +298,27 @@ func (k *Kustomization) FixKustomizationPreMarshalling(fSys filesys.FileSystem)
return nil
}
func (k *Kustomization) CheckEmpty() error {
// generate empty Kustomization
emptyKustomization := &Kustomization{}
emptyKustomization.FixKustomization()
// compare with yaml string
b, err := yaml.Marshal(k)
if err != nil {
return fmt.Errorf("kustomization marshal error: %w", err)
}
emptyb, err := yaml.Marshal(emptyKustomization)
if err != nil {
return fmt.Errorf("empty kustomization marshal error: %w", err)
}
if string(b) == string(emptyb) {
return fmt.Errorf("kustomization.yaml is empty")
}
return nil
}
func (k *Kustomization) EnforceFields() []string {
var errs []string
if k.Kind != "" && k.Kind != KustomizationKind && k.Kind != ComponentKind {

View File

@@ -284,14 +284,54 @@ unknown: foo`)
}
}
func TestUnmarshal_InvalidYaml(t *testing.T) {
y := []byte(`
apiVersion: kustomize.config.k8s.io/v1beta1
func TestUnmarshal_Failed(t *testing.T) {
tests := []struct {
name string
kustomizationYamls []byte
errMsg string
}{
{
name: "invalid yaml",
kustomizationYamls: []byte(`apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization
unknown`)
var k Kustomization
err := k.Unmarshal(y)
if err == nil {
t.Fatalf("expect an error")
unknown`),
errMsg: "yaml: line 4: could not find expected ':'",
},
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
var k Kustomization
if err := k.Unmarshal(tt.kustomizationYamls); err == nil || err.Error() != tt.errMsg {
t.Errorf("Kustomization.Unmarshal() error = %v, wantErr %v", err, tt.errMsg)
}
})
}
}
func TestKustomization_CheckEmpty(t *testing.T) {
tests := []struct {
name string
kustomization *Kustomization
wantErr bool
}{
{
name: "empty kustomization.yaml",
kustomization: &Kustomization{},
wantErr: true,
},
{
name: "non empty kustomization.yaml",
kustomization: &Kustomization{Resources: []string{"res"}},
wantErr: false,
},
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
k := tt.kustomization
k.FixKustomization()
if err := k.CheckEmpty(); (err != nil) != tt.wantErr {
t.Errorf("Kustomization.CheckEmpty() error = %v, wantErr %v", err, tt.wantErr)
}
})
}
}