diff --git a/pcp/utils.go b/pcp/utils.go
index 3ae300c..7da7813 100644
--- a/pcp/utils.go
+++ b/pcp/utils.go
@@ -41,6 +41,7 @@ func AverageNodePowerHistory(history *ring.Ring) float64 {
return 0.0
}
+ // TODO (pkaushik) handle cases when DRAM power is not being monitored.
count /= 4 // Two PKGs, two DRAM for all nodes currently.
return (total / count)
diff --git a/pcp/utils_test.go b/pcp/utils_test.go
new file mode 100644
index 0000000..6b9e645
--- /dev/null
+++ b/pcp/utils_test.go
@@ -0,0 +1,49 @@
+// Copyright (C) 2018 spdf
+//
+// This file is part of Elektron.
+//
+// Elektron is free software: you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation, either version 3 of the License, or
+// (at your option) any later version.
+//
+// Elektron is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License
+// along with Elektron. If not, see .
+//
+
+package pcp
+
+import (
+ "container/ring"
+ "github.com/stretchr/testify/assert"
+ "testing"
+)
+
+func TestAverageNodePowerHistory(t *testing.T) {
+ // Creating a ring to hold 5 seconds of node power readings.
+ // Note that as we're considering both CPU and DRAM packages, this amounts to 20 entries
+ // in the ring.
+ nodePowerRecordings := ring.New(20)
+ for i := 1; i <= 20; i++ {
+ nodePowerRecordings.Value = float64(i)
+ nodePowerRecordings = nodePowerRecordings.Next()
+ }
+
+ assert.Equal(t, 42.0, AverageNodePowerHistory(nodePowerRecordings))
+}
+
+func TestAverageClusterPowerHistory(t *testing.T) {
+ // Creating a ring to hold 5 seconds of cluster power consumption.
+ clusterPowerRecordings := ring.New(5)
+ for i := 1; i <= 5; i++ {
+ clusterPowerRecordings.Value = float64(i)
+ clusterPowerRecordings = clusterPowerRecordings.Next()
+ }
+
+ assert.Equal(t, 3.0, AverageClusterPowerHistory(clusterPowerRecordings))
+}
diff --git a/pcp/victim_test.go b/pcp/victim_test.go
new file mode 100644
index 0000000..93deed7
--- /dev/null
+++ b/pcp/victim_test.go
@@ -0,0 +1,50 @@
+// Copyright (C) 2018 spdf
+//
+// This file is part of Elektron.
+//
+// Elektron is free software: you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation, either version 3 of the License, or
+// (at your option) any later version.
+//
+// Elektron is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License
+// along with Elektron. If not, see .
+//
+
+package pcp
+
+import (
+ "github.com/stretchr/testify/assert"
+ "sort"
+ "testing"
+)
+
+// TestVictimSorter tests whether victim nodes are sorted in the non-increasing
+// order of Watts consumption.
+func TestVictimSorter(t *testing.T) {
+ victims := []Victim{
+ {Watts: 10.0, Host: "host1"},
+ {Watts: 20.0, Host: "host2"},
+ {Watts: 30.0, Host: "host3"},
+ {Watts: 40.0, Host: "host4"},
+ }
+
+ sort.Sort(VictimSorter(victims))
+
+ expectedVictimsOrder := []Victim{
+ {Watts: 40.0, Host: "host4"},
+ {Watts: 30.0, Host: "host3"},
+ {Watts: 20.0, Host: "host2"},
+ {Watts: 10.0, Host: "host1"},
+ }
+
+ for i, v := range expectedVictimsOrder {
+ assert.Equal(t, v.Watts, victims[i].Watts, "failed to sorted victims")
+ assert.Equal(t, v.Host, victims[i].Host, "failed to sorted victims")
+ }
+}