github.com/GoogleContainerTools/skaffold@v1.39.18/pkg/skaffold/build/cluster/secret_test.go (about)

     1  /*
     2  Copyright 2019 The Skaffold 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 cluster
    18  
    19  import (
    20  	"context"
    21  	"io/ioutil"
    22  	"testing"
    23  
    24  	v1 "k8s.io/api/core/v1"
    25  	metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
    26  	"k8s.io/client-go/kubernetes"
    27  	"k8s.io/client-go/kubernetes/fake"
    28  
    29  	"github.com/GoogleContainerTools/skaffold/pkg/skaffold/kubernetes/client"
    30  	"github.com/GoogleContainerTools/skaffold/pkg/skaffold/schema/latest"
    31  	"github.com/GoogleContainerTools/skaffold/testutil"
    32  )
    33  
    34  func TestCreateSecret(t *testing.T) {
    35  	testutil.Run(t, "", func(t *testutil.T) {
    36  		tmpDir := t.NewTempDir().Touch("secret.json")
    37  		fakeKubernetesclient := fake.NewSimpleClientset()
    38  		t.Override(&client.DefaultClient, func() (kubernetes.Interface, error) {
    39  			return fakeKubernetesclient, nil
    40  		})
    41  
    42  		builder, err := NewBuilder(&mockBuilderContext{}, &latest.ClusterDetails{
    43  			Timeout:        "20m",
    44  			PullSecretName: "kaniko-secret",
    45  			PullSecretPath: tmpDir.Path("secret.json"),
    46  			Namespace:      "ns",
    47  		})
    48  		t.CheckNoError(err)
    49  
    50  		// Should create a secret
    51  		cleanup, err := builder.setupPullSecret(context.Background(), ioutil.Discard)
    52  		t.CheckNoError(err)
    53  
    54  		// Check that the secret was created
    55  		secret, err := fakeKubernetesclient.CoreV1().Secrets("ns").Get(context.Background(), "kaniko-secret", metav1.GetOptions{})
    56  		t.CheckNoError(err)
    57  		t.CheckDeepEqual("kaniko-secret", secret.GetName())
    58  		t.CheckDeepEqual("skaffold-kaniko", secret.GetLabels()["skaffold-kaniko"])
    59  
    60  		// Check that the secret can be deleted
    61  		cleanup()
    62  		_, err = fakeKubernetesclient.CoreV1().Secrets("ns").Get(context.Background(), "kaniko-secret", metav1.GetOptions{})
    63  		t.CheckError(true, err)
    64  	})
    65  }
    66  
    67  func TestExistingSecretNotFound(t *testing.T) {
    68  	testutil.Run(t, "", func(t *testutil.T) {
    69  		t.Override(&client.DefaultClient, func() (kubernetes.Interface, error) {
    70  			return fake.NewSimpleClientset(), nil
    71  		})
    72  
    73  		builder, err := NewBuilder(&mockBuilderContext{}, &latest.ClusterDetails{
    74  			Timeout:        "20m",
    75  			PullSecretName: "kaniko-secret",
    76  		})
    77  		t.CheckNoError(err)
    78  
    79  		// should fail to retrieve an existing secret
    80  		_, err = builder.setupPullSecret(context.Background(), ioutil.Discard)
    81  
    82  		t.CheckErrorContains("secret kaniko-secret does not exist. No path specified to create it", err)
    83  	})
    84  }
    85  
    86  func TestExistingSecret(t *testing.T) {
    87  	testutil.Run(t, "", func(t *testutil.T) {
    88  		t.Override(&client.DefaultClient, func() (kubernetes.Interface, error) {
    89  			return fake.NewSimpleClientset(&v1.Secret{
    90  				ObjectMeta: metav1.ObjectMeta{
    91  					Name: "kaniko-secret",
    92  				},
    93  			}), nil
    94  		})
    95  
    96  		builder, err := NewBuilder(&mockBuilderContext{}, &latest.ClusterDetails{
    97  			Timeout:        "20m",
    98  			PullSecretName: "kaniko-secret",
    99  		})
   100  		t.CheckNoError(err)
   101  
   102  		// should retrieve an existing secret
   103  		cleanup, err := builder.setupPullSecret(context.Background(), ioutil.Discard)
   104  		cleanup()
   105  
   106  		t.CheckNoError(err)
   107  	})
   108  }
   109  
   110  func TestSkipSecretCreation(t *testing.T) {
   111  	testutil.Run(t, "", func(t *testutil.T) {
   112  		t.Override(&client.DefaultClient, func() (kubernetes.Interface, error) {
   113  			return nil, nil
   114  		})
   115  
   116  		builder, err := NewBuilder(&mockBuilderContext{}, &latest.ClusterDetails{
   117  			Timeout: "20m",
   118  		})
   119  		t.CheckNoError(err)
   120  
   121  		// should retrieve an existing secret
   122  		cleanup, err := builder.setupPullSecret(context.Background(), ioutil.Discard)
   123  		cleanup()
   124  
   125  		t.CheckNoError(err)
   126  	})
   127  }