...

Source file src/edge-infra.dev/pkg/edge/controllers/syncedobject/validate_test.go

Documentation: edge-infra.dev/pkg/edge/controllers/syncedobject

     1  package syncedobject
     2  
     3  import (
     4  	"encoding/base64"
     5  	"testing"
     6  
     7  	"github.com/google/uuid"
     8  	"github.com/stretchr/testify/require"
     9  
    10  	soapi "edge-infra.dev/pkg/edge/apis/syncedobject/apis/v1alpha1"
    11  )
    12  
    13  func TestValidateSyncedObject(t *testing.T) {
    14  	var goodDir = "foo"
    15  	var goodObject = "YXBpVmVyc2lvbjogY2x1c3RlcnJlZ2lzdHJ5Lms4cy5pby92MWFscGhhMQpraW5kOiBOYW1lc3BhY2UKbWV0YWRhdGE6CiAgbmFtZTogZjIwMTJkMDcxZTI4ZjM1MjRiYTM1NzkwMDlkZjUyNWYKICBnZW5lcmF0ZW5hbWU6ICIiCiAgbmFtZXNwYWNlOiAiIgogIHNlbGZsaW5rOiAiIgogIHVpZDogIiIKICByZXNvdXJjZXZlcnNpb246ICIiCiAgZ2VuZXJhdGlvbjogMAogIGNyZWF0aW9udGltZXN0YW1wOiAiMDAwMS0wMS0wMVQwMDowMDowMFoiCiAgZGVsZXRpb250aW1lc3RhbXA6IG51bGwKICBkZWxldGlvbmdyYWNlcGVyaW9kc2Vjb25kczogbnVsbAogIGxhYmVsczoge30KICBhbm5vdGF0aW9uczoge30KICBvd25lcnJlZmVyZW5jZXM6IFtdCiAgZmluYWxpemVyczogW10KICBtYW5hZ2VkZmllbGRzOiBbXQpzcGVjOgogIGZvbzogYWFmN2YxZDQ3ODQyMTEyMjA2MjZhZTBlM2NiZjVhYzEKICBiYXI6IDMwYTQ2ZTkyZGMxMTliODA2NDJmNmI4NTU1NjQ1NzAxCiAgYmF6OiA4N2RlMTFiZWY5OTcyYjk4M2IyMWYxYWJkNDFmMzVhZTFhMmQ5MWYxMzAyOTNhYjcxOTc1NmU1ZTZhNzEyZDM0Cg=="
    16  
    17  	var good = soapi.SyncedObject{
    18  		Spec: soapi.SyncedObjectSpec{
    19  			Banner:    "ret-edge-test0",
    20  			Cluster:   uuid.New().String(),
    21  			Directory: &goodDir,
    22  			Object:    goodObject,
    23  		},
    24  	}
    25  	require.NoError(t, ValidateSyncedObject(&good))
    26  
    27  	// Empty
    28  	var so soapi.SyncedObject
    29  	require.Error(t, ValidateSyncedObject(&so))
    30  
    31  	// Banner
    32  	so = good
    33  	so.Spec.Banner = ""
    34  	require.Error(t, ValidateSyncedObject(&so))
    35  	so.Spec.Banner = "hello world"
    36  	require.Error(t, ValidateSyncedObject(&so))
    37  	so.Spec.Banner = "four"
    38  	require.Error(t, ValidateSyncedObject(&so))
    39  	so.Spec.Banner = "ret-edge-too-long-of-a-banner-name-is-not-allowed-1234567890"
    40  	require.Error(t, ValidateSyncedObject(&so))
    41  
    42  	// Cluster
    43  	so = good
    44  	so.Spec.Cluster = "" // empty string is valid
    45  	require.NoError(t, ValidateSyncedObject(&so))
    46  	so.Spec.Cluster = "foreman0" // valid gke name
    47  	require.NoError(t, ValidateSyncedObject(&so))
    48  	so.Spec.Cluster = "0 not valid cluster"
    49  	require.Error(t, ValidateSyncedObject(&so))
    50  	so.Spec.Cluster = uuid.Nil.String() // sanity check for empty UUIDs
    51  	require.Error(t, ValidateSyncedObject(&so))
    52  
    53  	// Dir
    54  	so = good
    55  	so.Spec.Directory = nil
    56  	require.NoError(t, ValidateSyncedObject(&so)) // nil is allowed
    57  
    58  	// Object
    59  	so = good
    60  	so.Spec.Object = ""
    61  	require.Error(t, ValidateSyncedObject(&so))
    62  	so.Spec.Object = "apiVersion: v1\nkind: Foo\nmetadata:\n  name: foo\n" // not base64
    63  	require.Error(t, ValidateSyncedObject(&so))
    64  	so.Spec.Object = base64.StdEncoding.EncodeToString([]byte("kind: Foo"))
    65  	require.Error(t, ValidateSyncedObject(&so))
    66  }
    67  

View as plain text