Refactor loseup test

Signed-off-by: Maksym Pavlenko <pavlenko.maksym@gmail.com>
This commit is contained in:
Maksym Pavlenko 2021-01-05 10:06:02 -08:00
parent c5fa0298c1
commit eb1649225d
2 changed files with 46 additions and 42 deletions

View File

@ -143,7 +143,7 @@ func setupLoopDev(backingFile, loopDev string, param LoopParams) error {
//
// Upon success, the file handle to the loop device is returned.
func setupLoop(backingFile string, param LoopParams) (string, error) {
for retry := 1; retry < 200; retry++ {
for retry := 1; retry < 100; retry++ {
num, err := getFreeLoopDev()
if err != nil {
return "", err

View File

@ -26,85 +26,89 @@ import (
"github.com/containerd/continuity/testutil"
)
func TestSetupLoop(t *testing.T) {
testutil.RequiresRoot(t)
const randomdata = "randomdata"
var randomData = []byte("randomdata")
/* Non-existing loop */
backingFile := "setup-loop-test-no-such-file"
_, err := setupLoop(backingFile, LoopParams{})
if err == nil {
t.Fatalf("setupLoop with non-existing file should fail")
}
func createTempFile(t *testing.T) string {
t.Helper()
f, err := ioutil.TempFile("", "losetup")
if err != nil {
t.Fatal(err)
}
defer f.Close()
if err = f.Truncate(512); err != nil {
t.Fatal(err)
}
backingFile = f.Name()
f.Close()
return f.Name()
}
func TestNonExistingLoop(t *testing.T) {
testutil.RequiresRoot(t)
backingFile := "setup-loop-test-no-such-file"
_, err := setupLoop(backingFile, LoopParams{})
if err == nil {
t.Fatalf("setupLoop with non-existing file should fail")
}
}
func TestRoLoop(t *testing.T) {
testutil.RequiresRoot(t)
backingFile := createTempFile(t)
defer func() {
if err := os.Remove(backingFile); err != nil {
t.Fatal(err)
}
}()
/* RO loop */
path, err := setupLoop(backingFile, LoopParams{Readonly: true, Autoclear: true})
if err != nil {
t.Fatal(err)
}
ff, err := os.OpenFile(path, os.O_RDWR, 0)
if err != nil {
t.Fatal(err)
}
if _, err = ff.Write([]byte(randomdata)); err == nil {
if err := ioutil.WriteFile(path, randomData, os.ModePerm); err == nil {
t.Fatalf("writing to readonly loop device should fail")
}
if err = ff.Close(); err != nil {
}
func TestRwLoop(t *testing.T) {
testutil.RequiresRoot(t)
backingFile := createTempFile(t)
defer func() {
if err := os.Remove(backingFile); err != nil {
t.Fatal(err)
}
}()
path, err := setupLoop(backingFile, LoopParams{Autoclear: true})
if err != nil {
t.Fatal(err)
}
/* RW loop */
path, err = setupLoop(backingFile, LoopParams{Autoclear: true})
if err != nil {
t.Fatal(err)
}
ff, err = os.OpenFile(path, os.O_RDWR, 0)
if err != nil {
t.Fatal(err)
}
if _, err = ff.Write([]byte(randomdata)); err != nil {
t.Fatal(err)
}
if err = ff.Close(); err != nil {
if err := ioutil.WriteFile(path, randomData, os.ModePerm); err != nil {
t.Fatal(err)
}
}
func TestAttachDetachLoopDevice(t *testing.T) {
testutil.RequiresRoot(t)
f, err := ioutil.TempFile("", "losetup")
if err != nil {
t.Fatal(err)
}
if err = f.Truncate(512); err != nil {
t.Fatal(err)
}
f.Close()
path := createTempFile(t)
defer func() {
if err := os.Remove(f.Name()); err != nil {
if err := os.Remove(path); err != nil {
t.Fatal(err)
}
}()
dev, err := AttachLoopDevice(f.Name())
dev, err := AttachLoopDevice(path)
if err != nil {
t.Fatal(err)
}
if err = DetachLoopDevice(dev); err != nil {
t.Fatal(err)
}