diff --git a/metropolis/installer/test/run_test.go b/metropolis/installer/test/run_test.go
index 3c8f1a6..5008be0 100644
--- a/metropolis/installer/test/run_test.go
+++ b/metropolis/installer/test/run_test.go
@@ -166,7 +166,7 @@
 	// ESP contents are in order.
 	image, err := diskfs.OpenWithMode(installerImage, diskfs.ReadOnly)
 	if err != nil {
-		t.Errorf("Couldn't open the installer image at %q: %s", installerImage, err.Error())
+		t.Fatalf("Couldn't open the installer image at %q: %s", installerImage, err)
 	}
 	// Verify that GPT exists.
 	ti, err := image.GetPartitionTable()
@@ -174,22 +174,22 @@
 		t.Fatalf("Couldn't read the installer image partition table: %s", err)
 	}
 	if ti.Type() != "gpt" {
-		t.Error("Couldn't verify that the installer image contains a GPT.")
+		t.Fatal("Couldn't verify that the installer image contains a GPT.")
 	}
 	// Check that the first partition is likely to be a valid ESP.
 	pi := ti.GetPartitions()
 	esp := (pi[0]).(*gpt.Partition)
 	if esp.Start == 0 || esp.End == 0 {
-		t.Error("The installer's ESP GPT entry looks off.")
+		t.Fatal("The installer's ESP GPT entry looks off.")
 	}
 	// Verify that the image contains only one partition.
 	second := (pi[1]).(*gpt.Partition)
 	if second.Name != "" || second.Start != 0 || second.End != 0 {
-		t.Error("It appears the installer image contains more than one partition.")
+		t.Fatal("It appears the installer image contains more than one partition.")
 	}
 	// Verify the ESP contents.
 	if err := checkEspContents(image); err != nil {
-		t.Error(err.Error())
+		t.Fatal(err)
 	}
 }
 
@@ -203,7 +203,7 @@
 	expectedOutput := "couldn't find a suitable block device"
 	result, err := runQemuWithInstaller(ctx, nil, expectedOutput)
 	if err != nil {
-		t.Error(err.Error())
+		t.Fatal(err)
 	}
 	if !result {
 		t.Errorf("QEMU didn't produce the expected output %q", expectedOutput)
@@ -219,17 +219,17 @@
 	imagePath, err := getStorage(64)
 	defer os.Remove(imagePath)
 	if err != nil {
-		t.Error(err.Error())
+		t.Fatal(err)
 	}
 
 	// Run QEMU. Expect the installer to fail with a predefined error string.
 	expectedOutput := "couldn't find a suitable block device"
 	result, err := runQemuWithInstaller(ctx, qemuDriveParam(imagePath), expectedOutput)
 	if err != nil {
-		t.Error(err.Error())
+		t.Fatal(err)
 	}
 	if !result {
-		t.Errorf("QEMU didn't produce the expected output %q", expectedOutput)
+		t.Fatalf("QEMU didn't produce the expected output %q", expectedOutput)
 	}
 }
 
@@ -244,23 +244,23 @@
 	storagePath, err := getStorage(4096*2 + 384 + 128 + 2)
 	defer os.Remove(storagePath)
 	if err != nil {
-		t.Error(err.Error())
+		t.Fatal(err)
 	}
 
 	// Run QEMU. Expect the installer to succeed.
 	expectedOutput := "Installation completed"
 	result, err := runQemuWithInstaller(ctx, qemuDriveParam(storagePath), expectedOutput)
 	if err != nil {
-		t.Error(err.Error())
+		t.Fatal(err)
 	}
 	if !result {
-		t.Errorf("QEMU didn't produce the expected output %q", expectedOutput)
+		t.Fatalf("QEMU didn't produce the expected output %q", expectedOutput)
 	}
 
 	// Verify the resulting node image. Check whether the node GPT was created.
 	storage, err := diskfs.OpenWithMode(storagePath, diskfs.ReadOnly)
 	if err != nil {
-		t.Errorf("Couldn't open the resulting node image at %q: %s", storagePath, err.Error())
+		t.Fatalf("Couldn't open the resulting node image at %q: %s", storagePath, err)
 	}
 	// Verify that GPT exists.
 	ti, err := storage.GetPartitionTable()
@@ -268,37 +268,37 @@
 		t.Fatalf("Couldn't read the installer image partition table: %s", err)
 	}
 	if ti.Type() != "gpt" {
-		t.Error("Couldn't verify that the resulting node image contains a GPT.")
+		t.Fatal("Couldn't verify that the resulting node image contains a GPT.")
 	}
 	// Check that the first partition is likely to be a valid ESP.
 	pi := ti.GetPartitions()
 	esp := (pi[0]).(*gpt.Partition)
 	if esp.Name != osimage.ESPLabel || esp.Start == 0 || esp.End == 0 {
-		t.Error("The node's ESP GPT entry looks off.")
+		t.Fatal("The node's ESP GPT entry looks off.")
 	}
 	// Verify the system partition's GPT entry.
 	system := (pi[1]).(*gpt.Partition)
 	if system.Name != osimage.SystemALabel || system.Start == 0 || system.End == 0 {
-		t.Error("The node's system partition GPT entry looks off.")
+		t.Fatal("The node's system partition GPT entry looks off.")
 	}
 	// Verify the system partition's GPT entry.
 	systemB := (pi[2]).(*gpt.Partition)
 	if systemB.Name != osimage.SystemBLabel || systemB.Start == 0 || systemB.End == 0 {
-		t.Error("The node's system partition GPT entry looks off.")
+		t.Fatal("The node's system partition GPT entry looks off.")
 	}
 	// Verify the data partition's GPT entry.
 	data := (pi[3]).(*gpt.Partition)
 	if data.Name != osimage.DataLabel || data.Start == 0 || data.End == 0 {
-		t.Errorf("The node's data partition GPT entry looks off: %+v", data)
+		t.Fatalf("The node's data partition GPT entry looks off: %+v", data)
 	}
 	// Verify that there are no more partitions.
 	fourth := (pi[4]).(*gpt.Partition)
 	if fourth.Name != "" || fourth.Start != 0 || fourth.End != 0 {
-		t.Error("The resulting node image contains more partitions than expected.")
+		t.Fatal("The resulting node image contains more partitions than expected.")
 	}
 	// Verify the ESP contents.
 	if err := checkEspContents(storage); err != nil {
-		t.Error(err.Error())
+		t.Fatal(err)
 	}
 	storage.File.Close()
 	// Run QEMU again. Expect TestOS to launch successfully.
@@ -306,9 +306,9 @@
 	time.Sleep(time.Second)
 	result, err = runQemu(ctx, qemuDriveParam(storagePath), expectedOutput)
 	if err != nil {
-		t.Error(err.Error())
+		t.Fatal(err)
 	}
 	if !result {
-		t.Errorf("QEMU didn't produce the expected output %q", expectedOutput)
+		t.Fatalf("QEMU didn't produce the expected output %q", expectedOutput)
 	}
 }
diff --git a/metropolis/node/core/clusternet/clusternet_test.go b/metropolis/node/core/clusternet/clusternet_test.go
index 317c409..9747e63 100644
--- a/metropolis/node/core/clusternet/clusternet_test.go
+++ b/metropolis/node/core/clusternet/clusternet_test.go
@@ -157,8 +157,7 @@
 				break
 			}
 			if time.Now().After(deadline) {
-				t.Error(err)
-				return
+				t.Fatal(err)
 			}
 		}
 
diff --git a/metropolis/node/core/curator/impl_leader_test.go b/metropolis/node/core/curator/impl_leader_test.go
index e593bbd..cd61e54 100644
--- a/metropolis/node/core/curator/impl_leader_test.go
+++ b/metropolis/node/core/curator/impl_leader_test.go
@@ -1682,11 +1682,11 @@
 		},
 	})
 	if err != nil {
-		t.Error(err)
+		t.Fatal(err)
 	}
 	ev, err := w.Recv()
 	if err != nil {
-		t.Error(err)
+		t.Fatal(err)
 	}
 	cn := ev.Nodes[0].Clusternet
 	if want, got := "GaNXuc/yl8IaXduX6PQ+ZxIG4HtBACubHrRI7rqfA20=", cn.WireguardPubkey; want != got {
diff --git a/metropolis/node/core/network/dhcp4c/dhcpc_test.go b/metropolis/node/core/network/dhcp4c/dhcpc_test.go
index 45be1a4..57361fe 100644
--- a/metropolis/node/core/network/dhcp4c/dhcpc_test.go
+++ b/metropolis/node/core/network/dhcp4c/dhcpc_test.go
@@ -232,7 +232,7 @@
 	p.bmt.sendPackets(terribleOffer, offer)
 
 	if err := p.c.runState(context.Background()); err != nil {
-		t.Error(err)
+		t.Fatal(err)
 	}
 	assert.Equal(t, stateRequesting, p.c.state, "DHCP client didn't process offer")
 	assert.Equal(t, testIP, p.c.offer.YourIPAddr, "DHCP client requested invalid offer")
@@ -257,7 +257,7 @@
 	}
 
 	if err := p.c.runState(context.Background()); err != nil {
-		t.Error(err)
+		t.Fatal(err)
 	}
 	assert.Equal(t, stateBound, p.c.state, "DHCP client didn't process offer")
 	assert.Equal(t, testIP, p.c.lease.YourIPAddr, "DHCP client requested invalid offer")
@@ -278,7 +278,7 @@
 	for i := 0; i < 10; i++ {
 		p.bmt.sendPackets()
 		if err := p.c.runState(context.Background()); err != nil {
-			t.Error(err)
+			t.Fatal(err)
 		}
 		assert.Equal(t, dhcpv4.MessageTypeRequest, p.bmt.sentPacket.MessageType(), "Invalid message type for requesting")
 		if p.c.state == stateDiscovering {
@@ -312,7 +312,7 @@
 	}
 	p.bmt.sendPackets(offer)
 	if err := p.c.runState(context.Background()); err != nil {
-		t.Error(err)
+		t.Fatal(err)
 	}
 	assert.Equal(t, stateBound, p.c.state, "DHCP client didn't process offer")
 	assert.Equal(t, testIP, p.c.lease.YourIPAddr, "DHCP client requested invalid offer")
@@ -350,7 +350,7 @@
 
 	p.ft.Advance(5*time.Second - 5*time.Millisecond)
 	if err := p.c.runState(context.Background()); err != nil {
-		t.Error(err)
+		t.Fatal(err)
 	}
 	// We cannot intercept time.After so we just advance the clock by the time slept
 	p.ft.Advance(5 * time.Millisecond)
@@ -364,7 +364,7 @@
 		return nil
 	}
 	if err := p.c.runState(context.Background()); err != nil {
-		t.Error(err)
+		t.Fatal(err)
 	}
 	assert.Equal(t, stateBound, p.c.state, "DHCP client didn't renew")
 	assert.Equal(t, p.ft.Now().Add(leaseTime), p.c.leaseDeadline, "lease deadline not updated")
@@ -401,7 +401,7 @@
 	for i := 0; i < 10; i++ {
 		p.umt.sendPackets()
 		if err := p.c.runState(context.Background()); err != nil {
-			t.Error(err)
+			t.Fatal(err)
 		}
 		assert.Equal(t, dhcpv4.MessageTypeRequest, p.umt.sentPacket.MessageType(), "Invalid message type for renewal")
 		p.ft.time = p.umt.setDeadline
@@ -438,7 +438,7 @@
 
 	p.ft.Advance(9 * time.Second)
 	if err := p.c.runState(context.Background()); err != nil {
-		t.Error(err)
+		t.Fatal(err)
 	}
 	assert.Equal(t, dhcpv4.MessageTypeRequest, p.bmt.sentPacket.MessageType(), "DHCP rebind sent invalid message type")
 	assert.Equal(t, stateRebinding, p.c.state, "DHCP client transferred out of rebinding state without trigger")
@@ -452,7 +452,7 @@
 		return nil
 	}
 	if err := p.c.runState(context.Background()); err != nil {
-		t.Error(err)
+		t.Fatal(err)
 	}
 	assert.Equal(t, dhcpv4.MessageTypeRequest, p.bmt.sentPacket.MessageType())
 	assert.Equal(t, stateBound, p.c.state, "DHCP client didn't go back to bound")
@@ -484,7 +484,7 @@
 		p.bmt.sendPackets()
 		p.bmt.sentPacket = nil
 		if err := p.c.runState(context.Background()); err != nil {
-			t.Error(err)
+			t.Fatal(err)
 		}
 		if p.c.state == stateDiscovering {
 			assert.Nil(t, p.bmt.sentPacket)
diff --git a/metropolis/node/kubernetes/networkpolicy/networkpolicy_test.go b/metropolis/node/kubernetes/networkpolicy/networkpolicy_test.go
index 22cf569..f32dc37 100644
--- a/metropolis/node/kubernetes/networkpolicy/networkpolicy_test.go
+++ b/metropolis/node/kubernetes/networkpolicy/networkpolicy_test.go
@@ -810,21 +810,18 @@
 			recorder := &testRecorder{t: t}
 			nft, err := nftctrl.New(recorder, podIfaceGroup)
 			if err != nil {
-				t.Errorf("Failed to create nftctrl: %v", err)
-				return
+				t.Fatalf("Failed to create nftctrl: %v", err)
 			}
 			defer nft.Close()
 			kubernetes.nft = nft
 
 			if err := kubernetes.initializeNft(); err != nil {
-				t.Errorf("nftctrl initialization failed: %v", err)
-				return
+				t.Fatalf("nftctrl initialization failed: %v", err)
 			}
 
 			result := interpreter.ExecuteTestCase(testCase)
 			if result.Err != nil {
-				t.Error(result.Err)
-				return
+				t.Fatal(result.Err)
 			}
 			if !result.Passed(ignoreLoopback) {
 				printer.PrintTestCaseResult(result)
@@ -863,8 +860,7 @@
 			recorder := &testRecorder{t: t}
 			nft, err := nftctrl.New(recorder, podIfaceGroup)
 			if err != nil {
-				t.Errorf("Failed to create nftctrl: %v", err)
-				return
+				t.Fatalf("Failed to create nftctrl: %v", err)
 			}
 			defer nft.Close()
 
@@ -874,13 +870,11 @@
 			}
 
 			if err := testCase.init(testCaseState, nft); err != nil {
-				t.Errorf("initialization failed: %v", err)
-				return
+				t.Fatalf("initialization failed: %v", err)
 			}
 
 			if err := nft.Flush(); err != nil {
-				t.Errorf("flush failed: %v", err)
-				return
+				t.Fatalf("flush failed: %v", err)
 			}
 
 			parsedPolicy := matcher.BuildNetworkPolicies(true, testCaseState.Policies)
