k8s.io/kube-openapi@v0.0.0-20240228011516-70dd3763d340/pkg/validation/validate/type_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 validate
    16  
    17  import (
    18  	"testing"
    19  	"time"
    20  
    21  	"github.com/stretchr/testify/assert"
    22  	"k8s.io/kube-openapi/pkg/validation/strfmt"
    23  )
    24  
    25  type expectedJSONType struct {
    26  	value                 interface{}
    27  	expectedJSONType      string
    28  	expectedSwaggerFormat string
    29  }
    30  
    31  func TestType_schemaInfoForType(t *testing.T) {
    32  	testTypes := []expectedJSONType{
    33  		{
    34  			value:                 []byte("abc"),
    35  			expectedJSONType:      stringType,
    36  			expectedSwaggerFormat: "byte",
    37  		},
    38  		{
    39  			value:                 strfmt.Date(time.Date(2014, 10, 10, 0, 0, 0, 0, time.UTC)),
    40  			expectedJSONType:      stringType,
    41  			expectedSwaggerFormat: "date",
    42  		},
    43  		{
    44  			value:                 strfmt.NewDateTime(),
    45  			expectedJSONType:      stringType,
    46  			expectedSwaggerFormat: "date-time",
    47  		},
    48  		{
    49  			value:                 strfmt.URI("http://thisisleadingusnowhere.com"),
    50  			expectedJSONType:      stringType,
    51  			expectedSwaggerFormat: "uri",
    52  		},
    53  		{
    54  			value:                 strfmt.Email("fred@esasymoney.com"),
    55  			expectedJSONType:      stringType,
    56  			expectedSwaggerFormat: "email",
    57  		},
    58  		{
    59  			value:                 strfmt.Hostname("www.github.com"),
    60  			expectedJSONType:      stringType,
    61  			expectedSwaggerFormat: "hostname",
    62  		},
    63  		{
    64  			value:                 strfmt.Password("secret"),
    65  			expectedJSONType:      stringType,
    66  			expectedSwaggerFormat: "password",
    67  		},
    68  		{
    69  			value:                 strfmt.IPv4("192.168.224.1"),
    70  			expectedJSONType:      stringType,
    71  			expectedSwaggerFormat: "ipv4",
    72  		},
    73  		{
    74  			value:                 strfmt.IPv6("::1"),
    75  			expectedJSONType:      stringType,
    76  			expectedSwaggerFormat: "ipv6",
    77  		},
    78  		{
    79  			value:                 strfmt.MAC("01:02:03:04:05:06"),
    80  			expectedJSONType:      stringType,
    81  			expectedSwaggerFormat: "mac",
    82  		},
    83  		{
    84  			value:                 strfmt.UUID("a8098c1a-f86e-11da-bd1a-00112444be1e"),
    85  			expectedJSONType:      stringType,
    86  			expectedSwaggerFormat: "uuid",
    87  		},
    88  		{
    89  			value:                 strfmt.UUID3("bcd02e22-68f0-3046-a512-327cca9def8f"),
    90  			expectedJSONType:      stringType,
    91  			expectedSwaggerFormat: "uuid3",
    92  		},
    93  		{
    94  			value:                 strfmt.UUID4("025b0d74-00a2-4048-bf57-227c5111bb34"),
    95  			expectedJSONType:      stringType,
    96  			expectedSwaggerFormat: "uuid4",
    97  		},
    98  		{
    99  			value:                 strfmt.UUID5("886313e1-3b8a-5372-9b90-0c9aee199e5d"),
   100  			expectedJSONType:      stringType,
   101  			expectedSwaggerFormat: "uuid5",
   102  		},
   103  		{
   104  			value:                 strfmt.ISBN("0321751043"),
   105  			expectedJSONType:      stringType,
   106  			expectedSwaggerFormat: "isbn",
   107  		},
   108  		{
   109  			value:                 strfmt.ISBN10("0321751043"),
   110  			expectedJSONType:      stringType,
   111  			expectedSwaggerFormat: "isbn10",
   112  		},
   113  		{
   114  			value:                 strfmt.ISBN13("978-0321751041"),
   115  			expectedJSONType:      stringType,
   116  			expectedSwaggerFormat: "isbn13",
   117  		},
   118  		{
   119  			value:                 strfmt.CreditCard("4111-1111-1111-1111"),
   120  			expectedJSONType:      stringType,
   121  			expectedSwaggerFormat: "creditcard",
   122  		},
   123  		{
   124  			value:                 strfmt.SSN("111-11-1111"),
   125  			expectedJSONType:      stringType,
   126  			expectedSwaggerFormat: "ssn",
   127  		},
   128  		{
   129  			value:                 strfmt.HexColor("#FFFFFF"),
   130  			expectedJSONType:      stringType,
   131  			expectedSwaggerFormat: "hexcolor",
   132  		},
   133  		{
   134  			value:                 strfmt.RGBColor("rgb(255,255,255)"),
   135  			expectedJSONType:      stringType,
   136  			expectedSwaggerFormat: "rgbcolor",
   137  		},
   138  		// Numerical values
   139  		{
   140  			value:                 true,
   141  			expectedJSONType:      "boolean",
   142  			expectedSwaggerFormat: "",
   143  		},
   144  		{
   145  			value:                 int8(12),
   146  			expectedJSONType:      "integer",
   147  			expectedSwaggerFormat: "int32",
   148  		},
   149  		{
   150  			value:                 uint8(12),
   151  			expectedJSONType:      "integer",
   152  			expectedSwaggerFormat: "int32",
   153  		},
   154  		{
   155  			value:                 int16(12),
   156  			expectedJSONType:      "integer",
   157  			expectedSwaggerFormat: "int32",
   158  		},
   159  		{
   160  			value:            uint16(12),
   161  			expectedJSONType: "integer",
   162  			// TODO: should be uint32
   163  			expectedSwaggerFormat: "int32",
   164  		},
   165  		{
   166  			value:                 int32(12),
   167  			expectedJSONType:      "integer",
   168  			expectedSwaggerFormat: "int32",
   169  		},
   170  		{
   171  			value:            uint32(12),
   172  			expectedJSONType: "integer",
   173  			// TODO: should be uint32
   174  			expectedSwaggerFormat: "int32",
   175  		},
   176  		{
   177  			value:                 int(12),
   178  			expectedJSONType:      "integer",
   179  			expectedSwaggerFormat: "int64",
   180  		},
   181  		{
   182  			value:            uint(12),
   183  			expectedJSONType: "integer",
   184  			// TODO: should be uint64
   185  			expectedSwaggerFormat: "int64",
   186  		},
   187  		{
   188  			value:                 int64(12),
   189  			expectedJSONType:      "integer",
   190  			expectedSwaggerFormat: "int64",
   191  		},
   192  		{
   193  			value:            uint64(12),
   194  			expectedJSONType: "integer",
   195  			// TODO: should be uint64
   196  			expectedSwaggerFormat: "int64",
   197  		},
   198  		{
   199  			value:            float32(12),
   200  			expectedJSONType: "number",
   201  			// TODO: should be float
   202  			expectedSwaggerFormat: "float32",
   203  		},
   204  		{
   205  			value:            float64(12),
   206  			expectedJSONType: "number",
   207  			// TODO: should be double
   208  			expectedSwaggerFormat: "float64",
   209  		},
   210  		{
   211  			value:                 []string{},
   212  			expectedJSONType:      "array",
   213  			expectedSwaggerFormat: "",
   214  		},
   215  		{
   216  			value:                 expectedJSONType{},
   217  			expectedJSONType:      "object",
   218  			expectedSwaggerFormat: "",
   219  		},
   220  		{
   221  			value:                 map[string]bool{"key": false},
   222  			expectedJSONType:      "object",
   223  			expectedSwaggerFormat: "",
   224  		},
   225  		{
   226  			value:                 "simply a string",
   227  			expectedJSONType:      stringType,
   228  			expectedSwaggerFormat: "",
   229  		},
   230  		{
   231  			// NOTE: Go array returns no JSON type
   232  			value:                 [4]int{1, 2, 4, 4},
   233  			expectedJSONType:      "",
   234  			expectedSwaggerFormat: "",
   235  		},
   236  		{
   237  			value:                 strfmt.Base64("ZWxpemFiZXRocG9zZXk="),
   238  			expectedJSONType:      stringType,
   239  			expectedSwaggerFormat: "byte",
   240  		},
   241  		{
   242  			value:                 strfmt.Duration(0),
   243  			expectedJSONType:      stringType,
   244  			expectedSwaggerFormat: "duration",
   245  		},
   246  		/*
   247  			Test case for : case reflect.Interface:
   248  				// What to do here?
   249  				panic("dunno what to do here")
   250  		*/
   251  	}
   252  
   253  	v := &typeValidator{}
   254  	for _, x := range testTypes {
   255  		jsonType, swaggerFormat := v.schemaInfoForType(x.value)
   256  		assert.Equal(t, x.expectedJSONType, jsonType)
   257  		assert.Equal(t, x.expectedSwaggerFormat, swaggerFormat)
   258  
   259  		jsonType, swaggerFormat = v.schemaInfoForType(&x.value)
   260  		assert.Equal(t, x.expectedJSONType, jsonType)
   261  		assert.Equal(t, x.expectedSwaggerFormat, swaggerFormat)
   262  	}
   263  }