Skip to content

Instantly share code, notes, and snippets.

@calmh
Created July 3, 2014 12:25
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save calmh/a27c89fdef33e0a6200a to your computer and use it in GitHub Desktop.
Save calmh/a27c89fdef33e0a6200a to your computer and use it in GitHub Desktop.
flate write+close testcases
package flate_test
import (
"compress/flate"
"io/ioutil"
"testing"
"time"
)
func TestWriteAfterClose(t *testing.T) {
bs := []byte{10, 20, 30, 40, 50, 60, 70, 80, 90, 100}
fw, err := flate.NewWriter(ioutil.Discard, flate.BestSpeed)
if err != nil {
t.Fatal(err)
}
_, err = fw.Write(bs)
if err != nil {
t.Fatal(err)
}
err = fw.Flush()
if err != nil {
t.Fatal(err)
}
err = fw.Close()
if err != nil {
t.Fatal(err)
}
_, err = fw.Write(bs)
if err != nil {
return
}
err = fw.Flush()
if err == nil {
// Test fails here; would expect write or flush after close to be be invalid
t.Errorf("Unexpected nil error in Flush() after Close()")
}
}
type SlowWriter struct{}
func (s SlowWriter) Write(bs []byte) (int, error) {
time.Sleep(10 * time.Millisecond)
return len(bs), nil
}
func TestConcurrentWriteClose(t *testing.T) {
bs := []byte{10, 20, 30, 40, 50, 60, 70, 80, 90, 100}
sw := SlowWriter{}
fw, err := flate.NewWriter(sw, flate.BestSpeed)
if err != nil {
t.Fatal(err)
}
go func() {
_, err = fw.Write(bs)
if err != nil {
t.Fatal(err)
}
err = fw.Flush()
if err != nil {
t.Fatal(err)
}
}()
go func() {
err = fw.Close() // test panics here
if err != nil {
t.Fatal(err)
}
_, err = fw.Write(bs)
if err != nil {
return
}
err = fw.Flush()
if err == nil {
t.Errorf("Unexpected nil error in Flush() after Close()")
}
}()
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment