You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@trafficcontrol.apache.org by ne...@apache.org on 2016/12/08 18:46:16 UTC

[14/20] incubator-trafficcontrol git commit: Add TM2 heap_test.go

Add TM2 heap_test.go


Project: http://git-wip-us.apache.org/repos/asf/incubator-trafficcontrol/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-trafficcontrol/commit/34c0b4f8
Tree: http://git-wip-us.apache.org/repos/asf/incubator-trafficcontrol/tree/34c0b4f8
Diff: http://git-wip-us.apache.org/repos/asf/incubator-trafficcontrol/diff/34c0b4f8

Branch: refs/heads/master
Commit: 34c0b4f84ea6a472071d03db39ed5fe6b018fdca
Parents: c3ab47d
Author: Robert Butts <ro...@gmail.com>
Authored: Wed Dec 7 14:06:02 2016 -0700
Committer: Dave Neuman <ne...@apache.org>
Committed: Thu Dec 8 11:44:33 2016 -0700

----------------------------------------------------------------------
 .../experimental/common/poller/heap_test.go     | 143 +++++++++++++++++++
 1 file changed, 143 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-trafficcontrol/blob/34c0b4f8/traffic_monitor/experimental/common/poller/heap_test.go
----------------------------------------------------------------------
diff --git a/traffic_monitor/experimental/common/poller/heap_test.go b/traffic_monitor/experimental/common/poller/heap_test.go
new file mode 100644
index 0000000..ada593d
--- /dev/null
+++ b/traffic_monitor/experimental/common/poller/heap_test.go
@@ -0,0 +1,143 @@
+package poller
+
+import (
+	"fmt"
+	"math/rand"
+	"testing"
+	"time"
+)
+
+func TestHeap(t *testing.T) {
+	h := &Heap{}
+
+	num := 100
+	for i := 0; i < num; i++ {
+		h.Push(HeapPollInfo{
+			Info: HTTPPollInfo{
+				Interval: time.Second * time.Duration(8),
+				ID:       fmt.Sprintf("%v", i),
+			},
+			Next: time.Now().Add(time.Second * time.Duration(i)), // time.Duration((i%2)*-1)
+		})
+	}
+
+	for i := 0; i < num; i++ {
+		val, ok := h.Pop()
+		if !ok {
+			t.Errorf("expected pop ID %v got empty heap", i)
+		} else if val.Info.ID != fmt.Sprintf("%v", i) {
+			t.Errorf("expected pop ID %v got %v next %v", i, val.Info.ID, val.Next)
+		}
+	}
+}
+
+func TestHeapRandom(t *testing.T) {
+	h := &Heap{}
+
+	num := 10
+	for i := 0; i < num; i++ {
+		h.Push(HeapPollInfo{
+			Info: HTTPPollInfo{
+				Interval: time.Second * time.Duration(8),
+				ID:       fmt.Sprintf("%v", i),
+			},
+			Next: time.Now().Add(time.Duration(rand.Int63())),
+		})
+	}
+
+	previousTime := time.Now()
+	for i := 0; i < num; i++ {
+		val, ok := h.Pop()
+		if !ok {
+			t.Errorf("expected pop ID %v got empty heap", i)
+		} else if previousTime.After(val.Next) {
+			t.Errorf("heap pop %v < previous %v expected >", val.Next, previousTime)
+		}
+		previousTime = val.Next
+	}
+}
+
+func TestHeapRandomPopping(t *testing.T) {
+	h := &Heap{}
+
+	randInfo := func(id int) HeapPollInfo {
+		return HeapPollInfo{
+			Info: HTTPPollInfo{
+				Interval: time.Second * time.Duration(8),
+				ID:       fmt.Sprintf("%v", id),
+			},
+			Next: time.Now().Add(time.Duration(rand.Int63())),
+		}
+	}
+
+	num := 10
+	for i := 0; i < num; i++ {
+		h.Push(randInfo(i))
+	}
+
+	previousTime := time.Now()
+	for i := 0; i < num/2; i++ {
+		val, ok := h.Pop()
+		if !ok {
+			t.Errorf("expected pop ID %v got empty heap", i)
+		} else if previousTime.After(val.Next) {
+			t.Errorf("heap pop %v < previous %v expected >", val.Next, previousTime)
+		}
+		previousTime = val.Next
+	}
+
+	for i := 0; i < num; i++ {
+		h.Push(randInfo(i))
+	}
+	val, ok := h.Pop()
+	if !ok {
+		t.Errorf("expected pop, got empty heap")
+	} else {
+		previousTime = val.Next
+	}
+
+	for i := 0; i < num; i++ {
+		val, ok := h.Pop()
+		if !ok {
+			t.Errorf("expected pop ID %v got empty heap", i)
+		} else if previousTime.After(val.Next) {
+			t.Errorf("heap pop %v < previous %v expected >", val.Next, previousTime)
+		}
+		previousTime = val.Next
+	}
+
+	for i := 0; i < num; i++ {
+		h.Push(randInfo(i))
+	}
+	val, ok = h.Pop()
+	if !ok {
+		t.Errorf("expected pop, got empty heap")
+	} else {
+		previousTime = val.Next
+	}
+
+	for i := 0; i < num; i++ {
+		val, ok := h.Pop()
+		if !ok {
+			t.Errorf("expected pop ID %v got empty heap", i)
+		} else if previousTime.After(val.Next) {
+			t.Errorf("heap pop %v < previous %v expected >", val.Next, previousTime)
+		}
+		previousTime = val.Next
+	}
+
+	for i := 0; i < num/2-2; i++ { // -2 for the two we manually popped in order to get the max
+		val, ok := h.Pop()
+		if !ok {
+			t.Errorf("expected pop ID %v got empty heap", i)
+		} else if previousTime.After(val.Next) {
+			t.Errorf("heap pop %v < previous %v expected >", val.Next, previousTime)
+		}
+		previousTime = val.Next
+	}
+
+	val, ok = h.Pop()
+	if ok {
+		t.Errorf("expected empty, got %+v", val)
+	}
+}