/
write_closer_test.go
86 lines (70 loc) · 1.56 KB
/
write_closer_test.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
package statos
import (
"fmt"
"math/rand"
"os"
"path/filepath"
"strings"
"time"
"testing"
)
func producer(t *testing.T, ws *WriteCloserStatos) chan bool {
done := make(chan bool)
go func() {
ticker := time.Tick(1e9)
for i := 0; i < 20; i += 1 {
sReader := strings.NewReader("blooming here")
content := make([]byte, sReader.Len())
n, err := sReader.Read(content)
n, err = ws.Write(content)
// Throttle
<-ticker
if n < 1 || err != nil {
fmt.Printf("while writing bytes: encountered n: %v err: %v\n", n, err)
}
}
for i := 0; i < 10; i++ {
if err := ws.Close(); err != nil {
t.Errorf("#%d close err=%v", i, err)
}
}
done <- true
}()
return done
}
func wProgresser(ws *WriteCloserStatos, end chan bool) chan bool {
done := make(chan bool)
go func() {
commChan := ws.ProgressChan()
for n := range commChan {
fmt.Printf("%v\r", n)
}
done <- true
}()
return done
}
func TestWriteCloser(t *testing.T) {
destName := strings.Join([]string{
".",
fmt.Sprintf("destv%v.dest", rand.Int()),
}, "x")
destAbsPath, fullPErr := filepath.Abs(filepath.Join(".", destName))
if fullPErr != nil {
t.Errorf("%v", fullPErr)
return
}
destFile, err := os.Create(destAbsPath)
if err != nil {
t.Errorf("%s: %v\n", destName, err)
return
}
defer func() {
if rmErr := os.RemoveAll(destAbsPath); rmErr != nil {
fmt.Fprintf(os.Stderr, "Unlink: %s \033[91m: %v\033[00m\n", destName, rmErr)
}
}()
ws := NewWriteCloser(destFile)
producerChan := producer(t, ws)
done := wProgresser(ws, producerChan)
<-done
}