// TestRuby connects to a cluster with ruby. func TestRuby(t *testing.T) { t.Skip("skip until docker issues fixed") l := MustStartLocal(t) defer l.AssertAndStop(t) addr := l.Nodes[0].PGAddr() client := cluster.NewDockerClient() containerConfig := dockerclient.ContainerConfig{ Image: "cockroachdb/postgres-test:ruby", Env: []string{ fmt.Sprintf("PGHOST=%s", addr.IP), fmt.Sprintf("PGPORT=%d", addr.Port), "PGSSLCERT=/certs/node.client.crt", "PGSSLKEY=/certs/node.client.key", }, Cmd: []string{"ruby", "-e", ruby}, } if err := client.PullImage(containerConfig.Image, nil); err != nil { t.Fatal(err) } id, err := client.CreateContainer(&containerConfig, "", nil) if err != nil { t.Fatal(err) } defer client.RemoveContainer(id, false, false) hostConfig := dockerclient.HostConfig{ Binds: []string{fmt.Sprintf("%s:%s", l.CertsDir, "/certs")}, NetworkMode: "host", } if err := client.StartContainer(id, &hostConfig); err != nil { t.Fatal(err) } wr := <-client.Wait(id) if wr.Error != nil { t.Fatal(wr.Error) } if wr.ExitCode != 0 { rc, err := client.ContainerLogs(id, &dockerclient.LogOptions{ Stdout: true, Stderr: true, }) if err != nil { t.Fatal(err) } b, err := ioutil.ReadAll(rc) rc.Close() if err != nil { t.Log(err) } else { t.Log(string(b)) } t.Fatalf("exit code: %d", wr.ExitCode) } }
func testDocker(t *testing.T, tag string, cmd []string) (result dockerclient.WaitResult, logs string) { SkipUnlessLocal(t) l := StartCluster(t).(*cluster.LocalCluster) defer l.AssertAndStop(t) addr := l.Nodes[0].PGAddr() client := cluster.NewDockerClient() containerConfig := dockerclient.ContainerConfig{ Image: "cockroachdb/postgres-test:" + tag, Env: []string{ fmt.Sprintf("PGHOST=%s", addr.IP), fmt.Sprintf("PGPORT=%d", addr.Port), "PGSSLCERT=/certs/node.client.crt", "PGSSLKEY=/certs/node.client.key", }, Cmd: cmd, } if err := client.PullImage(containerConfig.Image, nil); err != nil { t.Fatal(err) } id, err := client.CreateContainer(&containerConfig, "", nil) if err != nil { t.Fatal(err) } defer client.RemoveContainer(id, false, false) hostConfig := dockerclient.HostConfig{ Binds: []string{fmt.Sprintf("%s:%s", l.CertsDir, "/certs")}, NetworkMode: "host", } if err := client.StartContainer(id, &hostConfig); err != nil { t.Fatal(err) } wr := <-client.Wait(id) if wr.ExitCode != 0 { rc, err := client.ContainerLogs(id, &dockerclient.LogOptions{ Stdout: true, Stderr: true, }) if err != nil { t.Fatal(err) } b, err := ioutil.ReadAll(rc) rc.Close() if err != nil { t.Error(err) } logs = string(b) } return wr, logs }