...

Source file src/k8s.io/component-base/cli/flag/ciphersuites_flag_test.go

Documentation: k8s.io/component-base/cli/flag

     1  /*
     2  Copyright 2017 The Kubernetes Authors.
     3  
     4  Licensed under the Apache License, Version 2.0 (the "License");
     5  you may not use this file except in compliance with the License.
     6  You may obtain a copy of the License at
     7  
     8      http://www.apache.org/licenses/LICENSE-2.0
     9  
    10  Unless required by applicable law or agreed to in writing, software
    11  distributed under the License is distributed on an "AS IS" BASIS,
    12  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    13  See the License for the specific language governing permissions and
    14  limitations under the License.
    15  */
    16  
    17  package flag
    18  
    19  import (
    20  	"crypto/tls"
    21  	"reflect"
    22  	"testing"
    23  )
    24  
    25  func TestStrToUInt16(t *testing.T) {
    26  	tests := []struct {
    27  		flag           []string
    28  		expected       []uint16
    29  		expected_error bool
    30  	}{
    31  		{
    32  			// Happy case
    33  			flag:           []string{"TLS_RSA_WITH_RC4_128_SHA", "TLS_RSA_WITH_AES_128_CBC_SHA", "TLS_ECDHE_RSA_WITH_RC4_128_SHA", "TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA"},
    34  			expected:       []uint16{tls.TLS_RSA_WITH_RC4_128_SHA, tls.TLS_RSA_WITH_AES_128_CBC_SHA, tls.TLS_ECDHE_RSA_WITH_RC4_128_SHA, tls.TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA},
    35  			expected_error: false,
    36  		},
    37  		{
    38  			// One flag only
    39  			flag:           []string{"TLS_RSA_WITH_RC4_128_SHA"},
    40  			expected:       []uint16{tls.TLS_RSA_WITH_RC4_128_SHA},
    41  			expected_error: false,
    42  		},
    43  		{
    44  			// Empty flag
    45  			flag:           []string{},
    46  			expected:       nil,
    47  			expected_error: false,
    48  		},
    49  		{
    50  			// Duplicated flag
    51  			flag:           []string{"TLS_RSA_WITH_RC4_128_SHA", "TLS_RSA_WITH_AES_128_CBC_SHA", "TLS_ECDHE_RSA_WITH_RC4_128_SHA", "TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA", "TLS_RSA_WITH_RC4_128_SHA"},
    52  			expected:       []uint16{tls.TLS_RSA_WITH_RC4_128_SHA, tls.TLS_RSA_WITH_AES_128_CBC_SHA, tls.TLS_ECDHE_RSA_WITH_RC4_128_SHA, tls.TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA, tls.TLS_RSA_WITH_RC4_128_SHA},
    53  			expected_error: false,
    54  		},
    55  		{
    56  			// Invalid flag
    57  			flag:           []string{"foo"},
    58  			expected:       nil,
    59  			expected_error: true,
    60  		},
    61  		{
    62  			// All existing cipher suites
    63  			flag: []string{
    64  				"TLS_RSA_WITH_3DES_EDE_CBC_SHA",
    65  				"TLS_RSA_WITH_AES_128_CBC_SHA",
    66  				"TLS_RSA_WITH_AES_256_CBC_SHA",
    67  				"TLS_RSA_WITH_AES_128_GCM_SHA256",
    68  				"TLS_RSA_WITH_AES_256_GCM_SHA384",
    69  				"TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA",
    70  				"TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA",
    71  				"TLS_ECDHE_RSA_WITH_3DES_EDE_CBC_SHA",
    72  				"TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA",
    73  				"TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA",
    74  				"TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256",
    75  				"TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256",
    76  				"TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384",
    77  				"TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384",
    78  				"TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305",
    79  				"TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305",
    80  				"TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305_SHA256",
    81  				"TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305_SHA256",
    82  				"TLS_AES_128_GCM_SHA256",
    83  				"TLS_CHACHA20_POLY1305_SHA256",
    84  				"TLS_AES_256_GCM_SHA384",
    85  
    86  				"TLS_RSA_WITH_RC4_128_SHA",
    87  				"TLS_RSA_WITH_AES_128_CBC_SHA256",
    88  				"TLS_ECDHE_ECDSA_WITH_RC4_128_SHA",
    89  				"TLS_ECDHE_RSA_WITH_RC4_128_SHA",
    90  				"TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256",
    91  				"TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256",
    92  			},
    93  			expected: []uint16{
    94  				tls.TLS_RSA_WITH_3DES_EDE_CBC_SHA,
    95  				tls.TLS_RSA_WITH_AES_128_CBC_SHA,
    96  				tls.TLS_RSA_WITH_AES_256_CBC_SHA,
    97  				tls.TLS_RSA_WITH_AES_128_GCM_SHA256,
    98  				tls.TLS_RSA_WITH_AES_256_GCM_SHA384,
    99  				tls.TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA,
   100  				tls.TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA,
   101  				tls.TLS_ECDHE_RSA_WITH_3DES_EDE_CBC_SHA,
   102  				tls.TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA,
   103  				tls.TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA,
   104  				tls.TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,
   105  				tls.TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,
   106  				tls.TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384,
   107  				tls.TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384,
   108  				tls.TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305,
   109  				tls.TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305,
   110  				tls.TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305_SHA256,
   111  				tls.TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305_SHA256,
   112  				tls.TLS_AES_128_GCM_SHA256,
   113  				tls.TLS_CHACHA20_POLY1305_SHA256,
   114  				tls.TLS_AES_256_GCM_SHA384,
   115  
   116  				tls.TLS_RSA_WITH_RC4_128_SHA,
   117  				tls.TLS_RSA_WITH_AES_128_CBC_SHA256,
   118  				tls.TLS_ECDHE_ECDSA_WITH_RC4_128_SHA,
   119  				tls.TLS_ECDHE_RSA_WITH_RC4_128_SHA,
   120  				tls.TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256,
   121  				tls.TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256,
   122  			},
   123  		},
   124  	}
   125  
   126  	for i, test := range tests {
   127  		uIntFlags, err := TLSCipherSuites(test.flag)
   128  		if !reflect.DeepEqual(uIntFlags, test.expected) {
   129  			t.Errorf("%d: expected %+v, got %+v", i, test.expected, uIntFlags)
   130  		}
   131  		if test.expected_error && err == nil {
   132  			t.Errorf("%d: expecting error, got %+v", i, err)
   133  		}
   134  	}
   135  }
   136  

View as plain text