mirror of
https://github.com/lukaszraczylo/kubemirror.git
synced 2026-07-08 08:24:38 +00:00
initial commit
This commit is contained in:
@@ -0,0 +1,154 @@
|
||||
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)
|
||||
}
|
||||
Reference in New Issue
Block a user