gitee.com/bomy/docker.git@v1.13.1/volume/testutils/testutils.go (about)

     1  package testutils
     2  
     3  import (
     4  	"fmt"
     5  
     6  	"github.com/docker/docker/volume"
     7  )
     8  
     9  // NoopVolume is a volume that doesn't perform any operation
    10  type NoopVolume struct{}
    11  
    12  // Name is the name of the volume
    13  func (NoopVolume) Name() string { return "noop" }
    14  
    15  // DriverName is the name of the driver
    16  func (NoopVolume) DriverName() string { return "noop" }
    17  
    18  // Path is the filesystem path to the volume
    19  func (NoopVolume) Path() string { return "noop" }
    20  
    21  // Mount mounts the volume in the container
    22  func (NoopVolume) Mount(_ string) (string, error) { return "noop", nil }
    23  
    24  // Unmount unmounts the volume from the container
    25  func (NoopVolume) Unmount(_ string) error { return nil }
    26  
    27  // Status proivdes low-level details about the volume
    28  func (NoopVolume) Status() map[string]interface{} { return nil }
    29  
    30  // FakeVolume is a fake volume with a random name
    31  type FakeVolume struct {
    32  	name       string
    33  	driverName string
    34  }
    35  
    36  // NewFakeVolume creates a new fake volume for testing
    37  func NewFakeVolume(name string, driverName string) volume.Volume {
    38  	return FakeVolume{name: name, driverName: driverName}
    39  }
    40  
    41  // Name is the name of the volume
    42  func (f FakeVolume) Name() string { return f.name }
    43  
    44  // DriverName is the name of the driver
    45  func (f FakeVolume) DriverName() string { return f.driverName }
    46  
    47  // Path is the filesystem path to the volume
    48  func (FakeVolume) Path() string { return "fake" }
    49  
    50  // Mount mounts the volume in the container
    51  func (FakeVolume) Mount(_ string) (string, error) { return "fake", nil }
    52  
    53  // Unmount unmounts the volume from the container
    54  func (FakeVolume) Unmount(_ string) error { return nil }
    55  
    56  // Status proivdes low-level details about the volume
    57  func (FakeVolume) Status() map[string]interface{} { return nil }
    58  
    59  // FakeDriver is a driver that generates fake volumes
    60  type FakeDriver struct {
    61  	name string
    62  	vols map[string]volume.Volume
    63  }
    64  
    65  // NewFakeDriver creates a new FakeDriver with the specified name
    66  func NewFakeDriver(name string) volume.Driver {
    67  	return &FakeDriver{
    68  		name: name,
    69  		vols: make(map[string]volume.Volume),
    70  	}
    71  }
    72  
    73  // Name is the name of the driver
    74  func (d *FakeDriver) Name() string { return d.name }
    75  
    76  // Create initializes a fake volume.
    77  // It returns an error if the options include an "error" key with a message
    78  func (d *FakeDriver) Create(name string, opts map[string]string) (volume.Volume, error) {
    79  	if opts != nil && opts["error"] != "" {
    80  		return nil, fmt.Errorf(opts["error"])
    81  	}
    82  	v := NewFakeVolume(name, d.name)
    83  	d.vols[name] = v
    84  	return v, nil
    85  }
    86  
    87  // Remove deletes a volume.
    88  func (d *FakeDriver) Remove(v volume.Volume) error {
    89  	if _, exists := d.vols[v.Name()]; !exists {
    90  		return fmt.Errorf("no such volume")
    91  	}
    92  	delete(d.vols, v.Name())
    93  	return nil
    94  }
    95  
    96  // List lists the volumes
    97  func (d *FakeDriver) List() ([]volume.Volume, error) {
    98  	var vols []volume.Volume
    99  	for _, v := range d.vols {
   100  		vols = append(vols, v)
   101  	}
   102  	return vols, nil
   103  }
   104  
   105  // Get gets the volume
   106  func (d *FakeDriver) Get(name string) (volume.Volume, error) {
   107  	if v, exists := d.vols[name]; exists {
   108  		return v, nil
   109  	}
   110  	return nil, fmt.Errorf("no such volume")
   111  }
   112  
   113  // Scope returns the local scope
   114  func (*FakeDriver) Scope() string {
   115  	return "local"
   116  }