@@ -1547,32 +1547,33 @@ func TestAgent_Dial(t *testing.T) {
1547
1547
t .Run (c .name , func (t * testing.T ) {
1548
1548
t .Parallel ()
1549
1549
1550
- // Setup listener
1550
+ // The purpose of this test is to ensure that a client can dial a
1551
+ // listener in the workspace over tailnet.
1551
1552
l := c .setup (t )
1552
- defer l .Close ()
1553
- go func () {
1554
- for {
1555
- c , err := l .Accept ()
1556
- if err != nil {
1557
- return
1558
- }
1553
+ done := make (chan struct {})
1554
+ defer func () {
1555
+ l .Close ()
1556
+ <- done
1557
+ }()
1559
1558
1560
- go testAccept (t , c )
1561
- }
1559
+ ctx , cancel := context .WithTimeout (context .Background (), testutil .WaitLong )
1560
+ defer cancel ()
1561
+
1562
+ go func () {
1563
+ defer close (done )
1564
+ c , err := l .Accept ()
1565
+ assert .NoError (t , err , "accept connection" )
1566
+ defer c .Close ()
1567
+ testAccept (ctx , t , c )
1562
1568
}()
1563
1569
1564
1570
//nolint:dogsled
1565
- 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 ())
1571
+ agentConn , _ , _ , _ , _ := setupAgent (t , agentsdk.Manifest {}, 0 )
1572
+ require .True (t , agentConn .AwaitReachable (ctx ))
1573
+ conn , err := agentConn .DialContext (ctx , l .Addr ().Network (), l .Addr ().String ())
1568
1574
require .NoError (t , err )
1569
- defer conn1 .Close ()
1570
- conn2 , err := conn .DialContext (context .Background (), l .Addr ().Network (), l .Addr ().String ())
1571
- require .NoError (t , err )
1572
- defer conn2 .Close ()
1573
- testDial (t , conn2 )
1574
- testDial (t , conn1 )
1575
- time .Sleep (150 * time .Millisecond )
1575
+ defer conn .Close ()
1576
+ testDial (ctx , t , conn )
1576
1577
})
1577
1578
}
1578
1579
}
@@ -2002,22 +2003,41 @@ func setupAgent(t *testing.T, metadata agentsdk.Manifest, ptyTimeout time.Durati
2002
2003
2003
2004
var dialTestPayload = []byte ("dean-was-here123" )
2004
2005
2005
- func testDial (t * testing.T , c net.Conn ) {
2006
+ func testDial (ctx context. Context , t * testing.T , c net.Conn ) {
2006
2007
t .Helper ()
2007
2008
2009
+ if deadline , ok := ctx .Deadline (); ok {
2010
+ err := c .SetDeadline (deadline )
2011
+ assert .NoError (t , err )
2012
+ defer func () {
2013
+ err := c .SetDeadline (time.Time {})
2014
+ assert .NoError (t , err )
2015
+ }()
2016
+ }
2017
+
2008
2018
assertWritePayload (t , c , dialTestPayload )
2009
2019
assertReadPayload (t , c , dialTestPayload )
2010
2020
}
2011
2021
2012
- func testAccept (t * testing.T , c net.Conn ) {
2022
+ func testAccept (ctx context. Context , t * testing.T , c net.Conn ) {
2013
2023
t .Helper ()
2014
2024
defer c .Close ()
2015
2025
2026
+ if deadline , ok := ctx .Deadline (); ok {
2027
+ err := c .SetDeadline (deadline )
2028
+ assert .NoError (t , err )
2029
+ defer func () {
2030
+ err := c .SetDeadline (time.Time {})
2031
+ assert .NoError (t , err )
2032
+ }()
2033
+ }
2034
+
2016
2035
assertReadPayload (t , c , dialTestPayload )
2017
2036
assertWritePayload (t , c , dialTestPayload )
2018
2037
}
2019
2038
2020
2039
func assertReadPayload (t * testing.T , r io.Reader , payload []byte ) {
2040
+ t .Helper ()
2021
2041
b := make ([]byte , len (payload )+ 16 )
2022
2042
n , err := r .Read (b )
2023
2043
assert .NoError (t , err , "read payload" )
@@ -2026,6 +2046,7 @@ func assertReadPayload(t *testing.T, r io.Reader, payload []byte) {
2026
2046
}
2027
2047
2028
2048
func assertWritePayload (t * testing.T , w io.Writer , payload []byte ) {
2049
+ t .Helper ()
2029
2050
n , err := w .Write (payload )
2030
2051
assert .NoError (t , err , "write payload" )
2031
2052
assert .Equal (t , len (payload ), n , "payload length does not match" )
0 commit comments