Signed-off-by: Ken Herner <kherner@progress.com>
Ken Herner authored on 2016/05/20 03:47:33... | ... |
@@ -5,12 +5,16 @@ package graphtest |
5 | 5 |
import ( |
6 | 6 |
"fmt" |
7 | 7 |
"io/ioutil" |
8 |
+ "math/rand" |
|
8 | 9 |
"os" |
9 | 10 |
"path" |
11 |
+ "reflect" |
|
10 | 12 |
"syscall" |
11 | 13 |
"testing" |
14 |
+ "unsafe" |
|
12 | 15 |
|
13 | 16 |
"github.com/docker/docker/daemon/graphdriver" |
17 |
+ "github.com/docker/go-units" |
|
14 | 18 |
) |
15 | 19 |
|
16 | 20 |
var ( |
... | ... |
@@ -297,3 +301,45 @@ func DriverTestCreateSnap(t *testing.T, drivername string) { |
297 | 297 |
t.Fatal(err) |
298 | 298 |
} |
299 | 299 |
} |
300 |
+ |
|
301 |
+func writeRandomFile(path string, size uint64) error { |
|
302 |
+ buf := make([]int64, size/8) |
|
303 |
+ |
|
304 |
+ r := rand.NewSource(0) |
|
305 |
+ for i := range buf { |
|
306 |
+ buf[i] = r.Int63() |
|
307 |
+ } |
|
308 |
+ |
|
309 |
+ // Cast to []byte |
|
310 |
+ header := *(*reflect.SliceHeader)(unsafe.Pointer(&buf)) |
|
311 |
+ header.Len *= 8 |
|
312 |
+ header.Cap *= 8 |
|
313 |
+ data := *(*[]byte)(unsafe.Pointer(&header)) |
|
314 |
+ |
|
315 |
+ return ioutil.WriteFile(path, data, 0700) |
|
316 |
+} |
|
317 |
+ |
|
318 |
+// DriverTestSetQuota Create a driver and test setting quota. |
|
319 |
+func DriverTestSetQuota(t *testing.T, drivername string) { |
|
320 |
+ driver := GetDriver(t, drivername) |
|
321 |
+ defer PutDriver(t) |
|
322 |
+ |
|
323 |
+ createBase(t, driver, "Base") |
|
324 |
+ storageOpt := make(map[string]string, 1) |
|
325 |
+ storageOpt["size"] = "50M" |
|
326 |
+ if err := driver.Create("zfsTest", "Base", "", storageOpt); err != nil { |
|
327 |
+ t.Fatal(err) |
|
328 |
+ } |
|
329 |
+ |
|
330 |
+ mountPath, err := driver.Get("zfsTest", "") |
|
331 |
+ if err != nil { |
|
332 |
+ t.Fatal(err) |
|
333 |
+ } |
|
334 |
+ |
|
335 |
+ quota := uint64(50 * units.MiB) |
|
336 |
+ err = writeRandomFile(path.Join(mountPath, "file"), quota*2) |
|
337 |
+ if pathError, ok := err.(*os.PathError); ok && pathError.Err != syscall.EDQUOT { |
|
338 |
+ t.Fatalf("expect write() to fail with %v, got %v", syscall.EDQUOT, err) |
|
339 |
+ } |
|
340 |
+ |
|
341 |
+} |
... | ... |
@@ -26,6 +26,10 @@ func TestZfsCreateSnap(t *testing.T) { |
26 | 26 |
graphtest.DriverTestCreateSnap(t, "zfs") |
27 | 27 |
} |
28 | 28 |
|
29 |
+func TestZfsSetQuota(t *testing.T) { |
|
30 |
+ graphtest.DriverTestSetQuota(t, "zfs") |
|
31 |
+} |
|
32 |
+ |
|
29 | 33 |
func TestZfsTeardown(t *testing.T) { |
30 | 34 |
graphtest.PutDriver(t) |
31 | 35 |
} |