internals_test.go 2.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102
  1. package dockerfile
  2. import (
  3. "strings"
  4. "testing"
  5. "github.com/docker/docker/builder"
  6. "github.com/docker/docker/pkg/archive"
  7. "github.com/docker/engine-api/types"
  8. )
  9. func TestEmptyDockerfile(t *testing.T) {
  10. contextDir, cleanup := createTestTempDir(t, "", "builder-dockerfile-test")
  11. defer cleanup()
  12. createTestTempFile(t, contextDir, builder.DefaultDockerfileName, "", 0777)
  13. tarStream, err := archive.Tar(contextDir, archive.Uncompressed)
  14. if err != nil {
  15. t.Fatalf("Error when creating tar stream: %s", err)
  16. }
  17. defer func() {
  18. if err = tarStream.Close(); err != nil {
  19. t.Fatalf("Error when closing tar stream: %s", err)
  20. }
  21. }()
  22. context, err := builder.MakeTarSumContext(tarStream)
  23. if err != nil {
  24. t.Fatalf("Error when creating tar context: %s", err)
  25. }
  26. defer func() {
  27. if err = context.Close(); err != nil {
  28. t.Fatalf("Error when closing tar context: %s", err)
  29. }
  30. }()
  31. options := &types.ImageBuildOptions{}
  32. b := &Builder{options: options, context: context}
  33. err = b.readDockerfile()
  34. if err == nil {
  35. t.Fatalf("No error when executing test for empty Dockerfile")
  36. }
  37. if !strings.Contains(err.Error(), "The Dockerfile (Dockerfile) cannot be empty") {
  38. t.Fatalf("Wrong error message. Should be \"%s\". Got \"%s\"", "The Dockerfile (Dockerfile) cannot be empty", err.Error())
  39. }
  40. }
  41. func TestDockerfileOutsideTheBuildContext(t *testing.T) {
  42. contextDir, cleanup := createTestTempDir(t, "", "builder-dockerfile-test")
  43. defer cleanup()
  44. tarStream, err := archive.Tar(contextDir, archive.Uncompressed)
  45. if err != nil {
  46. t.Fatalf("Error when creating tar stream: %s", err)
  47. }
  48. defer func() {
  49. if err = tarStream.Close(); err != nil {
  50. t.Fatalf("Error when closing tar stream: %s", err)
  51. }
  52. }()
  53. context, err := builder.MakeTarSumContext(tarStream)
  54. if err != nil {
  55. t.Fatalf("Error when creating tar context: %s", err)
  56. }
  57. defer func() {
  58. if err = context.Close(); err != nil {
  59. t.Fatalf("Error when closing tar context: %s", err)
  60. }
  61. }()
  62. options := &types.ImageBuildOptions{
  63. Dockerfile: "../../Dockerfile",
  64. }
  65. b := &Builder{options: options, context: context}
  66. err = b.readDockerfile()
  67. if err == nil {
  68. t.Fatalf("No error when executing test for Dockerfile outside the build context")
  69. }
  70. expectedError := "Forbidden path outside the build context"
  71. if !strings.Contains(err.Error(), expectedError) {
  72. t.Fatalf("Wrong error message. Should be \"%s\". Got \"%s\"", expectedError, err.Error())
  73. }
  74. }