diff --git a/goatherd_test.go b/goatherd_test.go
index e342e74af9dcdc1a940c5115b58235449d577396..144b26c6553ee764e9a848ac7b8358ea48c50db9 100644
--- a/goatherd_test.go
+++ b/goatherd_test.go
@@ -70,6 +70,16 @@ func create_user_t(t *testing.T) {
     t.Run("stdin", create_and_check("-", "-"))
 }
 
+
+func aborted(t *testing.T, err error, aborted ...interface{}) bool {
+    if transaction_failed(err) {
+        t.Log(aborted...)
+        return true
+    } else { t_err_fatal(t, err) }
+
+    return false
+}
+
 func interleaved_transactions_t(t *testing.T) {
     var err error
     var txs [2]*sql.Tx
@@ -82,26 +92,17 @@ func interleaved_transactions_t(t *testing.T) {
     var c uint64
     for i, tx := range txs {
         err = tx.QueryRow("SELECT count FROM users WHERE name = $1", username).Scan(&c)
-        if transaction_failed(err) {
-            t.Log("rollback after select", i)
-            return
-        } else { t_err_fatal(t, err) }
+        if aborted(t, err, "rollback after select", i) { return }
     }
 
     for i, tx := range txs {
         t.Log("update", i)
         _, err := tx.Exec("UPDATE users SET count = $1 WHERE name = $2", c + uint64(i), username)
-        if transaction_failed(err) {
-            t.Log("rollback after update", i)
-            return
-        } else { t_err_fatal(t, err) }
+        if aborted(t, err, "rollback after update", i) { return }
 
         t.Log("commit", i)
         err = tx.Commit()
-        if transaction_failed(err) {
-            t.Log("rollback after commit", i)
-            return
-        } else { t_err_fatal(t, err) }
+        if aborted(t, err, "rollback after commit", i) { return }
     }
 
     t.Error("No transaction failure despite interleaved transactions!")
@@ -119,36 +120,21 @@ func nested_transactions_t(t *testing.T) {
     t_err_fatal(t, outer.QueryRow("SELECT count FROM users WHERE name = $1", username).Scan(&c))
 
     err = inner.QueryRow("SELECT count FROM users WHERE name = $1", username).Scan(&c)
-    if transaction_failed(err) {
-        t.Log("rollback after inner.Query")
-        return
-    } else { t_err_fatal(t, err) }
+    if aborted(t, err, "rollback after inner.Query") { return }
 
     t.Log("update inner")
     _, err = inner.Exec("UPDATE users SET count = $1 WHERE name = $2", c + 1, username)
-    if transaction_failed(err) {
-        t.Log("rollback after inner.Exec")
-        return
-    } else { t_err_fatal(t, err) }
+    if aborted(t, err, "rollback after inner.Exec") { return }
 
     err = inner.Commit()
-    if transaction_failed(err) {
-        t.Log("rollback after inner.Commit")
-        return
-    } else { t_err_fatal(t, err) }
+    if aborted(t, err, "rollback after inner.Commit") { return }
 
     t.Log("update outer")
     _, err = outer.Exec("UPDATE users SET count = $1 WHERE name = $2", c + 1, username)
-    if transaction_failed(err) {
-        t.Log("rollback after outer.Exec")
-        return
-    } else { t_err_fatal(t, err) }
+    if aborted(t, err, "rollback after outer.Exec") { return }
 
     err = outer.Commit()
-    if transaction_failed(err) {
-        t.Log("rollback after outer.Commit")
-        return
-    } else { t_err_fatal(t, err) }
+    if aborted(t, err, "rollback after outer.Commit") { return }
 
     t.Error("No transaction failure despite nested transactions")
 }