// TestMetrics tests that MetricProvider methods return sane values. func TestMetrics(t *testing.T) { // Create an empty temp directory for the volume tmpDir, err := ioutil.TempDir(os.TempDir(), "host_path_test") if err != nil { t.Fatalf("Can't make a tmp dir: %v", err) } defer os.RemoveAll(tmpDir) plugMgr := volume.VolumePluginMgr{} plugMgr.InitPlugins(ProbeVolumePlugins(volume.VolumeConfig{}), volumetest.NewFakeVolumeHost(tmpDir, nil, nil)) plug, err := plugMgr.FindPluginByName("kubernetes.io/host-path") if err != nil { t.Errorf("Can't find the plugin by name") } spec := &api.Volume{ Name: "vol1", VolumeSource: api.VolumeSource{HostPath: &api.HostPathVolumeSource{Path: tmpDir}}, } pod := &api.Pod{ObjectMeta: api.ObjectMeta{UID: types.UID("poduid")}} builder, err := plug.NewBuilder(volume.NewSpecFromVolume(spec), pod, volume.VolumeOptions{}) if err != nil { t.Errorf("Failed to make a new Builder: %v", err) } expectedEmptyDirUsage, err := volumetest.FindEmptyDirectoryUsageOnTmpfs() if err != nil { t.Errorf("Unexpected error finding expected empty directory usage on tmpfs: %v", err) } metrics, err := builder.GetMetrics() if err != nil { t.Errorf("Unexpected error when calling GetMetrics %v", err) } if e, a := expectedEmptyDirUsage.Value(), metrics.Used.Value(); e != a { t.Errorf("Unexpected value for empty directory; expected %v, got %v", e, a) } if metrics.Capacity.Value() <= 0 { t.Errorf("Expected Capacity to be greater than 0") } if metrics.Available.Value() <= 0 { t.Errorf("Expected Available to be greater than 0") } }
// TestMetrics tests that MetricProvider methods return sane values. func TestMetrics(t *testing.T) { // Create an empty temp directory for the volume tmpDir, err := utiltesting.MkTmpdir("empty_dir_test") if err != nil { t.Fatalf("Can't make a tmp dir: %v", err) } defer os.RemoveAll(tmpDir) plug := makePluginUnderTest(t, "kubernetes.io/empty-dir", tmpDir) spec := &api.Volume{ Name: "vol1", } pod := &api.Pod{ObjectMeta: api.ObjectMeta{UID: types.UID("poduid")}} builder, err := plug.NewBuilder(volume.NewSpecFromVolume(spec), pod, volume.VolumeOptions{RootContext: ""}) if err != nil { t.Errorf("Failed to make a new Builder: %v", err) } // Need to create the subdirectory os.MkdirAll(builder.GetPath(), 0755) expectedEmptyDirUsage, err := volumetest.FindEmptyDirectoryUsageOnTmpfs() if err != nil { t.Errorf("Unexpected error finding expected empty directory usage on tmpfs: %v", err) } // TODO(pwittroc): Move this into a reusable testing utility metrics, err := builder.GetMetrics() if err != nil { t.Errorf("Unexpected error when calling GetMetrics %v", err) } if e, a := expectedEmptyDirUsage.Value(), metrics.Used.Value(); e != a { t.Errorf("Unexpected value for empty directory; expected %v, got %v", e, a) } if metrics.Capacity.Value() <= 0 { t.Errorf("Expected Capacity to be greater than 0") } if metrics.Available.Value() <= 0 { t.Errorf("Expected Available to be greater than 0") } }
// TestMetricsDuGetCapacity tests that MetricsDu can read disk usage // for path func TestMetricsDuGetCapacity(t *testing.T) { tmpDir, err := utiltesting.MkTmpdir("metrics_du_test") if err != nil { t.Fatalf("Can't make a tmp dir: %v", err) } defer os.RemoveAll(tmpDir) metrics := NewMetricsDu(tmpDir) expectedEmptyDirUsage, err := volumetest.FindEmptyDirectoryUsageOnTmpfs() if err != nil { t.Errorf("Unexpected error finding expected empty directory usage on tmpfs: %v", err) } actual, err := metrics.GetMetrics() if err != nil { t.Errorf("Unexpected error when calling GetMetrics %v", err) } if e, a := expectedEmptyDirUsage.Value(), actual.Used.Value(); e != a { t.Errorf("Unexpected value for empty directory; expected %v, got %v", e, a) } // TODO(pwittroc): Figure out a way to test these values for correctness, maybe by formatting and mounting a file // as a filesystem if a := actual.Capacity.Value(); a <= 0 { t.Errorf("Expected Capacity %d to be greater than 0.", a) } if a := actual.Available.Value(); a <= 0 { t.Errorf("Expected Available %d to be greater than 0.", a) } // Write a file and expect Used to increase ioutil.WriteFile(filepath.Join(tmpDir, "f1"), []byte("Hello World"), os.ModeTemporary) actual, err = metrics.GetMetrics() if err != nil { t.Errorf("Unexpected error when calling GetMetrics %v", err) } if e, a := (expectedEmptyDirUsage.Value() + expectedBlockSize), actual.Used.Value(); e != a { t.Errorf("Unexpected Used for directory with file. Expected %v, got %d.", e, a) } }