gopkg.in/docker/docker.v20@v20.10.27/volume/service/service_linux_test.go (about)

     1  package service
     2  
     3  import (
     4  	"context"
     5  	"os"
     6  	"path/filepath"
     7  	"testing"
     8  
     9  	"github.com/docker/docker/pkg/idtools"
    10  	"github.com/docker/docker/volume"
    11  	volumedrivers "github.com/docker/docker/volume/drivers"
    12  	"github.com/docker/docker/volume/local"
    13  	"github.com/docker/docker/volume/service/opts"
    14  	"github.com/docker/docker/volume/testutils"
    15  	"gotest.tools/v3/assert"
    16  	is "gotest.tools/v3/assert/cmp"
    17  )
    18  
    19  func TestLocalVolumeSize(t *testing.T) {
    20  	t.Parallel()
    21  
    22  	ds := volumedrivers.NewStore(nil)
    23  	dir, err := os.MkdirTemp("", t.Name())
    24  	assert.NilError(t, err)
    25  	defer os.RemoveAll(dir)
    26  
    27  	l, err := local.New(dir, idtools.Identity{UID: os.Getuid(), GID: os.Getegid()})
    28  	assert.NilError(t, err)
    29  	assert.Assert(t, ds.Register(l, volume.DefaultDriverName))
    30  	assert.Assert(t, ds.Register(testutils.NewFakeDriver("fake"), "fake"))
    31  
    32  	service, cleanup := newTestService(t, ds)
    33  	defer cleanup()
    34  
    35  	ctx := context.Background()
    36  	v1, err := service.Create(ctx, "test1", volume.DefaultDriverName, opts.WithCreateReference("foo"))
    37  	assert.NilError(t, err)
    38  	v2, err := service.Create(ctx, "test2", volume.DefaultDriverName)
    39  	assert.NilError(t, err)
    40  	_, err = service.Create(ctx, "test3", "fake")
    41  	assert.NilError(t, err)
    42  
    43  	data := make([]byte, 1024)
    44  	err = os.WriteFile(filepath.Join(v1.Mountpoint, "data"), data, 0644)
    45  	assert.NilError(t, err)
    46  	err = os.WriteFile(filepath.Join(v2.Mountpoint, "data"), data[:1], 0644)
    47  	assert.NilError(t, err)
    48  
    49  	ls, err := service.LocalVolumesSize(ctx)
    50  	assert.NilError(t, err)
    51  	assert.Assert(t, is.Len(ls, 2))
    52  
    53  	for _, v := range ls {
    54  		switch v.Name {
    55  		case "test1":
    56  			assert.Assert(t, is.Equal(v.UsageData.Size, int64(len(data))))
    57  			assert.Assert(t, is.Equal(v.UsageData.RefCount, int64(1)))
    58  		case "test2":
    59  			assert.Assert(t, is.Equal(v.UsageData.Size, int64(len(data[:1]))))
    60  			assert.Assert(t, is.Equal(v.UsageData.RefCount, int64(0)))
    61  		default:
    62  			t.Fatalf("got unexpected volume: %+v", v)
    63  		}
    64  	}
    65  }