mirror of
				https://github.com/optim-enterprises-bv/kubernetes.git
				synced 2025-10-31 02:08:13 +00:00 
			
		
		
		
	 93c11422e4
			
		
	
	93c11422e4
	
	
	
		
			
			- adjust ports to int32 - CRI flows the websocket ports as query params - Do not validate ports since the protocol is unknown SPDY flows the ports as headers and websockets uses query params - Only flow query params if there is at least one port query param
		
			
				
	
	
		
			102 lines
		
	
	
		
			2.7 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			102 lines
		
	
	
		
			2.7 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
| /*
 | |
| Copyright 2016 The Kubernetes Authors.
 | |
| 
 | |
| Licensed under the Apache License, Version 2.0 (the "License");
 | |
| you may not use this file except in compliance with the License.
 | |
| You may obtain a copy of the License at
 | |
| 
 | |
|     http://www.apache.org/licenses/LICENSE-2.0
 | |
| 
 | |
| Unless required by applicable law or agreed to in writing, software
 | |
| distributed under the License is distributed on an "AS IS" BASIS,
 | |
| WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 | |
| See the License for the specific language governing permissions and
 | |
| limitations under the License.
 | |
| */
 | |
| 
 | |
| package portforward
 | |
| 
 | |
| import (
 | |
| 	"net/http"
 | |
| 	"reflect"
 | |
| 	"testing"
 | |
| )
 | |
| 
 | |
| func TestV4Options(t *testing.T) {
 | |
| 	tests := map[string]struct {
 | |
| 		url           string
 | |
| 		websocket     bool
 | |
| 		expectedOpts  *V4Options
 | |
| 		expectedError string
 | |
| 	}{
 | |
| 		"non-ws request": {
 | |
| 			url:          "http://example.com",
 | |
| 			expectedOpts: &V4Options{},
 | |
| 		},
 | |
| 		"missing port": {
 | |
| 			url:           "http://example.com",
 | |
| 			websocket:     true,
 | |
| 			expectedError: `query parameter "port" is required`,
 | |
| 		},
 | |
| 		"unable to parse port": {
 | |
| 			url:           "http://example.com?port=abc",
 | |
| 			websocket:     true,
 | |
| 			expectedError: `unable to parse "abc" as a port: strconv.ParseUint: parsing "abc": invalid syntax`,
 | |
| 		},
 | |
| 		"negative port": {
 | |
| 			url:           "http://example.com?port=-1",
 | |
| 			websocket:     true,
 | |
| 			expectedError: `unable to parse "-1" as a port: strconv.ParseUint: parsing "-1": invalid syntax`,
 | |
| 		},
 | |
| 		"one port": {
 | |
| 			url:       "http://example.com?port=80",
 | |
| 			websocket: true,
 | |
| 			expectedOpts: &V4Options{
 | |
| 				Ports: []int32{80},
 | |
| 			},
 | |
| 		},
 | |
| 		"multiple ports": {
 | |
| 			url:       "http://example.com?port=80,90,100",
 | |
| 			websocket: true,
 | |
| 			expectedOpts: &V4Options{
 | |
| 				Ports: []int32{80, 90, 100},
 | |
| 			},
 | |
| 		},
 | |
| 		"multiple port": {
 | |
| 			url:       "http://example.com?port=80&port=90",
 | |
| 			websocket: true,
 | |
| 			expectedOpts: &V4Options{
 | |
| 				Ports: []int32{80, 90},
 | |
| 			},
 | |
| 		},
 | |
| 	}
 | |
| 	for name, test := range tests {
 | |
| 		req, err := http.NewRequest(http.MethodGet, test.url, nil)
 | |
| 		if err != nil {
 | |
| 			t.Errorf("%s: invalid url %q err=%q", name, test.url, err)
 | |
| 			continue
 | |
| 		}
 | |
| 		if test.websocket {
 | |
| 			req.Header.Set("Connection", "Upgrade")
 | |
| 			req.Header.Set("Upgrade", "websocket")
 | |
| 		}
 | |
| 		opts, err := NewV4Options(req)
 | |
| 		if len(test.expectedError) > 0 {
 | |
| 			if err == nil {
 | |
| 				t.Errorf("%s: expected err=%q, but it was nil", name, test.expectedError)
 | |
| 			}
 | |
| 			if e, a := test.expectedError, err.Error(); e != a {
 | |
| 				t.Errorf("%s: expected err=%q, got %q", name, e, a)
 | |
| 			}
 | |
| 			continue
 | |
| 		}
 | |
| 		if err != nil {
 | |
| 			t.Errorf("%s: unexpected error %v", name, err)
 | |
| 			continue
 | |
| 		}
 | |
| 		if !reflect.DeepEqual(test.expectedOpts, opts) {
 | |
| 			t.Errorf("%s: expected options %#v, got %#v", name, test.expectedOpts, err)
 | |
| 		}
 | |
| 	}
 | |
| }
 |