package info_test import ( "testing" "github.com/stretchr/testify/assert" corev1 "k8s.io/api/core/v1" "sigs.k8s.io/controller-runtime/pkg/client/fake" "edge-infra.dev/pkg/edge/info" fakeinfo "edge-infra.dev/pkg/edge/info/fake" "edge-infra.dev/pkg/k8s/unstructured" "edge-infra.dev/test/f2" ) func TestConfigMapValidation(t *testing.T) { feature := f2.NewFeature("Test Configmap"). Test("FromConfigMap", func(ctx f2.Context, t *testing.T) f2.Context { expected := fakeinfo.GetEdgeInfo() cfg := fakeinfo.GetEdgeInfoConfigMap() edgeInfo := info.FromConfigMap(cfg) assert.Equal(t, expected, edgeInfo) return ctx }). Test("ToConfigMap", func(ctx f2.Context, t *testing.T) f2.Context { expected := fakeinfo.GetEdgeInfoConfigMap() edgeInfo := fakeinfo.GetEdgeInfo() cfg := edgeInfo.ToConfigMap() assert.Equal(t, expected.Data, cfg.Data) return ctx }). Test("NewValidConfigMap", func(ctx f2.Context, t *testing.T) f2.Context { cfg := fakeinfo.GetEdgeInfoConfigMap() expected := fakeinfo.GetEdgeInfo() edgeInfo, err := info.New(cfg) assert.NoError(t, err) assert.Equal(t, expected, edgeInfo) return ctx }). Test("NewInvalidConfigMap", func(ctx f2.Context, t *testing.T) f2.Context { cfg := fakeinfo.GetEdgeInfoConfigMap() delete(cfg.Data, info.ProjectID) edgeInfo, err := info.New(cfg) assert.Error(t, err) assert.Nil(t, edgeInfo) return ctx }). Test("IsEdgeInfoConfigMap", func(ctx f2.Context, t *testing.T) f2.Context { expected := fakeinfo.GetEdgeInfoConfigMap() isEdgeInfoConfigMap := info.IsEdgeInfoConfigMap(expected.ObjectMeta.Name, expected.ObjectMeta.Namespace) assert.True(t, isEdgeInfoConfigMap) return ctx }). Test("FieldsRequired", func(ctx f2.Context, t *testing.T) f2.Context { cfg := &corev1.ConfigMap{} err := info.ValidateConfigMap(cfg) assert.Error(t, err) allFields := "edge-info configmap invalid, value(s) not provided: " + "edge.banner,edge.project.id,cluster.name," + "cluster.edge.id,cluster.type,cluster.location" assert.Equal(t, allFields, err.Error()) return ctx }). Test("TopLevelValidation", func(ctx f2.Context, t *testing.T) f2.Context { cfg := fakeinfo.GetEdgeInfoTopLevelConfigMap() err := info.ValidateConfigMap(cfg) assert.NoError(t, err) return ctx }). Test("FromClient", func(ctx f2.Context, t *testing.T) f2.Context { cl := fake.NewClientBuilder().Build() expected := fakeinfo.GetEdgeInfo() // not yet created edgeInfo, err := info.FromClient(ctx, cl) assert.Error(t, err) assert.Nil(t, edgeInfo) // valid cfg created cfg := fakeinfo.GetEdgeInfoConfigMap() assert.NoError(t, cl.Create(ctx, cfg)) edgeInfo, err = info.FromClient(ctx, cl) assert.NoError(t, err) assert.Equal(t, expected, edgeInfo) // invalid cfg // delete existing cm first so we can create an invalid one next to test delCfg := unstructured.New(corev1.SchemeGroupVersion, "ConfigMap", info.EdgeConfigMapNS, info.EdgeConfigMapName) err = cl.Delete(ctx, delCfg) assert.NoError(t, err) invalidCfg := fakeinfo.GetEdgeInfoConfigMap() delete(invalidCfg.Data, info.ProjectID) assert.NoError(t, cl.Create(ctx, invalidCfg)) edgeInfo, err = info.FromClient(ctx, cl) assert.Error(t, err) assert.Nil(t, edgeInfo) return ctx }). Test("BuildComfigmap", func(ctx f2.Context, t *testing.T) f2.Context { expected := fakeinfo.GetEdgeInfo() cfg := info.BuildConfigMap(expected.ProjectID, expected.Store, expected.ClusterType, expected.Location, expected.BannerName, expected.Fleet, expected.ForemanProjectID, expected.BannerEdgeID, expected.ClusterEdgeID, expected.EdgeAPIEndpoint) assert.NotNil(t, cfg) assert.NoError(t, info.ValidateConfigMap(cfg)) assert.Equal(t, expected, info.FromConfigMap(cfg)) return ctx }).Feature() f.Test(t, feature) }