links_test.go 2.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798
  1. package daemon
  2. import (
  3. "encoding/json"
  4. "io/ioutil"
  5. "os"
  6. "path"
  7. "path/filepath"
  8. "testing"
  9. "github.com/docker/docker/container"
  10. "github.com/docker/docker/pkg/graphdb"
  11. "github.com/docker/docker/pkg/stringid"
  12. containertypes "github.com/docker/engine-api/types/container"
  13. )
  14. func TestMigrateLegacySqliteLinks(t *testing.T) {
  15. tmpDir, err := ioutil.TempDir("", "legacy-qlite-links-test")
  16. if err != nil {
  17. t.Fatal(err)
  18. }
  19. defer os.RemoveAll(tmpDir)
  20. name1 := "test1"
  21. c1 := &container.Container{
  22. CommonContainer: container.CommonContainer{
  23. ID: stringid.GenerateNonCryptoID(),
  24. Name: name1,
  25. HostConfig: &containertypes.HostConfig{},
  26. },
  27. }
  28. c1.Root = tmpDir
  29. name2 := "test2"
  30. c2 := &container.Container{
  31. CommonContainer: container.CommonContainer{
  32. ID: stringid.GenerateNonCryptoID(),
  33. Name: name2,
  34. },
  35. }
  36. store := container.NewMemoryStore()
  37. store.Add(c1.ID, c1)
  38. store.Add(c2.ID, c2)
  39. d := &Daemon{root: tmpDir, containers: store}
  40. db, err := graphdb.NewSqliteConn(filepath.Join(d.root, "linkgraph.db"))
  41. if err != nil {
  42. t.Fatal(err)
  43. }
  44. if _, err := db.Set("/"+name1, c1.ID); err != nil {
  45. t.Fatal(err)
  46. }
  47. if _, err := db.Set("/"+name2, c2.ID); err != nil {
  48. t.Fatal(err)
  49. }
  50. alias := "hello"
  51. if _, err := db.Set(path.Join(c1.Name, alias), c2.ID); err != nil {
  52. t.Fatal(err)
  53. }
  54. if err := d.migrateLegacySqliteLinks(db, c1); err != nil {
  55. t.Fatal(err)
  56. }
  57. if len(c1.HostConfig.Links) != 1 {
  58. t.Fatal("expected links to be populated but is empty")
  59. }
  60. expected := name2 + ":" + alias
  61. actual := c1.HostConfig.Links[0]
  62. if actual != expected {
  63. t.Fatalf("got wrong link value, expected: %q, got: %q", expected, actual)
  64. }
  65. // ensure this is persisted
  66. b, err := ioutil.ReadFile(filepath.Join(c1.Root, "hostconfig.json"))
  67. if err != nil {
  68. t.Fatal(err)
  69. }
  70. type hc struct {
  71. Links []string
  72. }
  73. var cfg hc
  74. if err := json.Unmarshal(b, &cfg); err != nil {
  75. t.Fatal(err)
  76. }
  77. if len(cfg.Links) != 1 {
  78. t.Fatalf("expected one entry in links, got: %d", len(cfg.Links))
  79. }
  80. if cfg.Links[0] != expected { // same expected as above
  81. t.Fatalf("got wrong link value, expected: %q, got: %q", expected, cfg.Links[0])
  82. }
  83. }