|
|
|
@ -17,10 +17,15 @@ limitations under the License.
|
|
|
|
|
package build
|
|
|
|
|
|
|
|
|
|
import (
|
|
|
|
|
"fmt"
|
|
|
|
|
"strings"
|
|
|
|
|
"testing"
|
|
|
|
|
"time"
|
|
|
|
|
|
|
|
|
|
kustomizev1 "github.com/fluxcd/kustomize-controller/api/v1"
|
|
|
|
|
"github.com/fluxcd/pkg/apis/meta"
|
|
|
|
|
"github.com/google/go-cmp/cmp"
|
|
|
|
|
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
|
|
|
|
"sigs.k8s.io/kustomize/api/resource"
|
|
|
|
|
"sigs.k8s.io/kustomize/kyaml/yaml"
|
|
|
|
|
)
|
|
|
|
@ -215,3 +220,135 @@ func Test_unMarshallKustomization(t *testing.T) {
|
|
|
|
|
})
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
func Test_ResolveKustomization(t *testing.T) {
|
|
|
|
|
tests := []struct {
|
|
|
|
|
name string
|
|
|
|
|
localKsFile string
|
|
|
|
|
liveKustomization *kustomizev1.Kustomization
|
|
|
|
|
dryrun bool
|
|
|
|
|
}{
|
|
|
|
|
{
|
|
|
|
|
name: "valid kustomization",
|
|
|
|
|
localKsFile: "testdata/local-kustomization/valid.yaml",
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
name: "local and live kustomization",
|
|
|
|
|
localKsFile: "testdata/local-kustomization/valid.yaml",
|
|
|
|
|
liveKustomization: &kustomizev1.Kustomization{
|
|
|
|
|
ObjectMeta: metav1.ObjectMeta{
|
|
|
|
|
Name: "podinfo",
|
|
|
|
|
Namespace: "flux-system",
|
|
|
|
|
},
|
|
|
|
|
Spec: kustomizev1.KustomizationSpec{
|
|
|
|
|
Interval: metav1.Duration{Duration: time.Minute * 5},
|
|
|
|
|
Path: "./testdata/local-kustomization/valid.yaml",
|
|
|
|
|
},
|
|
|
|
|
Status: kustomizev1.KustomizationStatus{
|
|
|
|
|
Conditions: []metav1.Condition{
|
|
|
|
|
{
|
|
|
|
|
Type: meta.ReadyCondition,
|
|
|
|
|
Status: metav1.ConditionTrue,
|
|
|
|
|
},
|
|
|
|
|
},
|
|
|
|
|
Inventory: &kustomizev1.ResourceInventory{
|
|
|
|
|
Entries: []kustomizev1.ResourceRef{
|
|
|
|
|
{
|
|
|
|
|
ID: "flux-system_podinfo_v1_service_podinfo",
|
|
|
|
|
Version: "v1",
|
|
|
|
|
},
|
|
|
|
|
},
|
|
|
|
|
},
|
|
|
|
|
},
|
|
|
|
|
},
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
name: "local and live kustomization with dryrun",
|
|
|
|
|
localKsFile: "testdata/local-kustomization/valid.yaml",
|
|
|
|
|
liveKustomization: &kustomizev1.Kustomization{
|
|
|
|
|
ObjectMeta: metav1.ObjectMeta{
|
|
|
|
|
Name: "podinfo",
|
|
|
|
|
Namespace: "flux-system",
|
|
|
|
|
},
|
|
|
|
|
Spec: kustomizev1.KustomizationSpec{
|
|
|
|
|
Interval: metav1.Duration{Duration: time.Minute * 5},
|
|
|
|
|
Path: "./testdata/local-kustomization/valid.yaml",
|
|
|
|
|
},
|
|
|
|
|
Status: kustomizev1.KustomizationStatus{
|
|
|
|
|
Conditions: []metav1.Condition{
|
|
|
|
|
{
|
|
|
|
|
Type: meta.ReadyCondition,
|
|
|
|
|
Status: metav1.ConditionTrue,
|
|
|
|
|
},
|
|
|
|
|
},
|
|
|
|
|
Inventory: &kustomizev1.ResourceInventory{
|
|
|
|
|
Entries: []kustomizev1.ResourceRef{
|
|
|
|
|
{
|
|
|
|
|
ID: "flux-system_podinfo_v1_service_podinfo",
|
|
|
|
|
Version: "v1",
|
|
|
|
|
},
|
|
|
|
|
},
|
|
|
|
|
},
|
|
|
|
|
},
|
|
|
|
|
},
|
|
|
|
|
dryrun: true,
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
name: "live kustomization",
|
|
|
|
|
liveKustomization: &kustomizev1.Kustomization{
|
|
|
|
|
ObjectMeta: metav1.ObjectMeta{
|
|
|
|
|
Name: "podinfo",
|
|
|
|
|
Namespace: "flux-system",
|
|
|
|
|
},
|
|
|
|
|
Spec: kustomizev1.KustomizationSpec{
|
|
|
|
|
Interval: metav1.Duration{Duration: time.Minute * 5},
|
|
|
|
|
Path: "./testdata/local-kustomization/valid.yaml",
|
|
|
|
|
},
|
|
|
|
|
Status: kustomizev1.KustomizationStatus{
|
|
|
|
|
Conditions: []metav1.Condition{
|
|
|
|
|
{
|
|
|
|
|
Type: meta.ReadyCondition,
|
|
|
|
|
Status: metav1.ConditionTrue,
|
|
|
|
|
},
|
|
|
|
|
},
|
|
|
|
|
Inventory: &kustomizev1.ResourceInventory{
|
|
|
|
|
Entries: []kustomizev1.ResourceRef{
|
|
|
|
|
{
|
|
|
|
|
ID: "flux-system_podinfo_v1_service_podinfo",
|
|
|
|
|
Version: "v1",
|
|
|
|
|
},
|
|
|
|
|
},
|
|
|
|
|
},
|
|
|
|
|
},
|
|
|
|
|
},
|
|
|
|
|
},
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
b := &Builder{}
|
|
|
|
|
for _, tt := range tests {
|
|
|
|
|
t.Run(tt.name, func(t *testing.T) {
|
|
|
|
|
b.kustomizationFile = tt.localKsFile
|
|
|
|
|
b.dryRun = tt.dryrun
|
|
|
|
|
ks, err := b.resolveKustomization(tt.liveKustomization)
|
|
|
|
|
if err != nil {
|
|
|
|
|
t.Errorf("unexpected err '%s'", err)
|
|
|
|
|
}
|
|
|
|
|
if !tt.dryrun {
|
|
|
|
|
if b.kustomizationFile == "" {
|
|
|
|
|
if cmp.Diff(ks, tt.liveKustomization) != "" {
|
|
|
|
|
t.Errorf("expected kustomization to match live kustomization")
|
|
|
|
|
}
|
|
|
|
|
} else {
|
|
|
|
|
if tt.liveKustomization != nil && cmp.Diff(ks.Status, tt.liveKustomization.Status) != "" {
|
|
|
|
|
t.Errorf("expected kustomization status to match live kustomization status")
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
} else {
|
|
|
|
|
if ks.Status.Inventory != nil {
|
|
|
|
|
fmt.Println(ks.Status.Inventory)
|
|
|
|
|
t.Errorf("expected kustomization status to be nil")
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
})
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|