Created
July 3, 2014 12:25
-
-
Save calmh/a27c89fdef33e0a6200a to your computer and use it in GitHub Desktop.
flate write+close testcases
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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