Skip to content

Commit

Permalink
Create mountertest package for mount test utils
Browse files Browse the repository at this point in the history
Signed-off-by: Burak Varlı <[email protected]>
  • Loading branch information
unexge committed Jan 31, 2025
1 parent 8adcb20 commit 7584d55
Show file tree
Hide file tree
Showing 2 changed files with 42 additions and 34 deletions.
41 changes: 7 additions & 34 deletions cmd/aws-s3-csi-mounter/csimounter/csimounter_test.go
Original file line number Diff line number Diff line change
@@ -1,16 +1,14 @@
package csimounter_test

import (
"log"
"os"
"os/exec"
"path/filepath"
"syscall"
"testing"

"github.com/google/go-cmp/cmp/cmpopts"

"github.com/awslabs/aws-s3-csi-driver/cmd/aws-s3-csi-mounter/csimounter"
"github.com/awslabs/aws-s3-csi-driver/pkg/driver/node/mounter/mountertest"
"github.com/awslabs/aws-s3-csi-driver/pkg/podmounter/mountoptions"
"github.com/awslabs/aws-s3-csi-driver/pkg/util/testutil/assert"
)
Expand All @@ -19,10 +17,10 @@ func TestRunningMountpoint(t *testing.T) {
mountpointPath := filepath.Join(t.TempDir(), "mount-s3")

t.Run("Passes bucket name and FUSE device as mount point", func(t *testing.T) {
dev := openDevNull(t)
dev := mountertest.OpenDevNull(t)

runner := func(c *exec.Cmd) (int, error) {
assertSameFile(t, dev, c.ExtraFiles[0])
mountertest.AssertSameFile(t, dev, c.ExtraFiles[0])
assert.Equals(t, mountpointPath, c.Path)
assert.Equals(t, []string{mountpointPath, "test-bucket", "/dev/fd/3"}, c.Args[:3])
return 0, nil
Expand Down Expand Up @@ -50,7 +48,7 @@ func TestRunningMountpoint(t *testing.T) {
exitCode, err := csimounter.Run(csimounter.Options{
MountpointPath: mountpointPath,
MountOptions: mountoptions.Options{
Fd: int(openDevNull(t).Fd()),
Fd: int(mountertest.OpenDevNull(t).Fd()),
BucketName: "test-bucket",
},
CmdRunner: runner,
Expand All @@ -70,7 +68,7 @@ func TestRunningMountpoint(t *testing.T) {
exitCode, err := csimounter.Run(csimounter.Options{
MountpointPath: mountpointPath,
MountOptions: mountoptions.Options{
Fd: int(openDevNull(t).Fd()),
Fd: int(mountertest.OpenDevNull(t).Fd()),
Env: env,
},
CmdRunner: runner,
Expand All @@ -92,7 +90,7 @@ func TestRunningMountpoint(t *testing.T) {
exitCode, err := csimounter.Run(csimounter.Options{
MountpointPath: mountpointPath,
MountOptions: mountoptions.Options{
Fd: int(openDevNull(t).Fd()),
Fd: int(mountertest.OpenDevNull(t).Fd()),
BucketName: "test-bucket",
},
CmdRunner: runner,
Expand All @@ -103,7 +101,7 @@ func TestRunningMountpoint(t *testing.T) {
exitCode, err = csimounter.Run(csimounter.Options{
MountpointPath: mountpointPath,
MountOptions: mountoptions.Options{
Fd: int(openDevNull(t).Fd()),
Fd: int(mountertest.OpenDevNull(t).Fd()),
BucketName: "test-bucket",
Args: []string{"--foreground"},
},
Expand All @@ -124,28 +122,3 @@ func TestRunningMountpoint(t *testing.T) {
assert.Equals(t, cmpopts.AnyError, err)
})
}

func openDevNull(t *testing.T) *os.File {
file, err := os.Open(os.DevNull)
assert.NoError(t, err)
t.Cleanup(func() {
err = file.Close()
if err != nil {
log.Printf("Failed to close file handle: %v\n", err)
}
})
return file
}

func assertSameFile(t *testing.T, want *os.File, got *os.File) {
var wantStat = &syscall.Stat_t{}
err := syscall.Fstat(int(want.Fd()), wantStat)
assert.NoError(t, err)

var gotStat = &syscall.Stat_t{}
err = syscall.Fstat(int(got.Fd()), gotStat)
assert.NoError(t, err)

assert.Equals(t, wantStat.Dev, gotStat.Dev)
assert.Equals(t, wantStat.Ino, gotStat.Ino)
}
35 changes: 35 additions & 0 deletions pkg/driver/node/mounter/mountertest/mounter.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
package mountertest

import (
"os"
"syscall"
"testing"

"github.com/awslabs/aws-s3-csi-driver/pkg/util/testutil/assert"
)

// OpenDevNull opens `/dev/null` and returns the file handle.
func OpenDevNull(t *testing.T) *os.File {
file, err := os.Open(os.DevNull)
assert.NoError(t, err)
t.Cleanup(func() {
_ = file.Close()
})
return file
}

// AssertSameFile checks if given file handles points to the same underlying file description.
func AssertSameFile(t *testing.T, want *os.File, got *os.File) {
t.Helper()

var wantStat = &syscall.Stat_t{}
err := syscall.Fstat(int(want.Fd()), wantStat)
assert.NoError(t, err)

var gotStat = &syscall.Stat_t{}
err = syscall.Fstat(int(got.Fd()), gotStat)
assert.NoError(t, err)

assert.Equals(t, wantStat.Dev, gotStat.Dev)
assert.Equals(t, wantStat.Ino, gotStat.Ino)
}

0 comments on commit 7584d55

Please sign in to comment.