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

Function TestInvalidateChannels

auth/auth_test.go:2861–2958  ·  view source on GitHub ↗
(t *testing.T)

Source from the content-addressed store, hash-verified

2859}
2860
2861func TestInvalidateChannels(t *testing.T) {
2862 testCases := []struct {
2863 name string
2864 isUser bool
2865 }{
2866 {
2867 name: "User",
2868 isUser: true,
2869 },
2870 {
2871 name: "Role",
2872 isUser: false,
2873 },
2874 }
2875
2876 for _, testCase := range testCases {
2877 t.Run(testCase.name, func(t *testing.T) {
2878 ctx := base.TestCtx(t)
2879 bucket := base.GetTestBucket(t)
2880 defer bucket.Close(ctx)
2881
2882 leakyBucket := base.NewLeakyBucket(bucket, base.LeakyBucketConfig{})
2883 leakyDataStore, ok := base.AsLeakyDataStore(leakyBucket.DefaultDataStore())
2884 require.True(t, ok)
2885
2886 auth := NewTestAuthenticator(t, leakyDataStore, nil, DefaultAuthenticatorOptions(ctx))
2887
2888 // Invalidate channels on non-existent user / role and ensure no error
2889 err := auth.InvalidateDefaultChannels(testCase.name, testCase.isUser, 0)
2890 assert.NoError(t, err)
2891
2892 // Create user / role
2893 var princ Principal
2894 if testCase.isUser {
2895 princ, err = auth.NewUser(testCase.name, "pass", nil)
2896 } else {
2897 princ, err = auth.NewRole(testCase.name, nil)
2898 }
2899 assert.NoError(t, err)
2900
2901 err = auth.Save(princ)
2902 assert.NoError(t, err)
2903
2904 // Invalidate channels at invalSeq but cause cas retry by setting to 5
2905 enableRetry := false
2906 // If subdoc operations are supported, perform an initial invalidation at seq 5
2907 if leakyBucket.IsSupported(sgbucket.BucketStoreFeatureSubdocOperations) {
2908 err := auth.InvalidateDefaultChannels(testCase.name, testCase.isUser, 5)
2909 assert.NoError(t, err)
2910
2911 } else {
2912 // If subdoc ops aren't supported, use leakyBucket to invalidate
2913 leakyDataStore.SetUpdateCallback(func(key string) {
2914 if enableRetry {
2915 enableRetry = false
2916 err = auth.InvalidateDefaultChannels(testCase.name, testCase.isUser, 5)
2917 assert.NoError(t, err)
2918 }

Callers

nothing calls this directly

Calls 15

DefaultDataStoreMethod · 0.95
IsSupportedMethod · 0.95
TestCtxFunction · 0.92
GetTestBucketFunction · 0.92
NewLeakyBucketFunction · 0.92
AsLeakyDataStoreFunction · 0.92
NewTestAuthenticatorFunction · 0.85
NewUserMethod · 0.80
NewRoleMethod · 0.80
SaveMethod · 0.80

Tested by

no test coverage detected