VOL-2632 Error propagation from HashFlowStats

Change-Id: Iec132540c8d1b474820d390fca3d4a37e7dc99c9
diff --git a/pkg/flows/flow_utils_test.go b/pkg/flows/flow_utils_test.go
index 5219cf3..c4e481d 100644
--- a/pkg/flows/flow_utils_test.go
+++ b/pkg/flows/flow_utils_test.go
@@ -37,6 +37,11 @@
 	timeoutError = status.Errorf(codes.Aborted, "timeout")
 }
 
+func TestHashFlowStatsNil(t *testing.T) {
+	_, err := HashFlowStats(nil)
+	assert.EqualError(t, err, "hash-flow-stats-nil-flow")
+}
+
 func TestFlowsAndGroups_AddFlow(t *testing.T) {
 	fg := NewFlowsAndGroups()
 	allFlows := fg.ListFlows()
@@ -63,7 +68,8 @@
 			Output(uint32(ofp.OfpPortNo_OFPP_CONTROLLER)),
 		},
 	}
-	flow := MkFlowStat(fa)
+	flow, err := MkFlowStat(fa)
+	assert.Nil(t, err)
 	fg.AddFlow(flow)
 
 	allFlows = fg.ListFlows()
@@ -115,7 +121,8 @@
 			Output(1),
 		},
 	}
-	flow := MkFlowStat(fa)
+	flow, err := MkFlowStat(fa)
+	assert.Nil(t, err)
 	fg.AddFlow(flow)
 
 	ga = &GroupArgs{
@@ -166,7 +173,8 @@
 			PopVlan(),
 		},
 	}
-	flow1 := MkFlowStat(fa1)
+	flow1, err := MkFlowStat(fa1)
+	assert.Nil(t, err)
 
 	fa2 = &FlowArgs{
 		KV: OfpFlowModArgs{"priority": 1500},
@@ -181,7 +189,8 @@
 			Output(2),
 		},
 	}
-	flow2 := MkFlowStat(fa2)
+	flow2, err := MkFlowStat(fa2)
+	assert.Nil(t, err)
 
 	fg.AddFlow(flow1)
 	fg.AddFlow(flow2)
@@ -234,7 +243,8 @@
 			Group(10),
 		},
 	}
-	flow := MkFlowStat(fa)
+	flow, err := MkFlowStat(fa)
+	assert.Nil(t, err)
 	fg.AddFlow(flow)
 
 	ga = &GroupArgs{
@@ -281,7 +291,8 @@
 			Output(1),
 		},
 	}
-	flow := MkFlowStat(fa)
+	flow, err := MkFlowStat(fa)
+	assert.Nil(t, err)
 	fg.AddFlow(flow)
 
 	ga = &GroupArgs{
@@ -335,7 +346,8 @@
 			Output(1),
 		},
 	}
-	flow := MkFlowStat(fa)
+	flow, err := MkFlowStat(fa)
+	assert.Nil(t, err)
 	dr.AddFlow("123456", flow)
 	rules = dr.GetRules()
 	assert.True(t, len(rules) == 1)
@@ -368,7 +380,8 @@
 			Output(1),
 		},
 	}
-	flow := MkFlowStat(fa)
+	flow, err := MkFlowStat(fa)
+	assert.Nil(t, err)
 	fg.AddFlow(flow)
 
 	ga = &GroupArgs{
@@ -414,7 +427,8 @@
 			Output(1),
 		},
 	}
-	flow = MkFlowStat(fa)
+	flow, err := MkFlowStat(fa)
+	assert.Nil(t, err)
 	assert.True(t, FlowHasOutPort(flow, 1))
 	assert.False(t, FlowHasOutPort(flow, 2))
 
@@ -425,7 +439,8 @@
 			VlanVid(uint32(ofp.OfpVlanId_OFPVID_PRESENT) | 0),
 		},
 	}
-	flow = MkFlowStat(fa)
+	flow, err = MkFlowStat(fa)
+	assert.Nil(t, err)
 	assert.False(t, FlowHasOutPort(flow, 1))
 }
 
@@ -446,7 +461,8 @@
 			Group(10),
 		},
 	}
-	flow = MkFlowStat(fa)
+	flow, err := MkFlowStat(fa)
+	assert.Nil(t, err)
 	assert.True(t, FlowHasOutGroup(flow, 10))
 	assert.False(t, FlowHasOutGroup(flow, 11))
 
@@ -463,7 +479,8 @@
 			Output(1),
 		},
 	}
-	flow = MkFlowStat(fa)
+	flow, err = MkFlowStat(fa)
+	assert.Nil(t, err)
 	assert.False(t, FlowHasOutGroup(flow, 1))
 }
 
@@ -482,7 +499,8 @@
 			Group(10),
 		},
 	}
-	flow1 := MkFlowStat(fa)
+	flow1, err := MkFlowStat(fa)
+	assert.Nil(t, err)
 	assert.False(t, FlowMatch(flow1, nil))
 
 	fa = &FlowArgs{
@@ -498,7 +516,8 @@
 			Group(10),
 		},
 	}
-	flow2 := MkFlowStat(fa)
+	flow2, err := MkFlowStat(fa)
+	assert.Nil(t, err)
 	assert.False(t, FlowMatch(flow1, flow2))
 	assert.False(t, FlowMatch(nil, flow2))
 
@@ -512,7 +531,8 @@
 			Ipv4Dst(0xe00a0a0a),
 		},
 	}
-	flow2 = MkFlowStat(fa)
+	flow2, err = MkFlowStat(fa)
+	assert.Nil(t, err)
 	assert.True(t, FlowMatch(flow1, flow2))
 
 	fa = &FlowArgs{
@@ -528,7 +548,8 @@
 			Group(10),
 		},
 	}
-	flow2 = MkFlowStat(fa)
+	flow2, err = MkFlowStat(fa)
+	assert.Nil(t, err)
 	assert.False(t, FlowMatch(flow1, flow2))
 
 	fa = &FlowArgs{
@@ -541,7 +562,8 @@
 			Ipv4Dst(0xe00a0a0a),
 		},
 	}
-	flow2 = MkFlowStat(fa)
+	flow2, err = MkFlowStat(fa)
+	assert.Nil(t, err)
 	assert.False(t, FlowMatch(flow1, flow2))
 
 	fa = &FlowArgs{
@@ -554,7 +576,8 @@
 			Ipv4Dst(0xe00a0a0a),
 		},
 	}
-	flow2 = MkFlowStat(fa)
+	flow2, err = MkFlowStat(fa)
+	assert.Nil(t, err)
 	assert.False(t, FlowMatch(flow1, flow2))
 
 	fa = &FlowArgs{
@@ -567,7 +590,8 @@
 			Ipv4Dst(0xe00a0a0a),
 		},
 	}
-	flow2 = MkFlowStat(fa)
+	flow2, err = MkFlowStat(fa)
+	assert.Nil(t, err)
 	assert.False(t, FlowMatch(flow1, flow2))
 
 	fa = &FlowArgs{
@@ -580,7 +604,8 @@
 			Ipv4Dst(0xe00a0a0a),
 		},
 	}
-	flow2 = MkFlowStat(fa)
+	flow2, err = MkFlowStat(fa)
+	assert.Nil(t, err)
 	assert.False(t, FlowMatch(flow1, flow2))
 
 	fa = &FlowArgs{
@@ -592,7 +617,8 @@
 			EthType(0x800),
 		},
 	}
-	flow2 = MkFlowStat(fa)
+	flow2, err = MkFlowStat(fa)
+	assert.Nil(t, err)
 	assert.False(t, FlowMatch(flow1, flow2))
 
 	fa = &FlowArgs{
@@ -609,7 +635,8 @@
 			Output(1),
 		},
 	}
-	flow2 = MkFlowStat(fa)
+	flow2, err = MkFlowStat(fa)
+	assert.Nil(t, err)
 	assert.True(t, FlowMatch(flow1, flow2))
 }
 
@@ -629,7 +656,8 @@
 			Group(10),
 		},
 	}
-	flow := MkFlowStat(fa)
+	flow, err := MkFlowStat(fa)
+	assert.Nil(t, err)
 	assert.False(t, FlowMatchesMod(flow, nil))
 
 	fa = &FlowArgs{
@@ -649,7 +677,9 @@
 	flowMod := MkSimpleFlowMod(ToOfpOxmField(fa.MatchFields), fa.Actions, fa.Command, fa.KV)
 	assert.False(t, FlowMatchesMod(nil, flowMod))
 	assert.False(t, FlowMatchesMod(flow, flowMod))
-	assert.True(t, FlowMatch(flow, FlowStatsEntryFromFlowModMessage(flowMod)))
+	entry, err := FlowStatsEntryFromFlowModMessage(flowMod)
+	assert.Nil(t, err)
+	assert.True(t, FlowMatch(flow, entry))
 
 	fa = &FlowArgs{
 		KV: OfpFlowModArgs{"table_id": uint64(ofp.OfpTable_OFPTT_ALL),