mirror of
				https://github.com/optim-enterprises-bv/kubernetes.git
				synced 2025-11-04 04:08:16 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			111 lines
		
	
	
		
			2.8 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			111 lines
		
	
	
		
			2.8 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
/*
 | 
						|
Copyright 2014 The Kubernetes Authors All rights reserved.
 | 
						|
 | 
						|
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 rest
 | 
						|
 | 
						|
import (
 | 
						|
	"testing"
 | 
						|
 | 
						|
	"k8s.io/kubernetes/pkg/api"
 | 
						|
	"k8s.io/kubernetes/pkg/runtime"
 | 
						|
	"k8s.io/kubernetes/pkg/util"
 | 
						|
)
 | 
						|
 | 
						|
func makeValidService() api.Service {
 | 
						|
	return api.Service{
 | 
						|
		ObjectMeta: api.ObjectMeta{
 | 
						|
			Name:            "valid",
 | 
						|
			Namespace:       "default",
 | 
						|
			Labels:          map[string]string{},
 | 
						|
			Annotations:     map[string]string{},
 | 
						|
			ResourceVersion: "1",
 | 
						|
		},
 | 
						|
		Spec: api.ServiceSpec{
 | 
						|
			Selector:        map[string]string{"key": "val"},
 | 
						|
			SessionAffinity: "None",
 | 
						|
			Type:            api.ServiceTypeClusterIP,
 | 
						|
			Ports:           []api.ServicePort{{Name: "p", Protocol: "TCP", Port: 8675, TargetPort: util.NewIntOrStringFromInt(8675)}},
 | 
						|
		},
 | 
						|
	}
 | 
						|
}
 | 
						|
 | 
						|
// TODO: This should be done on types that are not part of our API
 | 
						|
func TestBeforeUpdate(t *testing.T) {
 | 
						|
	testCases := []struct {
 | 
						|
		name      string
 | 
						|
		tweakSvc  func(oldSvc, newSvc *api.Service) // given basic valid services, each test case can customize them
 | 
						|
		expectErr bool
 | 
						|
	}{
 | 
						|
		{
 | 
						|
			name: "no change",
 | 
						|
			tweakSvc: func(oldSvc, newSvc *api.Service) {
 | 
						|
				// nothing
 | 
						|
			},
 | 
						|
			expectErr: false,
 | 
						|
		},
 | 
						|
		{
 | 
						|
			name: "change port",
 | 
						|
			tweakSvc: func(oldSvc, newSvc *api.Service) {
 | 
						|
				newSvc.Spec.Ports[0].Port++
 | 
						|
			},
 | 
						|
			expectErr: false,
 | 
						|
		},
 | 
						|
		{
 | 
						|
			name: "bad namespace",
 | 
						|
			tweakSvc: func(oldSvc, newSvc *api.Service) {
 | 
						|
				newSvc.Namespace = "#$%%invalid"
 | 
						|
			},
 | 
						|
			expectErr: true,
 | 
						|
		},
 | 
						|
		{
 | 
						|
			name: "change name",
 | 
						|
			tweakSvc: func(oldSvc, newSvc *api.Service) {
 | 
						|
				newSvc.Name += "2"
 | 
						|
			},
 | 
						|
			expectErr: true,
 | 
						|
		},
 | 
						|
		{
 | 
						|
			name: "change ClusterIP",
 | 
						|
			tweakSvc: func(oldSvc, newSvc *api.Service) {
 | 
						|
				oldSvc.Spec.ClusterIP = "1.2.3.4"
 | 
						|
				newSvc.Spec.ClusterIP = "4.3.2.1"
 | 
						|
			},
 | 
						|
			expectErr: true,
 | 
						|
		},
 | 
						|
		{
 | 
						|
			name: "change selectpor",
 | 
						|
			tweakSvc: func(oldSvc, newSvc *api.Service) {
 | 
						|
				newSvc.Spec.Selector = map[string]string{"newkey": "newvalue"}
 | 
						|
			},
 | 
						|
			expectErr: false,
 | 
						|
		},
 | 
						|
	}
 | 
						|
 | 
						|
	for _, tc := range testCases {
 | 
						|
		oldSvc := makeValidService()
 | 
						|
		newSvc := makeValidService()
 | 
						|
		tc.tweakSvc(&oldSvc, &newSvc)
 | 
						|
		ctx := api.NewDefaultContext()
 | 
						|
		err := BeforeUpdate(Services, ctx, runtime.Object(&oldSvc), runtime.Object(&newSvc))
 | 
						|
		if tc.expectErr && err == nil {
 | 
						|
			t.Errorf("unexpected non-error for %q", tc.name)
 | 
						|
		}
 | 
						|
		if !tc.expectErr && err != nil {
 | 
						|
			t.Errorf("unexpected error for %q: %v", tc.name, err)
 | 
						|
		}
 | 
						|
	}
 | 
						|
}
 |