Skip to content

Commit

Permalink
test: upload and download tests against vfkit
Browse files Browse the repository at this point in the history
This commit adds two tests:

1. Upload files to the VM This test uploads three files of different sizes (10M, 100M, 1G) to the running VM and verifies the sha256sum of the uploaded files.

2. Download the above files from the VM This test downloads the three files uploaded in the previous test and verifies their sha256sum values.

Signed-off-by: Gunjan Vyas <[email protected]>
  • Loading branch information
vyasgun committed Jan 23, 2025
1 parent e897a4a commit 0b09d74
Show file tree
Hide file tree
Showing 2 changed files with 96 additions and 0 deletions.
76 changes: 76 additions & 0 deletions test-vfkit/basic_test.go
Original file line number Diff line number Diff line change
@@ -1,8 +1,19 @@
package e2evfkit

import (
"crypto/sha256"
"encoding/hex"
"fmt"
"io"
"math"
"os"
"path"
"path/filepath"
"strings"

e2e "github.com/containers/gvisor-tap-vsock/test"
"github.com/onsi/ginkgo"
"github.com/onsi/gomega"
)

var _ = ginkgo.Describe("connectivity with vfkit", func() {
Expand All @@ -17,3 +28,68 @@ var _ = ginkgo.Describe("dns with vfkit", func() {
Sock: sock,
})
})

var _ = ginkgo.Describe("upload and download with vfkit", func() {
tmpDir, err := os.MkdirTemp("", "vfkit")
gomega.Expect(err).NotTo(gomega.HaveOccurred())

sumMap := make(map[string]string)
dstDir := "/tmp"
ginkgo.AfterEach(func() {
err := os.RemoveAll(tmpDir)
gomega.Expect(err).NotTo(gomega.HaveOccurred())
})
ginkgo.It("should upload 1MB, 10MB, and 100MB files to vfkit", func() {
for _, size := range []int{6, 7, 8} {
file, err := os.CreateTemp(tmpDir, "testfile")
gomega.Expect(err).NotTo(gomega.HaveOccurred())

err = file.Truncate(int64(math.Pow10(size)))
gomega.Expect(err).NotTo(gomega.HaveOccurred())

hasher := sha256.New()
_, err = io.Copy(hasher, file)
gomega.Expect(err).NotTo(gomega.HaveOccurred())

srcPath := file.Name()
dstPath := filepath.Join(dstDir, path.Base(srcPath))

err = scpToVM(srcPath, dstDir)
gomega.Expect(err).NotTo(gomega.HaveOccurred())

out, err := sshExec(fmt.Sprintf("sha256sum %s | awk '{print $1}'", dstPath))
gomega.Expect(err).NotTo(gomega.HaveOccurred())

localSum := hex.EncodeToString(hasher.Sum(nil))
vmSum := strings.TrimSpace(string(out))
gomega.Expect(vmSum).To(gomega.Equal(localSum))

sumMap[dstPath] = vmSum
}
})
ginkgo.It("should download the uploaded files from vfkit", func() {
// Download the uploaded files
dlTmpDir, err := os.MkdirTemp("", "vfkit-dl")
gomega.Expect(err).NotTo(gomega.HaveOccurred())
for filename := range sumMap {
err = scpFromVM(filename, dlTmpDir)
gomega.Expect(err).NotTo(gomega.HaveOccurred())
}

dir, err := os.ReadDir(dlTmpDir)
gomega.Expect(err).NotTo(gomega.HaveOccurred())
for _, entry := range dir {
hasher := sha256.New()
file, err := os.Open(filepath.Join(dlTmpDir, entry.Name()))
gomega.Expect(err).NotTo(gomega.HaveOccurred())

_, err = io.Copy(hasher, file)
gomega.Expect(err).NotTo(gomega.HaveOccurred())

gomega.Expect(hasher.Sum(nil)).NotTo(gomega.Equal(sumMap[entry.Name()]))

}
// Set tmpDir to dlTmpDir for cleanup in AfterEach
tmpDir = dlTmpDir
})
})
20 changes: 20 additions & 0 deletions test-vfkit/vfkit_suite_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -204,6 +204,26 @@ func clear() {
_ = os.Remove(socketPath)
}

func scp(src, dst string) error {
sshCmd := exec.Command("/usr/bin/scp",
"-o", "UserKnownHostsFile=/dev/null",
"-o", "StrictHostKeyChecking=no",
"-o", "IdentitiesOnly=yes",
"-i", privateKeyFile,
"-P", strconv.Itoa(sshPort),
src, dst) // #nosec G204
sshCmd.Stderr = os.Stderr
sshCmd.Stdout = os.Stdout
return sshCmd.Run()
}
func scpToVM(src, dst string) error {
return scp(src, fmt.Sprintf("%[email protected]:%s", ignitionUser, dst))
}

func scpFromVM(src, dst string) error {
return scp(fmt.Sprintf("%[email protected]:%s", ignitionUser, src), dst)
}

var _ = ginkgo.AfterSuite(func() {
if host != nil {
if err := host.Process.Kill(); err != nil {
Expand Down

0 comments on commit 0b09d74

Please sign in to comment.