mirror of
https://github.com/cirruslabs/orchard.git
synced 2026-09-30 03:51:43 +02:00
* Add pagination support for listing VM events Introduced a paginated event listing API, added support for pagination parameters in the request, and included cursor-based navigation using headers. Relevant tests and Badger store implementations were updated to support the new logic. * Remove support for ordering VM events Dropped `ListOrder` type, `order` query parameter, and related logic for ordering VM events. Updated tests, API schema, and Badger store to reflect the removal. * Remove invalid VM events ordering test Deleted a test case for invalid VM events ordering since the `order` query parameter and related functionality have been removed. * Add support for ordering VM events Implemented `order` query parameter for specifying sort order (ascending/descending) of VM events. Updated API schema, Badger store, and added related tests. * Add support for limiting and ordering VM logs Introduced `--limit` and `--order` flags for controlling the number of log lines and their sort order (ascending/descending). Updated API client to handle new options. * Update internal/controller/store/badger/badger_events.go Co-authored-by: Nikolay Edigaryev <edigaryev@gmail.com> * fix: address PR review feedback - switch logs CLI to --tail with desc ordering - reuse ParseLogsOrder in controller with helpful errors - always use ListEventsPage and scope event cursors - move events pagination coverage to integration test 🤖 Generated with [Codex](https://chatgpt.com/codex) Co-Authored-By: Codex <codex@openai.com> * refactor: simplify prefix trimming and improve error formatting - Replaced manual prefix check with `bytes.TrimPrefix` in Badger store. - Enhanced error message formatting in VM logs controller. * fix: address PR review feedback - use suggested reverse seek in badger events pagination - add events pagination client helper and use it in integration test 🤖 Generated with [Codex](https://chatgpt.com/codex) Co-Authored-By: Codex <codex@openai.com> --------- Co-authored-by: Nikolay Edigaryev <edigaryev@gmail.com> Co-authored-by: Codex <codex@openai.com>
78 lines
2.2 KiB
Go
78 lines
2.2 KiB
Go
package store_test
|
|
|
|
import (
|
|
"testing"
|
|
|
|
storepkg "github.com/cirruslabs/orchard/internal/controller/store"
|
|
"github.com/cirruslabs/orchard/internal/controller/store/badger"
|
|
"github.com/cirruslabs/orchard/pkg/resource/v1"
|
|
"github.com/stretchr/testify/require"
|
|
"go.uber.org/zap"
|
|
)
|
|
|
|
func TestListEventsPage(t *testing.T) {
|
|
logger := zap.NewNop().Sugar()
|
|
store, err := badger.NewBadgerStore(t.TempDir(), true, logger)
|
|
require.NoError(t, err)
|
|
|
|
events := []v1.Event{
|
|
{Kind: v1.EventKindLogLine, Timestamp: 1, Payload: "one"},
|
|
{Kind: v1.EventKindLogLine, Timestamp: 2, Payload: "two"},
|
|
{Kind: v1.EventKindLogLine, Timestamp: 3, Payload: "three"},
|
|
{Kind: v1.EventKindLogLine, Timestamp: 4, Payload: "four"},
|
|
}
|
|
|
|
err = store.Update(func(txn storepkg.Transaction) error {
|
|
return txn.AppendEvents(events, "vms", "vm-uid")
|
|
})
|
|
require.NoError(t, err)
|
|
|
|
var page storepkg.Page[v1.Event]
|
|
err = store.View(func(txn storepkg.Transaction) error {
|
|
page, err = txn.ListEventsPage(storepkg.ListOptions{
|
|
Limit: 2,
|
|
}, "vms", "vm-uid")
|
|
return err
|
|
})
|
|
require.NoError(t, err)
|
|
require.Equal(t, events[:2], page.Items)
|
|
require.NotEmpty(t, page.NextCursor)
|
|
|
|
var page2 storepkg.Page[v1.Event]
|
|
err = store.View(func(txn storepkg.Transaction) error {
|
|
page2, err = txn.ListEventsPage(storepkg.ListOptions{
|
|
Limit: 2,
|
|
Cursor: page.NextCursor,
|
|
}, "vms", "vm-uid")
|
|
return err
|
|
})
|
|
require.NoError(t, err)
|
|
require.Equal(t, events[2:], page2.Items)
|
|
require.Empty(t, page2.NextCursor)
|
|
|
|
var descPage storepkg.Page[v1.Event]
|
|
err = store.View(func(txn storepkg.Transaction) error {
|
|
descPage, err = txn.ListEventsPage(storepkg.ListOptions{
|
|
Limit: 2,
|
|
Order: storepkg.ListOrderDesc,
|
|
}, "vms", "vm-uid")
|
|
return err
|
|
})
|
|
require.NoError(t, err)
|
|
require.Equal(t, []v1.Event{events[3], events[2]}, descPage.Items)
|
|
require.NotEmpty(t, descPage.NextCursor)
|
|
|
|
var descPage2 storepkg.Page[v1.Event]
|
|
err = store.View(func(txn storepkg.Transaction) error {
|
|
descPage2, err = txn.ListEventsPage(storepkg.ListOptions{
|
|
Limit: 2,
|
|
Cursor: descPage.NextCursor,
|
|
Order: storepkg.ListOrderDesc,
|
|
}, "vms", "vm-uid")
|
|
return err
|
|
})
|
|
require.NoError(t, err)
|
|
require.Equal(t, []v1.Event{events[1], events[0]}, descPage2.Items)
|
|
require.Empty(t, descPage2.NextCursor)
|
|
}
|