MCPcopy Create free account
hub / github.com/couchbase/sync_gateway / TestBootstrapRefCounting

Function TestBootstrapRefCounting

base/bootstrap_test.go:41–132  ·  view source on GitHub ↗
(t *testing.T)

Source from the content-addressed store, hash-verified

39}
40
41func TestBootstrapRefCounting(t *testing.T) {
42 if UnitTestUrlIsWalrus() {
43 t.Skip("Test requires making a connection to CBS")
44 }
45
46 ctx := TestCtx(t)
47 require.EventuallyWithT(t, func(c *assert.CollectT) {
48 assert.Equal(c, int32(GTestBucketPool.numBuckets), GTestBucketPool.stats.TotalBucketInitCount.Load())
49 }, 2*time.Minute, 5*time.Millisecond) // Wait for bucket pool to be initialized, since GetConfigBuckets requires equal buckets to TestBucketPool.numBuckets
50
51 var perBucketCredentialsConfig map[string]*CredentialsConfig
52 forcePerBucketAuth := false
53 cluster, err := NewCouchbaseCluster(ctx, TestClusterSpec(t), forcePerBucketAuth, perBucketCredentialsConfig, TestUseXattrs(), CachedClusterConnections)
54 require.NoError(t, err)
55 defer cluster.Close()
56 require.NotNil(t, cluster)
57
58 clusterConnection, err := cluster.getClusterConnection()
59 require.NoError(t, err)
60 require.NotNil(t, clusterConnection)
61
62 buckets, err := cluster.GetConfigBuckets()
63 require.NoError(t, err)
64 // ensure these are sorted for determinstic bootstraping
65 sortedBuckets := make([]string, len(buckets))
66 copy(sortedBuckets, buckets)
67 sort.Strings(sortedBuckets)
68 require.Equal(t, sortedBuckets, buckets)
69
70 var testBuckets []string
71 for _, bucket := range buckets {
72 if strings.HasPrefix(bucket, tbpBucketNamePrefix) {
73 testBuckets = append(testBuckets, bucket)
74 }
75
76 }
77 require.Len(t, testBuckets, GTestBucketPool.numBuckets)
78 // GetConfigBuckets doesn't cache connections, it uses cluster connection to determine number of buckets
79 require.Len(t, cluster.cachedBucketConnections.buckets, 0)
80
81 primeBucketConnectionCache := func(bucketNames []string) {
82 // Bucket CRUD ops do cache connections
83 for _, bucketName := range bucketNames {
84 exists, err := cluster.KeyExists(ctx, bucketName, "keyThatDoesNotExist")
85 require.NoError(t, err)
86 require.False(t, exists)
87 }
88 }
89
90 primeBucketConnectionCache(buckets)
91 require.Len(t, cluster.cachedBucketConnections.buckets, len(buckets))
92
93 // call removeOutdatedBuckets as no-op
94 cluster.cachedBucketConnections.removeOutdatedBuckets(SetOf(buckets...))
95 require.Len(t, cluster.cachedBucketConnections.buckets, len(buckets))
96
97 // call removeOutdatedBuckets to remove all cached buckets, call multiple times to make sure idempotent
98 for i := 0; i < 3; i++ {

Callers

nothing calls this directly

Calls 15

CloseMethod · 0.95
getClusterConnectionMethod · 0.95
GetConfigBucketsMethod · 0.95
KeyExistsMethod · 0.95
getBucketMethod · 0.95
UnitTestUrlIsWalrusFunction · 0.85
TestCtxFunction · 0.85
NewCouchbaseClusterFunction · 0.85
TestClusterSpecFunction · 0.85
LoadMethod · 0.80
removeOutdatedBucketsMethod · 0.80
DoneMethod · 0.80

Tested by

no test coverage detected