k8s.io/kube-openapi@v0.0.0-20240826222958-65a50c78dec5/pkg/validation/errors/schema_test.go (about) 1 // Copyright 2015 go-swagger maintainers 2 // 3 // Licensed under the Apache License, Version 2.0 (the "License"); 4 // you may not use this file except in compliance with the License. 5 // You may obtain a copy of the License at 6 // 7 // http://www.apache.org/licenses/LICENSE-2.0 8 // 9 // Unless required by applicable law or agreed to in writing, software 10 // distributed under the License is distributed on an "AS IS" BASIS, 11 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12 // See the License for the specific language governing permissions and 13 // limitations under the License. 14 15 package errors 16 17 import ( 18 "errors" 19 "fmt" 20 "testing" 21 22 "github.com/stretchr/testify/assert" 23 ) 24 25 func TestSchemaErrors(t *testing.T) { 26 err := InvalidType("confirmed", "query", "boolean", nil) 27 assert.Error(t, err) 28 assert.EqualValues(t, InvalidTypeCode, err.Code()) 29 assert.Equal(t, "confirmed in query must be of type boolean", err.Error()) 30 31 err = InvalidType("confirmed", "", "boolean", nil) 32 assert.Error(t, err) 33 assert.EqualValues(t, InvalidTypeCode, err.Code()) 34 assert.Equal(t, "confirmed must be of type boolean", err.Error()) 35 36 err = InvalidType("confirmed", "query", "boolean", "hello") 37 assert.Error(t, err) 38 assert.EqualValues(t, InvalidTypeCode, err.Code()) 39 assert.Equal(t, "confirmed in query must be of type boolean: \"hello\"", err.Error()) 40 41 err = InvalidType("confirmed", "query", "boolean", errors.New("hello")) 42 assert.Error(t, err) 43 assert.EqualValues(t, InvalidTypeCode, err.Code()) 44 assert.Equal(t, "confirmed in query must be of type boolean, because: hello", err.Error()) 45 46 err = InvalidType("confirmed", "", "boolean", "hello") 47 assert.Error(t, err) 48 assert.EqualValues(t, InvalidTypeCode, err.Code()) 49 assert.Equal(t, "confirmed must be of type boolean: \"hello\"", err.Error()) 50 51 err = InvalidType("confirmed", "", "boolean", errors.New("hello")) 52 assert.Error(t, err) 53 assert.EqualValues(t, InvalidTypeCode, err.Code()) 54 assert.Equal(t, "confirmed must be of type boolean, because: hello", err.Error()) 55 56 err = DuplicateItems("uniques", "query") 57 assert.Error(t, err) 58 assert.EqualValues(t, UniqueFailCode, err.Code()) 59 assert.Equal(t, "uniques in query shouldn't contain duplicates", err.Error()) 60 61 err = DuplicateItems("uniques", "") 62 assert.Error(t, err) 63 assert.EqualValues(t, UniqueFailCode, err.Code()) 64 assert.Equal(t, "uniques shouldn't contain duplicates", err.Error()) 65 66 err = TooManyItems("something", "query", 5, 6) 67 assert.Error(t, err) 68 assert.EqualValues(t, MaxItemsFailCode, err.Code()) 69 assert.Equal(t, "something in query should have at most 5 items", err.Error()) 70 assert.Equal(t, 6, err.Value) 71 72 err = TooManyItems("something", "", 5, 6) 73 assert.Error(t, err) 74 assert.EqualValues(t, MaxItemsFailCode, err.Code()) 75 assert.Equal(t, "something should have at most 5 items", err.Error()) 76 assert.Equal(t, 6, err.Value) 77 78 err = TooFewItems("something", "", 5, 4) 79 assert.Error(t, err) 80 assert.EqualValues(t, MinItemsFailCode, err.Code()) 81 assert.Equal(t, "something should have at least 5 items", err.Error()) 82 assert.Equal(t, 4, err.Value) 83 84 err = ExceedsMaximumInt("something", "query", 5, false, 6) 85 assert.Error(t, err) 86 assert.EqualValues(t, MaxFailCode, err.Code()) 87 assert.Equal(t, "something in query should be less than or equal to 5", err.Error()) 88 assert.Equal(t, 6, err.Value) 89 90 err = ExceedsMaximumInt("something", "", 5, false, 6) 91 assert.Error(t, err) 92 assert.EqualValues(t, MaxFailCode, err.Code()) 93 assert.Equal(t, "something should be less than or equal to 5", err.Error()) 94 assert.Equal(t, 6, err.Value) 95 96 err = ExceedsMaximumInt("something", "query", 5, true, 6) 97 assert.Error(t, err) 98 assert.EqualValues(t, MaxFailCode, err.Code()) 99 assert.Equal(t, "something in query should be less than 5", err.Error()) 100 assert.Equal(t, 6, err.Value) 101 102 err = ExceedsMaximumInt("something", "", 5, true, 6) 103 assert.Error(t, err) 104 assert.EqualValues(t, MaxFailCode, err.Code()) 105 assert.Equal(t, "something should be less than 5", err.Error()) 106 assert.Equal(t, 6, err.Value) 107 108 err = ExceedsMaximumUint("something", "query", 5, false, 6) 109 assert.Error(t, err) 110 assert.EqualValues(t, MaxFailCode, err.Code()) 111 assert.Equal(t, "something in query should be less than or equal to 5", err.Error()) 112 assert.Equal(t, 6, err.Value) 113 114 err = ExceedsMaximumUint("something", "", 5, false, 6) 115 assert.Error(t, err) 116 assert.EqualValues(t, MaxFailCode, err.Code()) 117 assert.Equal(t, "something should be less than or equal to 5", err.Error()) 118 assert.Equal(t, 6, err.Value) 119 120 err = ExceedsMaximumUint("something", "query", 5, true, 6) 121 assert.Error(t, err) 122 assert.EqualValues(t, MaxFailCode, err.Code()) 123 assert.Equal(t, "something in query should be less than 5", err.Error()) 124 assert.Equal(t, 6, err.Value) 125 126 err = ExceedsMaximumUint("something", "", 5, true, 6) 127 assert.Error(t, err) 128 assert.EqualValues(t, MaxFailCode, err.Code()) 129 assert.Equal(t, "something should be less than 5", err.Error()) 130 assert.Equal(t, 6, err.Value) 131 132 err = ExceedsMaximum("something", "query", 5, false, 6) 133 assert.Error(t, err) 134 assert.EqualValues(t, MaxFailCode, err.Code()) 135 assert.Equal(t, "something in query should be less than or equal to 5", err.Error()) 136 assert.Equal(t, 6, err.Value) 137 138 err = ExceedsMaximum("something", "", 5, false, 6) 139 assert.Error(t, err) 140 assert.EqualValues(t, MaxFailCode, err.Code()) 141 assert.Equal(t, "something should be less than or equal to 5", err.Error()) 142 assert.Equal(t, 6, err.Value) 143 144 err = ExceedsMaximum("something", "query", 5, true, 6) 145 assert.Error(t, err) 146 assert.EqualValues(t, MaxFailCode, err.Code()) 147 assert.Equal(t, "something in query should be less than 5", err.Error()) 148 assert.Equal(t, 6, err.Value) 149 150 err = ExceedsMaximum("something", "", 5, true, 6) 151 assert.Error(t, err) 152 assert.EqualValues(t, MaxFailCode, err.Code()) 153 assert.Equal(t, "something should be less than 5", err.Error()) 154 assert.Equal(t, 6, err.Value) 155 156 err = ExceedsMinimumInt("something", "query", 5, false, 4) 157 assert.Error(t, err) 158 assert.EqualValues(t, MinFailCode, err.Code()) 159 assert.Equal(t, "something in query should be greater than or equal to 5", err.Error()) 160 assert.Equal(t, 4, err.Value) 161 162 err = ExceedsMinimumInt("something", "", 5, false, 4) 163 assert.Error(t, err) 164 assert.EqualValues(t, MinFailCode, err.Code()) 165 assert.Equal(t, "something should be greater than or equal to 5", err.Error()) 166 assert.Equal(t, 4, err.Value) 167 168 err = ExceedsMinimumInt("something", "query", 5, true, 4) 169 assert.Error(t, err) 170 assert.EqualValues(t, MinFailCode, err.Code()) 171 assert.Equal(t, "something in query should be greater than 5", err.Error()) 172 assert.Equal(t, 4, err.Value) 173 174 err = ExceedsMinimumInt("something", "", 5, true, 4) 175 assert.Error(t, err) 176 assert.EqualValues(t, MinFailCode, err.Code()) 177 assert.Equal(t, "something should be greater than 5", err.Error()) 178 assert.Equal(t, 4, err.Value) 179 180 err = ExceedsMinimumUint("something", "query", 5, false, 4) 181 assert.Error(t, err) 182 assert.EqualValues(t, MinFailCode, err.Code()) 183 assert.Equal(t, "something in query should be greater than or equal to 5", err.Error()) 184 assert.Equal(t, 4, err.Value) 185 186 err = ExceedsMinimumUint("something", "", 5, false, 4) 187 assert.Error(t, err) 188 assert.EqualValues(t, MinFailCode, err.Code()) 189 assert.Equal(t, "something should be greater than or equal to 5", err.Error()) 190 assert.Equal(t, 4, err.Value) 191 192 err = ExceedsMinimumUint("something", "query", 5, true, 4) 193 assert.Error(t, err) 194 assert.EqualValues(t, MinFailCode, err.Code()) 195 assert.Equal(t, "something in query should be greater than 5", err.Error()) 196 assert.Equal(t, 4, err.Value) 197 198 err = ExceedsMinimumUint("something", "", 5, true, 4) 199 assert.Error(t, err) 200 assert.EqualValues(t, MinFailCode, err.Code()) 201 assert.Equal(t, "something should be greater than 5", err.Error()) 202 assert.Equal(t, 4, err.Value) 203 204 err = ExceedsMinimum("something", "query", 5, false, 4) 205 assert.Error(t, err) 206 assert.EqualValues(t, MinFailCode, err.Code()) 207 assert.Equal(t, "something in query should be greater than or equal to 5", err.Error()) 208 assert.Equal(t, 4, err.Value) 209 210 err = ExceedsMinimum("something", "", 5, false, 4) 211 assert.Error(t, err) 212 assert.EqualValues(t, MinFailCode, err.Code()) 213 assert.Equal(t, "something should be greater than or equal to 5", err.Error()) 214 assert.Equal(t, 4, err.Value) 215 216 err = ExceedsMinimum("something", "query", 5, true, 4) 217 assert.Error(t, err) 218 assert.EqualValues(t, MinFailCode, err.Code()) 219 assert.Equal(t, "something in query should be greater than 5", err.Error()) 220 assert.Equal(t, 4, err.Value) 221 222 err = ExceedsMinimum("something", "", 5, true, 4) 223 assert.Error(t, err) 224 assert.EqualValues(t, MinFailCode, err.Code()) 225 assert.Equal(t, "something should be greater than 5", err.Error()) 226 assert.Equal(t, 4, err.Value) 227 228 err = NotMultipleOf("something", "query", 5, 1) 229 assert.Error(t, err) 230 assert.EqualValues(t, MultipleOfFailCode, err.Code()) 231 assert.Equal(t, "something in query should be a multiple of 5", err.Error()) 232 assert.Equal(t, 1, err.Value) 233 234 err = NotMultipleOf("something", "query", float64(5), float64(1)) 235 assert.Error(t, err) 236 assert.EqualValues(t, MultipleOfFailCode, err.Code()) 237 assert.Equal(t, "something in query should be a multiple of 5", err.Error()) 238 assert.Equal(t, float64(1), err.Value) 239 240 err = NotMultipleOf("something", "query", uint64(5), uint64(1)) 241 assert.Error(t, err) 242 assert.EqualValues(t, MultipleOfFailCode, err.Code()) 243 assert.Equal(t, "something in query should be a multiple of 5", err.Error()) 244 assert.Equal(t, uint64(1), err.Value) 245 246 err = NotMultipleOf("something", "", 5, 1) 247 assert.Error(t, err) 248 assert.EqualValues(t, MultipleOfFailCode, err.Code()) 249 assert.Equal(t, "something should be a multiple of 5", err.Error()) 250 assert.Equal(t, 1, err.Value) 251 252 err = EnumFail("something", "query", "yada", []interface{}{"hello", "world"}) 253 assert.Error(t, err) 254 assert.EqualValues(t, EnumFailCode, err.Code()) 255 assert.Equal(t, "something in query should be one of [hello world]", err.Error()) 256 assert.Equal(t, "yada", err.Value) 257 258 err = EnumFail("something", "", "yada", []interface{}{"hello", "world"}) 259 assert.Error(t, err) 260 assert.EqualValues(t, EnumFailCode, err.Code()) 261 assert.Equal(t, "something should be one of [hello world]", err.Error()) 262 assert.Equal(t, "yada", err.Value) 263 264 err = Required("something", "query") 265 assert.Error(t, err) 266 assert.EqualValues(t, RequiredFailCode, err.Code()) 267 assert.Equal(t, "something in query is required", err.Error()) 268 269 err = Required("something", "") 270 assert.Error(t, err) 271 assert.EqualValues(t, RequiredFailCode, err.Code()) 272 assert.Equal(t, "something is required", err.Error()) 273 274 err = TooLong("something", "query", 5, "abcdef") 275 assert.Error(t, err) 276 assert.EqualValues(t, TooLongFailCode, err.Code()) 277 assert.Equal(t, "something in query should be at most 5 chars long", err.Error()) 278 assert.Equal(t, "abcdef", err.Value) 279 280 err = TooLong("something", "", 5, "abcdef") 281 assert.Error(t, err) 282 assert.EqualValues(t, TooLongFailCode, err.Code()) 283 assert.Equal(t, "something should be at most 5 chars long", err.Error()) 284 assert.Equal(t, "abcdef", err.Value) 285 286 err = TooShort("something", "query", 5, "a") 287 assert.Error(t, err) 288 assert.EqualValues(t, TooShortFailCode, err.Code()) 289 assert.Equal(t, "something in query should be at least 5 chars long", err.Error()) 290 assert.Equal(t, "a", err.Value) 291 292 err = TooShort("something", "", 5, "a") 293 assert.Error(t, err) 294 assert.EqualValues(t, TooShortFailCode, err.Code()) 295 assert.Equal(t, "something should be at least 5 chars long", err.Error()) 296 assert.Equal(t, "a", err.Value) 297 298 err = FailedPattern("something", "query", "\\d+", "a") 299 assert.Error(t, err) 300 assert.EqualValues(t, PatternFailCode, err.Code()) 301 assert.Equal(t, "something in query should match '\\d+'", err.Error()) 302 assert.Equal(t, "a", err.Value) 303 304 err = FailedPattern("something", "", "\\d+", "a") 305 assert.Error(t, err) 306 assert.EqualValues(t, PatternFailCode, err.Code()) 307 assert.Equal(t, "something should match '\\d+'", err.Error()) 308 assert.Equal(t, "a", err.Value) 309 310 err = InvalidTypeName("something") 311 assert.Error(t, err) 312 assert.EqualValues(t, InvalidTypeCode, err.Code()) 313 assert.Equal(t, "something is an invalid type name", err.Error()) 314 315 err = AdditionalItemsNotAllowed("something", "query") 316 assert.Error(t, err) 317 assert.EqualValues(t, NoAdditionalItemsCode, err.Code()) 318 assert.Equal(t, "something in query can't have additional items", err.Error()) 319 320 err = AdditionalItemsNotAllowed("something", "") 321 assert.Error(t, err) 322 assert.EqualValues(t, NoAdditionalItemsCode, err.Code()) 323 assert.Equal(t, "something can't have additional items", err.Error()) 324 325 err = InvalidCollectionFormat("something", "query", "yada") 326 assert.Error(t, err) 327 assert.EqualValues(t, InvalidTypeCode, err.Code()) 328 assert.Equal(t, "the collection format \"yada\" is not supported for the query param \"something\"", err.Error()) 329 330 err2 := CompositeValidationError() 331 assert.Error(t, err2) 332 assert.EqualValues(t, CompositeErrorCode, err2.Code()) 333 assert.Equal(t, "validation failure list", err2.Error()) 334 335 err2 = CompositeValidationError(fmt.Errorf("First error"), fmt.Errorf("Second error")) 336 assert.Error(t, err2) 337 assert.EqualValues(t, CompositeErrorCode, err2.Code()) 338 assert.Equal(t, "validation failure list:\nFirst error\nSecond error", err2.Error()) 339 340 //func MultipleOfMustBePositive(name, in string, factor interface{}) *Validation { 341 err = MultipleOfMustBePositive("path", "body", float64(-10)) 342 assert.Error(t, err) 343 assert.EqualValues(t, MultipleOfMustBePositiveCode, err.Code()) 344 assert.Equal(t, `factor MultipleOf declared for path must be positive: -10`, err.Error()) 345 assert.Equal(t, float64(-10), err.Value) 346 347 err = MultipleOfMustBePositive("path", "body", int64(-10)) 348 assert.Error(t, err) 349 assert.EqualValues(t, MultipleOfMustBePositiveCode, err.Code()) 350 assert.Equal(t, `factor MultipleOf declared for path must be positive: -10`, err.Error()) 351 assert.Equal(t, int64(-10), err.Value) 352 353 // func PropertyNotAllowed(name, in, key string) *Validation { 354 err = PropertyNotAllowed("path", "body", "key") 355 assert.Error(t, err) 356 assert.EqualValues(t, UnallowedPropertyCode, err.Code()) 357 //unallowedProperty = "%s.%s in %s is a forbidden property" 358 assert.Equal(t, "path.key in body is a forbidden property", err.Error()) 359 360 err = PropertyNotAllowed("path", "", "key") 361 assert.Error(t, err) 362 assert.EqualValues(t, UnallowedPropertyCode, err.Code()) 363 //unallowedPropertyNoIn = "%s.%s is a forbidden property" 364 assert.Equal(t, "path.key is a forbidden property", err.Error()) 365 366 //func TooManyProperties(name, in string, n, size int64) *Validation { 367 err = TooManyProperties("path", "body", 10, 20) 368 assert.Error(t, err) 369 assert.EqualValues(t, TooManyPropertiesCode, err.Code()) 370 //tooManyProperties = "%s in %s should have at most %d properties" 371 assert.Equal(t, "path in body should have at most 10 properties", err.Error()) 372 373 err = TooManyProperties("path", "", 10, 20) 374 assert.Error(t, err) 375 assert.EqualValues(t, TooManyPropertiesCode, err.Code()) 376 //tooManyPropertiesNoIn = "%s should have at most %d properties" 377 assert.Equal(t, "path should have at most 10 properties", err.Error()) 378 379 err = TooFewProperties("path", "body", 10, 1) 380 // func TooFewProperties(name, in string, n int64) *Validation { 381 assert.Error(t, err) 382 assert.EqualValues(t, TooFewPropertiesCode, err.Code()) 383 //tooFewProperties = "%s in %s should have at least %d properties" 384 assert.Equal(t, "path in body should have at least 10 properties", err.Error()) 385 386 err = TooFewProperties("path", "", 10, 1) 387 // func TooFewProperties(name, in string, n int64) *Validation { 388 assert.Error(t, err) 389 assert.EqualValues(t, TooFewPropertiesCode, err.Code()) 390 //tooFewPropertiesNoIn = "%s should have at least %d properties" 391 assert.Equal(t, "path should have at least 10 properties", err.Error()) 392 393 //func FailedAllPatternProperties(name, in, key string) *Validation { 394 err = FailedAllPatternProperties("path", "body", "key") 395 assert.Error(t, err) 396 assert.EqualValues(t, FailedAllPatternPropsCode, err.Code()) 397 //failedAllPatternProps = "%s.%s in %s failed all pattern properties" 398 assert.Equal(t, "path.key in body failed all pattern properties", err.Error()) 399 400 err = FailedAllPatternProperties("path", "", "key") 401 assert.Error(t, err) 402 assert.EqualValues(t, FailedAllPatternPropsCode, err.Code()) 403 //failedAllPatternPropsNoIn = "%s.%s failed all pattern properties" 404 assert.Equal(t, "path.key failed all pattern properties", err.Error()) 405 }