diff --git a/service/importer/assets/schema.go b/service/importer/assets/schema.go index 91705c0a3..234dfb958 100644 --- a/service/importer/assets/schema.go +++ b/service/importer/assets/schema.go @@ -1,6 +1,8 @@ -// Code generated by go-bindata. DO NOT EDIT. +// Code generated by go-bindata. // sources: // service/importer/assets/schema.json +// DO NOT EDIT! + package assets import ( @@ -66,7 +68,7 @@ func (fi bindataFileInfo) Sys() interface{} { return nil } -var _serviceImporterAssetsSchemaJson = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xec\x57\xc1\x6e\xdb\x30\x0c\xbd\xfb\x2b\x04\xb5\xb7\x35\xcb\x76\xd9\x21\xb7\xed\x36\x60\x58\x0b\xf4\xb6\xc2\x1b\x14\x9b\x4e\xd4\xd9\x92\x4a\x49\x01\xb2\x22\xff\x3e\xd8\xae\x1d\x39\x92\x1c\xa7\xed\x80\x61\x59\x4e\x0a\x29\x52\xe4\x23\xf5\x44\x3f\x26\x84\xd0\x4b\x9d\xad\xa1\x62\x74\x41\xe8\xda\x18\xb5\x98\xcf\xef\xb5\x14\xb3\x56\xfa\x56\xe2\x6a\x9e\x23\x2b\xcc\xec\xdd\x87\x79\x2b\xbb\xa0\x57\xb5\x9d\xd9\x2a\xa8\x8d\xe4\xf2\x1e\x32\xd3\xca\x10\x1e\x2c\x47\xc8\xe9\x82\xdc\x25\x84\x10\x42\x05\xab\x80\x26\x84\xa4\x8d\x9e\xe5\x39\x37\x5c\x0a\x56\xde\xa0\x54\x80\x86\x83\xa6\x0b\x52\xb0\x52\x43\xb3\x41\xb9\xe2\xc7\xd6\xc5\x06\x50\x73\x29\x7a\x81\x73\xb6\x36\xc8\xc5\x8a\x36\xe2\xdd\x95\x73\x62\x7c\xef\x55\x27\xaf\xb8\xf8\x02\x62\x65\xd6\x74\x41\xde\x0f\x3c\xe4\xa0\x33\xe4\xca\x9c\x70\xe8\x86\x6b\xbe\xe4\x25\x37\xdb\xda\xa2\x93\x2a\xbb\x2c\xb9\x5e\xbb\x22\x04\x25\x35\x37\x12\xb7\x53\x5d\xc3\x06\x84\xd1\xee\x6e\x29\xe0\xba\xe8\x21\xae\x7f\x8f\x7b\x17\xc2\x96\x25\xed\x8c\x1b\x5d\xbf\x0a\x17\xad\xd7\x1d\x2b\x4e\xbf\x51\x31\x63\x00\xc5\x8d\x5f\xab\x7e\xcb\xf7\x3b\x36\xfb\xf5\x71\xf6\xed\xc7\x2c\x7d\x73\xe9\xa9\xeb\xae\x43\xa8\x53\xa0\x17\xf3\x1c\x0a\x2e\x9a\x83\xf5\xbc\xc9\x95\x0e\xf6\xee\x92\xd0\xba\x5b\xa5\x03\xa8\x0c\xd3\x3f\xcf\x04\xa9\x3a\xd5\xe7\x03\x95\x83\x02\x91\x83\xc8\x86\x21\xc5\x92\x9e\x94\xf0\x91\x64\x47\x13\x8d\x24\xd9\x87\xb9\x1d\xe2\xef\xd1\x4c\xaf\xe1\x15\x5b\x81\x8b\x4b\xea\x21\xb1\x1b\x20\x91\x49\x51\xf0\x95\x45\x76\x78\xdb\x8f\x46\x94\x74\xce\x1a\x57\xd4\xd9\xb5\xa7\x2e\xc5\x90\x55\x60\x00\xff\xb9\xae\x1c\x09\xe4\xa4\x60\xc6\xeb\xb9\x3f\xea\x40\x9c\x7a\x3e\x02\x2f\xc7\x40\x7f\xf0\x2c\x04\x93\x71\xe9\xd7\xfd\xed\x0e\x4f\x8b\x3e\x12\x2f\x76\x2b\x55\x8b\xda\x31\x9f\x4b\x29\x4b\x60\x62\x9a\xd3\x27\xa3\x29\x41\xfa\xd6\xf5\x13\x24\x6c\x15\xac\x4d\xa3\xbd\x8d\x5b\x12\x42\xbf\xda\x6a\x09\x18\xd3\x7e\x7a\x4a\x23\xa2\xbe\x6e\xbb\x2b\xa0\xf4\x1a\x80\xb4\x45\x29\x98\x2d\x4d\x9d\xcf\x6d\x0c\xf4\x64\xec\xff\xa9\xaf\xcd\xab\x91\x67\xf0\x0a\x50\x69\x8d\xb2\x46\x77\x59\xa4\x7b\xae\x8d\x90\x6c\xa0\xcb\xa3\x6d\xe8\x74\xca\x48\x37\x4f\x32\xdf\x00\xf2\x82\xb3\x65\x09\xce\xac\xd3\x06\xca\xb6\x21\x71\x01\x6d\xe4\xae\x8c\x8b\x26\xd7\x49\x2f\x83\x43\xac\xc1\x80\x34\x64\x08\xaf\xe5\xac\xab\x42\x04\x98\x73\xe2\xe2\x9c\x19\x76\x36\x5c\xdc\x24\x1b\xf1\x37\xbd\x93\xfa\x13\x5e\x40\x3c\xc3\x99\xa5\x9d\x92\xff\x2c\xf3\xb8\x85\xfe\x6b\x69\x27\xc4\x22\x81\xa2\x9d\x72\xed\x83\x80\x3b\x53\xdf\xab\x0d\xcb\x11\x24\xdb\x01\x76\x1c\x8b\x01\x81\xf8\x9f\xb1\x87\x28\x65\xb2\xaa\x98\xc8\x9f\xc5\xeb\xb2\xb4\x95\x77\x8b\x03\x03\x2c\x39\x32\xc4\x92\x83\x41\x76\x10\x01\x43\x64\x5b\x9f\xb6\xac\xe0\x0f\x16\x3e\x1b\xa8\xea\x00\x0c\x5a\x9f\xac\xf8\x93\x32\xc0\x31\xe3\x17\x3e\x7e\xf9\xd2\x31\x20\x0a\x94\xd5\x7f\x30\x94\x44\xff\x35\x3c\x13\x18\x86\xfc\x50\x7f\xfd\x25\xbb\xdf\x01\x00\x00\xff\xff\x76\x66\xfa\xcb\x47\x13\x00\x00") +var _serviceImporterAssetsSchemaJson = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xec\x57\x5f\x6f\xd3\x30\x10\x7f\xcf\xa7\xb0\xbc\xbd\xb1\xd2\xf1\x82\x44\xdf\xe0\x0d\x09\xb1\x49\x7b\x63\x0a\xc8\x4d\x2e\xad\x47\x62\x7b\x67\xbb\x52\x99\xfa\xdd\x51\x92\x25\x75\x1a\x3b\x49\xb7\x22\x21\xca\x9e\xb2\xfb\xe7\xbb\xdf\x9d\x7f\xbe\x3e\x45\x84\xd0\x4b\x9d\xac\xa1\x60\x74\x41\xe8\xda\x18\xb5\x98\xcf\x1f\xb4\x14\xb3\x5a\xfa\x56\xe2\x6a\x9e\x22\xcb\xcc\xec\xfa\xfd\xbc\x96\x5d\xd0\xab\xd2\xcf\x6c\x15\x94\x4e\x72\xf9\x00\x89\xa9\x65\x08\x8f\x96\x23\xa4\x74\x41\xee\x23\x42\x08\xa1\x82\x15\x40\x23\x42\xe2\x4a\xcf\xd2\x94\x1b\x2e\x05\xcb\x6f\x51\x2a\x40\xc3\x41\xd3\x05\xc9\x58\xae\xa1\x32\x50\xae\xf8\xa9\x0e\xb1\x01\xd4\x5c\x8a\x56\xe0\x9c\xad\x0d\x72\xb1\xa2\x95\x78\x77\xe5\x9c\x18\xb6\xbd\x6a\xe4\x05\x17\x5f\x40\xac\xcc\x9a\x2e\xc8\xbb\x4e\x84\x14\x74\x82\x5c\x99\x23\x0e\xdd\x70\xcd\x97\x3c\xe7\x66\x5b\x7a\x34\x52\x65\x97\x39\xd7\x6b\x57\x84\xa0\xa4\xe6\x46\xe2\x76\x6a\x68\xd8\x80\x30\xda\xb5\x96\x02\x6e\xb2\x16\xe2\xf2\xef\x69\x1f\x42\xd8\x3c\xa7\x8d\x73\xa5\x6b\xbf\xfc\x4d\x6b\x75\x63\xcd\x69\x0d\x15\x33\x06\x50\xdc\xf6\x7b\xd5\x9a\x7c\xbf\xbf\x9e\x7d\x60\xb3\x5f\x1f\x67\xdf\x7e\xcc\xe2\x37\x97\x3d\x8b\x72\xf0\x10\xca\x2a\xe8\xc5\x3c\x85\x8c\x8b\xea\x6c\x3d\xaf\xca\xa5\x1d\xdb\x5d\xe4\xfb\x6e\xbe\xe2\x0e\x5a\x86\xe9\x9f\xe7\x03\x56\x59\xed\xcb\xb1\x4a\x41\x81\x48\x41\x24\xdd\xac\x42\x75\x4f\xaa\x79\xa4\xde\xb1\x5a\x03\x75\xb6\x99\x6e\xbb\x5d\xe8\xf1\x4d\xab\xe1\x05\x5b\x81\x0b\x4d\xdc\x03\x63\xd7\x01\x23\x91\x22\xe3\x2b\x8b\xec\xf0\xda\x8f\x66\x14\x35\xc1\xaa\x50\xd4\xb1\xda\x73\x98\x62\xc8\x0a\x30\x80\xff\xe2\x6c\x0e\xe4\x72\x54\x3e\xc3\x2d\xdd\x1f\x75\x20\x8e\x7b\x31\x3c\xaf\x48\x47\x7f\xf0\x44\x78\x8b\x71\xa9\xd8\xfd\xdb\x1d\x9e\x16\x7c\x30\x5e\x1d\x56\xaa\x1a\xb5\xb1\x98\x4b\x29\x73\x60\x62\x5a\xd0\x67\xa7\x29\x49\xf6\xbd\xcb\xe7\x48\xd8\xc2\xdb\x9b\x4a\x7b\x17\xf6\x24\x84\x7e\xb5\xc5\x12\x30\xa4\xfd\xf4\x5c\x46\x40\x7d\x53\x4f\x97\x47\xd9\x1b\x00\x52\x37\x25\x63\x36\x37\x65\x3d\x77\x21\xd0\xa3\xa1\xff\x8f\x7d\x76\x4e\x46\xa1\xde\x2b\x40\xa5\x35\xca\x1a\xdd\x54\x11\xef\x19\x37\x40\xb5\x9e\x29\x0f\x8e\xa1\x33\x29\x03\xd3\x3c\xc9\x7d\x03\xc8\x33\xce\x96\x39\x38\x7b\x4f\x9d\x28\xdb\xfa\xc4\x19\xd4\x99\xbb\x32\x2e\xaa\x5a\x27\x3d\x0e\x0e\xb7\x7a\x13\xd2\x90\x20\x9c\x2a\x58\xd3\x85\x00\x30\x67\x46\xc7\x29\x33\xec\x6c\xe8\xb8\x2a\x36\x10\x6f\xfa\x30\xb5\x27\xbc\x82\x7b\xba\x9b\x4b\xbd\x31\xff\x59\xf2\x71\x1b\xfd\xd7\x32\x8f\x8f\x48\x3c\x4d\x3b\xe6\xe6\x7b\x01\x77\x76\xbf\x93\x6d\xcd\x01\x24\xeb\x35\x76\x18\x8b\x0e\x87\xf4\x7f\xd5\x1e\xa2\x94\xc8\xa2\x60\x22\x7d\x11\xb5\xcb\xdc\x16\xbd\x5b\xec\x59\x63\xc9\xc8\x2a\x4b\x0e\xd6\xd9\x4e\x06\x0c\x91\x6d\xfb\xb4\x65\x05\x7f\xb4\xf0\xd9\x40\x51\x26\x60\xd0\xf6\xc9\x8a\x3f\x2b\x3d\x1c\x33\x7c\xe1\xc3\x97\x2f\x1e\x02\x22\x43\x59\xfc\x07\x43\x49\xec\x3f\x88\x67\x02\x43\x97\x1f\xca\xdf\x80\xd1\xee\x77\x00\x00\x00\xff\xff\xbd\x1c\xc5\x50\x56\x13\x00\x00") func serviceImporterAssetsSchemaJsonBytes() ([]byte, error) { return bindataRead( @@ -81,7 +83,7 @@ func serviceImporterAssetsSchemaJson() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "service/importer/assets/schema.json", size: 4935, mode: os.FileMode(420), modTime: time.Unix(1532691420, 0)} + info := bindataFileInfo{name: "service/importer/assets/schema.json", size: 4950, mode: os.FileMode(420), modTime: time.Unix(1537766523, 0)} a := &asset{bytes: bytes, info: info} return a, nil } diff --git a/service/importer/assets/schema.json b/service/importer/assets/schema.json index 1318e34c6..d3deb26d2 100644 --- a/service/importer/assets/schema.json +++ b/service/importer/assets/schema.json @@ -28,7 +28,7 @@ "type": "object", "additionalProperties": false, "patternProperties": { - "^[a-zA-Z_-]+$": { + "^[0-9a-zA-Z_-]+$": { "$ref": "#/definitions/event" } } @@ -42,7 +42,7 @@ "type": "object", "additionalProperties": false, "patternProperties": { - "^[a-zA-Z_-]+$": { + "^[0-9a-zA-Z_-]+$": { "$ref": "#/definitions/task" } } @@ -53,7 +53,7 @@ "type": "object", "additionalProperties": false, "patternProperties": { - "^[a-zA-Z_-]+$": { + "^[0-9a-zA-Z_-]+$": { "$ref": "#/definitions/dependency", "required": [ "image" @@ -73,7 +73,7 @@ "type": "object", "additionalProperties": false, "patternProperties": { - "^[a-zA-Z_-]+$": { + "^[0-9a-zA-Z_-]+$": { "type": "object", "additionalProperties": false, "required": [ @@ -131,7 +131,7 @@ "type": "object", "additionalProperties": false, "patternProperties": { - "^[a-zA-Z_-]+$": { + "^[0-9a-zA-Z_-]+$": { "type": "object", "additionalProperties": false, "required": [ diff --git a/service/importer/tests/service-names-valid/Dockerfile b/service/importer/tests/service-names-valid/Dockerfile new file mode 100644 index 000000000..fe25ffb8f --- /dev/null +++ b/service/importer/tests/service-names-valid/Dockerfile @@ -0,0 +1 @@ +FROM node \ No newline at end of file diff --git a/service/importer/tests/service-names-valid/mesg.yml b/service/importer/tests/service-names-valid/mesg.yml new file mode 100644 index 000000000..2c65b43d6 --- /dev/null +++ b/service/importer/tests/service-names-valid/mesg.yml @@ -0,0 +1,28 @@ +name: "minimal-valid" + +events: + Name1-_: + name: "name" + data: + Name1-_: + name: "name" + type: String + +tasks: + Name1-_: + inputs: + Name1-_: + name: "name" + type: String + + outputs: + Name1-_: + name: "name" + data: + Name1-_: + name: "name" + type: String + +dependencies: + Name1-_: + image: nginx \ No newline at end of file diff --git a/service/importer/validation_test.go b/service/importer/validation_test.go index 4d5981e56..f18c4d059 100644 --- a/service/importer/validation_test.go +++ b/service/importer/validation_test.go @@ -10,51 +10,59 @@ import ( func TestValidate(t *testing.T) { validation, err := Validate("./tests/service-valid") - require.Nil(t, err) + require.NoError(t, err) require.True(t, validation.IsValid()) require.True(t, validation.ServiceFileExist) - require.Equal(t, 0, len(validation.ServiceFileWarnings)) + require.Len(t, validation.ServiceFileWarnings, 0) require.True(t, validation.DockerfileExist) } +func TestValidateYMLNames(t *testing.T) { + validation, err := Validate("./tests/service-names-valid") + require.NoError(t, err) + require.True(t, validation.IsValid()) + require.True(t, validation.ServiceFileExist) + require.Len(t, validation.ServiceFileWarnings, 0) +} + func TestValidateDockerfileIsMissing(t *testing.T) { validation, err := Validate("./tests/service-docker-missing") - require.Nil(t, err) + require.NoError(t, err) require.False(t, validation.IsValid()) require.True(t, validation.ServiceFileExist) - require.Equal(t, 0, len(validation.ServiceFileWarnings)) + require.Len(t, validation.ServiceFileWarnings, 0) require.False(t, validation.DockerfileExist) } func TestValidateFromMissingServiceFile(t *testing.T) { validation, err := Validate("./tests/service-file-missing") - require.Nil(t, err) + require.NoError(t, err) require.False(t, validation.IsValid()) require.False(t, validation.ServiceFileExist) - require.Equal(t, 1, len(validation.ServiceFileWarnings)) + require.Len(t, validation.ServiceFileWarnings, 1) require.True(t, validation.DockerfileExist) } func TestValidateFromNonExistingPath(t *testing.T) { validation, err := Validate("./tests/service-non-existing") - require.Nil(t, err) + require.NoError(t, err) require.False(t, validation.IsValid()) require.False(t, validation.ServiceFileExist) - require.Equal(t, 1, len(validation.ServiceFileWarnings)) + require.Len(t, validation.ServiceFileWarnings, 1) require.False(t, validation.DockerfileExist) } func TestValidateFromMalFormattedServiceFile(t *testing.T) { _, err := Validate("./tests/service-file-mal-formatted") - require.NotNil(t, err) + require.Error(t, err) } func TestValidateFromInvalidServiceFile(t *testing.T) { validation, err := Validate("./tests/service-file-invalid") - require.Nil(t, err) + require.NoError(t, err) require.False(t, validation.IsValid()) require.True(t, validation.ServiceFileExist) - require.Equal(t, 1, len(validation.ServiceFileWarnings)) + require.Len(t, validation.ServiceFileWarnings, 1) require.True(t, validation.DockerfileExist) } @@ -62,11 +70,11 @@ func TestValidateFromInvalidServiceFile(t *testing.T) { func TestIsValid(t *testing.T) { isValid, err := IsValid("./tests/service-valid") - require.Nil(t, err) + require.NoError(t, err) require.True(t, isValid) } func TestIsValidMalFormattedServiceFile(t *testing.T) { _, err := IsValid("./tests/service-file-mal-formatted") - require.NotNil(t, err) + require.Error(t, err) }