# HG changeset patch
# User Christophe de Vienne <christophe@cdevienne.info>
# Date 1602667341 -7200
#      Wed Oct 14 11:22:21 2020 +0200
# Node ID 9363ce22972fae5993e1538d91fae4bf08482c40
# Parent  86f7892ca412dbd41844d019a65a519bd6c2d254
Better error handling + tools

diff --git a/database/test.go b/database/test.go
--- a/database/test.go
+++ b/database/test.go
@@ -129,10 +129,12 @@
 }
 
 // Close the lock connection, then the database
-func (db *TestDB) Close() error {
+func (db *TestDB) Close() {
 	if err := db.lockConn.Close(); err != nil {
 		db.tb.Error("lockConn.Close() failed", err)
 	}
 
-	return db.DB.Close()
+	if err := db.DB.Close(); err != nil {
+		db.tb.Error("db.Close() failed", err)
+	}
 }
diff --git a/templates/server/cmd.gotmpl b/templates/server/cmd.gotmpl
--- a/templates/server/cmd.gotmpl
+++ b/templates/server/cmd.gotmpl
@@ -61,7 +61,9 @@
 	parser.NamespaceDelimiter = "-"
 	parser.EnvNamespaceDelimiter = "_"
 	parser.EnvNamespace = "CARNET"
-	parser.AddGroup("Configuration", "Configuration file", ConfigFileOption)
+	if _, err := parser.AddGroup("Configuration", "Configuration file", ConfigFileOption); err != nil {
+		panic(err)
+	}
 	g, err := parser.AddGroup("Logging", "Logging options", LoggingOptions)
 	if err != nil {
 		panic(err)
@@ -83,12 +85,16 @@
 	g.Namespace="sentry"
 	g.EnvNamespace="SENTRY"
 
-	parser.AddCommand("generate-config", "Generate a configuration file", "", orusapi.NewGenerateConfigCmd(parser))
+	if _, err := parser.AddCommand("generate-config", "Generate a configuration file", "", orusapi.NewGenerateConfigCmd(parser)); err != nil {
+		panic(err)
+	}
 
 	bootstrapParser.NamespaceDelimiter = "-"
 	bootstrapParser.EnvNamespaceDelimiter = "_"
 	bootstrapParser.EnvNamespace = "CARNET"
-	bootstrapParser.AddGroup("Configuration", "Configuration file", ConfigFileOption)
+	if _, err := bootstrapParser.AddGroup("Configuration", "Configuration file", ConfigFileOption); err != nil {
+		panic(err)
+	}
 	g, err = bootstrapParser.AddGroup("Logging", "Logging options", LoggingOptions)
 	if err != nil {
 		panic(err)
diff --git a/templates/server/cmdMigrate.gotmpl b/templates/server/cmdMigrate.gotmpl
--- a/templates/server/cmdMigrate.gotmpl
+++ b/templates/server/cmdMigrate.gotmpl
@@ -3,9 +3,9 @@
 package cmd
 
 import (
+	"github.com/golang-migrate/migrate/v4"
+	"github.com/rs/zerolog"
 	"orus.io/orus-io/go-orusapi/database"
-	"github.com/golang-migrate/migrate/v4/source"
-	bindata "github.com/golang-migrate/migrate/v4/source/go_bindata"
 
 	"{{ joinFilePath .TargetImportPath "migration" }}"
 )
@@ -32,7 +32,16 @@
 	if err != nil {
 		return fmt.Errorf("failed to init migration engine: %s", err)
 	}
-	defer m.Close()
+	defer func() {
+		if sourceErr, databaseErr := m.Close(); sourceErr != nil || databaseErr != nil {
+			if sourceErr != nil {
+				log.Err(err).Msg("error closing Migrate source")
+			}
+			if databaseErr != nil {
+				log.Err(err).Msg("error closing Migrate database")
+			}
+		}
+	}()
 
 	if err := m.Up(); err != nil {
 		if err == migrate.ErrNoChange {
diff --git a/testutils/defered_errcheck.go b/testutils/defered_errcheck.go
new file mode 100644
--- /dev/null
+++ b/testutils/defered_errcheck.go
@@ -0,0 +1,12 @@
+package testutils
+
+import (
+	"testing"
+
+	"github.com/stretchr/testify/assert"
+)
+
+// DeferedErrCheck ...
+func DeferedErrCheck(tb testing.TB, cb func() error) {
+	assert.NoError(tb, cb())
+}