github.com/45cali/docker@v1.11.1/volume/testutils/testutils.go (about)

     1  package volumetestutils
     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, error) { return "noop", nil }
    23  
    24  // Unmount unmounts the volume from the container
    25  func (NoopVolume) Unmount() error { return nil }
    26  
    27  // FakeVolume is a fake volume with a random name
    28  type FakeVolume struct {
    29  	name       string
    30  	driverName string
    31  }
    32  
    33  // NewFakeVolume creates a new fake volume for testing
    34  func NewFakeVolume(name string, driverName string) volume.Volume {
    35  	return FakeVolume{name: name, driverName: driverName}
    36  }
    37  
    38  // Name is the name of the volume
    39  func (f FakeVolume) Name() string { return f.name }
    40  
    41  // DriverName is the name of the driver
    42  func (f FakeVolume) DriverName() string { return f.driverName }
    43  
    44  // Path is the filesystem path to the volume
    45  func (FakeVolume) Path() string { return "fake" }
    46  
    47  // Mount mounts the volume in the container
    48  func (FakeVolume) Mount() (string, error) { return "fake", nil }
    49  
    50  // Unmount unmounts the volume from the container
    51  func (FakeVolume) Unmount() error { return nil }
    52  
    53  // FakeDriver is a driver that generates fake volumes
    54  type FakeDriver struct {
    55  	name string
    56  	vols map[string]volume.Volume
    57  }
    58  
    59  // NewFakeDriver creates a new FakeDriver with the specified name
    60  func NewFakeDriver(name string) volume.Driver {
    61  	return &FakeDriver{
    62  		name: name,
    63  		vols: make(map[string]volume.Volume),
    64  	}
    65  }
    66  
    67  // Name is the name of the driver
    68  func (d *FakeDriver) Name() string { return d.name }
    69  
    70  // Create initializes a fake volume.
    71  // It returns an error if the options include an "error" key with a message
    72  func (d *FakeDriver) Create(name string, opts map[string]string) (volume.Volume, error) {
    73  	if opts != nil && opts["error"] != "" {
    74  		return nil, fmt.Errorf(opts["error"])
    75  	}
    76  	v := NewFakeVolume(name, d.name)
    77  	d.vols[name] = v
    78  	return v, nil
    79  }
    80  
    81  // Remove deletes a volume.
    82  func (d *FakeDriver) Remove(v volume.Volume) error {
    83  	if _, exists := d.vols[v.Name()]; !exists {
    84  		return fmt.Errorf("no such volume")
    85  	}
    86  	delete(d.vols, v.Name())
    87  	return nil
    88  }
    89  
    90  // List lists the volumes
    91  func (d *FakeDriver) List() ([]volume.Volume, error) {
    92  	var vols []volume.Volume
    93  	for _, v := range d.vols {
    94  		vols = append(vols, v)
    95  	}
    96  	return vols, nil
    97  }
    98  
    99  // Get gets the volume
   100  func (d *FakeDriver) Get(name string) (volume.Volume, error) {
   101  	if v, exists := d.vols[name]; exists {
   102  		return v, nil
   103  	}
   104  	return nil, fmt.Errorf("no such volume")
   105  }