Signed-off-by: Ken Herner <kherner@progress.com>
| ... | ... |
@@ -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 |
} |