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)
