4
4
"bytes"
5
5
"context"
6
6
"encoding/json"
7
+ "errors"
7
8
"fmt"
8
9
"io"
9
10
"math/rand"
@@ -1549,30 +1550,50 @@ func TestAgent_Dial(t *testing.T) {
1549
1550
1550
1551
// Setup listener
1551
1552
l := c .setup (t )
1552
- defer l .Close ()
1553
+ closed := make (chan struct {})
1554
+ defer func () {
1555
+ l .Close ()
1556
+ <- closed
1557
+ }()
1558
+
1559
+ ctx , cancel := context .WithTimeout (context .Background (), testutil .WaitLong )
1560
+ defer cancel ()
1561
+
1553
1562
go func () {
1563
+ var wg sync.WaitGroup
1564
+ defer func () {
1565
+ wg .Wait ()
1566
+ close (closed )
1567
+ }()
1554
1568
for {
1555
1569
c , err := l .Accept ()
1556
1570
if err != nil {
1571
+ if ! errors .Is (err , net .ErrClosed ) && ! errors .Is (err , udp .ErrClosedListener ) {
1572
+ assert .NoError (t , err , "accept connection" )
1573
+ continue
1574
+ }
1557
1575
return
1558
1576
}
1559
1577
1560
- go testAccept (t , c )
1578
+ wg .Add (1 )
1579
+ go func () {
1580
+ defer wg .Done ()
1581
+ testAccept (ctx , t , c )
1582
+ }()
1561
1583
}
1562
1584
}()
1563
1585
1564
1586
//nolint:dogsled
1565
1587
conn , _ , _ , _ , _ := setupAgent (t , agentsdk.Manifest {}, 0 )
1566
- require .True (t , conn .AwaitReachable (context . Background () ))
1567
- conn1 , err := conn .DialContext (context . Background () , l .Addr ().Network (), l .Addr ().String ())
1588
+ require .True (t , conn .AwaitReachable (ctx ))
1589
+ conn1 , err := conn .DialContext (ctx , l .Addr ().Network (), l .Addr ().String ())
1568
1590
require .NoError (t , err )
1569
1591
defer conn1 .Close ()
1570
- conn2 , err := conn .DialContext (context . Background () , l .Addr ().Network (), l .Addr ().String ())
1592
+ conn2 , err := conn .DialContext (ctx , l .Addr ().Network (), l .Addr ().String ())
1571
1593
require .NoError (t , err )
1572
1594
defer conn2 .Close ()
1573
- testDial (t , conn2 )
1574
- testDial (t , conn1 )
1575
- time .Sleep (150 * time .Millisecond )
1595
+ testDial (ctx , t , conn2 )
1596
+ testDial (ctx , t , conn1 )
1576
1597
})
1577
1598
}
1578
1599
}
@@ -2002,22 +2023,41 @@ func setupAgent(t *testing.T, metadata agentsdk.Manifest, ptyTimeout time.Durati
2002
2023
2003
2024
var dialTestPayload = []byte ("dean-was-here123" )
2004
2025
2005
- func testDial (t * testing.T , c net.Conn ) {
2026
+ func testDial (ctx context. Context , t * testing.T , c net.Conn ) {
2006
2027
t .Helper ()
2007
2028
2029
+ if deadline , ok := ctx .Deadline (); ok {
2030
+ err := c .SetDeadline (deadline )
2031
+ assert .NoError (t , err )
2032
+ defer func () {
2033
+ err := c .SetDeadline (time.Time {})
2034
+ assert .NoError (t , err )
2035
+ }()
2036
+ }
2037
+
2008
2038
assertWritePayload (t , c , dialTestPayload )
2009
2039
assertReadPayload (t , c , dialTestPayload )
2010
2040
}
2011
2041
2012
- func testAccept (t * testing.T , c net.Conn ) {
2042
+ func testAccept (ctx context. Context , t * testing.T , c net.Conn ) {
2013
2043
t .Helper ()
2014
2044
defer c .Close ()
2015
2045
2046
+ if deadline , ok := ctx .Deadline (); ok {
2047
+ err := c .SetDeadline (deadline )
2048
+ assert .NoError (t , err )
2049
+ defer func () {
2050
+ err := c .SetDeadline (time.Time {})
2051
+ assert .NoError (t , err )
2052
+ }()
2053
+ }
2054
+
2016
2055
assertReadPayload (t , c , dialTestPayload )
2017
2056
assertWritePayload (t , c , dialTestPayload )
2018
2057
}
2019
2058
2020
2059
func assertReadPayload (t * testing.T , r io.Reader , payload []byte ) {
2060
+ t .Helper ()
2021
2061
b := make ([]byte , len (payload )+ 16 )
2022
2062
n , err := r .Read (b )
2023
2063
assert .NoError (t , err , "read payload" )
@@ -2026,6 +2066,7 @@ func assertReadPayload(t *testing.T, r io.Reader, payload []byte) {
2026
2066
}
2027
2067
2028
2068
func assertWritePayload (t * testing.T , w io.Writer , payload []byte ) {
2069
+ t .Helper ()
2029
2070
n , err := w .Write (payload )
2030
2071
assert .NoError (t , err , "write payload" )
2031
2072
assert .Equal (t , len (payload ), n , "payload length does not match" )
0 commit comments