Implement ConfigAPI service layer

pull/89/head
Aloïs Micard 3 years ago
parent 54ff87a130
commit 353880bc22
No known key found for this signature in database
GPG Key ID: 1A0EB82F071F5EFE

@ -8,9 +8,12 @@ import (
//go:generate mockgen -destination=../client_mock/client_mock.go -package=client_mock . Client
const (
// ForbiddenMimeTypesKey is the key to access the forbidden mime types config
ForbiddenMimeTypesKey = "forbidden-mime-types"
// ForbiddenHostnamesKey is the key to access the forbidden hostnames config
ForbiddenHostnamesKey = "forbidden-hostnames"
RefreshDelayKey = "refresh-delay"
// RefreshDelayKey is the key to access the refresh delay config
RefreshDelayKey = "refresh-delay"
)
// ForbiddenMimeType is the mime types who's crawling is forbidden
@ -46,6 +49,7 @@ type Client interface {
type client struct {
}
func NewConfigClient(configApiURL string, subscriber event.Subscriber, keys []string) (Client, error) {
// NewConfigClient create a new client for the ConfigAPI
func NewConfigClient(configAPIURL string, subscriber event.Subscriber, keys []string) (Client, error) {
return nil, nil // TODO
}

@ -0,0 +1 @@
package configapi

@ -0,0 +1,9 @@
package database
//go:generate mockgen -destination=../database_mock/database_mock.go -package=database_mock . Database
// Database is the underlying storage for the ConfigAPI
type Database interface {
Get(key string) ([]byte, error)
Set(key string, value []byte) error
}

@ -0,0 +1,28 @@
package service
import (
"fmt"
"github.com/creekorful/trandoshan/internal/configapi/database"
"github.com/creekorful/trandoshan/internal/event"
)
// Service is the functionality layer provided by the ConfigAPI
type Service struct {
db database.Database
pub event.Publisher
}
// Get config using his key
func (s *Service) Get(key string) ([]byte, error) {
return s.db.Get(key)
}
// Set config value
func (s *Service) Set(key string, value []byte) error {
if err := s.db.Set(key, value); err != nil {
return err
}
// publish event to notify config changed
return s.pub.PublishJSON(fmt.Sprintf("config.%s", key), value)
}

@ -0,0 +1,48 @@
package service
import (
"github.com/creekorful/trandoshan/internal/configapi/database_mock"
"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.test-key", []byte("hello")).Return(nil)
s := Service{
db: dbMock,
pub: pubMock,
}
if err := s.Set("test-key", []byte("hello")); err != nil {
t.Fail()
}
}

@ -54,8 +54,8 @@ func (s *subscriber) PublishEvent(event Event) error {
return s.PublishJSON(event.Exchange(), evtBytes)
}
func (p *subscriber) PublishJSON(exchange string, event []byte) error {
return p.channel.Publish(exchange, "", false, false, amqp.Publishing{
func (s *subscriber) PublishJSON(exchange string, event []byte) error {
return s.channel.Publish(exchange, "", false, false, amqp.Publishing{
ContentType: "application/json",
Body: event,
DeliveryMode: amqp.Persistent,

@ -38,7 +38,7 @@ func GetApp() *cli.App {
util.GetHubURI(),
util.GetAPIURIFlag(),
util.GetAPITokenFlag(),
util.GetConfigApiURIFlag(),
util.GetConfigAPIURIFlag(),
},
Action: execute,
}

@ -2,11 +2,11 @@ package util
import "github.com/urfave/cli/v2"
// GetConfigApiURIFlag return the cli flag to set config api uri
func GetConfigApiURIFlag() *cli.StringFlag {
// GetConfigAPIURIFlag return the cli flag to set config api uri
func GetConfigAPIURIFlag() *cli.StringFlag {
return &cli.StringFlag{
Name: "config-api-uri",
Usage: "URI to the ConfigAPI server",
Required: true,
}
}
}

Loading…
Cancel
Save