fix a bug in memory storage and add a new unit test

This commit is contained in:
Nan Deng 2014-06-17 20:54:48 -07:00
parent e412c042d3
commit cf8257cd70
3 changed files with 51 additions and 2 deletions

View File

@ -75,9 +75,9 @@ func (self *containerStorage) AddStats(stats *info.ContainerStats) error {
}
}
if self.recentStats.Len() >= self.maxNumStats {
self.recentStats.Remove(self.recentStats.Front())
self.recentStats.Remove(self.recentStats.Back())
}
self.recentStats.PushBack(stats)
self.recentStats.PushFront(stats)
self.updatePrevStats(stats)
return nil
}

View File

@ -53,3 +53,7 @@ func TestPercentiles(t *testing.T) {
driver := New(N, N)
test.StorageDriverTestPercentiles(driver, t)
}
func TestRetrievePartialRecentStats(t *testing.T) {
runStorageTest(test.StorageDriverTestRetrievePartialRecentStats, t)
}

View File

@ -16,6 +16,7 @@ package test
import (
"math/rand"
"reflect"
"testing"
"time"
@ -171,6 +172,7 @@ func StorageDriverTestPercentilesWithoutSample(driver storage.StorageDriver, t *
// The driver must be able to hold more than 100 samples
func StorageDriverTestPercentiles(driver storage.StorageDriver, t *testing.T) {
defer driver.Close()
N := 100
cpuTrace := make([]uint64, N)
memTrace := make([]uint64, N)
@ -209,3 +211,46 @@ func StorageDriverTestPercentiles(driver storage.StorageDriver, t *testing.T) {
}
}
}
// The driver must be albe to hold more than 10 stats
func StorageDriverTestRetrievePartialRecentStats(driver storage.StorageDriver, t *testing.T) {
defer driver.Close()
N := 100
memTrace := make([]uint64, N)
cpuTrace := make([]uint64, N)
for i := 0; i < N; i++ {
memTrace[i] = uint64(i + 1)
cpuTrace[i] = uint64(1)
}
ref := info.ContainerReference{
Name: "container",
}
trace := buildTrace(cpuTrace, memTrace, 1*time.Second)
for _, stats := range trace {
driver.AddStats(ref, stats)
}
recentStats, err := driver.RecentStats(ref.Name, 10)
if err != nil {
t.Fatal(err)
}
if len(recentStats) != 10 {
t.Fatalf("returned %v stats, not 10.", len(recentStats))
}
for _, r := range recentStats {
found := false
for _, s := range trace[len(trace)-10:] {
if reflect.DeepEqual(s, r) {
found = true
}
}
if !found {
t.Errorf("returned unexpected stats: %+v; %v", r, r.Memory.Usage)
}
}
}