mirror of
				https://github.com/optim-enterprises-bv/kubernetes.git
				synced 2025-11-04 04:08:16 +00:00 
			
		
		
		
	storage/cacher: add TestGetWatchCacheResourceVersion, TestGetBookmarkAfterResourceVersionLockedFunc
This commit is contained in:
		@@ -1986,3 +1986,362 @@ func TestForgetWatcher(t *testing.T) {
 | 
			
		||||
	assertCacherInternalState(0, 0)
 | 
			
		||||
	require.Equal(t, 2, forgetCounter)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// TestGetWatchCacheResourceVersion test the following cases:
 | 
			
		||||
//
 | 
			
		||||
// +-----------------+---------------------+-----------------------+
 | 
			
		||||
// | ResourceVersion | AllowWatchBookmarks | SendInitialEvents     |
 | 
			
		||||
// +=================+=====================+=======================+
 | 
			
		||||
// | Unset           | true/false          | nil/true/false        |
 | 
			
		||||
// | 0               | true/false          | nil/true/false        |
 | 
			
		||||
// | 95             | true/false          | nil/true/false         |
 | 
			
		||||
// +-----------------+---------------------+-----------------------+
 | 
			
		||||
// where:
 | 
			
		||||
// - false indicates the value of the param was set to "false" by a test case
 | 
			
		||||
// - true  indicates the value of the param was set to "true" by a test case
 | 
			
		||||
func TestGetWatchCacheResourceVersion(t *testing.T) {
 | 
			
		||||
	listOptions := func(allowBookmarks bool, sendInitialEvents *bool, rv string) storage.ListOptions {
 | 
			
		||||
		p := storage.Everything
 | 
			
		||||
		p.AllowWatchBookmarks = allowBookmarks
 | 
			
		||||
 | 
			
		||||
		opts := storage.ListOptions{}
 | 
			
		||||
		opts.Predicate = p
 | 
			
		||||
		opts.SendInitialEvents = sendInitialEvents
 | 
			
		||||
		opts.ResourceVersion = rv
 | 
			
		||||
		return opts
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	scenarios := []struct {
 | 
			
		||||
		name string
 | 
			
		||||
		opts storage.ListOptions
 | 
			
		||||
 | 
			
		||||
		expectedWatchResourceVersion int
 | 
			
		||||
	}{
 | 
			
		||||
		// +-----------------+---------------------+-----------------------+
 | 
			
		||||
		// | ResourceVersion | AllowWatchBookmarks | SendInitialEvents     |
 | 
			
		||||
		// +=================+=====================+=======================+
 | 
			
		||||
		// | Unset           | true/false          | nil/true/false        |
 | 
			
		||||
		// +-----------------+---------------------+-----------------------+
 | 
			
		||||
		{
 | 
			
		||||
			name:                         "RV=unset, allowWatchBookmarks=true, sendInitialEvents=nil",
 | 
			
		||||
			opts:                         listOptions(true, nil, ""),
 | 
			
		||||
			expectedWatchResourceVersion: 100,
 | 
			
		||||
		},
 | 
			
		||||
		{
 | 
			
		||||
			name:                         "RV=unset, allowWatchBookmarks=true, sendInitialEvents=true",
 | 
			
		||||
			opts:                         listOptions(true, pointer.Bool(true), ""),
 | 
			
		||||
			expectedWatchResourceVersion: 100,
 | 
			
		||||
		},
 | 
			
		||||
		{
 | 
			
		||||
			name:                         "RV=unset, allowWatchBookmarks=true, sendInitialEvents=false",
 | 
			
		||||
			opts:                         listOptions(true, pointer.Bool(false), ""),
 | 
			
		||||
			expectedWatchResourceVersion: 100,
 | 
			
		||||
		},
 | 
			
		||||
		{
 | 
			
		||||
			name:                         "RV=unset, allowWatchBookmarks=false, sendInitialEvents=nil",
 | 
			
		||||
			opts:                         listOptions(false, nil, ""),
 | 
			
		||||
			expectedWatchResourceVersion: 100,
 | 
			
		||||
		},
 | 
			
		||||
		{
 | 
			
		||||
			name:                         "RV=unset, allowWatchBookmarks=false, sendInitialEvents=true, legacy",
 | 
			
		||||
			opts:                         listOptions(false, pointer.Bool(true), ""),
 | 
			
		||||
			expectedWatchResourceVersion: 100,
 | 
			
		||||
		},
 | 
			
		||||
		{
 | 
			
		||||
			name:                         "RV=unset, allowWatchBookmarks=false, sendInitialEvents=false",
 | 
			
		||||
			opts:                         listOptions(false, pointer.Bool(false), ""),
 | 
			
		||||
			expectedWatchResourceVersion: 100,
 | 
			
		||||
		},
 | 
			
		||||
		// +-----------------+---------------------+-----------------------+
 | 
			
		||||
		// | ResourceVersion | AllowWatchBookmarks | SendInitialEvents     |
 | 
			
		||||
		// +=================+=====================+=======================+
 | 
			
		||||
		// | 0               | true/false          | nil/true/false        |
 | 
			
		||||
		// +-----------------+---------------------+-----------------------+
 | 
			
		||||
		{
 | 
			
		||||
			name:                         "RV=0, allowWatchBookmarks=true, sendInitialEvents=nil",
 | 
			
		||||
			opts:                         listOptions(true, nil, "0"),
 | 
			
		||||
			expectedWatchResourceVersion: 0,
 | 
			
		||||
		},
 | 
			
		||||
		{
 | 
			
		||||
			name:                         "RV=0, allowWatchBookmarks=true, sendInitialEvents=true",
 | 
			
		||||
			opts:                         listOptions(true, pointer.Bool(true), "0"),
 | 
			
		||||
			expectedWatchResourceVersion: 0,
 | 
			
		||||
		},
 | 
			
		||||
		{
 | 
			
		||||
			name:                         "RV=0, allowWatchBookmarks=true, sendInitialEvents=false",
 | 
			
		||||
			opts:                         listOptions(true, pointer.Bool(false), "0"),
 | 
			
		||||
			expectedWatchResourceVersion: 0,
 | 
			
		||||
		},
 | 
			
		||||
		{
 | 
			
		||||
			name:                         "RV=0, allowWatchBookmarks=false, sendInitialEvents=nil",
 | 
			
		||||
			opts:                         listOptions(false, nil, "0"),
 | 
			
		||||
			expectedWatchResourceVersion: 0,
 | 
			
		||||
		},
 | 
			
		||||
		{
 | 
			
		||||
			name:                         "RV=0, allowWatchBookmarks=false, sendInitialEvents=true",
 | 
			
		||||
			opts:                         listOptions(false, pointer.Bool(true), "0"),
 | 
			
		||||
			expectedWatchResourceVersion: 0,
 | 
			
		||||
		},
 | 
			
		||||
		{
 | 
			
		||||
			name:                         "RV=0, allowWatchBookmarks=false, sendInitialEvents=false",
 | 
			
		||||
			opts:                         listOptions(false, pointer.Bool(false), "0"),
 | 
			
		||||
			expectedWatchResourceVersion: 0,
 | 
			
		||||
		},
 | 
			
		||||
		// +-----------------+---------------------+-----------------------+
 | 
			
		||||
		// | ResourceVersion | AllowWatchBookmarks | SendInitialEvents     |
 | 
			
		||||
		// +=================+=====================+=======================+
 | 
			
		||||
		// | 95             | true/false          | nil/true/false         |
 | 
			
		||||
		// +-----------------+---------------------+-----------------------+
 | 
			
		||||
		{
 | 
			
		||||
			name:                         "RV=95, allowWatchBookmarks=true, sendInitialEvents=nil",
 | 
			
		||||
			opts:                         listOptions(true, nil, "95"),
 | 
			
		||||
			expectedWatchResourceVersion: 95,
 | 
			
		||||
		},
 | 
			
		||||
		{
 | 
			
		||||
			name:                         "RV=95, allowWatchBookmarks=true, sendInitialEvents=true",
 | 
			
		||||
			opts:                         listOptions(true, pointer.Bool(true), "95"),
 | 
			
		||||
			expectedWatchResourceVersion: 95,
 | 
			
		||||
		},
 | 
			
		||||
		{
 | 
			
		||||
			name:                         "RV=95, allowWatchBookmarks=true, sendInitialEvents=false",
 | 
			
		||||
			opts:                         listOptions(true, pointer.Bool(false), "95"),
 | 
			
		||||
			expectedWatchResourceVersion: 95,
 | 
			
		||||
		},
 | 
			
		||||
		{
 | 
			
		||||
			name:                         "RV=95, allowWatchBookmarks=false, sendInitialEvents=nil",
 | 
			
		||||
			opts:                         listOptions(false, nil, "95"),
 | 
			
		||||
			expectedWatchResourceVersion: 95,
 | 
			
		||||
		},
 | 
			
		||||
		{
 | 
			
		||||
			name:                         "RV=95, allowWatchBookmarks=false, sendInitialEvents=true",
 | 
			
		||||
			opts:                         listOptions(false, pointer.Bool(true), "95"),
 | 
			
		||||
			expectedWatchResourceVersion: 95,
 | 
			
		||||
		},
 | 
			
		||||
		{
 | 
			
		||||
			name:                         "RV=95, allowWatchBookmarks=false, sendInitialEvents=false",
 | 
			
		||||
			opts:                         listOptions(false, pointer.Bool(false), "95"),
 | 
			
		||||
			expectedWatchResourceVersion: 95,
 | 
			
		||||
		},
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	for _, scenario := range scenarios {
 | 
			
		||||
		t.Run(scenario.name, func(t *testing.T) {
 | 
			
		||||
			backingStorage := &dummyStorage{}
 | 
			
		||||
			cacher, _, err := newTestCacher(backingStorage)
 | 
			
		||||
			require.NoError(t, err, "couldn't create cacher")
 | 
			
		||||
			defer cacher.Stop()
 | 
			
		||||
 | 
			
		||||
			parsedResourceVersion := 0
 | 
			
		||||
			if len(scenario.opts.ResourceVersion) > 0 {
 | 
			
		||||
				parsedResourceVersion, err = strconv.Atoi(scenario.opts.ResourceVersion)
 | 
			
		||||
				require.NoError(t, err)
 | 
			
		||||
			}
 | 
			
		||||
 | 
			
		||||
			actualResourceVersion, err := cacher.getWatchCacheResourceVersion(context.TODO(), uint64(parsedResourceVersion), scenario.opts)
 | 
			
		||||
			require.NoError(t, err)
 | 
			
		||||
			require.Equal(t, uint64(scenario.expectedWatchResourceVersion), actualResourceVersion, "received unexpected ResourceVersion")
 | 
			
		||||
		})
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// TestGetBookmarkAfterResourceVersionLockedFunc test the following cases:
 | 
			
		||||
//
 | 
			
		||||
// +-----------------+---------------------+-----------------------+
 | 
			
		||||
// | ResourceVersion | AllowWatchBookmarks | SendInitialEvents     |
 | 
			
		||||
// +=================+=====================+=======================+
 | 
			
		||||
// | Unset           | true/false          | nil/true/false        |
 | 
			
		||||
// | 0               | true/false          | nil/true/false        |
 | 
			
		||||
// | 95             | true/false          | nil/true/false         |
 | 
			
		||||
// +-----------------+---------------------+-----------------------+
 | 
			
		||||
// where:
 | 
			
		||||
// - false indicates the value of the param was set to "false" by a test case
 | 
			
		||||
// - true  indicates the value of the param was set to "true" by a test case
 | 
			
		||||
func TestGetBookmarkAfterResourceVersionLockedFunc(t *testing.T) {
 | 
			
		||||
	listOptions := func(allowBookmarks bool, sendInitialEvents *bool, rv string) storage.ListOptions {
 | 
			
		||||
		p := storage.Everything
 | 
			
		||||
		p.AllowWatchBookmarks = allowBookmarks
 | 
			
		||||
 | 
			
		||||
		opts := storage.ListOptions{}
 | 
			
		||||
		opts.Predicate = p
 | 
			
		||||
		opts.SendInitialEvents = sendInitialEvents
 | 
			
		||||
		opts.ResourceVersion = rv
 | 
			
		||||
		return opts
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	scenarios := []struct {
 | 
			
		||||
		name                      string
 | 
			
		||||
		opts                      storage.ListOptions
 | 
			
		||||
		requiredResourceVersion   int
 | 
			
		||||
		watchCacheResourceVersion int
 | 
			
		||||
 | 
			
		||||
		expectedBookmarkResourceVersion int
 | 
			
		||||
	}{
 | 
			
		||||
		// +-----------------+---------------------+-----------------------+
 | 
			
		||||
		// | ResourceVersion | AllowWatchBookmarks | SendInitialEvents     |
 | 
			
		||||
		// +=================+=====================+=======================+
 | 
			
		||||
		// | Unset           | true/false          | nil/true/false        |
 | 
			
		||||
		// +-----------------+---------------------+-----------------------+
 | 
			
		||||
		{
 | 
			
		||||
			name:                            "RV=unset, allowWatchBookmarks=true, sendInitialEvents=nil",
 | 
			
		||||
			opts:                            listOptions(true, nil, ""),
 | 
			
		||||
			requiredResourceVersion:         100,
 | 
			
		||||
			watchCacheResourceVersion:       99,
 | 
			
		||||
			expectedBookmarkResourceVersion: 0,
 | 
			
		||||
		},
 | 
			
		||||
		{
 | 
			
		||||
			name:                            "RV=unset, allowWatchBookmarks=true, sendInitialEvents=true",
 | 
			
		||||
			opts:                            listOptions(true, pointer.Bool(true), ""),
 | 
			
		||||
			requiredResourceVersion:         100,
 | 
			
		||||
			watchCacheResourceVersion:       99,
 | 
			
		||||
			expectedBookmarkResourceVersion: 100,
 | 
			
		||||
		},
 | 
			
		||||
		{
 | 
			
		||||
			name:                            "RV=unset, allowWatchBookmarks=true, sendInitialEvents=false",
 | 
			
		||||
			opts:                            listOptions(true, pointer.Bool(false), ""),
 | 
			
		||||
			requiredResourceVersion:         100,
 | 
			
		||||
			watchCacheResourceVersion:       99,
 | 
			
		||||
			expectedBookmarkResourceVersion: 0,
 | 
			
		||||
		},
 | 
			
		||||
		{
 | 
			
		||||
			name:                            "RV=unset, allowWatchBookmarks=false, sendInitialEvents=nil",
 | 
			
		||||
			opts:                            listOptions(false, nil, ""),
 | 
			
		||||
			requiredResourceVersion:         100,
 | 
			
		||||
			watchCacheResourceVersion:       99,
 | 
			
		||||
			expectedBookmarkResourceVersion: 0,
 | 
			
		||||
		},
 | 
			
		||||
		{
 | 
			
		||||
			name:                            "RV=unset, allowWatchBookmarks=false, sendInitialEvents=true",
 | 
			
		||||
			opts:                            listOptions(false, pointer.Bool(true), ""),
 | 
			
		||||
			requiredResourceVersion:         100,
 | 
			
		||||
			watchCacheResourceVersion:       99,
 | 
			
		||||
			expectedBookmarkResourceVersion: 0,
 | 
			
		||||
		},
 | 
			
		||||
		{
 | 
			
		||||
			name:                            "RV=unset, allowWatchBookmarks=false, sendInitialEvents=false",
 | 
			
		||||
			opts:                            listOptions(false, pointer.Bool(false), ""),
 | 
			
		||||
			requiredResourceVersion:         100,
 | 
			
		||||
			watchCacheResourceVersion:       99,
 | 
			
		||||
			expectedBookmarkResourceVersion: 0,
 | 
			
		||||
		},
 | 
			
		||||
		// +-----------------+---------------------+-----------------------+
 | 
			
		||||
		// | ResourceVersion | AllowWatchBookmarks | SendInitialEvents     |
 | 
			
		||||
		// +=================+=====================+=======================+
 | 
			
		||||
		// | 0               | true/false          | nil/true/false        |
 | 
			
		||||
		// +-----------------+---------------------+-----------------------+
 | 
			
		||||
		{
 | 
			
		||||
			name:                            "RV=0, allowWatchBookmarks=true, sendInitialEvents=nil",
 | 
			
		||||
			opts:                            listOptions(true, nil, "0"),
 | 
			
		||||
			requiredResourceVersion:         0,
 | 
			
		||||
			watchCacheResourceVersion:       99,
 | 
			
		||||
			expectedBookmarkResourceVersion: 0,
 | 
			
		||||
		},
 | 
			
		||||
		{
 | 
			
		||||
			name:                            "RV=0, allowWatchBookmarks=true, sendInitialEvents=true",
 | 
			
		||||
			opts:                            listOptions(true, pointer.Bool(true), "0"),
 | 
			
		||||
			requiredResourceVersion:         0,
 | 
			
		||||
			watchCacheResourceVersion:       99,
 | 
			
		||||
			expectedBookmarkResourceVersion: 99,
 | 
			
		||||
		},
 | 
			
		||||
		{
 | 
			
		||||
			name:                            "RV=0, allowWatchBookmarks=true, sendInitialEvents=false",
 | 
			
		||||
			opts:                            listOptions(true, pointer.Bool(false), "0"),
 | 
			
		||||
			requiredResourceVersion:         0,
 | 
			
		||||
			watchCacheResourceVersion:       99,
 | 
			
		||||
			expectedBookmarkResourceVersion: 0,
 | 
			
		||||
		},
 | 
			
		||||
		{
 | 
			
		||||
			name:                            "RV=0, allowWatchBookmarks=false, sendInitialEvents=nil",
 | 
			
		||||
			opts:                            listOptions(false, nil, "0"),
 | 
			
		||||
			requiredResourceVersion:         0,
 | 
			
		||||
			watchCacheResourceVersion:       99,
 | 
			
		||||
			expectedBookmarkResourceVersion: 0,
 | 
			
		||||
		},
 | 
			
		||||
		{
 | 
			
		||||
			name:                            "RV=0, allowWatchBookmarks=false, sendInitialEvents=true",
 | 
			
		||||
			opts:                            listOptions(false, pointer.Bool(true), "0"),
 | 
			
		||||
			requiredResourceVersion:         0,
 | 
			
		||||
			watchCacheResourceVersion:       99,
 | 
			
		||||
			expectedBookmarkResourceVersion: 0,
 | 
			
		||||
		},
 | 
			
		||||
		{
 | 
			
		||||
			name:                            "RV=0, allowWatchBookmarks=false, sendInitialEvents=false",
 | 
			
		||||
			opts:                            listOptions(false, pointer.Bool(false), "0"),
 | 
			
		||||
			requiredResourceVersion:         0,
 | 
			
		||||
			watchCacheResourceVersion:       99,
 | 
			
		||||
			expectedBookmarkResourceVersion: 0,
 | 
			
		||||
		},
 | 
			
		||||
		// +-----------------+---------------------+-----------------------+
 | 
			
		||||
		// | ResourceVersion | AllowWatchBookmarks | SendInitialEvents     |
 | 
			
		||||
		// +=================+=====================+=======================+
 | 
			
		||||
		// | 95             | true/false          | nil/true/false         |
 | 
			
		||||
		// +-----------------+---------------------+-----------------------+
 | 
			
		||||
		{
 | 
			
		||||
			name:                            "RV=95, allowWatchBookmarks=true, sendInitialEvents=nil",
 | 
			
		||||
			opts:                            listOptions(true, nil, "95"),
 | 
			
		||||
			requiredResourceVersion:         0,
 | 
			
		||||
			watchCacheResourceVersion:       99,
 | 
			
		||||
			expectedBookmarkResourceVersion: 0,
 | 
			
		||||
		},
 | 
			
		||||
		{
 | 
			
		||||
			name:                            "RV=95, allowWatchBookmarks=true, sendInitialEvents=true",
 | 
			
		||||
			opts:                            listOptions(true, pointer.Bool(true), "95"),
 | 
			
		||||
			requiredResourceVersion:         0,
 | 
			
		||||
			watchCacheResourceVersion:       99,
 | 
			
		||||
			expectedBookmarkResourceVersion: 95,
 | 
			
		||||
		},
 | 
			
		||||
		{
 | 
			
		||||
			name:                            "RV=95, allowWatchBookmarks=true, sendInitialEvents=false",
 | 
			
		||||
			opts:                            listOptions(true, pointer.Bool(false), "95"),
 | 
			
		||||
			requiredResourceVersion:         0,
 | 
			
		||||
			watchCacheResourceVersion:       99,
 | 
			
		||||
			expectedBookmarkResourceVersion: 0,
 | 
			
		||||
		},
 | 
			
		||||
		{
 | 
			
		||||
			name:                            "RV=95, allowWatchBookmarks=false, sendInitialEvents=nil",
 | 
			
		||||
			opts:                            listOptions(false, nil, "95"),
 | 
			
		||||
			requiredResourceVersion:         100,
 | 
			
		||||
			watchCacheResourceVersion:       99,
 | 
			
		||||
			expectedBookmarkResourceVersion: 0,
 | 
			
		||||
		},
 | 
			
		||||
		{
 | 
			
		||||
			name:                            "RV=95, allowWatchBookmarks=false, sendInitialEvents=true",
 | 
			
		||||
			opts:                            listOptions(false, pointer.Bool(true), "95"),
 | 
			
		||||
			requiredResourceVersion:         0,
 | 
			
		||||
			watchCacheResourceVersion:       99,
 | 
			
		||||
			expectedBookmarkResourceVersion: 0,
 | 
			
		||||
		},
 | 
			
		||||
		{
 | 
			
		||||
			name:                            "RV=95, allowWatchBookmarks=false, sendInitialEvents=false",
 | 
			
		||||
			opts:                            listOptions(false, pointer.Bool(false), "95"),
 | 
			
		||||
			requiredResourceVersion:         0,
 | 
			
		||||
			watchCacheResourceVersion:       99,
 | 
			
		||||
			expectedBookmarkResourceVersion: 0,
 | 
			
		||||
		},
 | 
			
		||||
	}
 | 
			
		||||
	for _, scenario := range scenarios {
 | 
			
		||||
		t.Run(scenario.name, func(t *testing.T) {
 | 
			
		||||
			backingStorage := &dummyStorage{}
 | 
			
		||||
			cacher, _, err := newTestCacher(backingStorage)
 | 
			
		||||
			require.NoError(t, err, "couldn't create cacher")
 | 
			
		||||
 | 
			
		||||
			defer cacher.Stop()
 | 
			
		||||
			if err := cacher.ready.wait(context.Background()); err != nil {
 | 
			
		||||
				t.Fatalf("unexpected error waiting for the cache to be ready")
 | 
			
		||||
			}
 | 
			
		||||
 | 
			
		||||
			cacher.watchCache.UpdateResourceVersion(fmt.Sprintf("%d", scenario.watchCacheResourceVersion))
 | 
			
		||||
			parsedResourceVersion := 0
 | 
			
		||||
			if len(scenario.opts.ResourceVersion) > 0 {
 | 
			
		||||
				parsedResourceVersion, err = strconv.Atoi(scenario.opts.ResourceVersion)
 | 
			
		||||
				require.NoError(t, err)
 | 
			
		||||
			}
 | 
			
		||||
 | 
			
		||||
			getBookMarkFn, err := cacher.getBookmarkAfterResourceVersionLockedFunc(uint64(parsedResourceVersion), uint64(scenario.requiredResourceVersion), scenario.opts)
 | 
			
		||||
			require.NoError(t, err)
 | 
			
		||||
			cacher.watchCache.RLock()
 | 
			
		||||
			defer cacher.watchCache.RUnlock()
 | 
			
		||||
			getBookMarkResourceVersion := getBookMarkFn()
 | 
			
		||||
			require.Equal(t, uint64(scenario.expectedBookmarkResourceVersion), getBookMarkResourceVersion, "received unexpected ResourceVersion")
 | 
			
		||||
		})
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user