mirror of
https://github.com/containers/gvisor-tap-vsock.git
synced 2025-09-26 21:01:42 +08:00
98 lines
2.5 KiB
Go
98 lines
2.5 KiB
Go
//go:build darwin
|
|
|
|
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() {
|
|
e2e.BasicConnectivityTests(e2e.BasicTestProps{
|
|
SSHExec: sshExec,
|
|
})
|
|
})
|
|
|
|
var _ = ginkgo.Describe("dns with vfkit", func() {
|
|
e2e.BasicDNSTests(e2e.BasicTestProps{
|
|
SSHExec: sshExec,
|
|
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
|
|
})
|
|
})
|