(t *testing.T, cli *client.Client, containerID string)
| 2868 | } |
| 2869 | |
| 2870 | func streamContainerLogs(t *testing.T, cli *client.Client, containerID string) (chan string, chan error) { |
| 2871 | ctx := context.Background() |
| 2872 | err := cli.ContainerStart(ctx, containerID, container.StartOptions{}) |
| 2873 | require.NoError(t, err) |
| 2874 | rawLogs, err := cli.ContainerLogs(ctx, containerID, container.LogsOptions{ |
| 2875 | ShowStdout: true, |
| 2876 | ShowStderr: true, |
| 2877 | Follow: true, |
| 2878 | Timestamps: false, |
| 2879 | }) |
| 2880 | require.NoError(t, err) |
| 2881 | |
| 2882 | logChan := make(chan string, 32) |
| 2883 | errChan := make(chan error, 1) |
| 2884 | |
| 2885 | logsReader, logsWriter := io.Pipe() |
| 2886 | go func() { |
| 2887 | _, err := stdcopy.StdCopy(logsWriter, logsWriter, rawLogs) |
| 2888 | assert.NoError(t, err) |
| 2889 | _ = logsReader.Close() |
| 2890 | _ = logsWriter.Close() |
| 2891 | }() |
| 2892 | go func() { |
| 2893 | defer close(errChan) |
| 2894 | scanner := bufio.NewScanner(logsReader) |
| 2895 | for scanner.Scan() { |
| 2896 | t.Logf("%q", strings.TrimSpace(scanner.Text())) |
| 2897 | if strings.HasPrefix(scanner.Text(), "error: ") { |
| 2898 | errChan <- errors.New(scanner.Text()) |
| 2899 | return |
| 2900 | } |
| 2901 | |
| 2902 | logChan <- scanner.Text() |
| 2903 | } |
| 2904 | }() |
| 2905 | |
| 2906 | return logChan, errChan |
| 2907 | } |
| 2908 | |
| 2909 | func envbuilderEnv(env string, value string) string { |
| 2910 | return fmt.Sprintf("%s=%s", options.WithEnvPrefix(env), value) |
no test coverage detected