github.com/argoproj/argo-cd/v2@v2.10.5/util/db/cluster_norace_test.go (about)

     1  //go:build !race
     2  // +build !race
     3  
     4  package db
     5  
     6  import (
     7  	"context"
     8  	"testing"
     9  
    10  	v1 "k8s.io/api/core/v1"
    11  	metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
    12  
    13  	"github.com/argoproj/argo-cd/v2/common"
    14  
    15  	"github.com/stretchr/testify/assert"
    16  	"k8s.io/client-go/kubernetes/fake"
    17  
    18  	"github.com/argoproj/argo-cd/v2/pkg/apis/application/v1alpha1"
    19  	"github.com/argoproj/argo-cd/v2/util/settings"
    20  )
    21  
    22  func TestWatchClusters_CreateRemoveCluster(t *testing.T) {
    23  
    24  	// !race:
    25  	// Intermittent failure when running TestWatchClusters_LocalClusterModifications with -race, likely due to race condition
    26  	// https://github.com/argoproj/argo-cd/issues/4755
    27  	emptyArgoCDConfigMap := &v1.ConfigMap{
    28  		ObjectMeta: metav1.ObjectMeta{
    29  			Name:      common.ArgoCDConfigMapName,
    30  			Namespace: fakeNamespace,
    31  			Labels: map[string]string{
    32  				"app.kubernetes.io/part-of": "argocd",
    33  			},
    34  		},
    35  		Data: map[string]string{},
    36  	}
    37  	argoCDSecret := &v1.Secret{
    38  		ObjectMeta: metav1.ObjectMeta{
    39  			Name:      common.ArgoCDSecretName,
    40  			Namespace: fakeNamespace,
    41  			Labels: map[string]string{
    42  				"app.kubernetes.io/part-of": "argocd",
    43  			},
    44  		},
    45  		Data: map[string][]byte{
    46  			"admin.password":   nil,
    47  			"server.secretkey": nil,
    48  		},
    49  	}
    50  	kubeclientset := fake.NewSimpleClientset(emptyArgoCDConfigMap, argoCDSecret)
    51  	settingsManager := settings.NewSettingsManager(context.Background(), kubeclientset, fakeNamespace)
    52  	db := NewDB(fakeNamespace, settingsManager, kubeclientset)
    53  	runWatchTest(t, db, []func(old *v1alpha1.Cluster, new *v1alpha1.Cluster){
    54  		func(old *v1alpha1.Cluster, new *v1alpha1.Cluster) {
    55  			assert.Nil(t, old)
    56  			assert.Equal(t, new.Server, v1alpha1.KubernetesInternalAPIServerAddr)
    57  
    58  			_, err := db.CreateCluster(context.Background(), &v1alpha1.Cluster{
    59  				Server: "https://minikube",
    60  				Name:   "minikube",
    61  			})
    62  			assert.NoError(t, err)
    63  		},
    64  		func(old *v1alpha1.Cluster, new *v1alpha1.Cluster) {
    65  			assert.Nil(t, old)
    66  			assert.Equal(t, new.Server, "https://minikube")
    67  			assert.Equal(t, new.Name, "minikube")
    68  
    69  			assert.NoError(t, db.DeleteCluster(context.Background(), "https://minikube"))
    70  		},
    71  		func(old *v1alpha1.Cluster, new *v1alpha1.Cluster) {
    72  			assert.Nil(t, new)
    73  			assert.Equal(t, old.Server, "https://minikube")
    74  		},
    75  	})
    76  }
    77  
    78  func TestWatchClusters_LocalClusterModifications(t *testing.T) {
    79  
    80  	// !race:
    81  	// Intermittent failure when running TestWatchClusters_LocalClusterModifications with -race, likely due to race condition
    82  	// https://github.com/argoproj/argo-cd/issues/4755
    83  	emptyArgoCDConfigMap := &v1.ConfigMap{
    84  		ObjectMeta: metav1.ObjectMeta{
    85  			Name:      common.ArgoCDConfigMapName,
    86  			Namespace: fakeNamespace,
    87  			Labels: map[string]string{
    88  				"app.kubernetes.io/part-of": "argocd",
    89  			},
    90  		},
    91  		Data: map[string]string{},
    92  	}
    93  	argoCDSecret := &v1.Secret{
    94  		ObjectMeta: metav1.ObjectMeta{
    95  			Name:      common.ArgoCDSecretName,
    96  			Namespace: fakeNamespace,
    97  			Labels: map[string]string{
    98  				"app.kubernetes.io/part-of": "argocd",
    99  			},
   100  		},
   101  		Data: map[string][]byte{
   102  			"admin.password":   nil,
   103  			"server.secretkey": nil,
   104  		},
   105  	}
   106  	kubeclientset := fake.NewSimpleClientset(emptyArgoCDConfigMap, argoCDSecret)
   107  	settingsManager := settings.NewSettingsManager(context.Background(), kubeclientset, fakeNamespace)
   108  	db := NewDB(fakeNamespace, settingsManager, kubeclientset)
   109  	runWatchTest(t, db, []func(old *v1alpha1.Cluster, new *v1alpha1.Cluster){
   110  		func(old *v1alpha1.Cluster, new *v1alpha1.Cluster) {
   111  			assert.Nil(t, old)
   112  			assert.Equal(t, new.Server, v1alpha1.KubernetesInternalAPIServerAddr)
   113  
   114  			_, err := db.CreateCluster(context.Background(), &v1alpha1.Cluster{
   115  				Server: v1alpha1.KubernetesInternalAPIServerAddr,
   116  				Name:   "some name",
   117  			})
   118  			assert.NoError(t, err)
   119  		},
   120  		func(old *v1alpha1.Cluster, new *v1alpha1.Cluster) {
   121  			assert.NotNil(t, old)
   122  			assert.Equal(t, new.Server, v1alpha1.KubernetesInternalAPIServerAddr)
   123  			assert.Equal(t, new.Name, "some name")
   124  
   125  			assert.NoError(t, db.DeleteCluster(context.Background(), v1alpha1.KubernetesInternalAPIServerAddr))
   126  		},
   127  		func(old *v1alpha1.Cluster, new *v1alpha1.Cluster) {
   128  			assert.Equal(t, new.Server, v1alpha1.KubernetesInternalAPIServerAddr)
   129  			assert.Equal(t, new.Name, "in-cluster")
   130  		},
   131  	})
   132  }