Files
gvisor-tap-vsock/test-vfkit/basic_test.go
Christophe Fergeau 976f29d2d4 Add go API for /services/dhcp/leases
Signed-off-by: Christophe Fergeau <cfergeau@redhat.com>
2025-09-24 16:46:33 +02:00

105 lines
2.7 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("dhcp with vfkit", func() {
e2e.BasicDHCPTests(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
})
})