Add full error checking to //scouting/db

We had a few missing error checks in the code which made it hard to
debug the port to postgres. This patch adds the missing error checks
and cleans up the code a bit. I took this opportunity to rename
`error_` to `err` to match the rest of the code base.

Signed-off-by: Philipp Schrader <philipp.schrader@gmail.com>
Change-Id: Idc67c450079ba8aa97db1c1685a982d77ab8d44d
diff --git a/scouting/db/db_test.go b/scouting/db/db_test.go
index 6e3e8c3..474ea41 100644
--- a/scouting/db/db_test.go
+++ b/scouting/db/db_test.go
@@ -1,21 +1,28 @@
 package db
 
 import (
+	"fmt"
 	"os"
 	"path/filepath"
 	"reflect"
 	"testing"
 )
 
+// Shortcut for error checking. If the specified error is non-nil, print the
+// error message and exit the test.
+func check(t *testing.T, err error, message string) {
+	if err != nil {
+		t.Fatal(message, ":", err)
+	}
+}
+
 // Creates a database in TEST_TMPDIR so that we don't accidentally write it
 // into the runfiles directory.
 func createDatabase(t *testing.T) *Database {
 	// Get the path to our temporary writable directory.
 	testTmpdir := os.Getenv("TEST_TMPDIR")
 	db, err := NewDatabase(filepath.Join(testTmpdir, "scouting.db"))
-	if err != nil {
-		t.Fatal("Failed to create a new database: ", err)
-	}
+	check(t, err, "Failed to create new database")
 	return db
 }
 
@@ -23,12 +30,22 @@
 	db := createDatabase(t)
 	defer db.Delete()
 
-	correct := []Match{Match{MatchNumber: 7, Round: 1, CompLevel: "quals", R1: 9999, R2: 1000, R3: 777, B1: 0000, B2: 4321, B3: 1234, r1ID: 1, r2ID: 2, r3ID: 3, b1ID: 4, b2ID: 5, b3ID: 6}}
-	db.AddToMatch(correct[0])
-	got, error_ := db.ReturnMatches()
-	if error_ != nil {
-		t.Fatalf(error_.Error())
+	correct := []Match{
+		Match{
+			MatchNumber: 7,
+			Round:       1,
+			CompLevel:   "quals",
+			R1:          9999, R2: 1000, R3: 777, B1: 0000, B2: 4321, B3: 1234,
+			r1ID: 1, r2ID: 2, r3ID: 3, b1ID: 4, b2ID: 5, b3ID: 6,
+		},
 	}
+
+	err := db.AddToMatch(correct[0])
+	check(t, err, "Failed to add match data")
+
+	got, err := db.ReturnMatches()
+	check(t, err, "Failed ReturnMatches()")
+
 	if !reflect.DeepEqual(correct, got) {
 		t.Fatalf("Got %#v,\nbut expected %#v.", got, correct)
 	}
@@ -39,26 +56,58 @@
 	defer db.Delete()
 
 	correct := []Stats{
-		Stats{TeamNumber: 1236, MatchNumber: 7, ShotsMissed: 9, UpperGoalShots: 5, LowerGoalShots: 4, ShotsMissedAuto: 3, UpperGoalAuto: 2, LowerGoalAuto: 1, PlayedDefense: 2, Climbing: 3},
-		Stats{TeamNumber: 1001, MatchNumber: 7, ShotsMissed: 6, UpperGoalShots: 9, LowerGoalShots: 9, ShotsMissedAuto: 0, UpperGoalAuto: 0, LowerGoalAuto: 0, PlayedDefense: 0, Climbing: 0},
-		Stats{TeamNumber: 777, MatchNumber: 7, ShotsMissed: 5, UpperGoalShots: 7, LowerGoalShots: 12, ShotsMissedAuto: 0, UpperGoalAuto: 4, LowerGoalAuto: 0, PlayedDefense: 0, Climbing: 0},
-		Stats{TeamNumber: 1000, MatchNumber: 7, ShotsMissed: 12, UpperGoalShots: 6, LowerGoalShots: 10, ShotsMissedAuto: 0, UpperGoalAuto: 7, LowerGoalAuto: 0, PlayedDefense: 0, Climbing: 0},
-		Stats{TeamNumber: 4321, MatchNumber: 7, ShotsMissed: 14, UpperGoalShots: 12, LowerGoalShots: 3, ShotsMissedAuto: 0, UpperGoalAuto: 7, LowerGoalAuto: 0, PlayedDefense: 0, Climbing: 0},
-		Stats{TeamNumber: 1234, MatchNumber: 7, ShotsMissed: 3, UpperGoalShots: 4, LowerGoalShots: 0, ShotsMissedAuto: 0, UpperGoalAuto: 9, LowerGoalAuto: 0, PlayedDefense: 0, Climbing: 0},
+		Stats{
+			TeamNumber: 1236, MatchNumber: 7,
+			ShotsMissed: 9, UpperGoalShots: 5, LowerGoalShots: 4,
+			ShotsMissedAuto: 3, UpperGoalAuto: 2, LowerGoalAuto: 1,
+			PlayedDefense: 2, Climbing: 3,
+		},
+		Stats{
+			TeamNumber: 1001, MatchNumber: 7,
+			ShotsMissed: 6, UpperGoalShots: 9, LowerGoalShots: 9,
+			ShotsMissedAuto: 0, UpperGoalAuto: 0, LowerGoalAuto: 0,
+			PlayedDefense: 0, Climbing: 0,
+		},
+		Stats{
+			TeamNumber: 777, MatchNumber: 7,
+			ShotsMissed: 5, UpperGoalShots: 7, LowerGoalShots: 12,
+			ShotsMissedAuto: 0, UpperGoalAuto: 4, LowerGoalAuto: 0,
+			PlayedDefense: 0, Climbing: 0,
+		},
+		Stats{
+			TeamNumber: 1000, MatchNumber: 7,
+			ShotsMissed: 12, UpperGoalShots: 6, LowerGoalShots: 10,
+			ShotsMissedAuto: 0, UpperGoalAuto: 7, LowerGoalAuto: 0,
+			PlayedDefense: 0, Climbing: 0,
+		},
+		Stats{
+			TeamNumber: 4321, MatchNumber: 7,
+			ShotsMissed: 14, UpperGoalShots: 12, LowerGoalShots: 3,
+			ShotsMissedAuto: 0, UpperGoalAuto: 7, LowerGoalAuto: 0,
+			PlayedDefense: 0, Climbing: 0,
+		},
+		Stats{
+			TeamNumber: 1234, MatchNumber: 7,
+			ShotsMissed: 3, UpperGoalShots: 4, LowerGoalShots: 0,
+			ShotsMissedAuto: 0, UpperGoalAuto: 9, LowerGoalAuto: 0,
+			PlayedDefense: 0, Climbing: 0,
+		},
 	}
-	err := db.AddToMatch(Match{MatchNumber: 7, Round: 1, CompLevel: "quals", R1: 1236, R2: 1001, R3: 777, B1: 1000, B2: 4321, B3: 1234, r1ID: 1, r2ID: 2, r3ID: 3, b1ID: 4, b2ID: 5, b3ID: 6})
-	if err != nil {
-		t.Fatal("Failed to add match: ", err)
-	}
+
+	err := db.AddToMatch(Match{
+		MatchNumber: 7, Round: 1, CompLevel: "quals",
+		R1: 1236, R2: 1001, R3: 777, B1: 1000, B2: 4321, B3: 1234,
+		r1ID: 1, r2ID: 2, r3ID: 3, b1ID: 4, b2ID: 5, b3ID: 6})
+	check(t, err, "Failed to add match")
+
 	for i := 0; i < len(correct); i++ {
-		if err := db.AddToStats(correct[i]); err != nil {
-			t.Fatal("Failed to add stats to DB: ", err)
-		}
+		err = db.AddToStats(correct[i])
+		check(t, err, "Failed to add stats to DB")
 	}
-	got, error_ := db.ReturnStats()
-	if error_ != nil {
-		t.Fatalf(error_.Error())
-	}
+
+	got, err := db.ReturnStats()
+	check(t, err, "Failed ReturnStats()")
+
 	if !reflect.DeepEqual(correct, got) {
 		t.Errorf("Got %#v,\nbut expected %#v.", got, correct)
 	}
@@ -76,18 +125,26 @@
 	}
 
 	for i := 0; i < len(testDatabase); i++ {
-		db.AddToMatch(testDatabase[i])
+		err := db.AddToMatch(testDatabase[i])
+		check(t, err, fmt.Sprint("Failed to add match", i))
 	}
 
 	correct := []Match{
-		Match{MatchNumber: 2, Round: 1, CompLevel: "quals", R1: 251, R2: 169, R3: 286, B1: 253, B2: 538, B3: 149, r1ID: 1, r2ID: 2, r3ID: 3, b1ID: 4, b2ID: 5, b3ID: 6},
-		Match{MatchNumber: 3, Round: 1, CompLevel: "quals", R1: 147, R2: 421, R3: 538, B1: 126, B2: 448, B3: 262, r1ID: 13, r2ID: 14, r3ID: 15, b1ID: 16, b2ID: 17, b3ID: 18},
+		Match{
+			MatchNumber: 2, Round: 1, CompLevel: "quals",
+			R1: 251, R2: 169, R3: 286, B1: 253, B2: 538, B3: 149,
+			r1ID: 1, r2ID: 2, r3ID: 3, b1ID: 4, b2ID: 5, b3ID: 6,
+		},
+		Match{
+			MatchNumber: 3, Round: 1, CompLevel: "quals",
+			R1: 147, R2: 421, R3: 538, B1: 126, B2: 448, B3: 262,
+			r1ID: 13, r2ID: 14, r3ID: 15, b1ID: 16, b2ID: 17, b3ID: 18,
+		},
 	}
 
-	got, error_ := db.QueryMatches(538)
-	if error_ != nil {
-		t.Fatal("Failed to query matches for 538: ", error_)
-	}
+	got, err := db.QueryMatches(538)
+	check(t, err, "Failed to query matches for 538")
+
 	if !reflect.DeepEqual(correct, got) {
 		t.Fatalf("Got %#v,\nbut expected %#v.", got, correct)
 	}
@@ -98,24 +155,65 @@
 	defer db.Delete()
 
 	testDatabase := []Stats{
-		Stats{TeamNumber: 1235, MatchNumber: 94, ShotsMissed: 2, UpperGoalShots: 2, LowerGoalShots: 2, ShotsMissedAuto: 2, UpperGoalAuto: 2, LowerGoalAuto: 2, PlayedDefense: 2, Climbing: 2},
-		Stats{TeamNumber: 1234, MatchNumber: 94, ShotsMissed: 4, UpperGoalShots: 4, LowerGoalShots: 4, ShotsMissedAuto: 4, UpperGoalAuto: 4, LowerGoalAuto: 4, PlayedDefense: 7, Climbing: 2},
-		Stats{TeamNumber: 1233, MatchNumber: 94, ShotsMissed: 3, UpperGoalShots: 3, LowerGoalShots: 3, ShotsMissedAuto: 3, UpperGoalAuto: 3, LowerGoalAuto: 3, PlayedDefense: 3, Climbing: 3},
-		Stats{TeamNumber: 1232, MatchNumber: 94, ShotsMissed: 5, UpperGoalShots: 5, LowerGoalShots: 5, ShotsMissedAuto: 5, UpperGoalAuto: 5, LowerGoalAuto: 5, PlayedDefense: 7, Climbing: 1},
-		Stats{TeamNumber: 1231, MatchNumber: 94, ShotsMissed: 6, UpperGoalShots: 6, LowerGoalShots: 6, ShotsMissedAuto: 6, UpperGoalAuto: 6, LowerGoalAuto: 6, PlayedDefense: 7, Climbing: 1},
-		Stats{TeamNumber: 1239, MatchNumber: 94, ShotsMissed: 7, UpperGoalShots: 7, LowerGoalShots: 7, ShotsMissedAuto: 7, UpperGoalAuto: 7, LowerGoalAuto: 3, PlayedDefense: 7, Climbing: 1},
+		Stats{
+			TeamNumber: 1235, MatchNumber: 94,
+			ShotsMissed: 2, UpperGoalShots: 2, LowerGoalShots: 2,
+			ShotsMissedAuto: 2, UpperGoalAuto: 2, LowerGoalAuto: 2,
+			PlayedDefense: 2, Climbing: 2},
+		Stats{
+			TeamNumber: 1234, MatchNumber: 94,
+			ShotsMissed: 4, UpperGoalShots: 4, LowerGoalShots: 4,
+			ShotsMissedAuto: 4, UpperGoalAuto: 4, LowerGoalAuto: 4,
+			PlayedDefense: 7, Climbing: 2,
+		},
+		Stats{
+			TeamNumber: 1233, MatchNumber: 94,
+			ShotsMissed: 3, UpperGoalShots: 3, LowerGoalShots: 3,
+			ShotsMissedAuto: 3, UpperGoalAuto: 3, LowerGoalAuto: 3,
+			PlayedDefense: 3, Climbing: 3,
+		},
+		Stats{
+			TeamNumber: 1232, MatchNumber: 94,
+			ShotsMissed: 5, UpperGoalShots: 5, LowerGoalShots: 5,
+			ShotsMissedAuto: 5, UpperGoalAuto: 5, LowerGoalAuto: 5,
+			PlayedDefense: 7, Climbing: 1,
+		},
+		Stats{
+			TeamNumber: 1231, MatchNumber: 94,
+			ShotsMissed: 6, UpperGoalShots: 6, LowerGoalShots: 6,
+			ShotsMissedAuto: 6, UpperGoalAuto: 6, LowerGoalAuto: 6,
+			PlayedDefense: 7, Climbing: 1,
+		},
+		Stats{
+			TeamNumber: 1239, MatchNumber: 94,
+			ShotsMissed: 7, UpperGoalShots: 7, LowerGoalShots: 7,
+			ShotsMissedAuto: 7, UpperGoalAuto: 7, LowerGoalAuto: 3,
+			PlayedDefense: 7, Climbing: 1,
+		},
 	}
-	db.AddToMatch(Match{MatchNumber: 94, Round: 1, CompLevel: "quals", R1: 1235, R2: 1234, R3: 1233, B1: 1232, B2: 1231, B3: 1239})
+
+	err := db.AddToMatch(Match{
+		MatchNumber: 94, Round: 1, CompLevel: "quals",
+		R1: 1235, R2: 1234, R3: 1233, B1: 1232, B2: 1231, B3: 1239})
+	check(t, err, "Failed to add match")
+
 	for i := 0; i < len(testDatabase); i++ {
-		db.AddToStats(testDatabase[i])
+		err = db.AddToStats(testDatabase[i])
+		check(t, err, fmt.Sprint("Failed to add stats", i))
 	}
+
 	correct := []Stats{
-		Stats{TeamNumber: 1235, MatchNumber: 94, ShotsMissed: 2, UpperGoalShots: 2, LowerGoalShots: 2, ShotsMissedAuto: 2, UpperGoalAuto: 2, LowerGoalAuto: 2, PlayedDefense: 2, Climbing: 2},
+		Stats{
+			TeamNumber: 1235, MatchNumber: 94,
+			ShotsMissed: 2, UpperGoalShots: 2, LowerGoalShots: 2,
+			ShotsMissedAuto: 2, UpperGoalAuto: 2, LowerGoalAuto: 2,
+			PlayedDefense: 2, Climbing: 2,
+		},
 	}
-	got, error_ := db.QueryStats(1235)
-	if error_ != nil {
-		t.Fatalf(error_.Error())
-	}
+
+	got, err := db.QueryStats(1235)
+	check(t, err, "Failed QueryStats()")
+
 	if !reflect.DeepEqual(correct, got) {
 		t.Errorf("Got %#v,\nbut expected %#v.", got, correct)
 	}
@@ -126,19 +224,41 @@
 	defer db.Delete()
 
 	correct := []Match{
-		Match{MatchNumber: 2, Round: 1, CompLevel: "quals", R1: 251, R2: 169, R3: 286, B1: 253, B2: 538, B3: 149, r1ID: 1, r2ID: 2, r3ID: 3, b1ID: 4, b2ID: 5, b3ID: 6},
-		Match{MatchNumber: 3, Round: 1, CompLevel: "quals", R1: 147, R2: 421, R3: 538, B1: 126, B2: 448, B3: 262, r1ID: 7, r2ID: 8, r3ID: 9, b1ID: 10, b2ID: 11, b3ID: 12},
-		Match{MatchNumber: 4, Round: 1, CompLevel: "quals", R1: 251, R2: 169, R3: 286, B1: 653, B2: 538, B3: 149, r1ID: 13, r2ID: 14, r3ID: 15, b1ID: 16, b2ID: 17, b3ID: 18},
-		Match{MatchNumber: 5, Round: 1, CompLevel: "quals", R1: 198, R2: 1421, R3: 538, B1: 26, B2: 448, B3: 262, r1ID: 19, r2ID: 20, r3ID: 21, b1ID: 22, b2ID: 23, b3ID: 24},
-		Match{MatchNumber: 6, Round: 1, CompLevel: "quals", R1: 251, R2: 188, R3: 286, B1: 555, B2: 538, B3: 149, r1ID: 25, r2ID: 26, r3ID: 27, b1ID: 28, b2ID: 29, b3ID: 30},
+		Match{
+			MatchNumber: 2, Round: 1, CompLevel: "quals",
+			R1: 251, R2: 169, R3: 286, B1: 253, B2: 538, B3: 149,
+			r1ID: 1, r2ID: 2, r3ID: 3, b1ID: 4, b2ID: 5, b3ID: 6,
+		},
+		Match{
+			MatchNumber: 3, Round: 1, CompLevel: "quals",
+			R1: 147, R2: 421, R3: 538, B1: 126, B2: 448, B3: 262,
+			r1ID: 7, r2ID: 8, r3ID: 9, b1ID: 10, b2ID: 11, b3ID: 12,
+		},
+		Match{
+			MatchNumber: 4, Round: 1, CompLevel: "quals",
+			R1: 251, R2: 169, R3: 286, B1: 653, B2: 538, B3: 149,
+			r1ID: 13, r2ID: 14, r3ID: 15, b1ID: 16, b2ID: 17, b3ID: 18,
+		},
+		Match{
+			MatchNumber: 5, Round: 1, CompLevel: "quals",
+			R1: 198, R2: 1421, R3: 538, B1: 26, B2: 448, B3: 262,
+			r1ID: 19, r2ID: 20, r3ID: 21, b1ID: 22, b2ID: 23, b3ID: 24,
+		},
+		Match{
+			MatchNumber: 6, Round: 1, CompLevel: "quals",
+			R1: 251, R2: 188, R3: 286, B1: 555, B2: 538, B3: 149,
+			r1ID: 25, r2ID: 26, r3ID: 27, b1ID: 28, b2ID: 29, b3ID: 30,
+		},
 	}
+
 	for i := 0; i < len(correct); i++ {
-		db.AddToMatch(correct[i])
+		err := db.AddToMatch(correct[i])
+		check(t, err, fmt.Sprint("Failed to add match", i))
 	}
-	got, error_ := db.ReturnMatches()
-	if error_ != nil {
-		t.Fatalf(error_.Error())
-	}
+
+	got, err := db.ReturnMatches()
+	check(t, err, "Failed ReturnMatches()")
+
 	if !reflect.DeepEqual(correct, got) {
 		t.Errorf("Got %#v,\nbut expected %#v.", got, correct)
 	}
@@ -149,21 +269,57 @@
 	defer db.Delete()
 
 	correct := []Stats{
-		Stats{TeamNumber: 1235, MatchNumber: 94, ShotsMissed: 2, UpperGoalShots: 2, LowerGoalShots: 2, ShotsMissedAuto: 2, UpperGoalAuto: 2, LowerGoalAuto: 2, PlayedDefense: 2, Climbing: 2},
-		Stats{TeamNumber: 1236, MatchNumber: 94, ShotsMissed: 4, UpperGoalShots: 4, LowerGoalShots: 4, ShotsMissedAuto: 4, UpperGoalAuto: 4, LowerGoalAuto: 4, PlayedDefense: 7, Climbing: 2},
-		Stats{TeamNumber: 1237, MatchNumber: 94, ShotsMissed: 3, UpperGoalShots: 3, LowerGoalShots: 3, ShotsMissedAuto: 3, UpperGoalAuto: 3, LowerGoalAuto: 3, PlayedDefense: 3, Climbing: 3},
-		Stats{TeamNumber: 1238, MatchNumber: 94, ShotsMissed: 5, UpperGoalShots: 5, LowerGoalShots: 5, ShotsMissedAuto: 5, UpperGoalAuto: 5, LowerGoalAuto: 5, PlayedDefense: 7, Climbing: 1},
-		Stats{TeamNumber: 1239, MatchNumber: 94, ShotsMissed: 6, UpperGoalShots: 6, LowerGoalShots: 6, ShotsMissedAuto: 6, UpperGoalAuto: 6, LowerGoalAuto: 6, PlayedDefense: 7, Climbing: 1},
-		Stats{TeamNumber: 1233, MatchNumber: 94, ShotsMissed: 7, UpperGoalShots: 7, LowerGoalShots: 7, ShotsMissedAuto: 7, UpperGoalAuto: 7, LowerGoalAuto: 3, PlayedDefense: 7, Climbing: 1},
+		Stats{
+			TeamNumber: 1235, MatchNumber: 94,
+			ShotsMissed: 2, UpperGoalShots: 2, LowerGoalShots: 2,
+			ShotsMissedAuto: 2, UpperGoalAuto: 2, LowerGoalAuto: 2,
+			PlayedDefense: 2, Climbing: 2,
+		},
+		Stats{
+			TeamNumber: 1236, MatchNumber: 94,
+			ShotsMissed: 4, UpperGoalShots: 4, LowerGoalShots: 4,
+			ShotsMissedAuto: 4, UpperGoalAuto: 4, LowerGoalAuto: 4,
+			PlayedDefense: 7, Climbing: 2,
+		},
+		Stats{
+			TeamNumber: 1237, MatchNumber: 94,
+			ShotsMissed: 3, UpperGoalShots: 3, LowerGoalShots: 3,
+			ShotsMissedAuto: 3, UpperGoalAuto: 3, LowerGoalAuto: 3,
+			PlayedDefense: 3, Climbing: 3,
+		},
+		Stats{
+			TeamNumber: 1238, MatchNumber: 94,
+			ShotsMissed: 5, UpperGoalShots: 5, LowerGoalShots: 5,
+			ShotsMissedAuto: 5, UpperGoalAuto: 5, LowerGoalAuto: 5,
+			PlayedDefense: 7, Climbing: 1,
+		},
+		Stats{
+			TeamNumber: 1239, MatchNumber: 94,
+			ShotsMissed: 6, UpperGoalShots: 6, LowerGoalShots: 6,
+			ShotsMissedAuto: 6, UpperGoalAuto: 6, LowerGoalAuto: 6,
+			PlayedDefense: 7, Climbing: 1,
+		},
+		Stats{
+			TeamNumber: 1233, MatchNumber: 94,
+			ShotsMissed: 7, UpperGoalShots: 7, LowerGoalShots: 7,
+			ShotsMissedAuto: 7, UpperGoalAuto: 7, LowerGoalAuto: 3,
+			PlayedDefense: 7, Climbing: 1,
+		},
 	}
-	db.AddToMatch(Match{MatchNumber: 94, Round: 1, CompLevel: "quals", R1: 1235, R2: 1236, R3: 1237, B1: 1238, B2: 1239, B3: 1233})
+
+	err := db.AddToMatch(Match{
+		MatchNumber: 94, Round: 1, CompLevel: "quals",
+		R1: 1235, R2: 1236, R3: 1237, B1: 1238, B2: 1239, B3: 1233})
+	check(t, err, "Failed to add match")
+
 	for i := 0; i < len(correct); i++ {
-		db.AddToStats(correct[i])
+		err = db.AddToStats(correct[i])
+		check(t, err, fmt.Sprint("Failed to add stats", i))
 	}
-	got, error_ := db.ReturnStats()
-	if error_ != nil {
-		t.Fatalf(error_.Error())
-	}
+
+	got, err := db.ReturnStats()
+	check(t, err, "Failed ReturnStats()")
+
 	if !reflect.DeepEqual(correct, got) {
 		t.Errorf("Got %#v,\nbut expected %#v.", got, correct)
 	}