mirror of
https://github.com/pomerium/pomerium.git
synced 2025-06-02 19:04:14 +02:00
databroker: refactor databroker to sync all changes (#1879)
* refactor backend, implement encrypted store * refactor in-memory store * wip * wip * wip * add syncer test * fix redis expiry * fix linting issues * fix test by skipping non-config records * fix backoff import * fix init issues * fix query * wait for initial sync before starting directory sync * add type to SyncLatest * add more log messages, fix deadlock in in-memory store, always return server version from SyncLatest * update sync types and tests * add redis tests * skip macos in github actions * add comments to proto * split getBackend into separate methods * handle errors in initVersion * return different error for not found vs other errors in get * use exponential backoff for redis transaction retry * rename raw to result * use context instead of close channel * store type urls as constants in databroker * use timestampb instead of ptypes * fix group merging not waiting * change locked names * update GetAll to return latest record version * add method to grpcutil to get the type url for a protobuf type
This commit is contained in:
parent
b1871b0f2e
commit
5d60cff21e
66 changed files with 2762 additions and 2871 deletions
|
@ -61,18 +61,26 @@ func TestInitialSync(t *testing.T) {
|
|||
|
||||
r1 := new(Record)
|
||||
r2 := new(Record)
|
||||
r3 := new(Record)
|
||||
|
||||
m := &mockServer{
|
||||
sync: func(req *SyncRequest, stream DataBrokerService_SyncServer) error {
|
||||
assert.Equal(t, true, req.GetNoWait())
|
||||
stream.Send(&SyncResponse{
|
||||
ServerVersion: "a",
|
||||
Records: []*Record{r1, r2},
|
||||
syncLatest: func(req *SyncLatestRequest, stream DataBrokerService_SyncLatestServer) error {
|
||||
stream.Send(&SyncLatestResponse{
|
||||
Response: &SyncLatestResponse_Record{
|
||||
Record: r1,
|
||||
},
|
||||
})
|
||||
stream.Send(&SyncResponse{
|
||||
ServerVersion: "b",
|
||||
Records: []*Record{r3},
|
||||
stream.Send(&SyncLatestResponse{
|
||||
Response: &SyncLatestResponse_Record{
|
||||
Record: r2,
|
||||
},
|
||||
})
|
||||
stream.Send(&SyncLatestResponse{
|
||||
Response: &SyncLatestResponse_Versions{
|
||||
Versions: &Versions{
|
||||
LatestRecordVersion: 2,
|
||||
ServerVersion: 1,
|
||||
},
|
||||
},
|
||||
})
|
||||
return nil
|
||||
},
|
||||
|
@ -90,20 +98,19 @@ func TestInitialSync(t *testing.T) {
|
|||
|
||||
c := NewDataBrokerServiceClient(cc)
|
||||
|
||||
res, err := InitialSync(ctx, c, &SyncRequest{
|
||||
Type: "TEST",
|
||||
})
|
||||
records, recordVersion, serverVersion, err := InitialSync(ctx, c, new(SyncLatestRequest))
|
||||
assert.NoError(t, err)
|
||||
assert.Equal(t, "b", res.GetServerVersion())
|
||||
assert.Equal(t, []*Record{r1, r2, r3}, res.GetRecords())
|
||||
assert.Equal(t, uint64(2), recordVersion)
|
||||
assert.Equal(t, uint64(1), serverVersion)
|
||||
assert.Equal(t, []*Record{r1, r2}, records)
|
||||
}
|
||||
|
||||
type mockServer struct {
|
||||
DataBrokerServiceServer
|
||||
|
||||
sync func(*SyncRequest, DataBrokerService_SyncServer) error
|
||||
syncLatest func(empty *SyncLatestRequest, server DataBrokerService_SyncLatestServer) error
|
||||
}
|
||||
|
||||
func (m *mockServer) Sync(req *SyncRequest, stream DataBrokerService_SyncServer) error {
|
||||
return m.sync(req, stream)
|
||||
func (m *mockServer) SyncLatest(req *SyncLatestRequest, stream DataBrokerService_SyncLatestServer) error {
|
||||
return m.syncLatest(req, stream)
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue