...

Source file src/k8s.io/kube-openapi/pkg/validation/errors/schema_test.go

Documentation: k8s.io/kube-openapi/pkg/validation/errors

     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  }
   406  

View as plain text