summaryrefslogtreecommitdiff
path: root/xgb_test.go
diff options
context:
space:
mode:
authorjEzEk <[email protected]>2018-10-07 18:02:26 +0200
committerjEzEk <[email protected]>2018-10-25 18:33:32 +0200
commit753d971232b5844e73ef70ee0e9e0e9d99bcb14b (patch)
treea3be82763a2194d18f1ef96e29cc45ab8d593abb /xgb_test.go
parent391f5d0d06667f92e6c14ebe9c026ae8b117da3b (diff)
tests reactor, negative leaks error fix
Diffstat (limited to 'xgb_test.go')
-rw-r--r--xgb_test.go37
1 files changed, 17 insertions, 20 deletions
diff --git a/xgb_test.go b/xgb_test.go
index fc8504a..d375261 100644
--- a/xgb_test.go
+++ b/xgb_test.go
@@ -26,9 +26,9 @@ type serverBlocking struct {
done chan struct{}
}
-func newServerBlocking() net.Conn {
+func newServerBlocking(name string) *serverBlocking {
s := &serverBlocking{
- addr{"blocking server"},
+ addr{name},
make(chan interface{}),
make(chan struct{}),
}
@@ -48,21 +48,18 @@ func newServerBlocking() net.Conn {
<-runned
return s
}
-
func (_ *serverBlocking) errClosed() error {
return errors.New("server closed")
}
func (_ *serverBlocking) errEOF() error {
return io.EOF
}
-
func (s *serverBlocking) Write(b []byte) (int, error) {
select {
case <-s.done:
}
return 0, s.errClosed()
}
-
func (s *serverBlocking) Read(b []byte) (int, error) {
select {
case <-s.done:
@@ -88,12 +85,9 @@ type serverWriteError struct {
*serverBlocking
}
-func newServerWriteError() net.Conn {
- s := &serverWriteError{newServerBlocking().(*serverBlocking)}
- s.addr.s = "server write error"
- return s
+func newServerWriteError(name string) *serverWriteError {
+ return &serverWriteError{newServerBlocking(name)}
}
-
func (s *serverWriteError) Write(b []byte) (int, error) {
select {
case <-s.done:
@@ -161,7 +155,7 @@ func (l leaks) collectGoroutines() map[int]goroutine {
name := strings.TrimSpace(string(lines[1]))
//filter out our stack routine
- if strings.Contains(name, "xgb.leaks.stacks") {
+ if strings.Contains(name, "xgb.leaks.stack") {
continue
}
@@ -173,7 +167,7 @@ func (l leaks) collectGoroutines() map[int]goroutine {
func (l leaks) checkTesting(t *testing.T) {
{
goroutines := l.collectGoroutines()
- if len(l.goroutines) == len(goroutines) {
+ if len(l.goroutines) >= len(goroutines) {
return
}
}
@@ -181,7 +175,7 @@ func (l leaks) checkTesting(t *testing.T) {
time.Sleep(leakTimeout)
//t.Logf("possible goroutine leakage, waiting %v", leakTimeout)
goroutines := l.collectGoroutines()
- if len(l.goroutines) == len(goroutines) {
+ if len(l.goroutines) >= len(goroutines) {
return
}
t.Errorf("%d goroutine leaks: start(%d) != end(%d)", len(goroutines)-len(l.goroutines), len(l.goroutines), len(goroutines))
@@ -195,15 +189,20 @@ func (l leaks) checkTesting(t *testing.T) {
func TestConnOpenClose(t *testing.T) {
- testCases := []func() net.Conn{
- // newServerBlocking, // i'm not ready to handle this yet
- newServerWriteError,
+ testCases := []struct {
+ name string
+ serverConstuctor func(string) net.Conn
+ }{
+ //{"blocking server", func(n string) net.Conn { return newServerBlocking(n) }}, // i'm not ready to handle this yet
+ {"write error server", func(n string) net.Conn { return newServerWriteError(n) }},
}
for _, tc := range testCases {
- serverConn := tc()
+ t.Run(tc.name, func(t *testing.T) {
+ serverConn := tc.serverConstuctor(tc.name)
+ defer serverConn.Close()
- t.Run(serverConn.LocalAddr().String(), func(t *testing.T) {
defer leaksMonitor().checkTesting(t)
+
c, err := postNewConn(&Conn{conn: serverConn})
if err != nil {
t.Fatalf("connect error: %v", err)
@@ -224,8 +223,6 @@ func TestConnOpenClose(t *testing.T) {
t.Errorf("*Conn.Close() not responded for %v", closeTimeout)
}
})
-
- serverConn.Close()
}
}