layers_test.go 2.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596
  1. package fs
  2. import (
  3. "archive/tar"
  4. "bytes"
  5. "io"
  6. "io/ioutil"
  7. "os"
  8. "testing"
  9. )
  10. func fakeTar() (io.Reader, error) {
  11. content := []byte("Hello world!\n")
  12. buf := new(bytes.Buffer)
  13. tw := tar.NewWriter(buf)
  14. for _, name := range []string{"/etc/postgres/postgres.conf", "/etc/passwd", "/var/log/postgres/postgres.conf"} {
  15. hdr := new(tar.Header)
  16. hdr.Size = int64(len(content))
  17. hdr.Name = name
  18. if err := tw.WriteHeader(hdr); err != nil {
  19. return nil, err
  20. }
  21. tw.Write([]byte(content))
  22. }
  23. tw.Close()
  24. return buf, nil
  25. }
  26. func TestLayersInit(t *testing.T) {
  27. store := tempStore(t)
  28. defer os.RemoveAll(store.Root)
  29. // Root should exist
  30. if _, err := os.Stat(store.Root); err != nil {
  31. t.Fatal(err)
  32. }
  33. // List() should be empty
  34. if l := store.List(); len(l) != 0 {
  35. t.Fatalf("List() should return %d, not %d", 0, len(l))
  36. }
  37. }
  38. func TestAddLayer(t *testing.T) {
  39. store := tempStore(t)
  40. defer os.RemoveAll(store.Root)
  41. layer, err := store.AddLayer("foo", testArchive(t))
  42. if err != nil {
  43. t.Fatal(err)
  44. }
  45. // Layer path should exist
  46. if _, err := os.Stat(layer); err != nil {
  47. t.Fatal(err)
  48. }
  49. // List() should return 1 layer
  50. if l := store.List(); len(l) != 1 {
  51. t.Fatalf("List() should return %d elements, not %d", 1, len(l))
  52. }
  53. // Get("foo") should return the correct layer
  54. if foo := store.Get("foo"); foo != layer {
  55. t.Fatalf("get(\"foo\") should return '%d', not '%d'", layer, foo)
  56. }
  57. }
  58. func TestAddLayerDuplicate(t *testing.T) {
  59. store := tempStore(t)
  60. defer os.RemoveAll(store.Root)
  61. if _, err := store.AddLayer("foobar123", testArchive(t)); err != nil {
  62. t.Fatal(err)
  63. }
  64. if _, err := store.AddLayer("foobar123", testArchive(t)); err == nil {
  65. t.Fatalf("Creating duplicate layer should fail")
  66. }
  67. }
  68. /*
  69. * HELPER FUNCTIONS
  70. */
  71. func tempStore(t *testing.T) *LayerStore {
  72. tmp, err := ioutil.TempDir("", "docker-fs-layerstore-")
  73. if err != nil {
  74. t.Fatal(err)
  75. }
  76. store, err := NewLayerStore(tmp)
  77. if err != nil {
  78. t.Fatal(err)
  79. }
  80. return store
  81. }
  82. func testArchive(t *testing.T) Archive {
  83. archive, err := fakeTar()
  84. if err != nil {
  85. t.Fatal(err)
  86. }
  87. return archive
  88. }