e2e test client creation using the certificates API
This commit is contained in:
		@@ -45,6 +45,7 @@ go_library(
 | 
			
		||||
        "addon_update.go",
 | 
			
		||||
        "apparmor.go",
 | 
			
		||||
        "cadvisor.go",
 | 
			
		||||
        "certificates.go",
 | 
			
		||||
        "cluster_upgrade.go",
 | 
			
		||||
        "cronjob.go",
 | 
			
		||||
        "daemon_restart.go",
 | 
			
		||||
@@ -118,11 +119,13 @@ go_library(
 | 
			
		||||
        "//pkg/apis/batch:go_default_library",
 | 
			
		||||
        "//pkg/apis/batch/v1:go_default_library",
 | 
			
		||||
        "//pkg/apis/batch/v2alpha1:go_default_library",
 | 
			
		||||
        "//pkg/apis/certificates/v1beta1:go_default_library",
 | 
			
		||||
        "//pkg/apis/extensions:go_default_library",
 | 
			
		||||
        "//pkg/apis/extensions/v1beta1:go_default_library",
 | 
			
		||||
        "//pkg/apis/rbac/v1beta1:go_default_library",
 | 
			
		||||
        "//pkg/apis/settings/v1alpha1:go_default_library",
 | 
			
		||||
        "//pkg/client/clientset_generated/clientset:go_default_library",
 | 
			
		||||
        "//pkg/client/clientset_generated/clientset/typed/certificates/v1beta1:go_default_library",
 | 
			
		||||
        "//pkg/client/clientset_generated/clientset/typed/extensions/v1beta1:go_default_library",
 | 
			
		||||
        "//pkg/client/clientset_generated/internalclientset:go_default_library",
 | 
			
		||||
        "//pkg/cloudprovider:go_default_library",
 | 
			
		||||
@@ -194,6 +197,7 @@ go_library(
 | 
			
		||||
        "//vendor/k8s.io/client-go/pkg/apis/policy/v1beta1:go_default_library",
 | 
			
		||||
        "//vendor/k8s.io/client-go/rest:go_default_library",
 | 
			
		||||
        "//vendor/k8s.io/client-go/tools/cache:go_default_library",
 | 
			
		||||
        "//vendor/k8s.io/client-go/util/cert:go_default_library",
 | 
			
		||||
        "//vendor/k8s.io/client-go/util/flowcontrol:go_default_library",
 | 
			
		||||
    ],
 | 
			
		||||
)
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										121
									
								
								test/e2e/certificates.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										121
									
								
								test/e2e/certificates.go
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,121 @@
 | 
			
		||||
/*
 | 
			
		||||
Copyright 2017 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 e2e
 | 
			
		||||
 | 
			
		||||
import (
 | 
			
		||||
	"crypto/x509"
 | 
			
		||||
	"crypto/x509/pkix"
 | 
			
		||||
	"encoding/pem"
 | 
			
		||||
	"time"
 | 
			
		||||
 | 
			
		||||
	metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
 | 
			
		||||
	"k8s.io/apimachinery/pkg/util/wait"
 | 
			
		||||
	"k8s.io/client-go/util/cert"
 | 
			
		||||
	"k8s.io/kubernetes/pkg/apis/certificates/v1beta1"
 | 
			
		||||
	v1beta1client "k8s.io/kubernetes/pkg/client/clientset_generated/clientset/typed/certificates/v1beta1"
 | 
			
		||||
	"k8s.io/kubernetes/test/e2e/framework"
 | 
			
		||||
 | 
			
		||||
	. "github.com/onsi/ginkgo"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
var _ = framework.KubeDescribe("Certificates API", func() {
 | 
			
		||||
	f := framework.NewDefaultFramework("certificates")
 | 
			
		||||
 | 
			
		||||
	It("should support building a client with a CSR", func() {
 | 
			
		||||
		const commonName = "tester-csr"
 | 
			
		||||
 | 
			
		||||
		pk, err := cert.NewPrivateKey()
 | 
			
		||||
		framework.ExpectNoError(err)
 | 
			
		||||
 | 
			
		||||
		pkder := x509.MarshalPKCS1PrivateKey(pk)
 | 
			
		||||
		pkpem := pem.EncodeToMemory(&pem.Block{
 | 
			
		||||
			Type:  "RSA PRIVATE KEY",
 | 
			
		||||
			Bytes: pkder,
 | 
			
		||||
		})
 | 
			
		||||
 | 
			
		||||
		csrb, err := cert.MakeCSR(pk, &pkix.Name{CommonName: commonName, Organization: []string{"system:masters"}}, nil, nil)
 | 
			
		||||
		framework.ExpectNoError(err)
 | 
			
		||||
 | 
			
		||||
		csr := &v1beta1.CertificateSigningRequest{
 | 
			
		||||
			ObjectMeta: metav1.ObjectMeta{
 | 
			
		||||
				GenerateName: commonName + "-",
 | 
			
		||||
			},
 | 
			
		||||
			Spec: v1beta1.CertificateSigningRequestSpec{
 | 
			
		||||
				Request: csrb,
 | 
			
		||||
				Usages: []v1beta1.KeyUsage{
 | 
			
		||||
					v1beta1.UsageSigning,
 | 
			
		||||
					v1beta1.UsageKeyEncipherment,
 | 
			
		||||
					v1beta1.UsageClientAuth,
 | 
			
		||||
				},
 | 
			
		||||
			},
 | 
			
		||||
		}
 | 
			
		||||
		csrs := f.ClientSet.CertificatesV1beta1().CertificateSigningRequests()
 | 
			
		||||
 | 
			
		||||
		framework.Logf("creating CSR")
 | 
			
		||||
		csr, err = csrs.Create(csr)
 | 
			
		||||
		framework.ExpectNoError(err)
 | 
			
		||||
 | 
			
		||||
		csrName := csr.Name
 | 
			
		||||
 | 
			
		||||
		framework.Logf("approving CSR")
 | 
			
		||||
		framework.ExpectNoError(wait.Poll(5*time.Second, time.Minute, func() (bool, error) {
 | 
			
		||||
			csr.Status.Conditions = []v1beta1.CertificateSigningRequestCondition{
 | 
			
		||||
				{
 | 
			
		||||
					Type:    v1beta1.CertificateApproved,
 | 
			
		||||
					Reason:  "E2E",
 | 
			
		||||
					Message: "Set from an e2e test",
 | 
			
		||||
				},
 | 
			
		||||
			}
 | 
			
		||||
			csr, err = csrs.UpdateApproval(csr)
 | 
			
		||||
			if err != nil {
 | 
			
		||||
				csr, _ = csrs.Get(csrName, metav1.GetOptions{})
 | 
			
		||||
				framework.Logf("err updating approval: %v", err)
 | 
			
		||||
				return false, nil
 | 
			
		||||
			}
 | 
			
		||||
			return true, nil
 | 
			
		||||
		}))
 | 
			
		||||
 | 
			
		||||
		framework.Logf("waiting for CSR to be signed")
 | 
			
		||||
		framework.ExpectNoError(wait.Poll(5*time.Second, time.Minute, func() (bool, error) {
 | 
			
		||||
			csr, _ = csrs.Get(csrName, metav1.GetOptions{})
 | 
			
		||||
			if err != nil {
 | 
			
		||||
				return false, err
 | 
			
		||||
			}
 | 
			
		||||
			if len(csr.Status.Certificate) == 0 {
 | 
			
		||||
				framework.Logf("csr not signed yet")
 | 
			
		||||
				return false, nil
 | 
			
		||||
			}
 | 
			
		||||
			return true, nil
 | 
			
		||||
		}))
 | 
			
		||||
 | 
			
		||||
		framework.Logf("testing the client")
 | 
			
		||||
		rcfg, err := framework.LoadConfig()
 | 
			
		||||
		framework.ExpectNoError(err)
 | 
			
		||||
 | 
			
		||||
		rcfg.TLSClientConfig.CertData = csr.Status.Certificate
 | 
			
		||||
		rcfg.TLSClientConfig.KeyData = pkpem
 | 
			
		||||
		rcfg.TLSClientConfig.CertFile = ""
 | 
			
		||||
		rcfg.BearerToken = ""
 | 
			
		||||
		rcfg.AuthProvider = nil
 | 
			
		||||
		rcfg.Username = ""
 | 
			
		||||
		rcfg.Password = ""
 | 
			
		||||
 | 
			
		||||
		newClient, err := v1beta1client.NewForConfig(rcfg)
 | 
			
		||||
		framework.ExpectNoError(err)
 | 
			
		||||
		framework.ExpectNoError(newClient.CertificateSigningRequests().Delete(csrName, nil))
 | 
			
		||||
	})
 | 
			
		||||
})
 | 
			
		||||
		Reference in New Issue
	
	Block a user