MCPcopy Create free account
hub / github.com/coder/envbuilder / streamContainerLogs

Function streamContainerLogs

integration/integration_test.go:2870–2907  ·  view source on GitHub ↗
(t *testing.T, cli *client.Client, containerID string)

Source from the content-addressed store, hash-verified

2868}
2869
2870func 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
2909func envbuilderEnv(env string, value string) string {
2910 return fmt.Sprintf("%s=%s", options.WithEnvPrefix(env), value)

Callers 4

TestBuildStopStartCachedFunction · 0.85
TestPushImageFunction · 0.85
runEnvbuilderFunction · 0.85

Calls 1

CloseMethod · 0.80

Tested by

no test coverage detected