@@ -2,6 +2,7 @@ package clusterauth
22
33import (
44 "context"
5+ "errors"
56 "os"
67 "testing"
78 "time"
@@ -13,12 +14,11 @@ import (
1314 metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
1415 "k8s.io/apimachinery/pkg/runtime"
1516 "k8s.io/apimachinery/pkg/runtime/schema"
16- "k8s.io/apiserver/pkg/storage/names"
1717 "k8s.io/client-go/kubernetes/fake"
1818 kubetesting "k8s.io/client-go/testing"
1919 "sigs.k8s.io/yaml"
2020
21- "github.com/argoproj/argo-cd/v2/util/errors"
21+ argoerr "github.com/argoproj/argo-cd/v2/util/errors"
2222)
2323
2424const (
@@ -37,19 +37,19 @@ var testClaims = ServiceAccountClaims{
3737
3838func newServiceAccount () * corev1.ServiceAccount {
3939 saBytes , err := os .ReadFile ("./testdata/argocd-manager-sa.yaml" )
40- errors .CheckError (err )
40+ argoerr .CheckError (err )
4141 var sa corev1.ServiceAccount
4242 err = yaml .Unmarshal (saBytes , & sa )
43- errors .CheckError (err )
43+ argoerr .CheckError (err )
4444 return & sa
4545}
4646
4747func newServiceAccountSecret () * corev1.Secret {
4848 secretBytes , err := os .ReadFile ("./testdata/argocd-manager-sa-token.yaml" )
49- errors .CheckError (err )
49+ argoerr .CheckError (err )
5050 var secret corev1.Secret
5151 err = yaml .Unmarshal (secretBytes , & secret )
52- errors .CheckError (err )
52+ argoerr .CheckError (err )
5353 return & secret
5454}
5555
@@ -292,42 +292,61 @@ func Test_getOrCreateServiceAccountTokenSecret_NoSecretForSA(t *testing.T) {
292292 Name : "kube-system" ,
293293 },
294294 }
295- saWithoutSecret := & corev1.ServiceAccount {
295+ sa := & corev1.ServiceAccount {
296296 ObjectMeta : metav1.ObjectMeta {
297297 Name : ArgoCDManagerServiceAccount ,
298298 Namespace : ns .Name ,
299299 },
300300 }
301- cs := fake .NewClientset (ns , saWithoutSecret )
302- cs .PrependReactor ("create" , "secrets" ,
303- func (a kubetesting.Action ) (handled bool , ret runtime.Object , err error ) {
304- s , ok := a .(kubetesting.CreateAction ).GetObject ().(* corev1.Secret )
305- if ! ok {
306- return
307- }
308-
309- if s .Name == "" && s .GenerateName != "" {
310- s .SetName (names .SimpleNameGenerator .GenerateName (s .GenerateName ))
311- }
312-
313- s .Data = make (map [string ][]byte )
314- s .Data ["token" ] = []byte ("fake-token" )
315-
316- return
317- })
301+ manualSecret := & corev1.Secret {
302+ ObjectMeta : metav1.ObjectMeta {
303+ Name : ArgoCDManagerServiceAccount + SATokenSecretSuffix ,
304+ Namespace : ns .Name ,
305+ Annotations : map [string ]string {
306+ corev1 .ServiceAccountNameKey : sa .Name ,
307+ },
308+ },
309+ Type : corev1 .SecretTypeServiceAccountToken ,
310+ }
318311
319- got , err := getOrCreateServiceAccountTokenSecret (cs , ArgoCDManagerServiceAccount , ns .Name )
320- require .NoError (t , err )
321- assert .Equal (t , ArgoCDManagerServiceAccount + SATokenSecretSuffix , got )
312+ assertOnlyOneTokenExists := func (t * testing.T , cs * fake.Clientset ) {
313+ got , err := getOrCreateServiceAccountTokenSecret (cs , ArgoCDManagerServiceAccount , ns .Name )
314+ require .NoError (t , err )
315+ assert .Equal (t , ArgoCDManagerServiceAccount + SATokenSecretSuffix , got )
322316
323- obj , err := cs .Tracker ().Get (schema.GroupVersionResource {Version : "v1" , Resource : "serviceaccounts" },
324- ns .Name , ArgoCDManagerServiceAccount )
325- if err != nil {
326- t .Errorf ("ServiceAccount %s not found but was expected to be found: %s" , ArgoCDManagerServiceAccount , err .Error ())
317+ list , err := cs .Tracker ().List (schema.GroupVersionResource {Version : "v1" , Resource : "secrets" },
318+ schema.GroupVersionKind {Version : "v1" , Kind : "Secret" }, ns .Name , metav1.ListOptions {})
319+ require .NoError (t , err )
320+ secretList , ok := list .(* corev1.SecretList )
321+ require .True (t , ok )
322+ assert .Len (t , secretList .Items , 1 )
323+ obj , err := cs .Tracker ().Get (schema.GroupVersionResource {Version : "v1" , Resource : "serviceaccounts" },
324+ ns .Name , ArgoCDManagerServiceAccount )
325+ if err != nil {
326+ t .Errorf ("ServiceAccount %s not found but was expected to be found: %s" , ArgoCDManagerServiceAccount , err .Error ())
327+ }
328+
329+ assert .Empty (t , obj .(* corev1.ServiceAccount ).Secrets , 0 )
327330 }
331+ t .Run ("Token secret exists" , func (t * testing.T ) {
332+ cs := fake .NewClientset (ns , sa , manualSecret )
333+ assertOnlyOneTokenExists (t , cs )
334+ })
328335
329- sa := obj .(* corev1.ServiceAccount )
330- assert .Empty (t , sa .Secrets , 0 )
336+ t .Run ("Token secret does not exist" , func (t * testing.T ) {
337+ cs := fake .NewClientset (ns , sa )
338+ assertOnlyOneTokenExists (t , cs )
339+ })
340+
341+ t .Run ("Error on secret creation" , func (t * testing.T ) {
342+ cs := fake .NewClientset (ns , sa )
343+ cs .PrependReactor ("create" , "secrets" , func (kubetesting.Action ) (handled bool , ret runtime.Object , err error ) {
344+ return true , & corev1.Secret {}, errors .New ("testing error case" )
345+ })
346+ got , err := getOrCreateServiceAccountTokenSecret (cs , ArgoCDManagerServiceAccount , ns .Name )
347+ require .Error (t , err )
348+ assert .Empty (t , got )
349+ })
331350}
332351
333352func Test_getOrCreateServiceAccountTokenSecret_SAHasSecret (t * testing.T ) {
0 commit comments