Compare commits

..

No commits in common. "933943636e3890a33cce4f40c23129af201ea673" and "0f54ab4b4af2b5dc3c053f2b5d635b18afbacf5f" have entirely different histories.

16 changed files with 204 additions and 219 deletions

View File

@ -36,7 +36,8 @@ var (
func main() { func main() {
config.LoadConfig() config.LoadConfig()
var override config.Override var connStr string
var resourceDir string
var size uint var size uint
var engineDebug bool var engineDebug bool
var host string var host string
@ -45,11 +46,10 @@ func main() {
var gettextDir string var gettextDir string
var langs args.LangVar var langs args.LangVar
flag.StringVar(&resourceDir, "resourcedir", path.Join("services", "registration"), "resource dir")
flag.StringVar(&connStr, "c", "", "connection string")
flag.BoolVar(&engineDebug, "d", false, "use engine debug output") flag.BoolVar(&engineDebug, "d", false, "use engine debug output")
flag.StringVar(override.DbConn, "c", "?", "default connection string (replaces all unspecified strings)")
flag.StringVar(override.ResourceConn, "resource", "?", "resource connection string")
flag.StringVar(override.UserConn, "userdata", "?", "userdata store connection string")
flag.StringVar(override.StateConn, "state", "?", "state store connection string")
flag.UintVar(&size, "s", 160, "max size of output") flag.UintVar(&size, "s", 160, "max size of output")
flag.StringVar(&host, "h", config.Host(), "http host") flag.StringVar(&host, "h", config.Host(), "http host")
flag.UintVar(&port, "p", config.Port(), "http port") flag.UintVar(&port, "p", config.Port(), "http port")
@ -57,14 +57,16 @@ func main() {
flag.Var(&langs, "language", "add symbol resolution for language") flag.Var(&langs, "language", "add symbol resolution for language")
flag.Parse() flag.Parse()
config.Apply(&override) if connStr == "" {
conns, err := config.GetConns() connStr = config.DbConn()
}
connData, err := storage.ToConnData(connStr)
if err != nil { if err != nil {
fmt.Fprintf(os.Stderr, "conn specification error: %v\n", err) fmt.Fprintf(os.Stderr, "connstr err: %v", err)
os.Exit(1) os.Exit(1)
} }
logg.Infof("start command", "build", build, "conn", conns, "outputsize", size) logg.Infof("start command", "build", build, "conn", connData, "resourcedir", resourceDir, "outputsize", size)
ctx := context.Background() ctx := context.Background()
ln, err := lang.LanguageFromCode(config.Language()) ln, err := lang.LanguageFromCode(config.Language())
@ -87,7 +89,7 @@ func main() {
cfg.EngineDebug = true cfg.EngineDebug = true
} }
menuStorageService := storage.NewMenuStorageService(conns) menuStorageService := storage.NewMenuStorageService(connData, resourceDir)
rs, err := menuStorageService.GetResource(ctx) rs, err := menuStorageService.GetResource(ctx)
if err != nil { if err != nil {
fmt.Fprintf(os.Stderr, "menustorageservice: %v\n", err) fmt.Fprintf(os.Stderr, "menustorageservice: %v\n", err)
@ -117,7 +119,7 @@ func main() {
os.Exit(1) os.Exit(1)
} }
accountService := services.New(ctx, menuStorageService) accountService := services.New(ctx, menuStorageService, connData)
hl, err := lhs.GetHandler(accountService) hl, err := lhs.GetHandler(accountService)
if err != nil { if err != nil {

View File

@ -43,9 +43,10 @@ func (p *asyncRequestParser) GetInput(r any) ([]byte, error) {
func main() { func main() {
config.LoadConfig() config.LoadConfig()
var override config.Override var connStr string
var sessionId string var sessionId string
var resourceDir string
var size uint var size uint
var engineDebug bool var engineDebug bool
var host string var host string
@ -55,11 +56,8 @@ func main() {
var langs args.LangVar var langs args.LangVar
flag.StringVar(&sessionId, "session-id", "075xx2123", "session id") flag.StringVar(&sessionId, "session-id", "075xx2123", "session id")
flag.StringVar(override.DbConn, "c", "?", "default connection string (replaces all unspecified strings)") flag.StringVar(&resourceDir, "resourcedir", path.Join("services", "registration"), "resource dir")
flag.StringVar(override.ResourceConn, "resource", "?", "resource connection string") flag.StringVar(&connStr, "c", "", "connection string")
flag.StringVar(override.UserConn, "userdata", "?", "userdata store connection string")
flag.StringVar(override.StateConn, "state", "?", "state store connection string")
flag.BoolVar(&engineDebug, "d", false, "use engine debug output") flag.BoolVar(&engineDebug, "d", false, "use engine debug output")
flag.UintVar(&size, "s", 160, "max size of output") flag.UintVar(&size, "s", 160, "max size of output")
flag.StringVar(&host, "h", config.Host(), "http host") flag.StringVar(&host, "h", config.Host(), "http host")
@ -68,14 +66,16 @@ func main() {
flag.Var(&langs, "language", "add symbol resolution for language") flag.Var(&langs, "language", "add symbol resolution for language")
flag.Parse() flag.Parse()
config.Apply(&override) if connStr == "" {
conns, err := config.GetConns() connStr = config.DbConn()
}
connData, err := storage.ToConnData(connStr)
if err != nil { if err != nil {
fmt.Fprintf(os.Stderr, "conn specification error: %v\n", err) fmt.Fprintf(os.Stderr, "connstr err: %v", err)
os.Exit(1) os.Exit(1)
} }
logg.Infof("start command", "conn", conns, "outputsize", size, "sessionId", sessionId) logg.Infof("start command", "conn", connData, "resourcedir", resourceDir, "outputsize", size, "sessionId", sessionId)
ctx := context.Background() ctx := context.Background()
@ -99,7 +99,7 @@ func main() {
cfg.EngineDebug = true cfg.EngineDebug = true
} }
menuStorageService := storage.NewMenuStorageService(conns) menuStorageService := storage.NewMenuStorageService(connData, resourceDir)
if err != nil { if err != nil {
fmt.Fprintf(os.Stderr, err.Error()) fmt.Fprintf(os.Stderr, err.Error())
os.Exit(1) os.Exit(1)
@ -126,7 +126,7 @@ func main() {
lhs, err := handlers.NewLocalHandlerService(ctx, pfp, true, dbResource, cfg, rs) lhs, err := handlers.NewLocalHandlerService(ctx, pfp, true, dbResource, cfg, rs)
lhs.SetDataStore(&userdataStore) lhs.SetDataStore(&userdataStore)
accountService := services.New(ctx, menuStorageService) accountService := services.New(ctx, menuStorageService, connData)
hl, err := lhs.GetHandler(accountService) hl, err := lhs.GetHandler(accountService)
if err != nil { if err != nil {

View File

@ -35,7 +35,8 @@ var (
func main() { func main() {
config.LoadConfig() config.LoadConfig()
var override config.Override var connStr string
var resourceDir string
var size uint var size uint
var engineDebug bool var engineDebug bool
var host string var host string
@ -44,11 +45,8 @@ func main() {
var gettextDir string var gettextDir string
var langs args.LangVar var langs args.LangVar
flag.StringVar(override.DbConn, "c", "?", "default connection string (replaces all unspecified strings)") flag.StringVar(&resourceDir, "resourcedir", path.Join("services", "registration"), "resource dir")
flag.StringVar(override.ResourceConn, "resource", "?", "resource connection string") flag.StringVar(&connStr, "c", "", "connection string")
flag.StringVar(override.UserConn, "userdata", "?", "userdata store connection string")
flag.StringVar(override.StateConn, "state", "?", "state store connection string")
flag.BoolVar(&engineDebug, "d", false, "use engine debug output") flag.BoolVar(&engineDebug, "d", false, "use engine debug output")
flag.UintVar(&size, "s", 160, "max size of output") flag.UintVar(&size, "s", 160, "max size of output")
flag.StringVar(&host, "h", config.Host(), "http host") flag.StringVar(&host, "h", config.Host(), "http host")
@ -57,14 +55,16 @@ func main() {
flag.Var(&langs, "language", "add symbol resolution for language") flag.Var(&langs, "language", "add symbol resolution for language")
flag.Parse() flag.Parse()
config.Apply(&override) if connStr == "" {
conns, err := config.GetConns() connStr = config.DbConn()
}
connData, err := storage.ToConnData(connStr)
if err != nil { if err != nil {
fmt.Fprintf(os.Stderr, "conn specification error: %v\n", err) fmt.Fprintf(os.Stderr, "connstr err: %v", err)
os.Exit(1) os.Exit(1)
} }
logg.Infof("start command", "conn", conns, "outputsize", size) logg.Infof("start command", "conn", connData, "resourcedir", resourceDir, "outputsize", size)
ctx := context.Background() ctx := context.Background()
@ -88,7 +88,7 @@ func main() {
cfg.EngineDebug = true cfg.EngineDebug = true
} }
menuStorageService := storage.NewMenuStorageService(conns) menuStorageService := storage.NewMenuStorageService(connData, resourceDir)
rs, err := menuStorageService.GetResource(ctx) rs, err := menuStorageService.GetResource(ctx)
if err != nil { if err != nil {
@ -115,7 +115,7 @@ func main() {
os.Exit(1) os.Exit(1)
} }
accountService := services.New(ctx, menuStorageService) accountService := services.New(ctx, menuStorageService, connData)
hl, err := lhs.GetHandler(accountService) hl, err := lhs.GetHandler(accountService)
if err != nil { if err != nil {

View File

@ -29,33 +29,34 @@ var (
func main() { func main() {
config.LoadConfig() config.LoadConfig()
var override config.Override var connStr string
var size uint var size uint
var sessionId string var sessionId string
var engineDebug bool var engineDebug bool
var resourceDir string
var err error var err error
var gettextDir string var gettextDir string
var langs args.LangVar var langs args.LangVar
flag.StringVar(&resourceDir, "resourcedir", scriptDir, "resource dir")
flag.StringVar(&sessionId, "session-id", "075xx2123", "session id") flag.StringVar(&sessionId, "session-id", "075xx2123", "session id")
flag.StringVar(override.DbConn, "c", "?", "default connection string (replaces all unspecified strings)") flag.StringVar(&connStr, "c", "", "connection string")
flag.StringVar(override.ResourceConn, "resource", "?", "resource connection string")
flag.StringVar(override.UserConn, "userdata", "?", "userdata store connection string")
flag.StringVar(override.StateConn, "state", "?", "state store connection string")
flag.BoolVar(&engineDebug, "d", false, "use engine debug output") flag.BoolVar(&engineDebug, "d", false, "use engine debug output")
flag.UintVar(&size, "s", 160, "max size of output") flag.UintVar(&size, "s", 160, "max size of output")
flag.StringVar(&gettextDir, "gettext", "", "use gettext translations from given directory") flag.StringVar(&gettextDir, "gettext", "", "use gettext translations from given directory")
flag.Var(&langs, "language", "add symbol resolution for language") flag.Var(&langs, "language", "add symbol resolution for language")
flag.Parse() flag.Parse()
config.Apply(&override) if connStr == "" {
conns, err := config.GetConns() connStr = config.DbConn()
}
connData, err := storage.ToConnData(connStr)
if err != nil { if err != nil {
fmt.Fprintf(os.Stderr, "conn specification error: %v\n", err) fmt.Fprintf(os.Stderr, "connstr err: %v\n", err)
os.Exit(1) os.Exit(1)
} }
logg.Infof("start command", "conn", conns, "outputsize", size) logg.Infof("start command", "conn", connData, "outputsize", size)
if len(langs.Langs()) == 0 { if len(langs.Langs()) == 0 {
langs.Set(config.Language()) langs.Set(config.Language())
@ -81,7 +82,7 @@ func main() {
MenuSeparator: menuSeparator, MenuSeparator: menuSeparator,
} }
menuStorageService := storage.NewMenuStorageService(conns) menuStorageService := storage.NewMenuStorageService(connData, resourceDir)
if err != nil { if err != nil {
fmt.Fprintf(os.Stderr, "menu storage service error: %v\n", err) fmt.Fprintf(os.Stderr, "menu storage service error: %v\n", err)
os.Exit(1) os.Exit(1)
@ -123,7 +124,7 @@ func main() {
os.Exit(1) os.Exit(1)
} }
accountService := services.New(ctx, menuStorageService) accountService := services.New(ctx, menuStorageService, connData)
hl, err := lhs.GetHandler(accountService) hl, err := lhs.GetHandler(accountService)
if err != nil { if err != nil {
fmt.Fprintf(os.Stderr, "get accounts service handler: %v\n", err) fmt.Fprintf(os.Stderr, "get accounts service handler: %v\n", err)

View File

@ -31,31 +31,34 @@ var (
func main() { func main() {
config.LoadConfig() config.LoadConfig()
var override config.Override var connStr string
var authConnStr string var authConnStr string
var resourceDir string
var size uint var size uint
var engineDebug bool var engineDebug bool
var stateDebug bool var stateDebug bool
var host string var host string
var port uint var port uint
//flag.StringVar(&authConnStr, "authdb", "", "auth connection string") flag.StringVar(&connStr, "c", "", "connection string")
flag.StringVar(override.DbConn, "c", "?", "default connection string (replaces all unspecified strings)") flag.StringVar(&authConnStr, "authdb", "", "auth connection string")
flag.StringVar(override.ResourceConn, "resource", "?", "resource connection string") flag.StringVar(&resourceDir, "resourcedir", path.Join("services", "registration"), "resource dir")
flag.StringVar(override.UserConn, "userdata", "?", "userdata store connection string")
flag.StringVar(override.StateConn, "state", "?", "state store connection string")
flag.BoolVar(&engineDebug, "d", false, "use engine debug output") flag.BoolVar(&engineDebug, "d", false, "use engine debug output")
flag.UintVar(&size, "s", 160, "max size of output") flag.UintVar(&size, "s", 160, "max size of output")
flag.StringVar(&host, "h", config.HostSSH(), "socket host") flag.StringVar(&host, "h", config.HostSSH(), "socket host")
flag.UintVar(&port, "p", config.PortSSH(), "socket port") flag.UintVar(&port, "p", config.PortSSH(), "socket port")
flag.Parse() flag.Parse()
config.Apply(&override) if connStr == "" {
conns, err := config.GetConns() connStr = config.DbConn()
}
if authConnStr == "" {
authConnStr = connStr
}
connData, err := storage.ToConnData(connStr)
if err != nil { if err != nil {
fmt.Fprintf(os.Stderr, "conn specification error: %v\n", err) fmt.Fprintf(os.Stderr, "connstr err: %v", err)
os.Exit(1) os.Exit(1)
} }
authConnData, err := storage.ToConnData(authConnStr) authConnData, err := storage.ToConnData(authConnStr)
if err != nil { if err != nil {
fmt.Fprintf(os.Stderr, "auth connstr err: %v", err) fmt.Fprintf(os.Stderr, "auth connstr err: %v", err)
@ -76,7 +79,7 @@ func main() {
logg.WarnCtxf(ctx, "!!!!! Do not expose to internet and only use with tunnel!") logg.WarnCtxf(ctx, "!!!!! Do not expose to internet and only use with tunnel!")
logg.WarnCtxf(ctx, "!!!!! (See ssh -L <...>)") logg.WarnCtxf(ctx, "!!!!! (See ssh -L <...>)")
logg.Infof("start command", "conn", conns, "authconn", authConnData, "outputsize", size, "keyfile", sshKeyFile, "host", host, "port", port) logg.Infof("start command", "conn", connData, "authconn", authConnData, "resourcedir", resourceDir, "outputsize", size, "keyfile", sshKeyFile, "host", host, "port", port)
pfp := path.Join(scriptDir, "pp.csv") pfp := path.Join(scriptDir, "pp.csv")
@ -114,7 +117,8 @@ func main() {
Cfg: cfg, Cfg: cfg,
Debug: engineDebug, Debug: engineDebug,
FlagFile: pfp, FlagFile: pfp,
Conn: conns, Conn: connData,
ResourceDir: resourceDir,
SrvKeyFile: sshKeyFile, SrvKeyFile: sshKeyFile,
Host: host, Host: host,
Port: port, Port: port,

View File

@ -1,17 +0,0 @@
package config
import (
viseconfig "git.grassecon.net/grassrootseconomics/visedriver/config"
)
type Override struct {
DbConn *string
StateConn *string
ResourceConn *string
UserConn *string
}
func Apply(o *Override) error {
viseconfig.ApplyConn(o.DbConn, o.StateConn, o.ResourceConn, o.UserConn)
return nil
}

View File

@ -6,17 +6,8 @@ import (
apiconfig "git.grassecon.net/grassrootseconomics/sarafu-api/config" apiconfig "git.grassecon.net/grassrootseconomics/sarafu-api/config"
) )
var ( func init() {
GetConns = viseconfig.GetConns env.LoadEnvVariables()
EnvPath string
)
func loadEnv() {
if EnvPath == "" {
env.LoadEnvVariables()
} else {
env.LoadEnvVariablesPath(EnvPath)
}
} }
const ( const (
@ -26,8 +17,8 @@ const (
defaultHTTPPort uint = 7123 defaultHTTPPort uint = 7123
) )
func LoadConfig() error { func LoadConfig() error {
loadEnv()
err := viseconfig.LoadConfig() err := viseconfig.LoadConfig()
if err != nil { if err != nil {
return err return err
@ -39,6 +30,10 @@ func LoadConfig() error {
return nil return nil
} }
func DbConn() string {
return viseconfig.DbConn
}
func Language() string { func Language() string {
return viseconfig.DefaultLanguage return viseconfig.DefaultLanguage
} }

View File

@ -24,22 +24,21 @@ func main() {
config.LoadConfig() config.LoadConfig()
var sessionId string var sessionId string
var override config.Override var connStr string
flag.StringVar(&sessionId, "session-id", "075xx2123", "session id") flag.StringVar(&sessionId, "session-id", "075xx2123", "session id")
flag.StringVar(override.DbConn, "c", "?", "default connection string (replaces all unspecified strings)") flag.StringVar(&connStr, "c", "", "connection string")
flag.StringVar(override.ResourceConn, "resource", "?", "resource connection string")
flag.StringVar(override.UserConn, "userdata", "?", "userdata store connection string")
flag.StringVar(override.StateConn, "state", "?", "state store connection string")
flag.Parse() flag.Parse()
config.Apply(&override)
conns, err := config.GetConns() if connStr == "" {
connStr = config.DbConn()
}
connData, err := storage.ToConnData(connStr)
if err != nil { if err != nil {
fmt.Fprintf(os.Stderr, "conn specification error: %v\n", err) fmt.Fprintf(os.Stderr, "connstr err: %v\n", err)
os.Exit(1) os.Exit(1)
} }
ctx := context.Background() ctx := context.Background()
ctx = context.WithValue(ctx, "SessionId", sessionId) ctx = context.WithValue(ctx, "SessionId", sessionId)
@ -50,16 +49,16 @@ func main() {
os.Exit(1) os.Exit(1)
} }
x := cmd.NewCmd(sessionId, flagParser) x := cmd.NewCmd(connData, sessionId, flagParser)
err = x.Parse(flag.Args()) err = x.Parse(flag.Args())
if err != nil { if err != nil {
fmt.Fprintf(os.Stderr, "cmd parse fail: %v\n", err) fmt.Fprintf(os.Stderr, "cmd parse fail: %v\n", err)
os.Exit(1) os.Exit(1)
} }
logg.Infof("start command", "conn", conns, "subcmd", x) logg.Infof("start command", "conn", connData, "subcmd", x)
menuStorageService := storage.NewMenuStorageService(conns) menuStorageService := storage.NewMenuStorageService(connData, "")
if err != nil { if err != nil {
fmt.Fprintf(os.Stderr, "menu storage service error: %v\n", err) fmt.Fprintf(os.Stderr, "menu storage service error: %v\n", err)
os.Exit(1) os.Exit(1)

View File

@ -32,7 +32,7 @@ func formatItem(k []byte, v []byte, sessionId string) (string, error) {
func main() { func main() {
config.LoadConfig() config.LoadConfig()
var override config.Override var connStr string
var sessionId string var sessionId string
var database string var database string
var engineDebug bool var engineDebug bool
@ -40,27 +40,27 @@ func main() {
var first bool var first bool
flag.StringVar(&sessionId, "session-id", "075xx2123", "session id") flag.StringVar(&sessionId, "session-id", "075xx2123", "session id")
flag.StringVar(override.DbConn, "c", "?", "default connection string (replaces all unspecified strings)") flag.StringVar(&connStr, "c", "", "connection string")
flag.StringVar(override.ResourceConn, "resource", "?", "resource connection string")
flag.StringVar(override.UserConn, "userdata", "?", "userdata store connection string")
flag.StringVar(override.StateConn, "state", "?", "state store connection string")
flag.BoolVar(&engineDebug, "d", false, "use engine debug output") flag.BoolVar(&engineDebug, "d", false, "use engine debug output")
flag.Parse() flag.Parse()
config.Apply(&override) if connStr == "" {
conns, err := config.GetConns() connStr = config.DbConn()
}
connData, err := storage.ToConnData(connStr)
if err != nil { if err != nil {
fmt.Fprintf(os.Stderr, "conn specification error: %v\n", err) fmt.Fprintf(os.Stderr, "connstr err: %v\n", err)
os.Exit(1) os.Exit(1)
} }
logg.Infof("start command", "conn", conns) logg.Infof("start command", "conn", connData)
ctx := context.Background() ctx := context.Background()
ctx = context.WithValue(ctx, "SessionId", sessionId) ctx = context.WithValue(ctx, "SessionId", sessionId)
ctx = context.WithValue(ctx, "Database", database) ctx = context.WithValue(ctx, "Database", database)
menuStorageService := storage.NewMenuStorageService(conns) resourceDir := scriptDir
menuStorageService := storage.NewMenuStorageService(connData, resourceDir)
store, err := menuStorageService.GetUserdataDb(ctx) store, err := menuStorageService.GetUserdataDb(ctx)
if err != nil { if err != nil {

View File

@ -22,8 +22,9 @@ type Cmd struct {
exec func(ctx context.Context, ss storage.StorageService) error exec func(ctx context.Context, ss storage.StorageService) error
} }
func NewCmd(sessionId string, flagParser *application.FlagManager) *Cmd { func NewCmd(conn storage.ConnData, sessionId string, flagParser *application.FlagManager) *Cmd {
return &Cmd{ return &Cmd{
conn: conn,
sessionId: sessionId, sessionId: sessionId,
flagParser: flagParser, flagParser: flagParser,
} }

View File

@ -10,13 +10,11 @@ import (
"testing" "testing"
"github.com/gofrs/uuid" "github.com/gofrs/uuid"
"git.defalsify.org/vise.git/logging"
"git.grassecon.net/grassrootseconomics/visedriver/testutil/driver" "git.grassecon.net/grassrootseconomics/visedriver/testutil/driver"
"git.grassecon.net/grassrootseconomics/sarafu-vise/testutil" "git.grassecon.net/grassrootseconomics/sarafu-vise/testutil"
) )
var ( var (
logg = logging.NewVanilla().WithDomain("menutraversaltest")
testData = driver.ReadData() testData = driver.ReadData()
sessionID string sessionID string
src = rand.NewSource(42) src = rand.NewSource(42)
@ -24,6 +22,9 @@ var (
) )
var groupTestFile = flag.String("test-file", "group_test.json", "The test file to use for running the group tests") var groupTestFile = flag.String("test-file", "group_test.json", "The test file to use for running the group tests")
var database = flag.String("db", "gdbm", "Specify the database (gdbm or postgres)")
var connStr = flag.String("conn", ".test_state", "connection string")
var dbSchema = flag.String("schema", "test", "Specify the database schema (default test)")
func GenerateSessionId() string { func GenerateSessionId() string {
uu := uuid.NewGenWithOptions(uuid.WithRandomReader(g)) uu := uuid.NewGenWithOptions(uuid.WithRandomReader(g))
@ -79,7 +80,12 @@ func extractSendAmount(response []byte) string {
} }
func TestMain(m *testing.M) { func TestMain(m *testing.M) {
// Parse the flags
flag.Parse()
sessionID = GenerateSessionId() sessionID = GenerateSessionId()
// set the db
testutil.SetDatabase(*database, *connStr, *dbSchema)
// Cleanup the db after tests // Cleanup the db after tests
defer testutil.CleanDatabase() defer testutil.CleanDatabase()
@ -94,8 +100,7 @@ func TestAccountCreationSuccessful(t *testing.T) {
for _, session := range sessions { for _, session := range sessions {
groups := driver.FilterGroupsByName(session.Groups, "account_creation_successful") groups := driver.FilterGroupsByName(session.Groups, "account_creation_successful")
for _, group := range groups { for _, group := range groups {
for i, step := range group.Steps { for _, step := range group.Steps {
logg.TraceCtxf(ctx, "executing step", "i", i, "step", step)
cont, err := en.Exec(ctx, []byte(step.Input)) cont, err := en.Exec(ctx, []byte(step.Input))
if err != nil { if err != nil {
t.Fatalf("Test case '%s' failed at input '%s': %v", group.Name, step.Input, err) t.Fatalf("Test case '%s' failed at input '%s': %v", group.Name, step.Input, err)
@ -137,8 +142,7 @@ func TestAccountRegistrationRejectTerms(t *testing.T) {
for _, session := range sessions { for _, session := range sessions {
groups := driver.FilterGroupsByName(session.Groups, "account_creation_reject_terms") groups := driver.FilterGroupsByName(session.Groups, "account_creation_reject_terms")
for _, group := range groups { for _, group := range groups {
for i, step := range group.Steps { for _, step := range group.Steps {
logg.TraceCtxf(ctx, "executing step", "i", i, "step", step)
cont, err := en.Exec(ctx, []byte(step.Input)) cont, err := en.Exec(ctx, []byte(step.Input))
if err != nil { if err != nil {
t.Fatalf("Test case '%s' failed at input '%s': %v", group.Name, step.Input, err) t.Fatalf("Test case '%s' failed at input '%s': %v", group.Name, step.Input, err)
@ -173,8 +177,7 @@ func TestMainMenuHelp(t *testing.T) {
for _, session := range sessions { for _, session := range sessions {
groups := driver.FilterGroupsByName(session.Groups, "main_menu_help") groups := driver.FilterGroupsByName(session.Groups, "main_menu_help")
for _, group := range groups { for _, group := range groups {
for i, step := range group.Steps { for _, step := range group.Steps {
logg.TraceCtxf(ctx, "executing step", "i", i, "step", step)
cont, err := en.Exec(ctx, []byte(step.Input)) cont, err := en.Exec(ctx, []byte(step.Input))
if err != nil { if err != nil {
t.Fatalf("Test case '%s' failed at input '%s': %v", group.Name, step.Input, err) t.Fatalf("Test case '%s' failed at input '%s': %v", group.Name, step.Input, err)

View File

@ -37,7 +37,7 @@ func (d *localEmitter) emit(ctx context.Context, msg apievent.Msg) error {
return err return err
} }
func New(ctx context.Context, storageService storage.StorageService) remote.AccountService { func New(ctx context.Context, storageService storage.StorageService, conn storage.ConnData) remote.AccountService {
svc := devremote.NewDevAccountService(ctx, storageService) svc := devremote.NewDevAccountService(ctx, storageService)
svc = svc.WithAutoVoucher(ctx, "FOO", 42) svc = svc.WithAutoVoucher(ctx, "FOO", 42)
eu := event.NewEventsUpdater(svc, storageService) eu := event.NewEventsUpdater(svc, storageService)

View File

@ -75,7 +75,8 @@ type SshRunner struct {
Ctx context.Context Ctx context.Context
Cfg engine.Config Cfg engine.Config
FlagFile string FlagFile string
Conn storage.Conns Conn storage.ConnData
ResourceDir string
Debug bool Debug bool
SrvKeyFile string SrvKeyFile string
Host string Host string
@ -147,7 +148,7 @@ func(s *SshRunner) Stop() error {
func(s *SshRunner) GetEngine(sessionId string) (engine.Engine, func(), error) { func(s *SshRunner) GetEngine(sessionId string) (engine.Engine, func(), error) {
ctx := s.Ctx ctx := s.Ctx
menuStorageService := storage.NewMenuStorageService(s.Conn) menuStorageService := storage.NewMenuStorageService(s.Conn, s.ResourceDir)
rs, err := menuStorageService.GetResource(ctx) rs, err := menuStorageService.GetResource(ctx)
if err != nil { if err != nil {
@ -179,7 +180,7 @@ func(s *SshRunner) GetEngine(sessionId string) (engine.Engine, func(), error) {
} }
// TODO: clear up why pointer here and by-value other cmds // TODO: clear up why pointer here and by-value other cmds
accountService := services.New(ctx, menuStorageService) accountService := services.New(ctx, menuStorageService, s.Conn)
hl, err := lhs.GetHandler(accountService) hl, err := lhs.GetHandler(accountService)
if err != nil { if err != nil {

View File

@ -4,15 +4,19 @@ import (
"context" "context"
"fmt" "fmt"
"log" "log"
"net/url"
"os" "os"
"path" "path"
"path/filepath" "path/filepath"
"time" "time"
testdataloader "github.com/peteole/testdata-loader"
"github.com/jackc/pgx/v5/pgxpool" "github.com/jackc/pgx/v5/pgxpool"
"git.defalsify.org/vise.git/engine" "git.defalsify.org/vise.git/engine"
"git.defalsify.org/vise.git/logging"
"git.defalsify.org/vise.git/resource" "git.defalsify.org/vise.git/resource"
"git.grassecon.net/grassrootseconomics/sarafu-vise/config" "git.grassecon.net/grassrootseconomics/visedriver/env"
"git.grassecon.net/grassrootseconomics/visedriver/config"
"git.grassecon.net/grassrootseconomics/sarafu-vise/handlers" "git.grassecon.net/grassrootseconomics/sarafu-vise/handlers"
"git.grassecon.net/grassrootseconomics/visedriver/storage" "git.grassecon.net/grassrootseconomics/visedriver/storage"
"git.grassecon.net/grassrootseconomics/sarafu-api/testutil/testservice" "git.grassecon.net/grassrootseconomics/sarafu-api/testutil/testservice"
@ -21,58 +25,81 @@ import (
"git.grassecon.net/grassrootseconomics/sarafu-vise/testutil/testtag" "git.grassecon.net/grassrootseconomics/sarafu-vise/testutil/testtag"
) )
var (
logg = logging.NewVanilla()
baseDir = testdataloader.GetBasePath()
scriptDir = path.Join(baseDir, "services", "registration")
setDbType string
setConnStr string
setDbSchema string
)
func init() {
env.LoadEnvVariablesPath(baseDir)
config.LoadConfig()
}
// SetDatabase updates the database used by TestEngine
func SetDatabase(database, connStr, dbSchema string) {
setDbType = database
setConnStr = connStr
setDbSchema = dbSchema
}
// CleanDatabase removes all test data from the database // CleanDatabase removes all test data from the database
func CleanDatabase() { func CleanDatabase() {
for _, v := range([]int8{ if setDbType == "postgres" {
storage.STORETYPE_STATE, ctx := context.Background()
storage.STORETYPE_USER, // Update the connection string with the new search path
}) { updatedConnStr, err := updateSearchPath(setConnStr, setDbSchema)
conn := conns[v] if err != nil {
logg.Infof("cleaning test database", "typ", v, "db", conn) log.Fatalf("Failed to update search path: %v", err)
if conn.DbType() == storage.DBTYPE_POSTGRES { }
ctx := context.Background()
// Update the connection string with the new search path
updatedConnStr := conn.String()
dbConn, err := pgxpool.New(ctx, updatedConnStr) dbConn, err := pgxpool.New(ctx, updatedConnStr)
if err != nil { if err != nil {
log.Fatalf("Failed to connect to database for cleanup: %v", err) log.Fatalf("Failed to connect to database for cleanup: %v", err)
} }
defer dbConn.Close() defer dbConn.Close()
setDbSchema := conn.Domain() query := fmt.Sprintf("DELETE FROM %s.kv_vise;", setDbSchema)
_, execErr := dbConn.Exec(ctx, query)
query := fmt.Sprintf("DELETE FROM %s.kv_vise;", setDbSchema) if execErr != nil {
_, execErr := dbConn.Exec(ctx, query) log.Printf("Failed to cleanup table %s.kv_vise: %v", setDbSchema, execErr)
if execErr != nil {
log.Printf("Failed to cleanup table %s.kv_vise: %v", setDbSchema, execErr)
} else {
log.Printf("Successfully cleaned up table %s.kv_vise", setDbSchema)
}
} else if conn.DbType() == storage.DBTYPE_FS || conn.DbType() == storage.DBTYPE_GDBM {
connStr, _ := filepath.Abs(conn.Path())
if err := os.RemoveAll(connStr); err != nil {
log.Fatalf("Failed to delete state store %v: %v", conn, err)
}
} else { } else {
logg.Errorf("store cleanup not handled") log.Printf("Successfully cleaned up table %s.kv_vise", setDbSchema)
}
} else {
setConnStr, _ := filepath.Abs(setConnStr)
if err := os.RemoveAll(setConnStr); err != nil {
log.Fatalf("Failed to delete state store %s: %v", setConnStr, err)
} }
} }
} }
// updateSearchPath updates the search_path (schema) to be used in the connection
func updateSearchPath(connStr string, newSearchPath string) (string, error) {
u, err := url.Parse(connStr)
if err != nil {
return "", fmt.Errorf("invalid connection string: %w", err)
}
// Parse the query parameters
q := u.Query()
// Update or add the search_path parameter
q.Set("search_path", newSearchPath)
// Rebuild the connection string with updated parameters
u.RawQuery = q.Encode()
return u.String(), nil
}
func TestEngine(sessionId string) (engine.Engine, func(), chan bool) { func TestEngine(sessionId string) (engine.Engine, func(), chan bool) {
config.LoadConfig() var err error
err := config.Apply(&override)
if err != nil {
panic(fmt.Errorf("args override fail: %v\n", err))
}
conns, err = config.GetConns()
if err != nil {
panic(fmt.Errorf("get conns fail: %v\n", err))
}
ctx := context.Background() ctx := context.Background()
ctx = context.WithValue(ctx, "SessionId", sessionId) ctx = context.WithValue(ctx, "SessionId", sessionId)
logg.InfoCtxf(ctx, "loaded engine setup", "conns", conns)
pfp := path.Join(scriptDir, "pp.csv") pfp := path.Join(scriptDir, "pp.csv")
var eventChannel = make(chan bool) var eventChannel = make(chan bool)
@ -84,8 +111,29 @@ func TestEngine(sessionId string) (engine.Engine, func(), chan bool) {
FlagCount: uint32(128), FlagCount: uint32(128),
} }
menuStorageService := storage.NewMenuStorageService(conns) if setDbType == "postgres" {
menuStorageService = menuStorageService.WithDb(resourceDb, storage.STORETYPE_RESOURCE) setConnStr = config.DbConn
setConnStr, err = updateSearchPath(setConnStr, setDbSchema)
if err != nil {
fmt.Println("Error:", err)
os.Exit(1)
}
} else {
setConnStr, err = filepath.Abs(setConnStr)
if err != nil {
fmt.Fprintf(os.Stderr, "connstr err: %v", err)
os.Exit(1)
}
}
conn, err := storage.ToConnData(setConnStr)
if err != nil {
fmt.Fprintf(os.Stderr, "connstr parse err: %v", err)
os.Exit(1)
}
resourceDir := scriptDir
menuStorageService := storage.NewMenuStorageService(conn, resourceDir)
rs, err := menuStorageService.GetResource(ctx) rs, err := menuStorageService.GetResource(ctx)
if err != nil { if err != nil {
@ -114,6 +162,7 @@ func TestEngine(sessionId string) (engine.Engine, func(), chan bool) {
lhs, err := handlers.NewLocalHandlerService(ctx, pfp, true, dbResource, cfg, rs) lhs, err := handlers.NewLocalHandlerService(ctx, pfp, true, dbResource, cfg, rs)
lhs.SetDataStore(&userDataStore) lhs.SetDataStore(&userDataStore)
lhs.SetPersister(pe) lhs.SetPersister(pe)
if err != nil { if err != nil {
fmt.Fprintf(os.Stderr, err.Error()) fmt.Fprintf(os.Stderr, err.Error())
os.Exit(1) os.Exit(1)

View File

@ -1,21 +0,0 @@
// +build testfsdb
package testutil
import (
"os"
)
func init() {
d, err := os.MkdirTemp("", "sarafu-vise-menutraversal-state-")
if err != nil {
panic(err)
}
override.StateConn = &d
d, err = os.MkdirTemp("", "sarafu-vise-menutraversal-user-")
if err != nil {
panic(err)
}
override.UserConn = &d
}

View File

@ -1,32 +0,0 @@
package testutil
import (
"context"
"path"
testdataloader "github.com/peteole/testdata-loader"
"git.defalsify.org/vise.git/logging"
fsdb "git.defalsify.org/vise.git/db/fs"
"git.defalsify.org/vise.git/db"
"git.grassecon.net/grassrootseconomics/visedriver/storage"
"git.grassecon.net/grassrootseconomics/sarafu-vise/config"
)
var (
logg = logging.NewVanilla().WithDomain("sarafu-vise.testutil").WithContextKey("SessionId")
conns storage.Conns
resourceDb db.Db
baseDir = testdataloader.GetBasePath()
scriptDir = path.Join(baseDir, "services", "registration")
override config.Override
)
func init() {
ctx := context.Background()
config.EnvPath = baseDir
resourceDb = fsdb.NewFsDb()
err := resourceDb.Connect(ctx, scriptDir)
if err != nil {
panic(err)
}
}