@@ -1090,3 +1090,105 @@ func Test_PackManifest_UnsupportedPackManifestVersion(t *testing.T) {
1090
1090
t .Errorf ("Oras.PackManifest() error = %v, wantErr = %v" , err , wantErr )
1091
1091
}
1092
1092
}
1093
+
1094
+ func Test_validateMediaType (t * testing.T ) {
1095
+ tests := []struct {
1096
+ name string
1097
+ mediaType string
1098
+ wantErr bool
1099
+ }{
1100
+ {
1101
+ name : "valid media type - common" ,
1102
+ mediaType : "application/vnd.oci.image.manifest.v1+json" ,
1103
+ wantErr : false ,
1104
+ },
1105
+ {
1106
+ name : "valid media type - without +" ,
1107
+ mediaType : "text/plain" ,
1108
+ wantErr : false ,
1109
+ },
1110
+ {
1111
+ name : "valid media type - json+ld" ,
1112
+ mediaType : "application/json+ld" ,
1113
+ wantErr : false ,
1114
+ },
1115
+ {
1116
+ name : "valid media type - with dot" ,
1117
+ mediaType : "application/x.foo" ,
1118
+ wantErr : false ,
1119
+ },
1120
+ {
1121
+ name : "valid media type - with dash" ,
1122
+ mediaType : "application/x-foo" ,
1123
+ wantErr : false ,
1124
+ },
1125
+ {
1126
+ name : "valid media type - with caret" ,
1127
+ mediaType : "application/vnd.foo^bar" ,
1128
+ wantErr : false ,
1129
+ },
1130
+ {
1131
+ name : "invalid media type - empty string" ,
1132
+ mediaType : "" ,
1133
+ wantErr : true ,
1134
+ },
1135
+ {
1136
+ name : "invalid media type - missing subtype" ,
1137
+ mediaType : "application/" ,
1138
+ wantErr : true ,
1139
+ },
1140
+ {
1141
+ name : "invalid media type - missing type" ,
1142
+ mediaType : "/vnd.oci.image.manifest.v1" ,
1143
+ wantErr : true ,
1144
+ },
1145
+ {
1146
+ name : "invalid media type - no slash" ,
1147
+ mediaType : "applicationvnd.oci.image.manifest.v1" ,
1148
+ wantErr : true ,
1149
+ },
1150
+ {
1151
+ name : "invalid media type - multiple slashes" ,
1152
+ mediaType : "application/something/v1" ,
1153
+ wantErr : true ,
1154
+ },
1155
+ {
1156
+ name : "invalid media type - type starts with non-alphanumeric" ,
1157
+ mediaType : "-application/vnd.oci.image.manifest.v1" ,
1158
+ wantErr : true ,
1159
+ },
1160
+ {
1161
+ name : "invalid media type - subtype starts with non-alphanumeric" ,
1162
+ mediaType : "application/-vnd.oci.image.manifest.v1" ,
1163
+ wantErr : true ,
1164
+ },
1165
+ {
1166
+ name : "invalid media type - invalid char in type" ,
1167
+ mediaType : "application%/vnd.oci.image.manifest.v1" ,
1168
+ wantErr : true ,
1169
+ },
1170
+ {
1171
+ name : "invalid media type - invalid char in subtype" ,
1172
+ mediaType : "application/vnd.oci.image.manifest.v1%json" ,
1173
+ wantErr : true ,
1174
+ },
1175
+ {
1176
+ name : "invalid media type - contains space" ,
1177
+ mediaType : "application/vnd oci" ,
1178
+ wantErr : true ,
1179
+ },
1180
+ }
1181
+
1182
+ for _ , tt := range tests {
1183
+ t .Run (tt .name , func (t * testing.T ) {
1184
+ err := validateMediaType (tt .mediaType )
1185
+ if (err != nil ) != tt .wantErr {
1186
+ t .Errorf ("validateMediaType(%q) error = %v, wantErr %v" , tt .mediaType , err , tt .wantErr )
1187
+ return
1188
+ }
1189
+ if tt .wantErr && ! errors .Is (err , errdef .ErrInvalidMediaType ) {
1190
+ t .Errorf ("validateMediaType(%q) error not wrapping errdef.ErrInvalidMediaType: %v" , tt .mediaType , err )
1191
+ }
1192
+ })
1193
+ }
1194
+ }
0 commit comments