github.com/vieux/docker@v0.6.3-0.20161004191708-e097c2a938c7/volume/store/store_test.go (about) 1 package store 2 3 import ( 4 "errors" 5 "strings" 6 "testing" 7 8 pluginstore "github.com/docker/docker/plugin/store" 9 "github.com/docker/docker/volume/drivers" 10 volumetestutils "github.com/docker/docker/volume/testutils" 11 ) 12 13 func TestCreate(t *testing.T) { 14 pluginStore := pluginstore.NewStore("/var/lib/docker") 15 volumedrivers.RegisterPluginGetter(pluginStore) 16 17 volumedrivers.Register(volumetestutils.NewFakeDriver("fake"), "fake") 18 defer volumedrivers.Unregister("fake") 19 s, err := New("") 20 if err != nil { 21 t.Fatal(err) 22 } 23 v, err := s.Create("fake1", "fake", nil, nil) 24 if err != nil { 25 t.Fatal(err) 26 } 27 if v.Name() != "fake1" { 28 t.Fatalf("Expected fake1 volume, got %v", v) 29 } 30 if l, _, _ := s.List(); len(l) != 1 { 31 t.Fatalf("Expected 1 volume in the store, got %v: %v", len(l), l) 32 } 33 34 if _, err := s.Create("none", "none", nil, nil); err == nil { 35 t.Fatalf("Expected unknown driver error, got nil") 36 } 37 38 _, err = s.Create("fakeerror", "fake", map[string]string{"error": "create error"}, nil) 39 expected := &OpErr{Op: "create", Name: "fakeerror", Err: errors.New("create error")} 40 if err != nil && err.Error() != expected.Error() { 41 t.Fatalf("Expected create fakeError: create error, got %v", err) 42 } 43 } 44 45 func TestRemove(t *testing.T) { 46 volumedrivers.Register(volumetestutils.NewFakeDriver("fake"), "fake") 47 volumedrivers.Register(volumetestutils.NewFakeDriver("noop"), "noop") 48 defer volumedrivers.Unregister("fake") 49 defer volumedrivers.Unregister("noop") 50 s, err := New("") 51 if err != nil { 52 t.Fatal(err) 53 } 54 55 // doing string compare here since this error comes directly from the driver 56 expected := "no such volume" 57 if err := s.Remove(volumetestutils.NoopVolume{}); err == nil || !strings.Contains(err.Error(), expected) { 58 t.Fatalf("Expected error %q, got %v", expected, err) 59 } 60 61 v, err := s.CreateWithRef("fake1", "fake", "fake", nil, nil) 62 if err != nil { 63 t.Fatal(err) 64 } 65 66 if err := s.Remove(v); !IsInUse(err) { 67 t.Fatalf("Expected ErrVolumeInUse error, got %v", err) 68 } 69 s.Dereference(v, "fake") 70 if err := s.Remove(v); err != nil { 71 t.Fatal(err) 72 } 73 if l, _, _ := s.List(); len(l) != 0 { 74 t.Fatalf("Expected 0 volumes in the store, got %v, %v", len(l), l) 75 } 76 } 77 78 func TestList(t *testing.T) { 79 volumedrivers.Register(volumetestutils.NewFakeDriver("fake"), "fake") 80 volumedrivers.Register(volumetestutils.NewFakeDriver("fake2"), "fake2") 81 defer volumedrivers.Unregister("fake") 82 defer volumedrivers.Unregister("fake2") 83 84 s, err := New("") 85 if err != nil { 86 t.Fatal(err) 87 } 88 if _, err := s.Create("test", "fake", nil, nil); err != nil { 89 t.Fatal(err) 90 } 91 if _, err := s.Create("test2", "fake2", nil, nil); err != nil { 92 t.Fatal(err) 93 } 94 95 ls, _, err := s.List() 96 if err != nil { 97 t.Fatal(err) 98 } 99 if len(ls) != 2 { 100 t.Fatalf("expected 2 volumes, got: %d", len(ls)) 101 } 102 103 // and again with a new store 104 s, err = New("") 105 if err != nil { 106 t.Fatal(err) 107 } 108 ls, _, err = s.List() 109 if err != nil { 110 t.Fatal(err) 111 } 112 if len(ls) != 2 { 113 t.Fatalf("expected 2 volumes, got: %d", len(ls)) 114 } 115 } 116 117 func TestFilterByDriver(t *testing.T) { 118 volumedrivers.Register(volumetestutils.NewFakeDriver("fake"), "fake") 119 volumedrivers.Register(volumetestutils.NewFakeDriver("noop"), "noop") 120 defer volumedrivers.Unregister("fake") 121 defer volumedrivers.Unregister("noop") 122 s, err := New("") 123 if err != nil { 124 t.Fatal(err) 125 } 126 127 if _, err := s.Create("fake1", "fake", nil, nil); err != nil { 128 t.Fatal(err) 129 } 130 if _, err := s.Create("fake2", "fake", nil, nil); err != nil { 131 t.Fatal(err) 132 } 133 if _, err := s.Create("fake3", "noop", nil, nil); err != nil { 134 t.Fatal(err) 135 } 136 137 if l, _ := s.FilterByDriver("fake"); len(l) != 2 { 138 t.Fatalf("Expected 2 volumes, got %v, %v", len(l), l) 139 } 140 141 if l, _ := s.FilterByDriver("noop"); len(l) != 1 { 142 t.Fatalf("Expected 1 volume, got %v, %v", len(l), l) 143 } 144 } 145 146 func TestFilterByUsed(t *testing.T) { 147 volumedrivers.Register(volumetestutils.NewFakeDriver("fake"), "fake") 148 volumedrivers.Register(volumetestutils.NewFakeDriver("noop"), "noop") 149 150 s, err := New("") 151 if err != nil { 152 t.Fatal(err) 153 } 154 155 if _, err := s.CreateWithRef("fake1", "fake", "volReference", nil, nil); err != nil { 156 t.Fatal(err) 157 } 158 if _, err := s.Create("fake2", "fake", nil, nil); err != nil { 159 t.Fatal(err) 160 } 161 162 vols, _, err := s.List() 163 if err != nil { 164 t.Fatal(err) 165 } 166 167 dangling := s.FilterByUsed(vols, false) 168 if len(dangling) != 1 { 169 t.Fatalf("expected 1 danging volume, got %v", len(dangling)) 170 } 171 if dangling[0].Name() != "fake2" { 172 t.Fatalf("expected danging volume fake2, got %s", dangling[0].Name()) 173 } 174 175 used := s.FilterByUsed(vols, true) 176 if len(used) != 1 { 177 t.Fatalf("expected 1 used volume, got %v", len(used)) 178 } 179 if used[0].Name() != "fake1" { 180 t.Fatalf("expected used volume fake1, got %s", used[0].Name()) 181 } 182 } 183 184 func TestDerefMultipleOfSameRef(t *testing.T) { 185 volumedrivers.Register(volumetestutils.NewFakeDriver("fake"), "fake") 186 187 s, err := New("") 188 if err != nil { 189 t.Fatal(err) 190 } 191 192 v, err := s.CreateWithRef("fake1", "fake", "volReference", nil, nil) 193 if err != nil { 194 t.Fatal(err) 195 } 196 197 if _, err := s.GetWithRef("fake1", "fake", "volReference"); err != nil { 198 t.Fatal(err) 199 } 200 201 s.Dereference(v, "volReference") 202 if err := s.Remove(v); err != nil { 203 t.Fatal(err) 204 } 205 }