func StorageDriverTestRetrieveZeroSamples(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) } samples, err := driver.Samples(ref.Name, 0) if err != nil { t.Fatal(err) } if len(samples) > 0 { t.Errorf("RecentStats() returns %v stats when requests for 0 stats", len(samples)) } }
func StorageDriverTestNoSamples(driver storage.StorageDriver, t *testing.T) { defer driver.Close() nonExistContainer := "somerandomecontainer" samples, _ := driver.Samples(nonExistContainer, -1) if len(samples) > 0 { t.Errorf("Samples() returns %v samples on non exist container", len(samples)) } }
func StorageDriverTestSamplesWithoutSample(driver storage.StorageDriver, t *testing.T) { defer driver.Close() trace := buildTrace( []uint64{10}, []uint64{10}, 1*time.Second) ref := info.ContainerReference{ Name: "container", } driver.AddStats(ref, trace[0]) samples, err := driver.Samples(ref.Name, -1) if err != nil { t.Fatal(err) } if len(samples) != 0 { t.Errorf("There should be no sample") } }
// The underlying driver must be able to hold more than 10 samples. func StorageDriverTestSampleCpuUsage(driver storage.StorageDriver, t *testing.T) { defer driver.Close() N := 10 cpuTrace := make([]uint64, 0, N) memTrace := make([]uint64, 0, N) // We need N+1 observations to get N samples for i := 0; i < N+1; i++ { cpuTrace = append(cpuTrace, uint64(rand.Intn(1000))) memTrace = append(memTrace, uint64(rand.Intn(1000))) } samplePeriod := 1 * time.Second ref := info.ContainerReference{ Name: "container", } trace := buildTrace(cpuTrace, memTrace, samplePeriod) for _, stats := range trace { driver.AddStats(ref, stats) } samples, err := driver.Samples(ref.Name, N) if err != nil { t.Errorf("unable to sample stats: %v", err) } for _, sample := range samples { if sample.Duration != samplePeriod { t.Errorf("sample duration is %v, not %v", sample.Duration, samplePeriod) } cpuUsage := sample.Cpu.Usage found := false for _, u := range cpuTrace { if u == cpuUsage { found = true } } if !found { t.Errorf("unable to find cpu usage %v", cpuUsage) } } }
func StorageDriverTestSampleCpuUsage(driver storage.StorageDriver, t *testing.T) { defer driver.Close() N := 100 cpuTrace := make([]uint64, 0, N) memTrace := make([]uint64, 0, N) // We need N+1 observations to get N samples for i := 0; i < N+1; i++ { cpuTrace = append(cpuTrace, uint64(rand.Intn(1000))) memTrace = append(memTrace, uint64(rand.Intn(1000))) } samplePeriod := 1 * time.Second ref := info.ContainerReference{ Name: "container", } trace := buildTrace(cpuTrace, memTrace, samplePeriod) for _, stats := range trace { err := driver.AddStats(ref, stats) if err != nil { t.Fatalf("unable to add stats: %v", err) } // set the trace to something else. The stats stored in the // storage should not be affected. stats.Cpu.Usage.Total = 0 stats.Cpu.Usage.System = 0 stats.Cpu.Usage.User = 0 } samples, err := driver.Samples(ref.Name, N) if err != nil { t.Errorf("unable to sample stats: %v", err) } if len(samples) == 0 { t.Fatal("should at least store one sample") } samplesInTrace(samples, cpuTrace, memTrace, samplePeriod, t) samples, err = driver.Samples(ref.Name, -1) if err != nil { t.Errorf("unable to sample stats: %v", err) } samplesInTrace(samples, cpuTrace, memTrace, samplePeriod, t) samples, err = driver.Samples(ref.Name, N-5) if err != nil { t.Errorf("unable to sample stats: %v", err) } samplesInTrace(samples, cpuTrace, memTrace, samplePeriod, t) }