mirror of
https://github.com/pomerium/pomerium.git
synced 2025-06-06 04:42:56 +02:00
Currently, we're doing "sync" in databroker server. If we're going to support multiple databroker servers instance, this mechanism won't work. This commit moves the "sync" to storage backend, by adding new Watch method. The Watch method will return a channel for the caller. Everytime something happens inside the storage, we notify the caller by sending a message to this channel.
82 lines
2.2 KiB
Go
82 lines
2.2 KiB
Go
package databroker
|
|
|
|
import (
|
|
"context"
|
|
"testing"
|
|
|
|
"github.com/golang/protobuf/ptypes"
|
|
"github.com/google/uuid"
|
|
"github.com/stretchr/testify/assert"
|
|
"github.com/stretchr/testify/require"
|
|
|
|
"github.com/pomerium/pomerium/internal/log"
|
|
"github.com/pomerium/pomerium/internal/signal"
|
|
"github.com/pomerium/pomerium/pkg/grpc/databroker"
|
|
"github.com/pomerium/pomerium/pkg/storage"
|
|
)
|
|
|
|
func newServer(cfg *serverConfig) *Server {
|
|
return &Server{
|
|
version: uuid.New().String(),
|
|
cfg: cfg,
|
|
log: log.With().Str("service", "databroker").Logger(),
|
|
|
|
byType: make(map[string]storage.Backend),
|
|
onTypechange: signal.New(),
|
|
}
|
|
}
|
|
|
|
func TestServer_initVersion(t *testing.T) {
|
|
cfg := newServerConfig()
|
|
t.Run("nil db", func(t *testing.T) {
|
|
srv := newServer(cfg)
|
|
srvVersion := uuid.New().String()
|
|
srv.version = srvVersion
|
|
srv.byType[recordTypeServerVersion] = nil
|
|
srv.initVersion()
|
|
assert.Equal(t, srvVersion, srv.version)
|
|
})
|
|
t.Run("new server with random version", func(t *testing.T) {
|
|
srv := newServer(cfg)
|
|
ctx := context.Background()
|
|
db, err := srv.getDB(recordTypeServerVersion)
|
|
require.NoError(t, err)
|
|
r, err := db.Get(ctx, serverVersionKey)
|
|
assert.Error(t, err)
|
|
assert.Nil(t, r)
|
|
srvVersion := uuid.New().String()
|
|
srv.version = srvVersion
|
|
srv.initVersion()
|
|
assert.Equal(t, srvVersion, srv.version)
|
|
r, err = db.Get(ctx, serverVersionKey)
|
|
require.NoError(t, err)
|
|
assert.NotNil(t, r)
|
|
var sv databroker.ServerVersion
|
|
assert.NoError(t, ptypes.UnmarshalAny(r.GetData(), &sv))
|
|
assert.Equal(t, srvVersion, sv.Version)
|
|
})
|
|
t.Run("init version twice should get the same version", func(t *testing.T) {
|
|
srv := newServer(cfg)
|
|
ctx := context.Background()
|
|
db, err := srv.getDB(recordTypeServerVersion)
|
|
require.NoError(t, err)
|
|
r, err := db.Get(ctx, serverVersionKey)
|
|
assert.Error(t, err)
|
|
assert.Nil(t, r)
|
|
|
|
srv.initVersion()
|
|
srvVersion := srv.version
|
|
|
|
r, err = db.Get(ctx, serverVersionKey)
|
|
require.NoError(t, err)
|
|
assert.NotNil(t, r)
|
|
var sv databroker.ServerVersion
|
|
assert.NoError(t, ptypes.UnmarshalAny(r.GetData(), &sv))
|
|
assert.Equal(t, srvVersion, sv.Version)
|
|
|
|
// re-init version should get the same value as above
|
|
srv.version = "foo"
|
|
srv.initVersion()
|
|
assert.Equal(t, srvVersion, srv.version)
|
|
})
|
|
}
|