mirror of
https://github.com/lukaszraczylo/kubemirror.git
synced 2026-06-05 22:43:51 +00:00
155 lines
4.2 KiB
Go
155 lines
4.2 KiB
Go
package discovery
|
|
|
|
import (
|
|
"testing"
|
|
|
|
"github.com/stretchr/testify/assert"
|
|
|
|
"github.com/lukaszraczylo/kubemirror/pkg/config"
|
|
)
|
|
|
|
func TestDetectChanges(t *testing.T) {
|
|
m := &Manager{}
|
|
|
|
tests := []struct {
|
|
name string
|
|
old []config.ResourceType
|
|
new []config.ResourceType
|
|
wantAdded []config.ResourceType
|
|
wantRemoved []config.ResourceType
|
|
}{
|
|
{
|
|
name: "no changes",
|
|
old: []config.ResourceType{
|
|
{Kind: "Secret", Version: "v1", Group: ""},
|
|
{Kind: "ConfigMap", Version: "v1", Group: ""},
|
|
},
|
|
new: []config.ResourceType{
|
|
{Kind: "Secret", Version: "v1", Group: ""},
|
|
{Kind: "ConfigMap", Version: "v1", Group: ""},
|
|
},
|
|
wantAdded: nil,
|
|
wantRemoved: nil,
|
|
},
|
|
{
|
|
name: "new resource added",
|
|
old: []config.ResourceType{
|
|
{Kind: "Secret", Version: "v1", Group: ""},
|
|
},
|
|
new: []config.ResourceType{
|
|
{Kind: "Secret", Version: "v1", Group: ""},
|
|
{Kind: "Service", Version: "v1", Group: ""},
|
|
},
|
|
wantAdded: []config.ResourceType{
|
|
{Kind: "Service", Version: "v1", Group: ""},
|
|
},
|
|
wantRemoved: nil,
|
|
},
|
|
{
|
|
name: "resource removed",
|
|
old: []config.ResourceType{
|
|
{Kind: "Secret", Version: "v1", Group: ""},
|
|
{Kind: "ConfigMap", Version: "v1", Group: ""},
|
|
},
|
|
new: []config.ResourceType{
|
|
{Kind: "Secret", Version: "v1", Group: ""},
|
|
},
|
|
wantAdded: nil,
|
|
wantRemoved: []config.ResourceType{
|
|
{Kind: "ConfigMap", Version: "v1", Group: ""},
|
|
},
|
|
},
|
|
{
|
|
name: "multiple changes",
|
|
old: []config.ResourceType{
|
|
{Kind: "Secret", Version: "v1", Group: ""},
|
|
{Kind: "ConfigMap", Version: "v1", Group: ""},
|
|
},
|
|
new: []config.ResourceType{
|
|
{Kind: "Secret", Version: "v1", Group: ""},
|
|
{Kind: "Service", Version: "v1", Group: ""},
|
|
{Kind: "Ingress", Version: "v1", Group: "networking.k8s.io"},
|
|
},
|
|
wantAdded: []config.ResourceType{
|
|
{Kind: "Service", Version: "v1", Group: ""},
|
|
{Kind: "Ingress", Version: "v1", Group: "networking.k8s.io"},
|
|
},
|
|
wantRemoved: []config.ResourceType{
|
|
{Kind: "ConfigMap", Version: "v1", Group: ""},
|
|
},
|
|
},
|
|
{
|
|
name: "complete replacement",
|
|
old: []config.ResourceType{
|
|
{Kind: "Secret", Version: "v1", Group: ""},
|
|
{Kind: "ConfigMap", Version: "v1", Group: ""},
|
|
},
|
|
new: []config.ResourceType{
|
|
{Kind: "Service", Version: "v1", Group: ""},
|
|
{Kind: "Ingress", Version: "v1", Group: "networking.k8s.io"},
|
|
},
|
|
wantAdded: []config.ResourceType{
|
|
{Kind: "Service", Version: "v1", Group: ""},
|
|
{Kind: "Ingress", Version: "v1", Group: "networking.k8s.io"},
|
|
},
|
|
wantRemoved: []config.ResourceType{
|
|
{Kind: "Secret", Version: "v1", Group: ""},
|
|
{Kind: "ConfigMap", Version: "v1", Group: ""},
|
|
},
|
|
},
|
|
{
|
|
name: "from empty to populated",
|
|
old: []config.ResourceType{},
|
|
new: []config.ResourceType{
|
|
{Kind: "Secret", Version: "v1", Group: ""},
|
|
{Kind: "ConfigMap", Version: "v1", Group: ""},
|
|
},
|
|
wantAdded: []config.ResourceType{
|
|
{Kind: "Secret", Version: "v1", Group: ""},
|
|
{Kind: "ConfigMap", Version: "v1", Group: ""},
|
|
},
|
|
wantRemoved: nil,
|
|
},
|
|
{
|
|
name: "from populated to empty",
|
|
old: []config.ResourceType{
|
|
{Kind: "Secret", Version: "v1", Group: ""},
|
|
{Kind: "ConfigMap", Version: "v1", Group: ""},
|
|
},
|
|
new: []config.ResourceType{},
|
|
wantAdded: nil,
|
|
wantRemoved: []config.ResourceType{
|
|
{Kind: "Secret", Version: "v1", Group: ""},
|
|
{Kind: "ConfigMap", Version: "v1", Group: ""},
|
|
},
|
|
},
|
|
}
|
|
|
|
for _, tt := range tests {
|
|
t.Run(tt.name, func(t *testing.T) {
|
|
gotAdded, gotRemoved := m.detectChanges(tt.old, tt.new)
|
|
|
|
// Sort for consistent comparison
|
|
assert.ElementsMatch(t, tt.wantAdded, gotAdded, "added resources mismatch")
|
|
assert.ElementsMatch(t, tt.wantRemoved, gotRemoved, "removed resources mismatch")
|
|
})
|
|
}
|
|
}
|
|
|
|
func TestResourceTypesToStrings(t *testing.T) {
|
|
resources := []config.ResourceType{
|
|
{Kind: "Secret", Version: "v1", Group: ""},
|
|
{Kind: "Ingress", Version: "v1", Group: "networking.k8s.io"},
|
|
{Kind: "Middleware", Version: "v1alpha1", Group: "traefik.io"},
|
|
}
|
|
|
|
want := []string{
|
|
"Secret.v1",
|
|
"Ingress.v1.networking.k8s.io",
|
|
"Middleware.v1alpha1.traefik.io",
|
|
}
|
|
|
|
got := resourceTypesToStrings(resources)
|
|
assert.Equal(t, want, got)
|
|
}
|