func TestWriteProxyScript(t *testing.T) { // temporary directory to store file dir, _ := ioutil.TempDir("", "drone-test-") defer os.RemoveAll(dir) // fake service container that we'll assume was part of the yaml // and should be attached to the build container. c := docker.Container{ NetworkSettings: &docker.NetworkSettings{ IPAddress: "172.1.4.5", Ports: map[docker.Port][]docker.PortBinding{ docker.NewPort("tcp", "3306"): nil, }, }, } // this should generate the following proxy file p := proxy.Proxy{} p.Set("3306", "172.1.4.5") want := p.String() b := Builder{} b.services = append(b.services, &c) b.writeProxyScript(dir) // persist a dummy proxy script to disk got, err := ioutil.ReadFile(filepath.Join(dir, "proxy.sh")) if err != nil { t.Errorf("Expected proxy.sh file saved to disk") } if string(got) != want { t.Errorf("Expected proxy.sh value saved as %s, got %s", want, got) } }
// writeProxyScript is a helper function that // will generate the proxy.sh file in the builder's // temp directory to be added to the Image. func (b *Builder) writeProxyScript(dir string) error { var proxyfile = proxy.Proxy{} // loop through services so that we can // map ip address to localhost for _, container := range b.services { // create an entry for each port for port := range container.NetworkSettings.Ports { proxyfile.Set(port.Port(), container.NetworkSettings.IPAddress) } } // write the proxyfile to the temp directory proxyfilePath := filepath.Join(dir, "proxy.sh") return ioutil.WriteFile(proxyfilePath, proxyfile.Bytes(), 0755) }