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 10, 2025
1 parent e897a4a commit 8640ddf
Show file tree
Hide file tree
Showing 2 changed files with 95 additions and 0 deletions.
68 changes: 68 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,60 @@ var _ = ginkgo.Describe("dns with vfkit", func() {
Sock: sock,
})
})

var _ = ginkgo.It("should upload and download 10M, 100M, and 1G files to/from vfkit", func() {
tmpDir, err := os.MkdirTemp("", "vfkit")
gomega.Expect(err).NotTo(gomega.HaveOccurred())

sumMap := make(map[string]string)
for i := range []int{8, 9, 10} {
file, err := os.CreateTemp(tmpDir, "testfile")
gomega.Expect(err).NotTo(gomega.HaveOccurred())

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

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

srcPath := file.Name()
dstDir := "/tmp"
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
}

// 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 {
fmt.Println(entry.Name())
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()]))
}
})
27 changes: 27 additions & 0 deletions test-vfkit/vfkit_suite_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -203,6 +203,33 @@ func clear() {
socketPath := filepath.Join(os.TempDir(), "ignition.sock")
_ = os.Remove(socketPath)
}
func scpToVM(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, fmt.Sprintf("%[email protected]:%s", ignitionUser, dst)) // #nosec G204
sshCmd.Stderr = os.Stderr
sshCmd.Stdout = os.Stdout
fmt.Println(sshCmd.String())
return sshCmd.Run()
}

func scpFromVM(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),
fmt.Sprintf("%[email protected]:%s", ignitionUser, src), dst) // #nosec G204
sshCmd.Stderr = os.Stderr
sshCmd.Stdout = os.Stdout
fmt.Println(sshCmd.String())
return sshCmd.Run()
}

var _ = ginkgo.AfterSuite(func() {
if host != nil {
Expand Down

0 comments on commit 8640ddf

Please sign in to comment.