fix: unified resource server list queries order column (#108094)

This commit is contained in:
Mustafa Sencer Özcan
2025-07-16 08:09:31 +02:00
committed by GitHub
parent 5b82e05697
commit 4a779c4ccb
16 changed files with 123 additions and 43 deletions
+82 -15
View File
@@ -175,8 +175,8 @@ func runTestIntegrationBackendHappyPath(t *testing.T, backend resource.StorageBa
require.NoError(t, err)
require.Nil(t, resp.Error)
require.Len(t, resp.Items, 2)
require.Contains(t, string(resp.Items[0].Value), "item2 MODIFIED")
require.Contains(t, string(resp.Items[1].Value), "item3 ADDED")
require.Contains(t, string(resp.Items[0].Value), "item3 ADDED")
require.Contains(t, string(resp.Items[1].Value), "item2 MODIFIED")
require.GreaterOrEqual(t, resp.ResourceVersion, rv5) // rv5 is the latest resource version
})
@@ -372,11 +372,11 @@ func runTestIntegrationBackendList(t *testing.T, backend resource.StorageBackend
require.NoError(t, err)
require.Nil(t, res.Error)
require.Len(t, res.Items, 5)
// should be sorted by key ASC
// should be sorted by resource_version ASC
require.Contains(t, string(res.Items[0].Value), "item1 ADDED")
require.Contains(t, string(res.Items[1].Value), "item2 MODIFIED")
require.Contains(t, string(res.Items[2].Value), "item4 ADDED")
require.Contains(t, string(res.Items[3].Value), "item5 ADDED")
require.Contains(t, string(res.Items[1].Value), "item4 ADDED")
require.Contains(t, string(res.Items[2].Value), "item5 ADDED")
require.Contains(t, string(res.Items[3].Value), "item2 MODIFIED")
require.Contains(t, string(res.Items[4].Value), "item6 ADDED")
require.Empty(t, res.NextPageToken)
@@ -399,8 +399,8 @@ func runTestIntegrationBackendList(t *testing.T, backend resource.StorageBackend
continueToken, err := resource.GetContinueToken(res.NextPageToken)
require.NoError(t, err)
require.Contains(t, string(res.Items[0].Value), "item1 ADDED")
require.Contains(t, string(res.Items[1].Value), "item2 MODIFIED")
require.Contains(t, string(res.Items[2].Value), "item4 ADDED")
require.Contains(t, string(res.Items[1].Value), "item4 ADDED")
require.Contains(t, string(res.Items[2].Value), "item5 ADDED")
require.GreaterOrEqual(t, continueToken.ResourceVersion, rv8)
})
@@ -438,13 +438,12 @@ func runTestIntegrationBackendList(t *testing.T, backend resource.StorageBackend
},
})
require.NoError(t, err)
require.NoError(t, err)
require.Nil(t, res.Error)
require.Len(t, res.Items, 3)
t.Log(res.Items)
require.Contains(t, string(res.Items[0].Value), "item1 ADDED")
require.Contains(t, string(res.Items[1].Value), "item2 MODIFIED")
require.Contains(t, string(res.Items[2].Value), "item4 ADDED")
require.Contains(t, string(res.Items[1].Value), "item4 ADDED")
require.Contains(t, string(res.Items[2].Value), "item5 ADDED")
continueToken, err := resource.GetContinueToken(res.NextPageToken)
require.NoError(t, err)
@@ -471,15 +470,84 @@ func runTestIntegrationBackendList(t *testing.T, backend resource.StorageBackend
require.NoError(t, err)
require.Nil(t, res.Error)
require.Len(t, res.Items, 2)
t.Log(res.Items)
require.Contains(t, string(res.Items[0].Value), "item4 ADDED")
require.Contains(t, string(res.Items[1].Value), "item5 ADDED")
require.Contains(t, string(res.Items[0].Value), "item5 ADDED")
require.Contains(t, string(res.Items[1].Value), "item2 MODIFIED")
continueToken, err = resource.GetContinueToken(res.NextPageToken)
require.NoError(t, err)
require.Equal(t, rv8, continueToken.ResourceVersion)
require.Equal(t, int64(4), continueToken.StartOffset)
})
t.Run("Paginate through latest items one by one", func(t *testing.T) {
baseKey := &resourcepb.ResourceKey{
Namespace: ns,
Group: "group",
Resource: "resource",
}
expectedItems := []string{"item1 ADDED", "item4 ADDED", "item5 ADDED", "item2 MODIFIED", "item6 ADDED"}
var allItems []*resourcepb.ResourceWrapper
var nextPageToken string
for i, expectedValue := range expectedItems {
req := &resourcepb.ListRequest{
Limit: 1,
NextPageToken: nextPageToken,
Options: &resourcepb.ListOptions{
Key: baseKey,
},
}
res, err := server.List(ctx, req)
require.NoError(t, err)
require.Nil(t, res.Error)
require.Len(t, res.Items, 1)
require.Contains(t, string(res.Items[0].Value), expectedValue)
allItems = append(allItems, res.Items[0])
if i < len(expectedItems)-1 {
require.NotEmpty(t, res.NextPageToken, "should have a continue token for page %d", i+1)
nextPageToken = res.NextPageToken
} else {
require.Empty(t, res.NextPageToken, "should not have a continue token on the last page")
}
}
require.Len(t, allItems, len(expectedItems))
})
t.Run("Paginate latest with a limit larger than remaining items", func(t *testing.T) {
baseKey := &resourcepb.ResourceKey{
Namespace: ns,
Group: "group",
Resource: "resource",
}
// Request first 3 items (out of 5 total)
req := &resourcepb.ListRequest{
Limit: 3,
Options: &resourcepb.ListOptions{
Key: baseKey,
},
}
res1, err := server.List(ctx, req)
require.NoError(t, err)
require.Nil(t, res1.Error)
require.Len(t, res1.Items, 3)
require.NotEmpty(t, res1.NextPageToken)
require.Contains(t, string(res1.Items[0].Value), "item1 ADDED")
require.Contains(t, string(res1.Items[1].Value), "item4 ADDED")
require.Contains(t, string(res1.Items[2].Value), "item5 ADDED")
// Request next page with a large limit
req.Limit = 10 // Larger than the 2 remaining items
req.NextPageToken = res1.NextPageToken
res2, err := server.List(ctx, req)
require.NoError(t, err)
require.Nil(t, res2.Error)
require.Len(t, res2.Items, 2) // Should only get the 2 remaining items
require.Contains(t, string(res2.Items[0].Value), "item2 MODIFIED")
require.Contains(t, string(res2.Items[1].Value), "item6 ADDED")
require.Empty(t, res2.NextPageToken, "should be no continue token on the last page")
})
}
func runTestIntegrationBackendListHistory(t *testing.T, backend resource.StorageBackend, nsPrefix string) {
@@ -659,7 +727,6 @@ func runTestIntegrationBackendListHistory(t *testing.T, backend resource.Storage
require.NoError(t, err)
require.Nil(t, res.Error)
require.Len(t, res.Items, 2)
t.Log(res.Items)
require.Contains(t, string(res.Items[0].Value), "item1 MODIFIED")
require.Equal(t, rvHistory2, res.Items[0].ResourceVersion)
require.Contains(t, string(res.Items[1].Value), "item1 MODIFIED")