130 lines
3.3 KiB
Go
130 lines
3.3 KiB
Go
package db
|
|
|
|
import (
|
|
"errors"
|
|
"strings"
|
|
"testing"
|
|
|
|
"git.sendico.io/tech/sxchnge/bff/pkg/merrors"
|
|
"git.sendico.io/tech/sxchnge/bff/pkg/model"
|
|
"go.uber.org/zap"
|
|
)
|
|
|
|
func TestPermissionsDatabaseConfigAsDatabaseConfig(t *testing.T) {
|
|
cfg := &PermissionsDatabaseConfig{
|
|
Driver: Mongo,
|
|
Settings: model.SettingsT{
|
|
"database_env": "PERMISSIONS_MONGO_DATABASE",
|
|
},
|
|
}
|
|
|
|
converted := cfg.AsDatabaseConfig()
|
|
if converted == nil {
|
|
t.Fatal("expected converted config")
|
|
}
|
|
if converted.Driver != Mongo {
|
|
t.Fatalf("expected driver %q, got %q", Mongo, converted.Driver)
|
|
}
|
|
if got := converted.Settings["database_env"]; got != "PERMISSIONS_MONGO_DATABASE" {
|
|
t.Fatalf("expected database_env to be preserved, got %v", got)
|
|
}
|
|
}
|
|
|
|
func TestNewCentralPermissionsConnectionRequiresConfig(t *testing.T) {
|
|
_, err := NewCentralPermissionsConnection(zap.NewNop(), nil)
|
|
if !errors.Is(err, merrors.ErrInvalidArg) {
|
|
t.Fatalf("expected invalid argument, got %v", err)
|
|
}
|
|
}
|
|
|
|
func TestNewConnectionRequiresConfig(t *testing.T) {
|
|
_, err := NewConnection(zap.NewNop(), nil)
|
|
if !errors.Is(err, merrors.ErrInvalidArg) {
|
|
t.Fatalf("expected invalid argument, got %v", err)
|
|
}
|
|
}
|
|
|
|
func TestNewCentralPermissionsConnectionDelegatesToDBConnection(t *testing.T) {
|
|
_, err := NewCentralPermissionsConnection(zap.NewNop(), &PermissionsDatabaseConfig{
|
|
Driver: DBDriver("bogus"),
|
|
})
|
|
if err == nil {
|
|
t.Fatal("expected error")
|
|
}
|
|
if !strings.Contains(err.Error(), "permissions_database") {
|
|
t.Fatalf("expected permissions_database context, got %v", err)
|
|
}
|
|
if !strings.Contains(err.Error(), "unknown database driver") {
|
|
t.Fatalf("expected delegated database driver error, got %v", err)
|
|
}
|
|
}
|
|
|
|
func TestValidateSplitDomainPermissionsDatabase(t *testing.T) {
|
|
t.Setenv("DOMAIN_DB", "domain")
|
|
t.Setenv("PERMISSIONS_DB", "sendico")
|
|
|
|
domain, permissions, err := ValidateSplitDomainPermissionsDatabase(
|
|
"test service",
|
|
&Config{
|
|
Driver: Mongo,
|
|
Settings: model.SettingsT{
|
|
"database_env": "DOMAIN_DB",
|
|
},
|
|
},
|
|
&PermissionsDatabaseConfig{
|
|
Driver: Mongo,
|
|
Settings: model.SettingsT{
|
|
"database_env": "PERMISSIONS_DB",
|
|
},
|
|
},
|
|
)
|
|
if err != nil {
|
|
t.Fatalf("expected valid split-domain config, got %v", err)
|
|
}
|
|
if domain.Name != "domain" || permissions.Name != "sendico" {
|
|
t.Fatalf("unexpected resolved names: domain=%+v permissions=%+v", domain, permissions)
|
|
}
|
|
}
|
|
|
|
func TestValidateSplitDomainPermissionsDatabaseRejectsMissingPermissionsConfig(t *testing.T) {
|
|
t.Setenv("DOMAIN_DB", "domain")
|
|
|
|
_, _, err := ValidateSplitDomainPermissionsDatabase(
|
|
"test service",
|
|
&Config{
|
|
Driver: Mongo,
|
|
Settings: model.SettingsT{
|
|
"database_env": "DOMAIN_DB",
|
|
},
|
|
},
|
|
nil,
|
|
)
|
|
if !errors.Is(err, merrors.ErrInvalidArg) {
|
|
t.Fatalf("expected invalid argument, got %v", err)
|
|
}
|
|
}
|
|
|
|
func TestValidateSplitDomainPermissionsDatabaseRejectsSameResolvedDatabase(t *testing.T) {
|
|
t.Setenv("DOMAIN_DB", "domain")
|
|
t.Setenv("PERMISSIONS_DB", "domain")
|
|
|
|
_, _, err := ValidateSplitDomainPermissionsDatabase(
|
|
"test service",
|
|
&Config{
|
|
Driver: Mongo,
|
|
Settings: model.SettingsT{
|
|
"database_env": "DOMAIN_DB",
|
|
},
|
|
},
|
|
&PermissionsDatabaseConfig{
|
|
Driver: Mongo,
|
|
Settings: model.SettingsT{
|
|
"database_env": "PERMISSIONS_DB",
|
|
},
|
|
},
|
|
)
|
|
if !errors.Is(err, merrors.ErrInvalidArg) {
|
|
t.Fatalf("expected invalid argument, got %v", err)
|
|
}
|
|
}
|