Simplify configapi
parent
b7ad2097e4
commit
51f12b4cba
@ -1,11 +0,0 @@
|
||||
package api
|
||||
|
||||
//go:generate mockgen -destination=../api_mock/api_mock.go -package=api_mock . ConfigAPI
|
||||
|
||||
// ConfigAPI expose the functionality of the config API
|
||||
type ConfigAPI interface {
|
||||
// Get value of given key
|
||||
Get(key string) ([]byte, error)
|
||||
// Set value of given key
|
||||
Set(key string, value []byte) error
|
||||
}
|
@ -1,26 +0,0 @@
|
||||
package database
|
||||
|
||||
import "sync"
|
||||
|
||||
// MemoryDatabase is an memory only database structure
|
||||
type MemoryDatabase struct {
|
||||
values map[string][]byte
|
||||
mutex sync.Mutex
|
||||
}
|
||||
|
||||
// Get value using his key
|
||||
func (md *MemoryDatabase) Get(key string) ([]byte, error) {
|
||||
md.mutex.Lock()
|
||||
defer md.mutex.Unlock()
|
||||
|
||||
return md.values[key], nil
|
||||
}
|
||||
|
||||
// Set value for given key
|
||||
func (md *MemoryDatabase) Set(key string, value []byte) error {
|
||||
md.mutex.Lock()
|
||||
defer md.mutex.Unlock()
|
||||
|
||||
md.values[key] = value
|
||||
return nil
|
||||
}
|
@ -1,42 +0,0 @@
|
||||
package service
|
||||
|
||||
import (
|
||||
"github.com/creekorful/trandoshan/internal/configapi/api"
|
||||
"github.com/creekorful/trandoshan/internal/configapi/database"
|
||||
"github.com/creekorful/trandoshan/internal/event"
|
||||
"github.com/rs/zerolog/log"
|
||||
)
|
||||
|
||||
type service struct {
|
||||
db database.Database
|
||||
pub event.Publisher
|
||||
}
|
||||
|
||||
// NewService create a new service exposing the ConfigAPI features
|
||||
func NewService(db database.Database, pub event.Publisher) (api.ConfigAPI, error) {
|
||||
return &service{
|
||||
db: db,
|
||||
pub: pub,
|
||||
}, nil
|
||||
}
|
||||
|
||||
// Get config using his key
|
||||
func (s *service) Get(key string) ([]byte, error) {
|
||||
log.Debug().Str("key", key).Msg("Getting key")
|
||||
return s.db.Get(key)
|
||||
}
|
||||
|
||||
// Set config value
|
||||
func (s *service) Set(key string, value []byte) error {
|
||||
log.Debug().Str("key", key).Bytes("value", value).Msg("Setting key")
|
||||
|
||||
if err := s.db.Set(key, value); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
// publish event to notify config changed
|
||||
return s.pub.PublishJSON(event.ConfigExchange, event.RawMessage{
|
||||
Body: value,
|
||||
Headers: map[string]interface{}{"Config-Key": key},
|
||||
})
|
||||
}
|
@ -1,52 +0,0 @@
|
||||
package service
|
||||
|
||||
import (
|
||||
"github.com/creekorful/trandoshan/internal/configapi/database_mock"
|
||||
"github.com/creekorful/trandoshan/internal/event"
|
||||
"github.com/creekorful/trandoshan/internal/event_mock"
|
||||
"github.com/golang/mock/gomock"
|
||||
"testing"
|
||||
)
|
||||
|
||||
func TestService_Get(t *testing.T) {
|
||||
mockCtrl := gomock.NewController(t)
|
||||
defer mockCtrl.Finish()
|
||||
|
||||
dbMock := database_mock.NewMockDatabase(mockCtrl)
|
||||
dbMock.EXPECT().Get("test").Return([]byte("hello"), nil)
|
||||
|
||||
s := service{
|
||||
db: dbMock,
|
||||
}
|
||||
|
||||
val, err := s.Get("test")
|
||||
if err != nil {
|
||||
t.FailNow()
|
||||
}
|
||||
if string(val) != "hello" {
|
||||
t.Fail()
|
||||
}
|
||||
}
|
||||
|
||||
func TestService_Set(t *testing.T) {
|
||||
mockCtrl := gomock.NewController(t)
|
||||
defer mockCtrl.Finish()
|
||||
|
||||
dbMock := database_mock.NewMockDatabase(mockCtrl)
|
||||
pubMock := event_mock.NewMockPublisher(mockCtrl)
|
||||
|
||||
dbMock.EXPECT().Set("test-key", []byte("hello")).Return(nil)
|
||||
pubMock.EXPECT().PublishJSON("config", event.RawMessage{
|
||||
Body: []byte("hello"),
|
||||
Headers: map[string]interface{}{"Config-Key": "test-key"},
|
||||
}).Return(nil)
|
||||
|
||||
s := service{
|
||||
db: dbMock,
|
||||
pub: pubMock,
|
||||
}
|
||||
|
||||
if err := s.Set("test-key", []byte("hello")); err != nil {
|
||||
t.Fail()
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue