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