123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051 |
- // +build linux
- package volume
- import (
- "context"
- "testing"
- "github.com/docker/docker/api/types"
- "github.com/docker/docker/api/types/volume"
- "github.com/docker/docker/integration-cli/daemon"
- )
- // TestCreateDerefOnError ensures that if a volume create fails, that the plugin is dereferenced
- // Normally 1 volume == 1 reference to a plugin, which prevents a plugin from being removed.
- // If the volume create fails, we should make sure to dereference the plugin.
- func TestCreateDerefOnError(t *testing.T) {
- t.Parallel()
- d := daemon.New(t, "", dockerdBinary, daemon.Config{})
- d.Start(t)
- defer d.Stop(t)
- c, err := d.NewClient()
- if err != nil {
- t.Fatal(err)
- }
- pName := "testderef"
- createPlugin(t, c, pName, "create-error", asVolumeDriver)
- if err := c.PluginEnable(context.Background(), pName, types.PluginEnableOptions{Timeout: 30}); err != nil {
- t.Fatal(err)
- }
- _, err = c.VolumeCreate(context.Background(), volume.VolumesCreateBody{
- Driver: pName,
- Name: "fake",
- })
- if err == nil {
- t.Fatal("volume create should have failed")
- }
- if err := c.PluginDisable(context.Background(), pName, types.PluginDisableOptions{}); err != nil {
- t.Fatal(err)
- }
- if err := c.PluginRemove(context.Background(), pName, types.PluginRemoveOptions{}); err != nil {
- t.Fatal(err)
- }
- }
|