104 lines
2.8 KiB
Go
104 lines
2.8 KiB
Go
package tests_test
|
|
|
|
import (
|
|
"bytes"
|
|
"context"
|
|
"encoding/json"
|
|
"net/http"
|
|
"net/url"
|
|
"testing"
|
|
|
|
"github.com/cirruslabs/orchard/internal/tests/devcontroller"
|
|
"github.com/cirruslabs/orchard/internal/tests/platformdependent"
|
|
"github.com/cirruslabs/orchard/pkg/client"
|
|
v1 "github.com/cirruslabs/orchard/pkg/resource/v1"
|
|
"github.com/stretchr/testify/require"
|
|
)
|
|
|
|
func TestListVMEventsPagination(t *testing.T) {
|
|
devClient, devController, _ := devcontroller.StartIntegrationTestEnvironmentWithAdditionalOpts(t,
|
|
false, nil,
|
|
true, nil,
|
|
)
|
|
|
|
ctx := context.Background()
|
|
vm := platformdependent.VM("test-vm")
|
|
require.NoError(t, devClient.VMs().Create(ctx, vm))
|
|
|
|
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"},
|
|
}
|
|
appendVMEvents(t, devController.Address(), vm.Name, events)
|
|
|
|
page, cursor := fetchVMEventsPage(t, ctx, devClient, vm.Name, client.EventsPageOptions{Limit: 2})
|
|
require.Equal(t, events[:2], page)
|
|
require.NotEmpty(t, cursor)
|
|
|
|
page2, cursor2 := fetchVMEventsPage(t, ctx, devClient, vm.Name, client.EventsPageOptions{
|
|
Limit: 2,
|
|
Cursor: cursor,
|
|
})
|
|
require.Equal(t, events[2:], page2)
|
|
require.Empty(t, cursor2)
|
|
|
|
descPage, descCursor := fetchVMEventsPage(t, ctx, devClient, vm.Name, client.EventsPageOptions{
|
|
Limit: 2,
|
|
Order: client.LogsOrderDesc,
|
|
})
|
|
require.Equal(t, []v1.Event{events[3], events[2]}, descPage)
|
|
require.NotEmpty(t, descCursor)
|
|
|
|
descPage2, descCursor2 := fetchVMEventsPage(t, ctx, devClient, vm.Name, client.EventsPageOptions{
|
|
Limit: 2,
|
|
Order: client.LogsOrderDesc,
|
|
Cursor: descCursor,
|
|
})
|
|
require.Equal(t, []v1.Event{events[1], events[0]}, descPage2)
|
|
require.Empty(t, descCursor2)
|
|
|
|
lines, err := devClient.VMs().LogsWithOptions(ctx, vm.Name, client.LogsOptions{
|
|
Limit: 2,
|
|
Order: client.LogsOrderDesc,
|
|
})
|
|
require.NoError(t, err)
|
|
require.Equal(t, []string{"four", "three"}, lines)
|
|
}
|
|
|
|
func appendVMEvents(t *testing.T, baseURL, name string, events []v1.Event) {
|
|
t.Helper()
|
|
|
|
endpoint, err := url.JoinPath(baseURL, "v1", "vms", name, "events")
|
|
require.NoError(t, err)
|
|
|
|
body, err := json.Marshal(events)
|
|
require.NoError(t, err)
|
|
|
|
req, err := http.NewRequest(http.MethodPost, endpoint, bytes.NewReader(body))
|
|
require.NoError(t, err)
|
|
req.Header.Set("Content-Type", "application/json")
|
|
|
|
resp, err := http.DefaultClient.Do(req)
|
|
require.NoError(t, err)
|
|
defer resp.Body.Close()
|
|
|
|
require.Equal(t, http.StatusOK, resp.StatusCode)
|
|
}
|
|
|
|
func fetchVMEventsPage(
|
|
t *testing.T,
|
|
ctx context.Context,
|
|
devClient *client.Client,
|
|
name string,
|
|
options client.EventsPageOptions,
|
|
) ([]v1.Event, string) {
|
|
t.Helper()
|
|
|
|
events, cursor, err := devClient.VMs().EventsPage(ctx, name, options)
|
|
require.NoError(t, err)
|
|
|
|
return events, cursor
|
|
}
|