github.com/argoproj/argo-cd/v3@v3.2.1/util/db/cluster_norace_test.go (about) 1 //go:build !race 2 // +build !race 3 4 package db 5 6 import ( 7 "testing" 8 9 corev1 "k8s.io/api/core/v1" 10 metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" 11 12 "github.com/argoproj/argo-cd/v3/common" 13 14 "github.com/stretchr/testify/assert" 15 "k8s.io/client-go/kubernetes/fake" 16 17 "github.com/argoproj/argo-cd/v3/pkg/apis/application/v1alpha1" 18 "github.com/argoproj/argo-cd/v3/util/settings" 19 ) 20 21 func TestWatchClusters_CreateRemoveCluster(t *testing.T) { 22 // !race: 23 // Intermittent failure when running TestWatchClusters_LocalClusterModifications with -race, likely due to race condition 24 // https://github.com/argoproj/argo-cd/issues/4755 25 emptyArgoCDConfigMap := &corev1.ConfigMap{ 26 ObjectMeta: metav1.ObjectMeta{ 27 Name: common.ArgoCDConfigMapName, 28 Namespace: fakeNamespace, 29 Labels: map[string]string{ 30 "app.kubernetes.io/part-of": "argocd", 31 }, 32 }, 33 Data: map[string]string{}, 34 } 35 argoCDSecret := &corev1.Secret{ 36 ObjectMeta: metav1.ObjectMeta{ 37 Name: common.ArgoCDSecretName, 38 Namespace: fakeNamespace, 39 Labels: map[string]string{ 40 "app.kubernetes.io/part-of": "argocd", 41 }, 42 }, 43 Data: map[string][]byte{ 44 "admin.password": nil, 45 "server.secretkey": nil, 46 }, 47 } 48 kubeclientset := fake.NewClientset(emptyArgoCDConfigMap, argoCDSecret) 49 settingsManager := settings.NewSettingsManager(t.Context(), kubeclientset, fakeNamespace) 50 db := NewDB(fakeNamespace, settingsManager, kubeclientset) 51 completed := runWatchTest(t, db, []func(old *v1alpha1.Cluster, new *v1alpha1.Cluster){ 52 func(old *v1alpha1.Cluster, new *v1alpha1.Cluster) { 53 assert.Nil(t, old) 54 assert.Equal(t, v1alpha1.KubernetesInternalAPIServerAddr, new.Server) 55 56 _, err := db.CreateCluster(t.Context(), &v1alpha1.Cluster{ 57 Server: "https://minikube", 58 Name: "minikube", 59 }) 60 assert.NoError(t, err) 61 }, 62 func(old *v1alpha1.Cluster, new *v1alpha1.Cluster) { 63 assert.Nil(t, old) 64 assert.Equal(t, "https://minikube", new.Server) 65 assert.Equal(t, "minikube", new.Name) 66 67 assert.NoError(t, db.DeleteCluster(t.Context(), "https://minikube")) 68 }, 69 func(old *v1alpha1.Cluster, new *v1alpha1.Cluster) { 70 assert.Nil(t, new) 71 assert.Equal(t, "https://minikube", old.Server) 72 }, 73 }) 74 assert.True(t, completed, "Failed due to timeout") 75 } 76 77 func TestWatchClusters_LocalClusterModifications(t *testing.T) { 78 // !race: 79 // Intermittent failure when running TestWatchClusters_LocalClusterModifications with -race, likely due to race condition 80 // https://github.com/argoproj/argo-cd/issues/4755 81 emptyArgoCDConfigMap := &corev1.ConfigMap{ 82 ObjectMeta: metav1.ObjectMeta{ 83 Name: common.ArgoCDConfigMapName, 84 Namespace: fakeNamespace, 85 Labels: map[string]string{ 86 "app.kubernetes.io/part-of": "argocd", 87 }, 88 }, 89 Data: map[string]string{}, 90 } 91 argoCDSecret := &corev1.Secret{ 92 ObjectMeta: metav1.ObjectMeta{ 93 Name: common.ArgoCDSecretName, 94 Namespace: fakeNamespace, 95 Labels: map[string]string{ 96 "app.kubernetes.io/part-of": "argocd", 97 }, 98 }, 99 Data: map[string][]byte{ 100 "admin.password": nil, 101 "server.secretkey": nil, 102 }, 103 } 104 kubeclientset := fake.NewClientset(emptyArgoCDConfigMap, argoCDSecret) 105 settingsManager := settings.NewSettingsManager(t.Context(), kubeclientset, fakeNamespace) 106 db := NewDB(fakeNamespace, settingsManager, kubeclientset) 107 completed := runWatchTest(t, db, []func(old *v1alpha1.Cluster, new *v1alpha1.Cluster){ 108 func(old *v1alpha1.Cluster, new *v1alpha1.Cluster) { 109 assert.Nil(t, old) 110 assert.Equal(t, v1alpha1.KubernetesInternalAPIServerAddr, new.Server) 111 112 _, err := db.CreateCluster(t.Context(), &v1alpha1.Cluster{ 113 Server: v1alpha1.KubernetesInternalAPIServerAddr, 114 Name: "some name", 115 }) 116 assert.NoError(t, err) 117 }, 118 func(old *v1alpha1.Cluster, new *v1alpha1.Cluster) { 119 assert.NotNil(t, old) 120 assert.Equal(t, v1alpha1.KubernetesInternalAPIServerAddr, new.Server) 121 assert.Equal(t, "some name", new.Name) 122 123 assert.NoError(t, db.DeleteCluster(t.Context(), v1alpha1.KubernetesInternalAPIServerAddr)) 124 }, 125 func(_ *v1alpha1.Cluster, new *v1alpha1.Cluster) { 126 assert.Equal(t, v1alpha1.KubernetesInternalAPIServerAddr, new.Server) 127 assert.Equal(t, "in-cluster", new.Name) 128 }, 129 }) 130 assert.True(t, completed, "Failed due to timeout") 131 } 132 133 func TestWatchClusters_LocalClusterModificationsWhenDisabled(t *testing.T) { 134 // !race: 135 // Intermittent failure when running TestWatchClusters_LocalClusterModifications with -race, likely due to race condition 136 // https://github.com/argoproj/argo-cd/issues/4755 137 argoCDConfigMapWithInClusterServerAddressDisabled := &corev1.ConfigMap{ 138 ObjectMeta: metav1.ObjectMeta{ 139 Name: common.ArgoCDConfigMapName, 140 Namespace: fakeNamespace, 141 Labels: map[string]string{ 142 "app.kubernetes.io/part-of": "argocd", 143 }, 144 }, 145 Data: map[string]string{"cluster.inClusterEnabled": "false"}, 146 } 147 argoCDSecret := &corev1.Secret{ 148 ObjectMeta: metav1.ObjectMeta{ 149 Name: common.ArgoCDSecretName, 150 Namespace: fakeNamespace, 151 Labels: map[string]string{ 152 "app.kubernetes.io/part-of": "argocd", 153 }, 154 }, 155 Data: map[string][]byte{ 156 "admin.password": nil, 157 "server.secretkey": nil, 158 }, 159 } 160 kubeclientset := fake.NewClientset(argoCDConfigMapWithInClusterServerAddressDisabled, argoCDSecret) 161 settingsManager := settings.NewSettingsManager(t.Context(), kubeclientset, fakeNamespace) 162 db := NewDB(fakeNamespace, settingsManager, kubeclientset) 163 completed := runWatchTest(t, db, []func(_ *v1alpha1.Cluster, _ *v1alpha1.Cluster){ 164 func(_ *v1alpha1.Cluster, _ *v1alpha1.Cluster) { 165 assert.Fail(t, "The in-cluster should not be added when disabled") 166 }, 167 }) 168 assert.False(t, completed, "Expecting the method to never complete because no cluster is ever added") 169 }