sandbox_linux_test.go 1.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354
  1. package sandbox
  2. import (
  3. "os"
  4. "path/filepath"
  5. "runtime"
  6. "testing"
  7. "github.com/docker/libnetwork/netutils"
  8. "github.com/vishvananda/netns"
  9. )
  10. func newKey(t *testing.T) (string, error) {
  11. name, err := netutils.GenerateRandomName("netns", 12)
  12. if err != nil {
  13. return "", err
  14. }
  15. name = filepath.Join("/tmp", name)
  16. if _, err := os.Create(name); err != nil {
  17. return "", err
  18. }
  19. return name, nil
  20. }
  21. func verifySandbox(t *testing.T, s Sandbox) {
  22. _, ok := s.(*networkNamespace)
  23. if !ok {
  24. t.Fatalf("The sandox interface returned is not of type networkNamespace")
  25. }
  26. origns, err := netns.Get()
  27. if err != nil {
  28. t.Fatalf("Could not get the current netns: %v", err)
  29. }
  30. defer origns.Close()
  31. f, err := os.OpenFile(s.Key(), os.O_RDONLY, 0)
  32. if err != nil {
  33. t.Fatalf("Failed top open network namespace path %q: %v", s.Key(), err)
  34. }
  35. defer f.Close()
  36. runtime.LockOSThread()
  37. defer runtime.UnlockOSThread()
  38. nsFD := f.Fd()
  39. if err = netns.Set(netns.NsHandle(nsFD)); err != nil {
  40. t.Fatalf("Setting to the namespace pointed to by the sandbox %s failed: %v", s.Key(), err)
  41. }
  42. netns.Set(origns)
  43. }