gcc/libgo/go/testing/iotest/logger_test.go
Ian Lance Taylor cfcbb4227f libgo: update to Go1.16beta1 release
This does not yet include support for the //go:embed directive added
in this release.

	* Makefile.am (check-runtime): Don't create check-runtime-dir.
	(mostlyclean-local): Don't remove check-runtime-dir.
	(check-go-tool, check-vet): Copy in go.mod and modules.txt.
	(check-cgo-test, check-carchive-test): Add go.mod file.
	* Makefile.in: Regenerate.

Reviewed-on: https://go-review.googlesource.com/c/gofrontend/+/280172
2020-12-30 15:13:24 -08:00

153 lines
3.4 KiB
Go

// Copyright 2019 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.
package iotest
import (
"bytes"
"errors"
"fmt"
"log"
"testing"
)
type errWriter struct {
err error
}
func (w errWriter) Write([]byte) (int, error) {
return 0, w.err
}
func TestWriteLogger(t *testing.T) {
olw := log.Writer()
olf := log.Flags()
olp := log.Prefix()
// Revert the original log settings before we exit.
defer func() {
log.SetFlags(olf)
log.SetPrefix(olp)
log.SetOutput(olw)
}()
lOut := new(bytes.Buffer)
log.SetPrefix("lw: ")
log.SetOutput(lOut)
log.SetFlags(0)
lw := new(bytes.Buffer)
wl := NewWriteLogger("write:", lw)
if _, err := wl.Write([]byte("Hello, World!")); err != nil {
t.Fatalf("Unexpectedly failed to write: %v", err)
}
if g, w := lw.String(), "Hello, World!"; g != w {
t.Errorf("WriteLogger mismatch\n\tgot: %q\n\twant: %q", g, w)
}
wantLogWithHex := fmt.Sprintf("lw: write: %x\n", "Hello, World!")
if g, w := lOut.String(), wantLogWithHex; g != w {
t.Errorf("WriteLogger mismatch\n\tgot: %q\n\twant: %q", g, w)
}
}
func TestWriteLogger_errorOnWrite(t *testing.T) {
olw := log.Writer()
olf := log.Flags()
olp := log.Prefix()
// Revert the original log settings before we exit.
defer func() {
log.SetFlags(olf)
log.SetPrefix(olp)
log.SetOutput(olw)
}()
lOut := new(bytes.Buffer)
log.SetPrefix("lw: ")
log.SetOutput(lOut)
log.SetFlags(0)
lw := errWriter{err: errors.New("Write Error!")}
wl := NewWriteLogger("write:", lw)
if _, err := wl.Write([]byte("Hello, World!")); err == nil {
t.Fatalf("Unexpectedly succeeded to write: %v", err)
}
wantLogWithHex := fmt.Sprintf("lw: write: %x: %v\n", "", "Write Error!")
if g, w := lOut.String(), wantLogWithHex; g != w {
t.Errorf("WriteLogger mismatch\n\tgot: %q\n\twant: %q", g, w)
}
}
func TestReadLogger(t *testing.T) {
olw := log.Writer()
olf := log.Flags()
olp := log.Prefix()
// Revert the original log settings before we exit.
defer func() {
log.SetFlags(olf)
log.SetPrefix(olp)
log.SetOutput(olw)
}()
lOut := new(bytes.Buffer)
log.SetPrefix("lr: ")
log.SetOutput(lOut)
log.SetFlags(0)
data := []byte("Hello, World!")
p := make([]byte, len(data))
lr := bytes.NewReader(data)
rl := NewReadLogger("read:", lr)
n, err := rl.Read(p)
if err != nil {
t.Fatalf("Unexpectedly failed to read: %v", err)
}
if g, w := p[:n], data; !bytes.Equal(g, w) {
t.Errorf("ReadLogger mismatch\n\tgot: %q\n\twant: %q", g, w)
}
wantLogWithHex := fmt.Sprintf("lr: read: %x\n", "Hello, World!")
if g, w := lOut.String(), wantLogWithHex; g != w {
t.Errorf("ReadLogger mismatch\n\tgot: %q\n\twant: %q", g, w)
}
}
func TestReadLogger_errorOnRead(t *testing.T) {
olw := log.Writer()
olf := log.Flags()
olp := log.Prefix()
// Revert the original log settings before we exit.
defer func() {
log.SetFlags(olf)
log.SetPrefix(olp)
log.SetOutput(olw)
}()
lOut := new(bytes.Buffer)
log.SetPrefix("lr: ")
log.SetOutput(lOut)
log.SetFlags(0)
data := []byte("Hello, World!")
p := make([]byte, len(data))
lr := ErrReader(errors.New("io failure"))
rl := NewReadLogger("read", lr)
n, err := rl.Read(p)
if err == nil {
t.Fatalf("Unexpectedly succeeded to read: %v", err)
}
wantLogWithHex := fmt.Sprintf("lr: read %x: io failure\n", p[:n])
if g, w := lOut.String(), wantLogWithHex; g != w {
t.Errorf("ReadLogger mismatch\n\tgot: %q\n\twant: %q", g, w)
}
}