mirror of
https://github.com/tinygo-org/tinygo.git
synced 2026-08-04 19:17:47 +00:00
c78df85015
Evidently when you read from pipes in Go, you have to adjust your slice length to reflect the number of bytes read. Verified upstream behaves the same way.
57 lines
1.3 KiB
Go
57 lines
1.3 KiB
Go
//go:build windows || darwin || (linux && !baremetal && !wasi)
|
|
// +build windows darwin linux,!baremetal,!wasi
|
|
|
|
// Copyright 2021 The Go Authors. All rights reserved.
|
|
// Use of this source code is governed by a BSD-style
|
|
// license that can be found in the LICENSE file.
|
|
|
|
// Test pipes on Unix and Windows systems.
|
|
|
|
package os_test
|
|
|
|
import (
|
|
"bytes"
|
|
"os"
|
|
"testing"
|
|
)
|
|
|
|
// TestSmokePipe is a simple smoke test for Pipe().
|
|
func TestSmokePipe(t *testing.T) {
|
|
// Procedure:
|
|
// 1. Get the bytes
|
|
// 2. Light the bytes on fire
|
|
// 3. Smoke the bytes
|
|
|
|
r, w, err := os.Pipe()
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
return // TODO: remove once Fatal is fatal
|
|
}
|
|
defer r.Close()
|
|
defer w.Close()
|
|
|
|
msg := []byte("Sed nvlla nisi ardva virtvs")
|
|
n, err := w.Write(msg)
|
|
if err != nil {
|
|
t.Errorf("Writing to fresh pipe failed, error %v", err)
|
|
}
|
|
want := len(msg)
|
|
if n != want {
|
|
t.Errorf("Writing to fresh pipe wrote %d bytes, expected %d", n, want)
|
|
}
|
|
|
|
buf := make([]byte, 2*len(msg))
|
|
n, err = r.Read(buf)
|
|
if err != nil {
|
|
t.Errorf("Reading from pipe failed, error %v", err)
|
|
}
|
|
if n != want {
|
|
t.Errorf("Reading from pipe got %d bytes, expected %d", n, want)
|
|
}
|
|
// Read() does not set len(buf), so do it here.
|
|
buf = buf[:n]
|
|
if !bytes.Equal(buf, msg) {
|
|
t.Errorf("Reading from fresh pipe got wrong bytes")
|
|
}
|
|
}
|