Files
kubemirror/pkg/discovery/manager_test.go
T
2025-12-25 22:10:57 +00:00

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)
}