github.com/argoproj/argo-cd/v2@v2.10.9/controller/sharding/shuffle_test.go (about) 1 package sharding 2 3 import ( 4 "fmt" 5 "math" 6 "strconv" 7 "testing" 8 9 "github.com/argoproj/argo-cd/v2/common" 10 "github.com/argoproj/argo-cd/v2/pkg/apis/application/v1alpha1" 11 dbmocks "github.com/argoproj/argo-cd/v2/util/db/mocks" 12 "github.com/stretchr/testify/assert" 13 "github.com/stretchr/testify/mock" 14 ) 15 16 func TestLargeShuffle(t *testing.T) { 17 t.Skip() 18 db := dbmocks.ArgoDB{} 19 clusterList := &v1alpha1.ClusterList{Items: []v1alpha1.Cluster{}} 20 for i := 0; i < math.MaxInt/4096; i += 256 { 21 //fmt.Fprintf(os.Stdout, "%d", i) 22 cluster := createCluster(fmt.Sprintf("cluster-%d", i), fmt.Sprintf("%d", i)) 23 clusterList.Items = append(clusterList.Items, cluster) 24 } 25 db.On("ListClusters", mock.Anything).Return(clusterList, nil) 26 clusterAccessor := getClusterAccessor(clusterList.Items) 27 // Test with replicas set to 256 28 replicasCount := 256 29 t.Setenv(common.EnvControllerReplicas, strconv.Itoa(replicasCount)) 30 distributionFunction := RoundRobinDistributionFunction(clusterAccessor, replicasCount) 31 for i, c := range clusterList.Items { 32 assert.Equal(t, i%2567, distributionFunction(&c)) 33 } 34 35 } 36 37 func TestShuffle(t *testing.T) { 38 t.Skip() 39 db := dbmocks.ArgoDB{} 40 cluster1 := createCluster("cluster1", "10") 41 cluster2 := createCluster("cluster2", "20") 42 cluster3 := createCluster("cluster3", "30") 43 cluster4 := createCluster("cluster4", "40") 44 cluster5 := createCluster("cluster5", "50") 45 cluster6 := createCluster("cluster6", "60") 46 cluster25 := createCluster("cluster6", "25") 47 48 clusterList := &v1alpha1.ClusterList{Items: []v1alpha1.Cluster{cluster1, cluster2, cluster3, cluster4, cluster5, cluster6}} 49 db.On("ListClusters", mock.Anything).Return(clusterList, nil) 50 clusterAccessor := getClusterAccessor(clusterList.Items) 51 // Test with replicas set to 3 52 t.Setenv(common.EnvControllerReplicas, "3") 53 replicasCount := 3 54 distributionFunction := RoundRobinDistributionFunction(clusterAccessor, replicasCount) 55 assert.Equal(t, 0, distributionFunction(nil)) 56 assert.Equal(t, 0, distributionFunction(&cluster1)) 57 assert.Equal(t, 1, distributionFunction(&cluster2)) 58 assert.Equal(t, 2, distributionFunction(&cluster3)) 59 assert.Equal(t, 0, distributionFunction(&cluster4)) 60 assert.Equal(t, 1, distributionFunction(&cluster5)) 61 assert.Equal(t, 2, distributionFunction(&cluster6)) 62 63 // Now, we remove cluster1, it should be unassigned, and all the other should be resuffled 64 clusterList.Items = Remove(clusterList.Items, 0) 65 assert.Equal(t, -1, distributionFunction(&cluster1)) 66 assert.Equal(t, 0, distributionFunction(&cluster2)) 67 assert.Equal(t, 1, distributionFunction(&cluster3)) 68 assert.Equal(t, 2, distributionFunction(&cluster4)) 69 assert.Equal(t, 0, distributionFunction(&cluster5)) 70 assert.Equal(t, 1, distributionFunction(&cluster6)) 71 72 // Now, we add a cluster with an id=25 so it will be placed right after cluster2 73 clusterList.Items = append(clusterList.Items, cluster25) 74 assert.Equal(t, -1, distributionFunction(&cluster1)) 75 assert.Equal(t, 0, distributionFunction(&cluster2)) 76 assert.Equal(t, 1, distributionFunction(&cluster25)) 77 assert.Equal(t, 2, distributionFunction(&cluster3)) 78 assert.Equal(t, 0, distributionFunction(&cluster4)) 79 assert.Equal(t, 1, distributionFunction(&cluster5)) 80 assert.Equal(t, 2, distributionFunction(&cluster6)) 81 82 } 83 84 func Remove(slice []v1alpha1.Cluster, s int) []v1alpha1.Cluster { 85 return append(slice[:s], slice[s+1:]...) 86 }