image_test.go 2.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990
  1. package image
  2. import (
  3. "encoding/json"
  4. "sort"
  5. "strings"
  6. "testing"
  7. "github.com/docker/docker/api/types/container"
  8. "github.com/docker/docker/layer"
  9. "github.com/stretchr/testify/assert"
  10. "github.com/stretchr/testify/require"
  11. )
  12. const sampleImageJSON = `{
  13. "architecture": "amd64",
  14. "os": "linux",
  15. "config": {},
  16. "rootfs": {
  17. "type": "layers",
  18. "diff_ids": []
  19. }
  20. }`
  21. func TestNewFromJSON(t *testing.T) {
  22. img, err := NewFromJSON([]byte(sampleImageJSON))
  23. require.NoError(t, err)
  24. assert.Equal(t, sampleImageJSON, string(img.RawJSON()))
  25. }
  26. func TestNewFromJSONWithInvalidJSON(t *testing.T) {
  27. _, err := NewFromJSON([]byte("{}"))
  28. assert.EqualError(t, err, "invalid image JSON, no RootFS key")
  29. }
  30. func TestMarshalKeyOrder(t *testing.T) {
  31. b, err := json.Marshal(&Image{
  32. V1Image: V1Image{
  33. Comment: "a",
  34. Author: "b",
  35. Architecture: "c",
  36. },
  37. })
  38. assert.NoError(t, err)
  39. expectedOrder := []string{"architecture", "author", "comment"}
  40. var indexes []int
  41. for _, k := range expectedOrder {
  42. indexes = append(indexes, strings.Index(string(b), k))
  43. }
  44. if !sort.IntsAreSorted(indexes) {
  45. t.Fatal("invalid key order in JSON: ", string(b))
  46. }
  47. }
  48. func TestNewChildImageFromImageWithRootFS(t *testing.T) {
  49. rootFS := NewRootFS()
  50. rootFS.Append(layer.DiffID("ba5e"))
  51. parent := &Image{
  52. RootFS: rootFS,
  53. History: []History{
  54. NewHistory("a", "c", "r", false),
  55. },
  56. }
  57. childConfig := ChildConfig{
  58. DiffID: layer.DiffID("abcdef"),
  59. Author: "author",
  60. Comment: "comment",
  61. ContainerConfig: &container.Config{
  62. Cmd: []string{"echo", "foo"},
  63. },
  64. Config: &container.Config{},
  65. }
  66. newImage := NewChildImage(parent, childConfig, "platform")
  67. expectedDiffIDs := []layer.DiffID{layer.DiffID("ba5e"), layer.DiffID("abcdef")}
  68. assert.Equal(t, expectedDiffIDs, newImage.RootFS.DiffIDs)
  69. assert.Equal(t, childConfig.Author, newImage.Author)
  70. assert.Equal(t, childConfig.Config, newImage.Config)
  71. assert.Equal(t, *childConfig.ContainerConfig, newImage.ContainerConfig)
  72. assert.Equal(t, "platform", newImage.OS)
  73. assert.Equal(t, childConfig.Config, newImage.Config)
  74. assert.Len(t, newImage.History, 2)
  75. assert.Equal(t, childConfig.Comment, newImage.History[1].Comment)
  76. // RootFS should be copied not mutated
  77. assert.NotEqual(t, parent.RootFS.DiffIDs, newImage.RootFS.DiffIDs)
  78. }