@@ -3550,6 +3550,72 @@ func TestConnection_NewWatcher(t *testing.T) {
3550
3550
}
3551
3551
}
3552
3552
3553
+ func newWatcherReconnectionPrepareTestConnection (t * testing.T ) (* Connection , context.CancelFunc ) {
3554
+ t .Helper ()
3555
+
3556
+ const server = "127.0.0.1:3015"
3557
+ testDialer := dialer
3558
+ testDialer .Address = server
3559
+
3560
+ inst , err := test_helpers .StartTarantool (test_helpers.StartOpts {
3561
+ Dialer : testDialer ,
3562
+ InitScript : "config.lua" ,
3563
+ Listen : server ,
3564
+ WaitStart : 100 * time .Millisecond ,
3565
+ ConnectRetry : 10 ,
3566
+ RetryTimeout : 500 * time .Millisecond ,
3567
+ })
3568
+ t .Cleanup (func () { test_helpers .StopTarantoolWithCleanup (inst ) })
3569
+ if err != nil {
3570
+ t .Fatalf ("Unable to start Tarantool: %s" , err )
3571
+ }
3572
+
3573
+ ctx , cancel := test_helpers .GetConnectContext ()
3574
+
3575
+ reconnectOpts := opts
3576
+ reconnectOpts .Reconnect = 100 * time .Millisecond
3577
+ reconnectOpts .MaxReconnects = 0
3578
+ reconnectOpts .Notify = make (chan ConnEvent )
3579
+ conn , err := Connect (ctx , testDialer , reconnectOpts )
3580
+ if err != nil {
3581
+ t .Fatalf ("Connection was not established: %v" , err )
3582
+ }
3583
+
3584
+ test_helpers .StopTarantool (inst )
3585
+
3586
+ // Wait for reconnection process to be started.
3587
+ for conn .ConnectedNow () {
3588
+ time .Sleep (100 * time .Millisecond )
3589
+ }
3590
+
3591
+ return conn , cancel
3592
+ }
3593
+
3594
+ func TestNewWatcherDuringReconnect (t * testing.T ) {
3595
+ test_helpers .SkipIfWatchersUnsupported (t )
3596
+
3597
+ conn , cancel := newWatcherReconnectionPrepareTestConnection (t )
3598
+ defer conn .Close ()
3599
+ defer cancel ()
3600
+
3601
+ _ , err := conn .NewWatcher ("one" , func (event WatchEvent ) {})
3602
+ assert .NotNil (t , err )
3603
+ assert .ErrorContains (t , err , "client connection is not ready" )
3604
+ }
3605
+
3606
+ func TestNewWatcherAfterClose (t * testing.T ) {
3607
+ test_helpers .SkipIfWatchersUnsupported (t )
3608
+
3609
+ conn , cancel := newWatcherReconnectionPrepareTestConnection (t )
3610
+ defer cancel ()
3611
+
3612
+ _ = conn .Close ()
3613
+
3614
+ _ , err := conn .NewWatcher ("one" , func (event WatchEvent ) {})
3615
+ assert .NotNil (t , err )
3616
+ assert .ErrorContains (t , err , "using closed connection" )
3617
+ }
3618
+
3553
3619
func TestConnection_NewWatcher_noWatchersFeature (t * testing.T ) {
3554
3620
test_helpers .SkipIfWatchersSupported (t )
3555
3621
@@ -4149,13 +4215,13 @@ func runTestMain(m *testing.M) int {
4149
4215
startOpts .MemtxUseMvccEngine = ! isStreamUnsupported
4150
4216
4151
4217
inst , err := test_helpers .StartTarantool (startOpts )
4152
- defer test_helpers .StopTarantoolWithCleanup (inst )
4153
-
4154
4218
if err != nil {
4155
4219
log .Printf ("Failed to prepare test tarantool: %s" , err )
4156
4220
return 1
4157
4221
}
4158
4222
4223
+ defer test_helpers .StopTarantoolWithCleanup (inst )
4224
+
4159
4225
return m .Run ()
4160
4226
}
4161
4227
0 commit comments