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