Skip to content

Commit

Permalink
improve error handling
Browse files Browse the repository at this point in the history
Signed-off-by: Johan Haals <[email protected]>
  • Loading branch information
jhaals committed Oct 17, 2024
1 parent 7346fb5 commit 044f411
Show file tree
Hide file tree
Showing 2 changed files with 29 additions and 18 deletions.
13 changes: 8 additions & 5 deletions cmd/yopass-server/main.go
Original file line number Diff line number Diff line change
Expand Up @@ -48,7 +48,10 @@ func init() {

func main() {
logger := configureZapLogger()
db := setupDatabase(logger)
db, err := setupDatabase(logger)
if err != nil {
logger.Fatal("failed to setup database", zap.Error(err))
}
registry := prometheus.NewRegistry()
registry.MustRegister(collectors.NewProcessCollector(collectors.ProcessCollectorOpts{}))
registry.MustRegister(collectors.NewGoCollector())
Expand Down Expand Up @@ -130,7 +133,7 @@ func configureZapLogger() *zap.Logger {
return logger
}

func setupDatabase(logger *zap.Logger) server.Database {
func setupDatabase(logger *zap.Logger) (server.Database, error) {
var db server.Database
switch database := viper.GetString("database"); database {
case "memcached":
Expand All @@ -142,11 +145,11 @@ func setupDatabase(logger *zap.Logger) server.Database {
var err error
db, err = server.NewRedis(redis)
if err != nil {
logger.Fatal("invalid Redis URL", zap.Error(err))
return nil, fmt.Errorf("invalid Redis URL: %w", err)
}
logger.Debug("configured Redis", zap.String("url", redis))
default:
logger.Fatal("unsupported database, expected 'memcached' or 'redis'", zap.String("database", database))
return nil, fmt.Errorf("unsupported database, expected 'memcached' or 'redis' got '%s'", database)
}
return db
return db, nil
}
34 changes: 21 additions & 13 deletions cmd/yopass-server/main_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@ func TestSetupDatabase(t *testing.T) {
core, logs := observer.New(zapcore.DebugLevel)
logger := zap.New(core)

db := setupDatabase(logger)
db, _ := setupDatabase(logger)
if db == nil {
t.Fatal("Expected non-nil database")
}
Expand All @@ -33,7 +33,7 @@ func TestSetupDatabaseRedis(t *testing.T) {
core, logs := observer.New(zapcore.DebugLevel)
logger := zap.New(core)

db := setupDatabase(logger)
db, _ := setupDatabase(logger)
if db == nil {
t.Fatal("Expected non-nil database")
}
Expand All @@ -43,20 +43,28 @@ func TestSetupDatabaseRedis(t *testing.T) {
}
}

func TestSetupDatabaseInvalid(t *testing.T) {
viper.Set("database", "invalid")
func TestSetupDatabaseRedisWithInvalidUrl(t *testing.T) {
viper.Set("database", "redis")
viper.Set("redis", "boop")

core, logs := observer.New(zapcore.DebugLevel)
core, _ := observer.New(zapcore.DebugLevel)
logger := zap.New(core)

defer func() {
if r := recover(); r == nil {
t.Fatal("Expected panic for unsupported database")
}
}()
_, err := setupDatabase(logger)
expected := `invalid Redis URL: invalid redis URL scheme: `
if err.Error() != expected {
t.Fatalf("Expected '%s', got '%v'", expected, err.Error())
}
}

func TestSetupDatabaseInvalid(t *testing.T) {
viper.Set("database", "invalid")
core, _ := observer.New(zapcore.DebugLevel)
logger := zap.New(core)

setupDatabase(logger)
if logs.FilterMessage("unsupported database").Len() != 1 {
t.Error("Expected log message 'unsupported database'")
_, err := setupDatabase(logger)
expected := `unsupported database, expected 'memcached' or 'redis' got 'invalid'`
if err.Error() != expected {
t.Fatalf("Expected '%s', got '%v'", expected, err.Error())
}
}

0 comments on commit 044f411

Please sign in to comment.