forked from mafredri/cdp
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathmanager_test.go
84 lines (68 loc) · 1.98 KB
/
manager_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
package session
import (
"testing"
"github.com/mafredri/cdp/internal/errors"
"github.com/mafredri/cdp/protocol/target"
"github.com/mafredri/cdp/rpcc"
)
type testEventClient struct {
w chan struct{}
done chan struct{}
}
func (c *testEventClient) next() { c.done = make(chan struct{}); close(c.w) }
func (c *testEventClient) markReady() { close(c.done) }
func (c *testEventClient) Ready() <-chan struct{} {
<-c.w
c.w = make(chan struct{})
return c.done
}
func (c *testEventClient) Close() error { return nil }
func (c *testEventClient) RecvMsg(m interface{}) error { panic("not implemented") }
func newTestEventClient() *testEventClient {
return &testEventClient{w: make(chan struct{})}
}
var _ rpcc.Stream = (*testEventClient)(nil)
type testDetacher struct {
*testEventClient
err error
}
func (ev *testDetacher) Recv() (*target.DetachedFromTargetReply, error) {
return nil, ev.err
}
type testMessenger struct {
*testEventClient
err error
}
func (ev *testMessenger) Recv() (*target.ReceivedMessageFromTargetReply, error) {
return nil, ev.err
}
func TestManager_ErrorsAreSentOnErrChan(t *testing.T) {
detached := &testDetacher{testEventClient: newTestEventClient()}
message := &testMessenger{testEventClient: newTestEventClient()}
ev := &sessionEvents{
detached: detached,
message: message,
}
m := Manager{cancel: func() {}, errC: make(chan error, 1)}
go m.watch(ev, nil, make(chan error, 1), m.errC)
message.next()
detached.next()
detached.err = errors.New("detach nope")
detached.markReady()
err := <-m.Err()
if err := errors.Cause(err); err != detached.err {
t.Errorf("got error: %v; want: %v", err, detached.err)
}
detached.next()
message.next()
message.err = errors.New("message nope")
message.markReady()
err = <-m.Err()
if err := errors.Cause(err); err != message.err {
t.Errorf("got error: %v; want: %v", err, message.err)
}
message.next()
// Close the watcher goroutine.
detached.err = rpcc.ErrConnClosing
detached.markReady()
}