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  }