Skip to content
Snippets Groups Projects
Verified Commit be5f95c2 authored by André Sterba's avatar André Sterba
Browse files

init store

parent 1e80e15e
No related branches found
No related tags found
1 merge request!34Resolve "KMS - Implement config api"
Pipeline #271862 failed
package model
import "github.com/google/uuid"
type KMSConfig struct {
ID uuid.UUID
Name string
IntercomBind string
QuantumPushAddrBind string
}
...@@ -13,3 +13,8 @@ type RouteStore interface { ...@@ -13,3 +13,8 @@ type RouteStore interface {
GetRouteList(context.Context) ([]model.Route, error) GetRouteList(context.Context) ([]model.Route, error)
UpdateRoute(context.Context, model.Route) error UpdateRoute(context.Context, model.Route) error
} }
type KMSConfigStore interface {
GetKMSConfig(context.Context) (model.KMSConfig, error)
SetKMSConfig(context.Context, model.KMSConfig) error
}
package interaction
import (
pb "code.fbi.h-da.de/danet/costaquanta/gen/go/kms/v1"
"go.opentelemetry.io/otel/trace"
"go.uber.org/zap"
)
type ConfigServer struct {
pb.UnimplementedConfigServiceServer
logger *zap.SugaredLogger
tracer trace.Tracer
}
func NewConfigServer(
logger *zap.SugaredLogger,
tracer trace.Tracer,
) *RoutingServer {
s := &RoutingServer{
logger: logger,
tracer: tracer,
}
return s
}
package store
import (
"context"
"sync"
"code.fbi.h-da.de/danet/costaquanta/kms/internal/core/model"
"go.opentelemetry.io/otel/trace"
"go.uber.org/zap"
)
type InMemoryKMSConfigStore struct {
kmsConfig model.KMSConfig
// Using a RWMutex to allow multiple readers concurrently.
// A write lock can only be acquired once all readers are done and release their locks.
mu sync.RWMutex
logger *zap.SugaredLogger
tracer trace.Tracer
}
func NewInMemoryKMSConfigStore(
logger *zap.SugaredLogger,
tracer trace.Tracer,
) *InMemoryKMSConfigStore {
return &InMemoryKMSConfigStore{
kmsConfig: model.KMSConfig{},
mu: sync.RWMutex{},
logger: logger,
tracer: tracer,
}
}
func (s *InMemoryKMSConfigStore) GetKMSConfig(ctx context.Context) (model.KMSConfig, error) {
_, span := s.tracer.Start(ctx, "get-kms-config")
defer span.End()
s.logger.Debug("Getting KMS config from store")
s.mu.RLock()
defer s.mu.RUnlock()
return s.kmsConfig, nil
}
func (s *InMemoryKMSConfigStore) SetKMSConfig(
ctx context.Context,
kmsConfig model.KMSConfig,
) error {
_, span := s.tracer.Start(ctx, "set-kms-config")
defer span.End()
s.logger.Debug(
"Setting KMS config in store")
s.mu.Lock()
defer s.mu.Unlock()
s.kmsConfig = kmsConfig
return nil
}
package store
import (
"context"
"testing"
"code.fbi.h-da.de/danet/costaquanta/kms/internal/core/model"
"code.fbi.h-da.de/danet/costaquanta/libs/logging"
"github.com/google/uuid"
"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require"
"go.opentelemetry.io/otel/trace/noop"
)
func createCtxAndConfigStoreForTest() (*InMemoryKMSConfigStore, context.Context) {
tracer := noop.NewTracerProvider().Tracer("routeStoreTest")
parentLogger := logging.CreateProductionLogger("kms")
childLogger := logging.CreateChildLogger(parentLogger, "routeStoreTest")
ctx := context.Background()
return NewInMemoryKMSConfigStore(childLogger, tracer), ctx
}
func TestInMemoryKMSConfigStore_GetKMSConfig(t *testing.T) {
t.Parallel()
t.Run("Get non-existing KMS config from store", func(t *testing.T) {
t.Parallel()
store, ctx := createCtxAndConfigStoreForTest()
kmsConfig, err := store.GetKMSConfig(ctx)
require.NoError(t, err)
assert.Equal(t, model.KMSConfig{}, kmsConfig)
})
t.Run("Get existing KMS config from store", func(t *testing.T) {
t.Parallel()
store, ctx := createCtxAndConfigStoreForTest()
testUUID := uuid.New()
kmsConfig := model.KMSConfig{
ID: testUUID,
Name: "test",
IntercomBind: "1337",
QuantumPushAddrBind: "4242",
}
store.kmsConfig = kmsConfig
retrievedKMSConfig, err := store.GetKMSConfig(ctx)
require.NoError(t, err)
assert.Equal(t, kmsConfig, retrievedKMSConfig)
})
}
func TestInMemoryKMSConfigStore_SetKMSConfig(t *testing.T) {
t.Parallel()
t.Run("Set KMS config in store", func(t *testing.T) {
t.Parallel()
store, ctx := createCtxAndConfigStoreForTest()
testUUID := uuid.New()
kmsConfig := model.KMSConfig{
ID: testUUID,
Name: "test",
IntercomBind: "1337",
QuantumPushAddrBind: "4242",
}
err := store.SetKMSConfig(ctx, kmsConfig)
require.NoError(t, err)
assert.Equal(t, kmsConfig, store.kmsConfig)
})
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment