Browse code

Add test to ZFS for disk quota

Signed-off-by: Ken Herner <kherner@progress.com>

Ken Herner authored on 2016/05/20 03:47:33
Showing 2 changed files
... ...
@@ -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
 }