mirror of
				https://github.com/optim-enterprises-bv/kubernetes.git
				synced 2025-11-04 04:08:16 +00:00 
			
		
		
		
	Accept admission request if resource is being deleted
This commit is contained in:
		@@ -2182,3 +2182,93 @@ func TestAdmitLimitedScopeWithCoverQuota(t *testing.T) {
 | 
			
		||||
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// TestAdmitZeroDeltaUsageWithoutCoveringQuota verifies that resource quota is not required for zero delta requests.
 | 
			
		||||
func TestAdmitZeroDeltaUsageWithoutCoveringQuota(t *testing.T) {
 | 
			
		||||
 | 
			
		||||
	kubeClient := fake.NewSimpleClientset()
 | 
			
		||||
	stopCh := make(chan struct{})
 | 
			
		||||
	defer close(stopCh)
 | 
			
		||||
 | 
			
		||||
	informerFactory := informers.NewSharedInformerFactory(kubeClient, controller.NoResyncPeriodFunc())
 | 
			
		||||
	quotaAccessor, _ := newQuotaAccessor()
 | 
			
		||||
	quotaAccessor.client = kubeClient
 | 
			
		||||
	quotaAccessor.lister = informerFactory.Core().V1().ResourceQuotas().Lister()
 | 
			
		||||
 | 
			
		||||
	// disable services unless there is a covering quota.
 | 
			
		||||
	config := &resourcequotaapi.Configuration{
 | 
			
		||||
		LimitedResources: []resourcequotaapi.LimitedResource{
 | 
			
		||||
			{
 | 
			
		||||
				Resource:      "services",
 | 
			
		||||
				MatchContains: []string{"services"},
 | 
			
		||||
			},
 | 
			
		||||
		},
 | 
			
		||||
	}
 | 
			
		||||
	quotaConfiguration := install.NewQuotaConfigurationForAdmission()
 | 
			
		||||
	evaluator := NewQuotaEvaluator(quotaAccessor, quotaConfiguration.IgnoredResources(), generic.NewRegistry(quotaConfiguration.Evaluators()), nil, config, 5, stopCh)
 | 
			
		||||
 | 
			
		||||
	handler := &QuotaAdmission{
 | 
			
		||||
		Handler:   admission.NewHandler(admission.Create, admission.Update),
 | 
			
		||||
		evaluator: evaluator,
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	existingService := &api.Service{
 | 
			
		||||
		ObjectMeta: metav1.ObjectMeta{Name: "service", Namespace: "test", ResourceVersion: "1"},
 | 
			
		||||
		Spec:       api.ServiceSpec{Type: api.ServiceTypeLoadBalancer},
 | 
			
		||||
	}
 | 
			
		||||
	newService := &api.Service{
 | 
			
		||||
		ObjectMeta: metav1.ObjectMeta{Name: "service", Namespace: "test"},
 | 
			
		||||
		Spec:       api.ServiceSpec{Type: api.ServiceTypeLoadBalancer},
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	err := handler.Validate(admission.NewAttributesRecord(newService, existingService, api.Kind("Service").WithVersion("version"), newService.Namespace, newService.Name, corev1.Resource("services").WithVersion("version"), "", admission.Update, false, nil), nil)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		t.Errorf("unexpected error: %v", err)
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// TestAdmitRejectDeltaUsageWithoutCoveringQuota verifies that resource quota is required for non zero delta requests.
 | 
			
		||||
func TestAdmitRejectDeltaUsageWithoutCoveringQuota(t *testing.T) {
 | 
			
		||||
	kubeClient := fake.NewSimpleClientset()
 | 
			
		||||
	stopCh := make(chan struct{})
 | 
			
		||||
	defer close(stopCh)
 | 
			
		||||
 | 
			
		||||
	informerFactory := informers.NewSharedInformerFactory(kubeClient, controller.NoResyncPeriodFunc())
 | 
			
		||||
	quotaAccessor, _ := newQuotaAccessor()
 | 
			
		||||
	quotaAccessor.client = kubeClient
 | 
			
		||||
	quotaAccessor.lister = informerFactory.Core().V1().ResourceQuotas().Lister()
 | 
			
		||||
 | 
			
		||||
	// disable services unless there is a covering quota.
 | 
			
		||||
	config := &resourcequotaapi.Configuration{
 | 
			
		||||
		LimitedResources: []resourcequotaapi.LimitedResource{
 | 
			
		||||
			{
 | 
			
		||||
				Resource:      "services",
 | 
			
		||||
				MatchContains: []string{"services"},
 | 
			
		||||
			},
 | 
			
		||||
		},
 | 
			
		||||
	}
 | 
			
		||||
	quotaConfiguration := install.NewQuotaConfigurationForAdmission()
 | 
			
		||||
	evaluator := NewQuotaEvaluator(quotaAccessor, quotaConfiguration.IgnoredResources(), generic.NewRegistry(quotaConfiguration.Evaluators()), nil, config, 5, stopCh)
 | 
			
		||||
 | 
			
		||||
	handler := &QuotaAdmission{
 | 
			
		||||
		Handler:   admission.NewHandler(admission.Create, admission.Update),
 | 
			
		||||
		evaluator: evaluator,
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	existingService := &api.Service{
 | 
			
		||||
		ObjectMeta: metav1.ObjectMeta{Name: "service", Namespace: "test", ResourceVersion: "1"},
 | 
			
		||||
		Spec:       api.ServiceSpec{Type: api.ServiceTypeLoadBalancer},
 | 
			
		||||
	}
 | 
			
		||||
	newService := &api.Service{
 | 
			
		||||
		ObjectMeta: metav1.ObjectMeta{Name: "service", Namespace: "test"},
 | 
			
		||||
		Spec: api.ServiceSpec{
 | 
			
		||||
			Type:  api.ServiceTypeNodePort,
 | 
			
		||||
			Ports: []api.ServicePort{{Port: 1234}},
 | 
			
		||||
		},
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	err := handler.Validate(admission.NewAttributesRecord(newService, existingService, api.Kind("Service").WithVersion("version"), newService.Namespace, newService.Name, corev1.Resource("services").WithVersion("version"), "", admission.Update, false, nil), nil)
 | 
			
		||||
	if err == nil {
 | 
			
		||||
		t.Errorf("Expected an error for consuming a limited resource without quota.")
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user