From 4bf442a51042f8c4d50ca723d44838ca33b3fdff Mon Sep 17 00:00:00 2001 From: Jana Radhakrishnan Date: Thu, 30 Apr 2015 06:32:52 +0000 Subject: [PATCH] Updated Godeps Signed-off-by: Jana Radhakrishnan --- libnetwork/Godeps/Godeps.json | 29 ++-- .../docker/docker/pkg/etchosts/etchosts.go | 67 +++++++++ .../docker/pkg/etchosts/etchosts_test.go | 134 ++++++++++++++++++ 3 files changed, 218 insertions(+), 12 deletions(-) create mode 100644 libnetwork/Godeps/_workspace/src/github.com/docker/docker/pkg/etchosts/etchosts.go create mode 100644 libnetwork/Godeps/_workspace/src/github.com/docker/docker/pkg/etchosts/etchosts_test.go diff --git a/libnetwork/Godeps/Godeps.json b/libnetwork/Godeps/Godeps.json index c9f40b02df..44d9482cf5 100644 --- a/libnetwork/Godeps/Godeps.json +++ b/libnetwork/Godeps/Godeps.json @@ -1,5 +1,5 @@ { - "ImportPath": "github.com/docker/libnetwork", + "ImportPath": "github.com/docker/docker/vendor/src/github.com/docker/libnetwork", "GoVersion": "go1.4.2", "Packages": [ "./..." @@ -10,11 +10,26 @@ "Comment": "v0.6.4-12-g467d9d5", "Rev": "467d9d55c2d2c17248441a8fc661561161f40d5e" }, + { + "ImportPath": "github.com/docker/docker/pkg/etchosts", + "Comment": "v1.4.1-2492-ge690ad9", + "Rev": "e690ad92925a045344bde8d2d59d7a7f602dded6" + }, + { + "ImportPath": "github.com/docker/docker/pkg/homedir", + "Comment": "v1.4.1-2492-ge690ad9", + "Rev": "e690ad92925a045344bde8d2d59d7a7f602dded6" + }, { "ImportPath": "github.com/docker/docker/pkg/iptables", "Comment": "v1.4.1-2492-ge690ad9", "Rev": "e690ad92925a045344bde8d2d59d7a7f602dded6" }, + { + "ImportPath": "github.com/docker/docker/pkg/mflag", + "Comment": "v1.4.1-2492-ge690ad9", + "Rev": "e690ad92925a045344bde8d2d59d7a7f602dded6" + }, { "ImportPath": "github.com/docker/docker/pkg/parsers/kernel", "Comment": "v1.4.1-2492-ge690ad9", @@ -31,12 +46,7 @@ "Rev": "e690ad92925a045344bde8d2d59d7a7f602dded6" }, { - "ImportPath": "github.com/docker/docker/pkg/mflag", - "Comment": "v1.4.1-2492-ge690ad9", - "Rev": "e690ad92925a045344bde8d2d59d7a7f602dded6" - }, - { - "ImportPath": "github.com/docker/docker/pkg/homedir", + "ImportPath": "github.com/docker/docker/pkg/stringid", "Comment": "v1.4.1-2492-ge690ad9", "Rev": "e690ad92925a045344bde8d2d59d7a7f602dded6" }, @@ -45,11 +55,6 @@ "Comment": "v1.4.0", "Rev": "53eca435e63db58b06cf796d3a9326db5fd42253" }, - { - "ImportPath": "github.com/docker/docker/pkg/stringid", - "Comment": "v1.4.1-2492-ge690ad9", - "Rev": "e690ad92925a045344bde8d2d59d7a7f602dded6" - }, { "ImportPath": "github.com/vishvananda/netlink", "Rev": "8eb64238879fed52fd51c5b30ad20b928fb4c36c" diff --git a/libnetwork/Godeps/_workspace/src/github.com/docker/docker/pkg/etchosts/etchosts.go b/libnetwork/Godeps/_workspace/src/github.com/docker/docker/pkg/etchosts/etchosts.go new file mode 100644 index 0000000000..d7edef27f6 --- /dev/null +++ b/libnetwork/Godeps/_workspace/src/github.com/docker/docker/pkg/etchosts/etchosts.go @@ -0,0 +1,67 @@ +package etchosts + +import ( + "bytes" + "fmt" + "io" + "io/ioutil" + "regexp" +) + +type Record struct { + Hosts string + IP string +} + +func (r Record) WriteTo(w io.Writer) (int64, error) { + n, err := fmt.Fprintf(w, "%s\t%s\n", r.IP, r.Hosts) + return int64(n), err +} + +var defaultContent = []Record{ + {Hosts: "localhost", IP: "127.0.0.1"}, + {Hosts: "localhost ip6-localhost ip6-loopback", IP: "::1"}, + {Hosts: "ip6-localnet", IP: "fe00::0"}, + {Hosts: "ip6-mcastprefix", IP: "ff00::0"}, + {Hosts: "ip6-allnodes", IP: "ff02::1"}, + {Hosts: "ip6-allrouters", IP: "ff02::2"}, +} + +func Build(path, IP, hostname, domainname string, extraContent []Record) error { + content := bytes.NewBuffer(nil) + if IP != "" { + var mainRec Record + mainRec.IP = IP + if domainname != "" { + mainRec.Hosts = fmt.Sprintf("%s.%s %s", hostname, domainname, hostname) + } else { + mainRec.Hosts = hostname + } + if _, err := mainRec.WriteTo(content); err != nil { + return err + } + } + + for _, r := range defaultContent { + if _, err := r.WriteTo(content); err != nil { + return err + } + } + + for _, r := range extraContent { + if _, err := r.WriteTo(content); err != nil { + return err + } + } + + return ioutil.WriteFile(path, content.Bytes(), 0644) +} + +func Update(path, IP, hostname string) error { + old, err := ioutil.ReadFile(path) + if err != nil { + return err + } + var re = regexp.MustCompile(fmt.Sprintf("(\\S*)(\\t%s)", regexp.QuoteMeta(hostname))) + return ioutil.WriteFile(path, re.ReplaceAll(old, []byte(IP+"$2")), 0644) +} diff --git a/libnetwork/Godeps/_workspace/src/github.com/docker/docker/pkg/etchosts/etchosts_test.go b/libnetwork/Godeps/_workspace/src/github.com/docker/docker/pkg/etchosts/etchosts_test.go new file mode 100644 index 0000000000..c033904c31 --- /dev/null +++ b/libnetwork/Godeps/_workspace/src/github.com/docker/docker/pkg/etchosts/etchosts_test.go @@ -0,0 +1,134 @@ +package etchosts + +import ( + "bytes" + "io/ioutil" + "os" + "testing" +) + +func TestBuildDefault(t *testing.T) { + file, err := ioutil.TempFile("", "") + if err != nil { + t.Fatal(err) + } + defer os.Remove(file.Name()) + + // check that /etc/hosts has consistent ordering + for i := 0; i <= 5; i++ { + err = Build(file.Name(), "", "", "", nil) + if err != nil { + t.Fatal(err) + } + + content, err := ioutil.ReadFile(file.Name()) + if err != nil { + t.Fatal(err) + } + expected := "127.0.0.1\tlocalhost\n::1\tlocalhost ip6-localhost ip6-loopback\nfe00::0\tip6-localnet\nff00::0\tip6-mcastprefix\nff02::1\tip6-allnodes\nff02::2\tip6-allrouters\n" + + if expected != string(content) { + t.Fatalf("Expected to find '%s' got '%s'", expected, content) + } + } +} + +func TestBuildHostnameDomainname(t *testing.T) { + file, err := ioutil.TempFile("", "") + if err != nil { + t.Fatal(err) + } + defer os.Remove(file.Name()) + + err = Build(file.Name(), "10.11.12.13", "testhostname", "testdomainname", nil) + if err != nil { + t.Fatal(err) + } + + content, err := ioutil.ReadFile(file.Name()) + if err != nil { + t.Fatal(err) + } + + if expected := "10.11.12.13\ttesthostname.testdomainname testhostname\n"; !bytes.Contains(content, []byte(expected)) { + t.Fatalf("Expected to find '%s' got '%s'", expected, content) + } +} + +func TestBuildHostname(t *testing.T) { + file, err := ioutil.TempFile("", "") + if err != nil { + t.Fatal(err) + } + defer os.Remove(file.Name()) + + err = Build(file.Name(), "10.11.12.13", "testhostname", "", nil) + if err != nil { + t.Fatal(err) + } + + content, err := ioutil.ReadFile(file.Name()) + if err != nil { + t.Fatal(err) + } + + if expected := "10.11.12.13\ttesthostname\n"; !bytes.Contains(content, []byte(expected)) { + t.Fatalf("Expected to find '%s' got '%s'", expected, content) + } +} + +func TestBuildNoIP(t *testing.T) { + file, err := ioutil.TempFile("", "") + if err != nil { + t.Fatal(err) + } + defer os.Remove(file.Name()) + + err = Build(file.Name(), "", "testhostname", "", nil) + if err != nil { + t.Fatal(err) + } + + content, err := ioutil.ReadFile(file.Name()) + if err != nil { + t.Fatal(err) + } + + if expected := ""; !bytes.Contains(content, []byte(expected)) { + t.Fatalf("Expected to find '%s' got '%s'", expected, content) + } +} + +func TestUpdate(t *testing.T) { + file, err := ioutil.TempFile("", "") + if err != nil { + t.Fatal(err) + } + defer os.Remove(file.Name()) + + if err := Build(file.Name(), "10.11.12.13", "testhostname", "testdomainname", nil); err != nil { + t.Fatal(err) + } + + content, err := ioutil.ReadFile(file.Name()) + if err != nil { + t.Fatal(err) + } + + if expected := "10.11.12.13\ttesthostname.testdomainname testhostname\n"; !bytes.Contains(content, []byte(expected)) { + t.Fatalf("Expected to find '%s' got '%s'", expected, content) + } + + if err := Update(file.Name(), "1.1.1.1", "testhostname"); err != nil { + t.Fatal(err) + } + + content, err = ioutil.ReadFile(file.Name()) + if err != nil { + t.Fatal(err) + } + + if expected := "1.1.1.1\ttesthostname.testdomainname testhostname\n"; !bytes.Contains(content, []byte(expected)) { + t.Fatalf("Expected to find '%s' got '%s'", expected, content) + } +}