(t *testing.T)
| 2859 | } |
| 2860 | |
| 2861 | func 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 | } |
nothing calls this directly
no test coverage detected