utils_test.go 3.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154
  1. package utils
  2. import (
  3. "bytes"
  4. "os"
  5. "strings"
  6. "testing"
  7. )
  8. func TestReplaceAndAppendEnvVars(t *testing.T) {
  9. var (
  10. d = []string{"HOME=/"}
  11. o = []string{"HOME=/root", "TERM=xterm"}
  12. )
  13. env := ReplaceOrAppendEnvValues(d, o)
  14. if len(env) != 2 {
  15. t.Fatalf("expected len of 2 got %d", len(env))
  16. }
  17. if env[0] != "HOME=/root" {
  18. t.Fatalf("expected HOME=/root got '%s'", env[0])
  19. }
  20. if env[1] != "TERM=xterm" {
  21. t.Fatalf("expected TERM=xterm got '%s'", env[1])
  22. }
  23. }
  24. // Reading a symlink to a directory must return the directory
  25. func TestReadSymlinkedDirectoryExistingDirectory(t *testing.T) {
  26. var err error
  27. if err = os.Mkdir("/tmp/testReadSymlinkToExistingDirectory", 0777); err != nil {
  28. t.Errorf("failed to create directory: %s", err)
  29. }
  30. if err = os.Symlink("/tmp/testReadSymlinkToExistingDirectory", "/tmp/dirLinkTest"); err != nil {
  31. t.Errorf("failed to create symlink: %s", err)
  32. }
  33. var path string
  34. if path, err = ReadSymlinkedDirectory("/tmp/dirLinkTest"); err != nil {
  35. t.Fatalf("failed to read symlink to directory: %s", err)
  36. }
  37. if path != "/tmp/testReadSymlinkToExistingDirectory" {
  38. t.Fatalf("symlink returned unexpected directory: %s", path)
  39. }
  40. if err = os.Remove("/tmp/testReadSymlinkToExistingDirectory"); err != nil {
  41. t.Errorf("failed to remove temporary directory: %s", err)
  42. }
  43. if err = os.Remove("/tmp/dirLinkTest"); err != nil {
  44. t.Errorf("failed to remove symlink: %s", err)
  45. }
  46. }
  47. // Reading a non-existing symlink must fail
  48. func TestReadSymlinkedDirectoryNonExistingSymlink(t *testing.T) {
  49. var path string
  50. var err error
  51. if path, err = ReadSymlinkedDirectory("/tmp/test/foo/Non/ExistingPath"); err == nil {
  52. t.Fatalf("error expected for non-existing symlink")
  53. }
  54. if path != "" {
  55. t.Fatalf("expected empty path, but '%s' was returned", path)
  56. }
  57. }
  58. // Reading a symlink to a file must fail
  59. func TestReadSymlinkedDirectoryToFile(t *testing.T) {
  60. var err error
  61. var file *os.File
  62. if file, err = os.Create("/tmp/testReadSymlinkToFile"); err != nil {
  63. t.Fatalf("failed to create file: %s", err)
  64. }
  65. file.Close()
  66. if err = os.Symlink("/tmp/testReadSymlinkToFile", "/tmp/fileLinkTest"); err != nil {
  67. t.Errorf("failed to create symlink: %s", err)
  68. }
  69. var path string
  70. if path, err = ReadSymlinkedDirectory("/tmp/fileLinkTest"); err == nil {
  71. t.Fatalf("ReadSymlinkedDirectory on a symlink to a file should've failed")
  72. }
  73. if path != "" {
  74. t.Fatalf("path should've been empty: %s", path)
  75. }
  76. if err = os.Remove("/tmp/testReadSymlinkToFile"); err != nil {
  77. t.Errorf("failed to remove file: %s", err)
  78. }
  79. if err = os.Remove("/tmp/fileLinkTest"); err != nil {
  80. t.Errorf("failed to remove symlink: %s", err)
  81. }
  82. }
  83. func TestWriteCounter(t *testing.T) {
  84. dummy1 := "This is a dummy string."
  85. dummy2 := "This is another dummy string."
  86. totalLength := int64(len(dummy1) + len(dummy2))
  87. reader1 := strings.NewReader(dummy1)
  88. reader2 := strings.NewReader(dummy2)
  89. var buffer bytes.Buffer
  90. wc := NewWriteCounter(&buffer)
  91. reader1.WriteTo(wc)
  92. reader2.WriteTo(wc)
  93. if wc.Count != totalLength {
  94. t.Errorf("Wrong count: %d vs. %d", wc.Count, totalLength)
  95. }
  96. if buffer.String() != dummy1+dummy2 {
  97. t.Error("Wrong message written")
  98. }
  99. }
  100. func TestImageReference(t *testing.T) {
  101. tests := []struct {
  102. repo string
  103. ref string
  104. expected string
  105. }{
  106. {"repo", "tag", "repo:tag"},
  107. {"repo", "sha256:c100b11b25d0cacd52c14e0e7bf525e1a4c0e6aec8827ae007055545909d1a64", "repo@sha256:c100b11b25d0cacd52c14e0e7bf525e1a4c0e6aec8827ae007055545909d1a64"},
  108. }
  109. for i, test := range tests {
  110. actual := ImageReference(test.repo, test.ref)
  111. if test.expected != actual {
  112. t.Errorf("%d: expected %q, got %q", i, test.expected, actual)
  113. }
  114. }
  115. }
  116. func TestDigestReference(t *testing.T) {
  117. input := "sha256:c100b11b25d0cacd52c14e0e7bf525e1a4c0e6aec8827ae007055545909d1a64"
  118. if !DigestReference(input) {
  119. t.Errorf("Expected DigestReference=true for input %q", input)
  120. }
  121. input = "latest"
  122. if DigestReference(input) {
  123. t.Errorf("Unexpected DigestReference=true for input %q", input)
  124. }
  125. }