(t *testing.T)
| 73 | func noopDeleteMetrics(user, labelSetStr string, removeUser bool) {} |
| 74 | |
| 75 | func TestLabelSetTracker_UpdateMetrics(t *testing.T) { |
| 76 | tracker := NewLabelSetTracker() |
| 77 | userID := "1" |
| 78 | userID2 := "2" |
| 79 | userID3 := "3" |
| 80 | lbls := labels.FromStrings("foo", "bar") |
| 81 | lbls2 := labels.FromStrings("foo", "baz") |
| 82 | tracker.Track(userID, 0, lbls) |
| 83 | tracker.Track(userID, 1, lbls2) |
| 84 | tracker.Track(userID2, 0, lbls) |
| 85 | tracker.Track(userID2, 1, lbls2) |
| 86 | tracker.Track(userID3, 0, lbls) |
| 87 | tracker.Track(userID3, 1, lbls2) |
| 88 | |
| 89 | deleteCalls := make(map[string]struct{}) |
| 90 | mockDeleteMetrics := func(user, labelSetStr string, removeUser bool) { |
| 91 | deleteCalls[formatDeleteCallString(user, labelSetStr, removeUser)] = struct{}{} |
| 92 | } |
| 93 | |
| 94 | userSet := map[string]map[uint64]struct { |
| 95 | }{ |
| 96 | userID: {0: struct{}{}, 1: struct{}{}}, |
| 97 | userID2: {0: struct{}{}, 1: struct{}{}}, |
| 98 | userID3: {0: struct{}{}, 1: struct{}{}}, |
| 99 | } |
| 100 | // No user or label set removed, no change. |
| 101 | tracker.UpdateMetrics(userSet, mockDeleteMetrics) |
| 102 | require.Equal(t, 0, len(deleteCalls)) |
| 103 | |
| 104 | userSet = map[string]map[uint64]struct { |
| 105 | }{ |
| 106 | userID: {0: struct{}{}, 1: struct{}{}}, |
| 107 | userID2: {1: struct{}{}}, |
| 108 | userID3: {0: struct{}{}}, |
| 109 | } |
| 110 | // LabelSet removed from user 2 and 3 |
| 111 | tracker.UpdateMetrics(userSet, mockDeleteMetrics) |
| 112 | require.Equal(t, 2, len(deleteCalls)) |
| 113 | _, ok := deleteCalls[formatDeleteCallString(userID2, lbls.String(), false)] |
| 114 | require.True(t, ok) |
| 115 | _, ok = deleteCalls[formatDeleteCallString(userID3, lbls2.String(), false)] |
| 116 | require.True(t, ok) |
| 117 | |
| 118 | userSet = map[string]map[uint64]struct { |
| 119 | }{ |
| 120 | userID: {0: struct{}{}, 1: struct{}{}}, |
| 121 | userID2: {1: struct{}{}}, |
| 122 | userID3: {}, |
| 123 | } |
| 124 | // User 3 doesn't have limits anymore. Remove user. |
| 125 | tracker.UpdateMetrics(userSet, mockDeleteMetrics) |
| 126 | require.Equal(t, 3, len(deleteCalls)) |
| 127 | _, ok = deleteCalls[formatDeleteCallString(userID3, "", true)] |
| 128 | require.True(t, ok) |
| 129 | |
| 130 | userSet = map[string]map[uint64]struct { |
| 131 | }{ |
| 132 | userID3: {}, |
nothing calls this directly
no test coverage detected