mirror of
https://github.com/pomerium/pomerium.git
synced 2025-08-01 07:50:26 +02:00
storage: add sync querier (#5570)
* storage: add fallback querier * storage: add sync querier * storage: add typed querier * use synced querier
This commit is contained in:
parent
e1d84a1dde
commit
8738066ce4
19 changed files with 569 additions and 214 deletions
89
pkg/storage/querier_sync_test.go
Normal file
89
pkg/storage/querier_sync_test.go
Normal file
|
@ -0,0 +1,89 @@
|
|||
package storage_test
|
||||
|
||||
import (
|
||||
"testing"
|
||||
"time"
|
||||
|
||||
"github.com/google/go-cmp/cmp"
|
||||
"github.com/stretchr/testify/assert"
|
||||
"github.com/stretchr/testify/require"
|
||||
"go.opentelemetry.io/otel/trace/noop"
|
||||
grpc "google.golang.org/grpc"
|
||||
"google.golang.org/protobuf/testing/protocmp"
|
||||
"google.golang.org/protobuf/types/known/structpb"
|
||||
|
||||
"github.com/pomerium/pomerium/internal/databroker"
|
||||
"github.com/pomerium/pomerium/internal/testutil"
|
||||
databrokerpb "github.com/pomerium/pomerium/pkg/grpc/databroker"
|
||||
"github.com/pomerium/pomerium/pkg/protoutil"
|
||||
"github.com/pomerium/pomerium/pkg/storage"
|
||||
)
|
||||
|
||||
func TestSyncQuerier(t *testing.T) {
|
||||
t.Parallel()
|
||||
|
||||
ctx := testutil.GetContext(t, 10*time.Minute)
|
||||
cc := testutil.NewGRPCServer(t, func(srv *grpc.Server) {
|
||||
databrokerpb.RegisterDataBrokerServiceServer(srv, databroker.New(ctx, noop.NewTracerProvider()))
|
||||
})
|
||||
t.Cleanup(func() { cc.Close() })
|
||||
|
||||
client := databrokerpb.NewDataBrokerServiceClient(cc)
|
||||
|
||||
r1 := &databrokerpb.Record{
|
||||
Type: "t1",
|
||||
Id: "r1",
|
||||
Data: protoutil.ToAny("q2"),
|
||||
}
|
||||
_, err := client.Put(ctx, &databrokerpb.PutRequest{
|
||||
Records: []*databrokerpb.Record{r1},
|
||||
})
|
||||
require.NoError(t, err)
|
||||
|
||||
r2 := &databrokerpb.Record{
|
||||
Type: "t1",
|
||||
Id: "r2",
|
||||
Data: protoutil.ToAny("q2"),
|
||||
}
|
||||
|
||||
q := storage.NewSyncQuerier(client, "t1")
|
||||
t.Cleanup(q.Stop)
|
||||
|
||||
assert.EventuallyWithT(t, func(c *assert.CollectT) {
|
||||
res, err := q.Query(ctx, &databrokerpb.QueryRequest{
|
||||
Type: "t1",
|
||||
Filter: newStruct(t, map[string]any{
|
||||
"id": "r1",
|
||||
}),
|
||||
Limit: 1,
|
||||
})
|
||||
if assert.NoError(c, err) && assert.Len(c, res.Records, 1) {
|
||||
assert.Empty(c, cmp.Diff(r1.Data, res.Records[0].Data, protocmp.Transform()))
|
||||
}
|
||||
}, time.Second*10, time.Millisecond*50, "should sync records")
|
||||
|
||||
_, err = client.Put(ctx, &databrokerpb.PutRequest{
|
||||
Records: []*databrokerpb.Record{r2},
|
||||
})
|
||||
require.NoError(t, err)
|
||||
|
||||
assert.EventuallyWithT(t, func(c *assert.CollectT) {
|
||||
res, err := q.Query(ctx, &databrokerpb.QueryRequest{
|
||||
Type: "t1",
|
||||
Filter: newStruct(t, map[string]any{
|
||||
"id": "r2",
|
||||
}),
|
||||
Limit: 1,
|
||||
})
|
||||
if assert.NoError(c, err) && assert.Len(c, res.Records, 1) {
|
||||
assert.Empty(c, cmp.Diff(r2.Data, res.Records[0].Data, protocmp.Transform()))
|
||||
}
|
||||
}, time.Second*10, time.Millisecond*50, "should pick up changes")
|
||||
}
|
||||
|
||||
func newStruct(t *testing.T, m map[string]any) *structpb.Struct {
|
||||
t.Helper()
|
||||
s, err := structpb.NewStruct(m)
|
||||
require.NoError(t, err)
|
||||
return s
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue