package syncedobject import ( "encoding/base64" "testing" "github.com/google/uuid" "github.com/stretchr/testify/require" soapi "edge-infra.dev/pkg/edge/apis/syncedobject/apis/v1alpha1" ) func TestValidateSyncedObject(t *testing.T) { var goodDir = "foo" var goodObject = "YXBpVmVyc2lvbjogY2x1c3RlcnJlZ2lzdHJ5Lms4cy5pby92MWFscGhhMQpraW5kOiBOYW1lc3BhY2UKbWV0YWRhdGE6CiAgbmFtZTogZjIwMTJkMDcxZTI4ZjM1MjRiYTM1NzkwMDlkZjUyNWYKICBnZW5lcmF0ZW5hbWU6ICIiCiAgbmFtZXNwYWNlOiAiIgogIHNlbGZsaW5rOiAiIgogIHVpZDogIiIKICByZXNvdXJjZXZlcnNpb246ICIiCiAgZ2VuZXJhdGlvbjogMAogIGNyZWF0aW9udGltZXN0YW1wOiAiMDAwMS0wMS0wMVQwMDowMDowMFoiCiAgZGVsZXRpb250aW1lc3RhbXA6IG51bGwKICBkZWxldGlvbmdyYWNlcGVyaW9kc2Vjb25kczogbnVsbAogIGxhYmVsczoge30KICBhbm5vdGF0aW9uczoge30KICBvd25lcnJlZmVyZW5jZXM6IFtdCiAgZmluYWxpemVyczogW10KICBtYW5hZ2VkZmllbGRzOiBbXQpzcGVjOgogIGZvbzogYWFmN2YxZDQ3ODQyMTEyMjA2MjZhZTBlM2NiZjVhYzEKICBiYXI6IDMwYTQ2ZTkyZGMxMTliODA2NDJmNmI4NTU1NjQ1NzAxCiAgYmF6OiA4N2RlMTFiZWY5OTcyYjk4M2IyMWYxYWJkNDFmMzVhZTFhMmQ5MWYxMzAyOTNhYjcxOTc1NmU1ZTZhNzEyZDM0Cg==" var good = soapi.SyncedObject{ Spec: soapi.SyncedObjectSpec{ Banner: "ret-edge-test0", Cluster: uuid.New().String(), Directory: &goodDir, Object: goodObject, }, } require.NoError(t, ValidateSyncedObject(&good)) // Empty var so soapi.SyncedObject require.Error(t, ValidateSyncedObject(&so)) // Banner so = good so.Spec.Banner = "" require.Error(t, ValidateSyncedObject(&so)) so.Spec.Banner = "hello world" require.Error(t, ValidateSyncedObject(&so)) so.Spec.Banner = "four" require.Error(t, ValidateSyncedObject(&so)) so.Spec.Banner = "ret-edge-too-long-of-a-banner-name-is-not-allowed-1234567890" require.Error(t, ValidateSyncedObject(&so)) // Cluster so = good so.Spec.Cluster = "" // empty string is valid require.NoError(t, ValidateSyncedObject(&so)) so.Spec.Cluster = "foreman0" // valid gke name require.NoError(t, ValidateSyncedObject(&so)) so.Spec.Cluster = "0 not valid cluster" require.Error(t, ValidateSyncedObject(&so)) so.Spec.Cluster = uuid.Nil.String() // sanity check for empty UUIDs require.Error(t, ValidateSyncedObject(&so)) // Dir so = good so.Spec.Directory = nil require.NoError(t, ValidateSyncedObject(&so)) // nil is allowed // Object so = good so.Spec.Object = "" require.Error(t, ValidateSyncedObject(&so)) so.Spec.Object = "apiVersion: v1\nkind: Foo\nmetadata:\n name: foo\n" // not base64 require.Error(t, ValidateSyncedObject(&so)) so.Spec.Object = base64.StdEncoding.EncodeToString([]byte("kind: Foo")) require.Error(t, ValidateSyncedObject(&so)) }