You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@plc4x.apache.org by sr...@apache.org on 2023/06/16 12:21:02 UTC

[plc4x] branch develop updated: test(plc4go/cbus): always set the right driver context

This is an automated email from the ASF dual-hosted git repository.

sruehl pushed a commit to branch develop
in repository https://gitbox.apache.org/repos/asf/plc4x.git


The following commit(s) were added to refs/heads/develop by this push:
     new 49b92b0087 test(plc4go/cbus): always set the right driver context
49b92b0087 is described below

commit 49b92b008705c972a390f478e8cb66259db01509
Author: Sebastian Rühl <sr...@apache.org>
AuthorDate: Fri Jun 16 14:20:54 2023 +0200

    test(plc4go/cbus): always set the right driver context
---
 plc4go/internal/cbus/Connection_test.go | 982 +++++++++++++++++---------------
 1 file changed, 519 insertions(+), 463 deletions(-)

diff --git a/plc4go/internal/cbus/Connection_test.go b/plc4go/internal/cbus/Connection_test.go
index 073904751b..c209ecfbd7 100644
--- a/plc4go/internal/cbus/Connection_test.go
+++ b/plc4go/internal/cbus/Connection_test.go
@@ -90,14 +90,13 @@ func TestAlphaGenerator_getAndIncrement_Turnaround(t *testing.T) {
 
 func TestConnection_BrowseRequestBuilder(t *testing.T) {
 	type fields struct {
-		DefaultConnection _default.DefaultConnection
-		messageCodec      *MessageCodec
-		subscribers       []*Subscriber
-		tm                transactions.RequestTransactionManager
-		configuration     Configuration
-		driverContext     DriverContext
-		connectionId      string
-		tracer            tracer.Tracer
+		messageCodec  *MessageCodec
+		subscribers   []*Subscriber
+		tm            transactions.RequestTransactionManager
+		configuration Configuration
+		driverContext DriverContext
+		connectionId  string
+		tracer        tracer.Tracer
 	}
 	tests := []struct {
 		name       string
@@ -107,7 +106,10 @@ func TestConnection_BrowseRequestBuilder(t *testing.T) {
 		{
 			name: "return not nil",
 			fields: fields{
-				DefaultConnection: _default.NewDefaultConnection(nil),
+				driverContext: DriverContext{
+					awaitSetupComplete:      true,
+					awaitDisconnectComplete: true,
+				},
 			},
 			wantAssert: func(t *testing.T, builder apiModel.PlcBrowseRequestBuilder) bool {
 				return assert.NotNil(t, builder)
@@ -117,16 +119,16 @@ func TestConnection_BrowseRequestBuilder(t *testing.T) {
 	for _, tt := range tests {
 		t.Run(tt.name, func(t *testing.T) {
 			c := &Connection{
-				DefaultConnection: tt.fields.DefaultConnection,
-				messageCodec:      tt.fields.messageCodec,
-				subscribers:       tt.fields.subscribers,
-				tm:                tt.fields.tm,
-				configuration:     tt.fields.configuration,
-				driverContext:     tt.fields.driverContext,
-				connectionId:      tt.fields.connectionId,
-				tracer:            tt.fields.tracer,
-				log:               testutils.ProduceTestingLogger(t),
+				messageCodec:  tt.fields.messageCodec,
+				subscribers:   tt.fields.subscribers,
+				tm:            tt.fields.tm,
+				configuration: tt.fields.configuration,
+				driverContext: tt.fields.driverContext,
+				connectionId:  tt.fields.connectionId,
+				tracer:        tt.fields.tracer,
+				log:           testutils.ProduceTestingLogger(t),
 			}
+			c.DefaultConnection = _default.NewDefaultConnection(c, testutils.EnrichOptionsWithOptionsForTesting(t)...)
 			assert.True(t, tt.wantAssert(t, c.BrowseRequestBuilder()), "BrowseRequestBuilder()")
 		})
 	}
@@ -134,14 +136,13 @@ func TestConnection_BrowseRequestBuilder(t *testing.T) {
 
 func TestConnection_ConnectWithContext(t *testing.T) {
 	type fields struct {
-		DefaultConnection _default.DefaultConnection
-		messageCodec      *MessageCodec
-		subscribers       []*Subscriber
-		tm                transactions.RequestTransactionManager
-		configuration     Configuration
-		driverContext     DriverContext
-		connectionId      string
-		tracer            tracer.Tracer
+		messageCodec  *MessageCodec
+		subscribers   []*Subscriber
+		tm            transactions.RequestTransactionManager
+		configuration Configuration
+		driverContext DriverContext
+		connectionId  string
+		tracer        tracer.Tracer
 	}
 	type args struct {
 		ctx context.Context
@@ -181,8 +182,6 @@ func TestConnection_ConnectWithContext(t *testing.T) {
 			setup: func(t *testing.T, fields *fields) {
 				_options := testutils.EnrichOptionsWithOptionsForTesting(t)
 
-				// Build the default connection
-				fields.DefaultConnection = _default.NewDefaultConnection(nil, _options...)
 				transport := test.NewTransport(_options...)
 				ti, err := transport.CreateTransportInstance(url.URL{Scheme: "test"}, nil, _options...)
 				require.NoError(t, err)
@@ -208,16 +207,16 @@ func TestConnection_ConnectWithContext(t *testing.T) {
 				tt.setup(t, &tt.fields)
 			}
 			c := &Connection{
-				DefaultConnection: tt.fields.DefaultConnection,
-				messageCodec:      tt.fields.messageCodec,
-				subscribers:       tt.fields.subscribers,
-				tm:                tt.fields.tm,
-				configuration:     tt.fields.configuration,
-				driverContext:     tt.fields.driverContext,
-				connectionId:      tt.fields.connectionId,
-				tracer:            tt.fields.tracer,
-				log:               testutils.ProduceTestingLogger(t),
+				messageCodec:  tt.fields.messageCodec,
+				subscribers:   tt.fields.subscribers,
+				tm:            tt.fields.tm,
+				configuration: tt.fields.configuration,
+				driverContext: tt.fields.driverContext,
+				connectionId:  tt.fields.connectionId,
+				tracer:        tt.fields.tracer,
+				log:           testutils.ProduceTestingLogger(t),
 			}
+			c.DefaultConnection = _default.NewDefaultConnection(c, testutils.EnrichOptionsWithOptionsForTesting(t)...)
 			assert.True(t, tt.wantAsserter(t, c.ConnectWithContext(tt.args.ctx)), "ConnectWithContext(%v)", tt.args.ctx)
 			// To shut down properly we always do that
 			c.SetConnected(false)
@@ -228,14 +227,13 @@ func TestConnection_ConnectWithContext(t *testing.T) {
 
 func TestConnection_GetConnection(t *testing.T) {
 	type fields struct {
-		DefaultConnection _default.DefaultConnection
-		messageCodec      *MessageCodec
-		subscribers       []*Subscriber
-		tm                transactions.RequestTransactionManager
-		configuration     Configuration
-		driverContext     DriverContext
-		connectionId      string
-		tracer            tracer.Tracer
+		messageCodec  *MessageCodec
+		subscribers   []*Subscriber
+		tm            transactions.RequestTransactionManager
+		configuration Configuration
+		driverContext DriverContext
+		connectionId  string
+		tracer        tracer.Tracer
 	}
 	tests := []struct {
 		name         string
@@ -245,6 +243,12 @@ func TestConnection_GetConnection(t *testing.T) {
 	}{
 		{
 			name: "not nil",
+			fields: fields{
+				driverContext: DriverContext{
+					awaitSetupComplete:      true,
+					awaitDisconnectComplete: true,
+				},
+			},
 			wantAsserter: func(t *testing.T, connection plc4go.PlcConnection) bool {
 				return assert.NotNil(t, connection)
 			},
@@ -256,16 +260,16 @@ func TestConnection_GetConnection(t *testing.T) {
 				tt.setup(t, &tt.fields)
 			}
 			c := &Connection{
-				DefaultConnection: tt.fields.DefaultConnection,
-				messageCodec:      tt.fields.messageCodec,
-				subscribers:       tt.fields.subscribers,
-				tm:                tt.fields.tm,
-				configuration:     tt.fields.configuration,
-				driverContext:     tt.fields.driverContext,
-				connectionId:      tt.fields.connectionId,
-				tracer:            tt.fields.tracer,
-				log:               testutils.ProduceTestingLogger(t),
+				messageCodec:  tt.fields.messageCodec,
+				subscribers:   tt.fields.subscribers,
+				tm:            tt.fields.tm,
+				configuration: tt.fields.configuration,
+				driverContext: tt.fields.driverContext,
+				connectionId:  tt.fields.connectionId,
+				tracer:        tt.fields.tracer,
+				log:           testutils.ProduceTestingLogger(t),
 			}
+			c.DefaultConnection = _default.NewDefaultConnection(c, testutils.EnrichOptionsWithOptionsForTesting(t)...)
 			assert.Truef(t, tt.wantAsserter(t, c.GetConnection()), "GetConnection()")
 		})
 	}
@@ -273,14 +277,13 @@ func TestConnection_GetConnection(t *testing.T) {
 
 func TestConnection_GetConnectionId(t *testing.T) {
 	type fields struct {
-		DefaultConnection _default.DefaultConnection
-		messageCodec      *MessageCodec
-		subscribers       []*Subscriber
-		tm                transactions.RequestTransactionManager
-		configuration     Configuration
-		driverContext     DriverContext
-		connectionId      string
-		tracer            tracer.Tracer
+		messageCodec  *MessageCodec
+		subscribers   []*Subscriber
+		tm            transactions.RequestTransactionManager
+		configuration Configuration
+		driverContext DriverContext
+		connectionId  string
+		tracer        tracer.Tracer
 	}
 	tests := []struct {
 		name   string
@@ -289,21 +292,26 @@ func TestConnection_GetConnectionId(t *testing.T) {
 	}{
 		{
 			name: "simple id",
+			fields: fields{
+				driverContext: DriverContext{
+					awaitSetupComplete:      true,
+					awaitDisconnectComplete: true,
+				}},
 		},
 	}
 	for _, tt := range tests {
 		t.Run(tt.name, func(t *testing.T) {
 			c := &Connection{
-				DefaultConnection: tt.fields.DefaultConnection,
-				messageCodec:      tt.fields.messageCodec,
-				subscribers:       tt.fields.subscribers,
-				tm:                tt.fields.tm,
-				configuration:     tt.fields.configuration,
-				driverContext:     tt.fields.driverContext,
-				connectionId:      tt.fields.connectionId,
-				tracer:            tt.fields.tracer,
-				log:               testutils.ProduceTestingLogger(t),
+				messageCodec:  tt.fields.messageCodec,
+				subscribers:   tt.fields.subscribers,
+				tm:            tt.fields.tm,
+				configuration: tt.fields.configuration,
+				driverContext: tt.fields.driverContext,
+				connectionId:  tt.fields.connectionId,
+				tracer:        tt.fields.tracer,
+				log:           testutils.ProduceTestingLogger(t),
 			}
+			c.DefaultConnection = _default.NewDefaultConnection(c, testutils.EnrichOptionsWithOptionsForTesting(t)...)
 			assert.Equalf(t, tt.want, c.GetConnectionId(), "GetConnectionId()")
 		})
 	}
@@ -311,14 +319,13 @@ func TestConnection_GetConnectionId(t *testing.T) {
 
 func TestConnection_GetMessageCodec(t *testing.T) {
 	type fields struct {
-		DefaultConnection _default.DefaultConnection
-		messageCodec      *MessageCodec
-		subscribers       []*Subscriber
-		tm                transactions.RequestTransactionManager
-		configuration     Configuration
-		driverContext     DriverContext
-		connectionId      string
-		tracer            tracer.Tracer
+		messageCodec  *MessageCodec
+		subscribers   []*Subscriber
+		tm            transactions.RequestTransactionManager
+		configuration Configuration
+		driverContext DriverContext
+		connectionId  string
+		tracer        tracer.Tracer
 	}
 	tests := []struct {
 		name   string
@@ -328,6 +335,10 @@ func TestConnection_GetMessageCodec(t *testing.T) {
 		{
 			name: "just get",
 			fields: fields{
+				driverContext: DriverContext{
+					awaitSetupComplete:      true,
+					awaitDisconnectComplete: true,
+				},
 				messageCodec: &MessageCodec{},
 			},
 			want: &MessageCodec{},
@@ -336,16 +347,16 @@ func TestConnection_GetMessageCodec(t *testing.T) {
 	for _, tt := range tests {
 		t.Run(tt.name, func(t *testing.T) {
 			c := &Connection{
-				DefaultConnection: tt.fields.DefaultConnection,
-				messageCodec:      tt.fields.messageCodec,
-				subscribers:       tt.fields.subscribers,
-				tm:                tt.fields.tm,
-				configuration:     tt.fields.configuration,
-				driverContext:     tt.fields.driverContext,
-				connectionId:      tt.fields.connectionId,
-				tracer:            tt.fields.tracer,
-				log:               testutils.ProduceTestingLogger(t),
+				messageCodec:  tt.fields.messageCodec,
+				subscribers:   tt.fields.subscribers,
+				tm:            tt.fields.tm,
+				configuration: tt.fields.configuration,
+				driverContext: tt.fields.driverContext,
+				connectionId:  tt.fields.connectionId,
+				tracer:        tt.fields.tracer,
+				log:           testutils.ProduceTestingLogger(t),
 			}
+			c.DefaultConnection = _default.NewDefaultConnection(c, testutils.EnrichOptionsWithOptionsForTesting(t)...)
 			assert.Equalf(t, tt.want, c.GetMessageCodec(), "GetMessageCodec()")
 		})
 	}
@@ -353,14 +364,13 @@ func TestConnection_GetMessageCodec(t *testing.T) {
 
 func TestConnection_GetMetadata(t *testing.T) {
 	type fields struct {
-		DefaultConnection _default.DefaultConnection
-		messageCodec      *MessageCodec
-		subscribers       []*Subscriber
-		tm                transactions.RequestTransactionManager
-		configuration     Configuration
-		driverContext     DriverContext
-		connectionId      string
-		tracer            tracer.Tracer
+		messageCodec  *MessageCodec
+		subscribers   []*Subscriber
+		tm            transactions.RequestTransactionManager
+		configuration Configuration
+		driverContext DriverContext
+		connectionId  string
+		tracer        tracer.Tracer
 	}
 	tests := []struct {
 		name   string
@@ -369,6 +379,12 @@ func TestConnection_GetMetadata(t *testing.T) {
 	}{
 		{
 			name: "give metadata",
+			fields: fields{
+				driverContext: DriverContext{
+					awaitSetupComplete:      true,
+					awaitDisconnectComplete: true,
+				},
+			},
 			want: _default.DefaultConnectionMetadata{
 				ConnectionAttributes: nil,
 				ProvidesReading:      true,
@@ -381,16 +397,16 @@ func TestConnection_GetMetadata(t *testing.T) {
 	for _, tt := range tests {
 		t.Run(tt.name, func(t *testing.T) {
 			c := &Connection{
-				DefaultConnection: tt.fields.DefaultConnection,
-				messageCodec:      tt.fields.messageCodec,
-				subscribers:       tt.fields.subscribers,
-				tm:                tt.fields.tm,
-				configuration:     tt.fields.configuration,
-				driverContext:     tt.fields.driverContext,
-				connectionId:      tt.fields.connectionId,
-				tracer:            tt.fields.tracer,
-				log:               testutils.ProduceTestingLogger(t),
+				messageCodec:  tt.fields.messageCodec,
+				subscribers:   tt.fields.subscribers,
+				tm:            tt.fields.tm,
+				configuration: tt.fields.configuration,
+				driverContext: tt.fields.driverContext,
+				connectionId:  tt.fields.connectionId,
+				tracer:        tt.fields.tracer,
+				log:           testutils.ProduceTestingLogger(t),
 			}
+			c.DefaultConnection = _default.NewDefaultConnection(c, testutils.EnrichOptionsWithOptionsForTesting(t)...)
 			assert.Equalf(t, tt.want, c.GetMetadata(), "GetMetadata()")
 		})
 	}
@@ -398,14 +414,13 @@ func TestConnection_GetMetadata(t *testing.T) {
 
 func TestConnection_GetTracer(t *testing.T) {
 	type fields struct {
-		DefaultConnection _default.DefaultConnection
-		messageCodec      *MessageCodec
-		subscribers       []*Subscriber
-		tm                transactions.RequestTransactionManager
-		configuration     Configuration
-		driverContext     DriverContext
-		connectionId      string
-		tracer            tracer.Tracer
+		messageCodec  *MessageCodec
+		subscribers   []*Subscriber
+		tm            transactions.RequestTransactionManager
+		configuration Configuration
+		driverContext DriverContext
+		connectionId  string
+		tracer        tracer.Tracer
 	}
 	tests := []struct {
 		name   string
@@ -414,21 +429,27 @@ func TestConnection_GetTracer(t *testing.T) {
 	}{
 		{
 			name: "just nil",
+			fields: fields{
+				driverContext: DriverContext{
+					awaitSetupComplete:      true,
+					awaitDisconnectComplete: true,
+				},
+			},
 		},
 	}
 	for _, tt := range tests {
 		t.Run(tt.name, func(t *testing.T) {
 			c := &Connection{
-				DefaultConnection: tt.fields.DefaultConnection,
-				messageCodec:      tt.fields.messageCodec,
-				subscribers:       tt.fields.subscribers,
-				tm:                tt.fields.tm,
-				configuration:     tt.fields.configuration,
-				driverContext:     tt.fields.driverContext,
-				connectionId:      tt.fields.connectionId,
-				tracer:            tt.fields.tracer,
-				log:               testutils.ProduceTestingLogger(t),
+				messageCodec:  tt.fields.messageCodec,
+				subscribers:   tt.fields.subscribers,
+				tm:            tt.fields.tm,
+				configuration: tt.fields.configuration,
+				driverContext: tt.fields.driverContext,
+				connectionId:  tt.fields.connectionId,
+				tracer:        tt.fields.tracer,
+				log:           testutils.ProduceTestingLogger(t),
 			}
+			c.DefaultConnection = _default.NewDefaultConnection(c, testutils.EnrichOptionsWithOptionsForTesting(t)...)
 			assert.Equalf(t, tt.want, c.GetTracer(), "GetTracer()")
 		})
 	}
@@ -436,14 +457,13 @@ func TestConnection_GetTracer(t *testing.T) {
 
 func TestConnection_IsTraceEnabled(t *testing.T) {
 	type fields struct {
-		DefaultConnection _default.DefaultConnection
-		messageCodec      *MessageCodec
-		subscribers       []*Subscriber
-		tm                transactions.RequestTransactionManager
-		configuration     Configuration
-		driverContext     DriverContext
-		connectionId      string
-		tracer            tracer.Tracer
+		messageCodec  *MessageCodec
+		subscribers   []*Subscriber
+		tm            transactions.RequestTransactionManager
+		configuration Configuration
+		driverContext DriverContext
+		connectionId  string
+		tracer        tracer.Tracer
 	}
 	tests := []struct {
 		name   string
@@ -452,21 +472,26 @@ func TestConnection_IsTraceEnabled(t *testing.T) {
 	}{
 		{
 			name: "not enabled",
+			fields: fields{
+				driverContext: DriverContext{
+					awaitSetupComplete:      true,
+					awaitDisconnectComplete: true,
+				}},
 		},
 	}
 	for _, tt := range tests {
 		t.Run(tt.name, func(t *testing.T) {
 			c := &Connection{
-				DefaultConnection: tt.fields.DefaultConnection,
-				messageCodec:      tt.fields.messageCodec,
-				subscribers:       tt.fields.subscribers,
-				tm:                tt.fields.tm,
-				configuration:     tt.fields.configuration,
-				driverContext:     tt.fields.driverContext,
-				connectionId:      tt.fields.connectionId,
-				tracer:            tt.fields.tracer,
-				log:               testutils.ProduceTestingLogger(t),
+				messageCodec:  tt.fields.messageCodec,
+				subscribers:   tt.fields.subscribers,
+				tm:            tt.fields.tm,
+				configuration: tt.fields.configuration,
+				driverContext: tt.fields.driverContext,
+				connectionId:  tt.fields.connectionId,
+				tracer:        tt.fields.tracer,
+				log:           testutils.ProduceTestingLogger(t),
 			}
+			c.DefaultConnection = _default.NewDefaultConnection(c, testutils.EnrichOptionsWithOptionsForTesting(t)...)
 			assert.Equalf(t, tt.want, c.IsTraceEnabled(), "IsTraceEnabled()")
 		})
 	}
@@ -474,14 +499,13 @@ func TestConnection_IsTraceEnabled(t *testing.T) {
 
 func TestConnection_ReadRequestBuilder(t *testing.T) {
 	type fields struct {
-		DefaultConnection _default.DefaultConnection
-		messageCodec      *MessageCodec
-		subscribers       []*Subscriber
-		tm                transactions.RequestTransactionManager
-		configuration     Configuration
-		driverContext     DriverContext
-		connectionId      string
-		tracer            tracer.Tracer
+		messageCodec  *MessageCodec
+		subscribers   []*Subscriber
+		tm            transactions.RequestTransactionManager
+		configuration Configuration
+		driverContext DriverContext
+		connectionId  string
+		tracer        tracer.Tracer
 	}
 	tests := []struct {
 		name       string
@@ -491,7 +515,10 @@ func TestConnection_ReadRequestBuilder(t *testing.T) {
 		{
 			name: "return not nil",
 			fields: fields{
-				DefaultConnection: _default.NewDefaultConnection(nil),
+				driverContext: DriverContext{
+					awaitSetupComplete:      true,
+					awaitDisconnectComplete: true,
+				},
 			},
 			wantAssert: func(t *testing.T, builder apiModel.PlcReadRequestBuilder) bool {
 				return assert.NotNil(t, builder)
@@ -501,16 +528,16 @@ func TestConnection_ReadRequestBuilder(t *testing.T) {
 	for _, tt := range tests {
 		t.Run(tt.name, func(t *testing.T) {
 			c := &Connection{
-				DefaultConnection: tt.fields.DefaultConnection,
-				messageCodec:      tt.fields.messageCodec,
-				subscribers:       tt.fields.subscribers,
-				tm:                tt.fields.tm,
-				configuration:     tt.fields.configuration,
-				driverContext:     tt.fields.driverContext,
-				connectionId:      tt.fields.connectionId,
-				tracer:            tt.fields.tracer,
-				log:               testutils.ProduceTestingLogger(t),
+				messageCodec:  tt.fields.messageCodec,
+				subscribers:   tt.fields.subscribers,
+				tm:            tt.fields.tm,
+				configuration: tt.fields.configuration,
+				driverContext: tt.fields.driverContext,
+				connectionId:  tt.fields.connectionId,
+				tracer:        tt.fields.tracer,
+				log:           testutils.ProduceTestingLogger(t),
 			}
+			c.DefaultConnection = _default.NewDefaultConnection(c, testutils.EnrichOptionsWithOptionsForTesting(t)...)
 			assert.Truef(t, tt.wantAssert(t, c.ReadRequestBuilder()), "ReadRequestBuilder()")
 		})
 	}
@@ -518,14 +545,13 @@ func TestConnection_ReadRequestBuilder(t *testing.T) {
 
 func TestConnection_String(t *testing.T) {
 	type fields struct {
-		DefaultConnection _default.DefaultConnection
-		messageCodec      *MessageCodec
-		subscribers       []*Subscriber
-		tm                transactions.RequestTransactionManager
-		configuration     Configuration
-		driverContext     DriverContext
-		connectionId      string
-		tracer            tracer.Tracer
+		messageCodec  *MessageCodec
+		subscribers   []*Subscriber
+		tm            transactions.RequestTransactionManager
+		configuration Configuration
+		driverContext DriverContext
+		connectionId  string
+		tracer        tracer.Tracer
 	}
 	tests := []struct {
 		name   string
@@ -535,7 +561,10 @@ func TestConnection_String(t *testing.T) {
 		{
 			name: "a string",
 			fields: fields{
-				DefaultConnection: _default.NewDefaultConnection(nil),
+				driverContext: DriverContext{
+					awaitSetupComplete:      true,
+					awaitDisconnectComplete: true,
+				},
 			},
 			want: `
 ╔═Connection══════════════════════════════════════════════════════════════════════════════════════════════╗
@@ -557,7 +586,7 @@ func TestConnection_String(t *testing.T) {
 ║╔═driverContext═══════════════════════════════════╗                                                      ║
 ║║╔═DriverContext═════════════════════════════════╗║                                                      ║
 ║║║╔═awaitSetupComplete╗╔═awaitDisconnectComplete╗║║                                                      ║
-║║║║     b0 false      ║║        b0 false        ║║║                                                      ║
+║║║║     b0 true       ║║        b0 true         ║║║                                                      ║
 ║║║╚═══════════════════╝╚════════════════════════╝║║                                                      ║
 ║║╚═══════════════════════════════════════════════╝║                                                      ║
 ║╚═════════════════════════════════════════════════╝                                                      ║
@@ -567,17 +596,17 @@ func TestConnection_String(t *testing.T) {
 	for _, tt := range tests {
 		t.Run(tt.name, func(t *testing.T) {
 			c := &Connection{
-				DefaultConnection: tt.fields.DefaultConnection,
-				alphaGenerator:    AlphaGenerator{currentAlpha: 'g'},
-				messageCodec:      tt.fields.messageCodec,
-				subscribers:       tt.fields.subscribers,
-				tm:                tt.fields.tm,
-				configuration:     tt.fields.configuration,
-				driverContext:     tt.fields.driverContext,
-				connectionId:      tt.fields.connectionId,
-				tracer:            tt.fields.tracer,
-				log:               testutils.ProduceTestingLogger(t),
+				alphaGenerator: AlphaGenerator{currentAlpha: 'g'},
+				messageCodec:   tt.fields.messageCodec,
+				subscribers:    tt.fields.subscribers,
+				tm:             tt.fields.tm,
+				configuration:  tt.fields.configuration,
+				driverContext:  tt.fields.driverContext,
+				connectionId:   tt.fields.connectionId,
+				tracer:         tt.fields.tracer,
+				log:            testutils.ProduceTestingLogger(t),
 			}
+			c.DefaultConnection = _default.NewDefaultConnection(c, testutils.EnrichOptionsWithOptionsForTesting(t)...)
 			assert.Equalf(t, tt.want, c.String(), "String()")
 		})
 	}
@@ -585,14 +614,13 @@ func TestConnection_String(t *testing.T) {
 
 func TestConnection_SubscriptionRequestBuilder(t *testing.T) {
 	type fields struct {
-		DefaultConnection _default.DefaultConnection
-		messageCodec      *MessageCodec
-		subscribers       []*Subscriber
-		tm                transactions.RequestTransactionManager
-		configuration     Configuration
-		driverContext     DriverContext
-		connectionId      string
-		tracer            tracer.Tracer
+		messageCodec  *MessageCodec
+		subscribers   []*Subscriber
+		tm            transactions.RequestTransactionManager
+		configuration Configuration
+		driverContext DriverContext
+		connectionId  string
+		tracer        tracer.Tracer
 	}
 	tests := []struct {
 		name       string
@@ -602,7 +630,10 @@ func TestConnection_SubscriptionRequestBuilder(t *testing.T) {
 		{
 			name: "return not nil",
 			fields: fields{
-				DefaultConnection: _default.NewDefaultConnection(nil),
+				driverContext: DriverContext{
+					awaitSetupComplete:      true,
+					awaitDisconnectComplete: true,
+				},
 			},
 			wantAssert: func(t *testing.T, builder apiModel.PlcSubscriptionRequestBuilder) bool {
 				return assert.NotNil(t, builder)
@@ -612,16 +643,16 @@ func TestConnection_SubscriptionRequestBuilder(t *testing.T) {
 	for _, tt := range tests {
 		t.Run(tt.name, func(t *testing.T) {
 			c := &Connection{
-				DefaultConnection: tt.fields.DefaultConnection,
-				messageCodec:      tt.fields.messageCodec,
-				subscribers:       tt.fields.subscribers,
-				tm:                tt.fields.tm,
-				configuration:     tt.fields.configuration,
-				driverContext:     tt.fields.driverContext,
-				connectionId:      tt.fields.connectionId,
-				tracer:            tt.fields.tracer,
-				log:               testutils.ProduceTestingLogger(t),
+				messageCodec:  tt.fields.messageCodec,
+				subscribers:   tt.fields.subscribers,
+				tm:            tt.fields.tm,
+				configuration: tt.fields.configuration,
+				driverContext: tt.fields.driverContext,
+				connectionId:  tt.fields.connectionId,
+				tracer:        tt.fields.tracer,
+				log:           testutils.ProduceTestingLogger(t),
 			}
+			c.DefaultConnection = _default.NewDefaultConnection(c, testutils.EnrichOptionsWithOptionsForTesting(t)...)
 			assert.Truef(t, tt.wantAssert(t, c.SubscriptionRequestBuilder()), "SubscriptionRequestBuilder()")
 		})
 	}
@@ -629,14 +660,13 @@ func TestConnection_SubscriptionRequestBuilder(t *testing.T) {
 
 func TestConnection_UnsubscriptionRequestBuilder(t *testing.T) {
 	type fields struct {
-		DefaultConnection _default.DefaultConnection
-		messageCodec      *MessageCodec
-		subscribers       []*Subscriber
-		tm                transactions.RequestTransactionManager
-		configuration     Configuration
-		driverContext     DriverContext
-		connectionId      string
-		tracer            tracer.Tracer
+		messageCodec  *MessageCodec
+		subscribers   []*Subscriber
+		tm            transactions.RequestTransactionManager
+		configuration Configuration
+		driverContext DriverContext
+		connectionId  string
+		tracer        tracer.Tracer
 	}
 	tests := []struct {
 		name   string
@@ -645,21 +675,27 @@ func TestConnection_UnsubscriptionRequestBuilder(t *testing.T) {
 	}{
 		{
 			name: "create one",
+			fields: fields{
+				driverContext: DriverContext{
+					awaitSetupComplete:      true,
+					awaitDisconnectComplete: true,
+				},
+			},
 		},
 	}
 	for _, tt := range tests {
 		t.Run(tt.name, func(t *testing.T) {
 			c := &Connection{
-				DefaultConnection: tt.fields.DefaultConnection,
-				messageCodec:      tt.fields.messageCodec,
-				subscribers:       tt.fields.subscribers,
-				tm:                tt.fields.tm,
-				configuration:     tt.fields.configuration,
-				driverContext:     tt.fields.driverContext,
-				connectionId:      tt.fields.connectionId,
-				tracer:            tt.fields.tracer,
-				log:               testutils.ProduceTestingLogger(t),
+				messageCodec:  tt.fields.messageCodec,
+				subscribers:   tt.fields.subscribers,
+				tm:            tt.fields.tm,
+				configuration: tt.fields.configuration,
+				driverContext: tt.fields.driverContext,
+				connectionId:  tt.fields.connectionId,
+				tracer:        tt.fields.tracer,
+				log:           testutils.ProduceTestingLogger(t),
 			}
+			c.DefaultConnection = _default.NewDefaultConnection(c, testutils.EnrichOptionsWithOptionsForTesting(t)...)
 			assert.Equalf(t, tt.want, c.UnsubscriptionRequestBuilder(), "UnsubscriptionRequestBuilder()")
 		})
 	}
@@ -667,14 +703,13 @@ func TestConnection_UnsubscriptionRequestBuilder(t *testing.T) {
 
 func TestConnection_WriteRequestBuilder(t *testing.T) {
 	type fields struct {
-		DefaultConnection _default.DefaultConnection
-		messageCodec      *MessageCodec
-		subscribers       []*Subscriber
-		tm                transactions.RequestTransactionManager
-		configuration     Configuration
-		driverContext     DriverContext
-		connectionId      string
-		tracer            tracer.Tracer
+		messageCodec  *MessageCodec
+		subscribers   []*Subscriber
+		tm            transactions.RequestTransactionManager
+		configuration Configuration
+		driverContext DriverContext
+		connectionId  string
+		tracer        tracer.Tracer
 	}
 	tests := []struct {
 		name       string
@@ -684,7 +719,10 @@ func TestConnection_WriteRequestBuilder(t *testing.T) {
 		{
 			name: "return not nil",
 			fields: fields{
-				DefaultConnection: _default.NewDefaultConnection(nil),
+				driverContext: DriverContext{
+					awaitSetupComplete:      true,
+					awaitDisconnectComplete: true,
+				},
 			},
 			wantAssert: func(t *testing.T, builder apiModel.PlcWriteRequestBuilder) bool {
 				return assert.NotNil(t, builder)
@@ -694,16 +732,16 @@ func TestConnection_WriteRequestBuilder(t *testing.T) {
 	for _, tt := range tests {
 		t.Run(tt.name, func(t *testing.T) {
 			c := &Connection{
-				DefaultConnection: tt.fields.DefaultConnection,
-				messageCodec:      tt.fields.messageCodec,
-				subscribers:       tt.fields.subscribers,
-				tm:                tt.fields.tm,
-				configuration:     tt.fields.configuration,
-				driverContext:     tt.fields.driverContext,
-				connectionId:      tt.fields.connectionId,
-				tracer:            tt.fields.tracer,
-				log:               testutils.ProduceTestingLogger(t),
+				messageCodec:  tt.fields.messageCodec,
+				subscribers:   tt.fields.subscribers,
+				tm:            tt.fields.tm,
+				configuration: tt.fields.configuration,
+				driverContext: tt.fields.driverContext,
+				connectionId:  tt.fields.connectionId,
+				tracer:        tt.fields.tracer,
+				log:           testutils.ProduceTestingLogger(t),
 			}
+			c.DefaultConnection = _default.NewDefaultConnection(c, testutils.EnrichOptionsWithOptionsForTesting(t)...)
 			assert.Truef(t, tt.wantAssert(t, c.WriteRequestBuilder()), "WriteRequestBuilder()")
 		})
 	}
@@ -711,14 +749,13 @@ func TestConnection_WriteRequestBuilder(t *testing.T) {
 
 func TestConnection_addSubscriber(t *testing.T) {
 	type fields struct {
-		DefaultConnection _default.DefaultConnection
-		messageCodec      *MessageCodec
-		subscribers       []*Subscriber
-		tm                transactions.RequestTransactionManager
-		configuration     Configuration
-		driverContext     DriverContext
-		connectionId      string
-		tracer            tracer.Tracer
+		messageCodec  *MessageCodec
+		subscribers   []*Subscriber
+		tm            transactions.RequestTransactionManager
+		configuration Configuration
+		driverContext DriverContext
+		connectionId  string
+		tracer        tracer.Tracer
 	}
 	type args struct {
 		subscriber *Subscriber
@@ -732,15 +769,27 @@ func TestConnection_addSubscriber(t *testing.T) {
 	}{
 		{
 			name: "new subscriber",
+			fields: fields{
+				driverContext: DriverContext{
+					awaitSetupComplete:      true,
+					awaitDisconnectComplete: true,
+				},
+			},
 			args: args{subscriber: NewSubscriber(nil)},
 			subElevator: func(t *testing.T, subscribers []*Subscriber) bool {
 				return len(subscribers) == 1
 			},
 		},
 		{
-			name:   "existing subscriber should not be added",
-			fields: fields{subscribers: []*Subscriber{theOneSubscriber}},
-			args:   args{subscriber: theOneSubscriber},
+			name: "existing subscriber should not be added",
+			fields: fields{
+				subscribers: []*Subscriber{theOneSubscriber},
+				driverContext: DriverContext{
+					awaitSetupComplete:      true,
+					awaitDisconnectComplete: true,
+				},
+			},
+			args: args{subscriber: theOneSubscriber},
 			subElevator: func(t *testing.T, subscribers []*Subscriber) bool {
 				return len(subscribers) == 1
 			},
@@ -749,16 +798,16 @@ func TestConnection_addSubscriber(t *testing.T) {
 	for _, tt := range tests {
 		t.Run(tt.name, func(t *testing.T) {
 			c := &Connection{
-				DefaultConnection: tt.fields.DefaultConnection,
-				messageCodec:      tt.fields.messageCodec,
-				subscribers:       tt.fields.subscribers,
-				tm:                tt.fields.tm,
-				configuration:     tt.fields.configuration,
-				driverContext:     tt.fields.driverContext,
-				connectionId:      tt.fields.connectionId,
-				tracer:            tt.fields.tracer,
-				log:               testutils.ProduceTestingLogger(t),
+				messageCodec:  tt.fields.messageCodec,
+				subscribers:   tt.fields.subscribers,
+				tm:            tt.fields.tm,
+				configuration: tt.fields.configuration,
+				driverContext: tt.fields.driverContext,
+				connectionId:  tt.fields.connectionId,
+				tracer:        tt.fields.tracer,
+				log:           testutils.ProduceTestingLogger(t),
 			}
+			c.DefaultConnection = _default.NewDefaultConnection(c, testutils.EnrichOptionsWithOptionsForTesting(t)...)
 			c.addSubscriber(tt.args.subscriber)
 			assert.Truef(t, tt.subElevator(t, c.subscribers), "addSubscriber(%v)", tt.args.subscriber)
 		})
@@ -767,14 +816,13 @@ func TestConnection_addSubscriber(t *testing.T) {
 
 func TestConnection_fireConnected(t *testing.T) {
 	type fields struct {
-		DefaultConnection _default.DefaultConnection
-		messageCodec      *MessageCodec
-		subscribers       []*Subscriber
-		tm                transactions.RequestTransactionManager
-		configuration     Configuration
-		driverContext     DriverContext
-		connectionId      string
-		tracer            tracer.Tracer
+		messageCodec  *MessageCodec
+		subscribers   []*Subscriber
+		tm            transactions.RequestTransactionManager
+		configuration Configuration
+		driverContext DriverContext
+		connectionId  string
+		tracer        tracer.Tracer
 	}
 	type args struct {
 		ch chan<- plc4go.PlcConnectionConnectResult
@@ -788,7 +836,10 @@ func TestConnection_fireConnected(t *testing.T) {
 		{
 			name: "instant connect",
 			fields: fields{
-				DefaultConnection: _default.NewDefaultConnection(nil),
+				driverContext: DriverContext{
+					awaitSetupComplete:      true,
+					awaitDisconnectComplete: true,
+				},
 			},
 			chanValidator: func(_ *testing.T, _ chan<- plc4go.PlcConnectionConnectResult) bool {
 				return true
@@ -797,9 +848,9 @@ func TestConnection_fireConnected(t *testing.T) {
 		{
 			name: "notified connect",
 			fields: fields{
-				DefaultConnection: _default.NewDefaultConnection(nil),
 				driverContext: DriverContext{
-					awaitSetupComplete: true,
+					awaitSetupComplete:      true,
+					awaitDisconnectComplete: true,
 				},
 			},
 			args: args{ch: make(chan<- plc4go.PlcConnectionConnectResult, 1)},
@@ -812,16 +863,16 @@ func TestConnection_fireConnected(t *testing.T) {
 	for _, tt := range tests {
 		t.Run(tt.name, func(t *testing.T) {
 			c := &Connection{
-				DefaultConnection: tt.fields.DefaultConnection,
-				messageCodec:      tt.fields.messageCodec,
-				subscribers:       tt.fields.subscribers,
-				tm:                tt.fields.tm,
-				configuration:     tt.fields.configuration,
-				driverContext:     tt.fields.driverContext,
-				connectionId:      tt.fields.connectionId,
-				tracer:            tt.fields.tracer,
-				log:               testutils.ProduceTestingLogger(t),
+				messageCodec:  tt.fields.messageCodec,
+				subscribers:   tt.fields.subscribers,
+				tm:            tt.fields.tm,
+				configuration: tt.fields.configuration,
+				driverContext: tt.fields.driverContext,
+				connectionId:  tt.fields.connectionId,
+				tracer:        tt.fields.tracer,
+				log:           testutils.ProduceTestingLogger(t),
 			}
+			c.DefaultConnection = _default.NewDefaultConnection(c, testutils.EnrichOptionsWithOptionsForTesting(t)...)
 			c.fireConnected(tt.args.ch)
 			assert.True(t, tt.chanValidator(t, tt.args.ch))
 		})
@@ -830,14 +881,13 @@ func TestConnection_fireConnected(t *testing.T) {
 
 func TestConnection_fireConnectionError(t *testing.T) {
 	type fields struct {
-		DefaultConnection _default.DefaultConnection
-		messageCodec      *MessageCodec
-		subscribers       []*Subscriber
-		tm                transactions.RequestTransactionManager
-		configuration     Configuration
-		driverContext     DriverContext
-		connectionId      string
-		tracer            tracer.Tracer
+		messageCodec  *MessageCodec
+		subscribers   []*Subscriber
+		tm            transactions.RequestTransactionManager
+		configuration Configuration
+		driverContext DriverContext
+		connectionId  string
+		tracer        tracer.Tracer
 	}
 	type args struct {
 		err error
@@ -852,10 +902,14 @@ func TestConnection_fireConnectionError(t *testing.T) {
 	}{
 		{
 			name: "instant connect",
+			fields: fields{
+				driverContext: DriverContext{
+					awaitSetupComplete:      true,
+					awaitDisconnectComplete: true,
+				},
+			},
 			setup: func(t *testing.T, fields *fields, args *args) {
 				_options := testutils.EnrichOptionsWithOptionsForTesting(t)
-
-				fields.DefaultConnection = _default.NewDefaultConnection(nil, _options...)
 				transport := test.NewTransport(_options...)
 				ti, err := transport.CreateTransportInstance(url.URL{Scheme: "test"}, nil, _options...)
 				require.NoError(t, err)
@@ -873,13 +927,12 @@ func TestConnection_fireConnectionError(t *testing.T) {
 			name: "notified connect",
 			fields: fields{
 				driverContext: DriverContext{
-					awaitSetupComplete: true,
+					awaitSetupComplete:      true,
+					awaitDisconnectComplete: true,
 				},
 			},
 			setup: func(t *testing.T, fields *fields, args *args) {
 				_options := testutils.EnrichOptionsWithOptionsForTesting(t)
-
-				fields.DefaultConnection = _default.NewDefaultConnection(nil, _options...)
 				transport := test.NewTransport(_options...)
 				ti, err := transport.CreateTransportInstance(url.URL{Scheme: "test"}, nil, _options...)
 				require.NoError(t, err)
@@ -902,16 +955,16 @@ func TestConnection_fireConnectionError(t *testing.T) {
 				tt.setup(t, &tt.fields, &tt.args)
 			}
 			c := &Connection{
-				DefaultConnection: tt.fields.DefaultConnection,
-				messageCodec:      tt.fields.messageCodec,
-				subscribers:       tt.fields.subscribers,
-				tm:                tt.fields.tm,
-				configuration:     tt.fields.configuration,
-				driverContext:     tt.fields.driverContext,
-				connectionId:      tt.fields.connectionId,
-				tracer:            tt.fields.tracer,
-				log:               testutils.ProduceTestingLogger(t),
+				messageCodec:  tt.fields.messageCodec,
+				subscribers:   tt.fields.subscribers,
+				tm:            tt.fields.tm,
+				configuration: tt.fields.configuration,
+				driverContext: tt.fields.driverContext,
+				connectionId:  tt.fields.connectionId,
+				tracer:        tt.fields.tracer,
+				log:           testutils.ProduceTestingLogger(t),
 			}
+			c.DefaultConnection = _default.NewDefaultConnection(c, testutils.EnrichOptionsWithOptionsForTesting(t)...)
 			c.fireConnectionError(tt.args.err, tt.args.ch)
 			assert.True(t, tt.chanValidator(t, tt.args.ch))
 		})
@@ -920,14 +973,13 @@ func TestConnection_fireConnectionError(t *testing.T) {
 
 func TestConnection_sendCalDataWrite(t *testing.T) {
 	type fields struct {
-		DefaultConnection _default.DefaultConnection
-		messageCodec      *MessageCodec
-		subscribers       []*Subscriber
-		tm                transactions.RequestTransactionManager
-		configuration     Configuration
-		driverContext     DriverContext
-		connectionId      string
-		tracer            tracer.Tracer
+		messageCodec  *MessageCodec
+		subscribers   []*Subscriber
+		tm            transactions.RequestTransactionManager
+		configuration Configuration
+		driverContext DriverContext
+		connectionId  string
+		tracer        tracer.Tracer
 	}
 	type args struct {
 		ctx            context.Context
@@ -946,6 +998,12 @@ func TestConnection_sendCalDataWrite(t *testing.T) {
 	}{
 		{
 			name: "send something",
+			fields: fields{
+				driverContext: DriverContext{
+					awaitSetupComplete:      true,
+					awaitDisconnectComplete: true,
+				},
+			},
 			args: args{
 				ctx:            context.Background(),
 				ch:             make(chan plc4go.PlcConnectionConnectResult, 1),
@@ -962,8 +1020,6 @@ func TestConnection_sendCalDataWrite(t *testing.T) {
 			},
 			setup: func(t *testing.T, fields *fields) {
 				_options := testutils.EnrichOptionsWithOptionsForTesting(t)
-
-				fields.DefaultConnection = _default.NewDefaultConnection(nil, _options...)
 				transport := test.NewTransport(_options...)
 				ti, err := transport.CreateTransportInstance(url.URL{Scheme: "test"}, nil, _options...)
 				require.NoError(t, err)
@@ -982,16 +1038,16 @@ func TestConnection_sendCalDataWrite(t *testing.T) {
 				tt.setup(t, &tt.fields)
 			}
 			c := &Connection{
-				DefaultConnection: tt.fields.DefaultConnection,
-				messageCodec:      tt.fields.messageCodec,
-				subscribers:       tt.fields.subscribers,
-				tm:                tt.fields.tm,
-				configuration:     tt.fields.configuration,
-				driverContext:     tt.fields.driverContext,
-				connectionId:      tt.fields.connectionId,
-				tracer:            tt.fields.tracer,
-				log:               testutils.ProduceTestingLogger(t),
+				messageCodec:  tt.fields.messageCodec,
+				subscribers:   tt.fields.subscribers,
+				tm:            tt.fields.tm,
+				configuration: tt.fields.configuration,
+				driverContext: tt.fields.driverContext,
+				connectionId:  tt.fields.connectionId,
+				tracer:        tt.fields.tracer,
+				log:           testutils.ProduceTestingLogger(t),
 			}
+			c.DefaultConnection = _default.NewDefaultConnection(c, testutils.EnrichOptionsWithOptionsForTesting(t)...)
 			assert.Equalf(t, tt.want, c.sendCalDataWrite(tt.args.ctx, tt.args.ch, tt.args.paramNo, tt.args.parameterValue, tt.args.requestContext, tt.args.cbusOptions), "sendCalDataWrite(%v, %v, %v, %v, %v, %v)", tt.args.ctx, tt.args.ch, tt.args.paramNo, tt.args.parameterValue, tt.args.requestContext, tt.args.cbusOptions)
 		})
 	}
@@ -999,14 +1055,13 @@ func TestConnection_sendCalDataWrite(t *testing.T) {
 
 func TestConnection_sendReset(t *testing.T) {
 	type fields struct {
-		DefaultConnection _default.DefaultConnection
-		messageCodec      *MessageCodec
-		subscribers       []*Subscriber
-		tm                transactions.RequestTransactionManager
-		configuration     Configuration
-		driverContext     DriverContext
-		connectionId      string
-		tracer            tracer.Tracer
+		messageCodec  *MessageCodec
+		subscribers   []*Subscriber
+		tm            transactions.RequestTransactionManager
+		configuration Configuration
+		driverContext DriverContext
+		connectionId  string
+		tracer        tracer.Tracer
 	}
 	type args struct {
 		ctx                      context.Context
@@ -1024,6 +1079,12 @@ func TestConnection_sendReset(t *testing.T) {
 	}{
 		{
 			name: "send reset",
+			fields: fields{
+				driverContext: DriverContext{
+					awaitSetupComplete:      true,
+					awaitDisconnectComplete: true,
+				},
+			},
 			args: args{
 				ctx: testutils.TestContext(t),
 				ch:  make(chan plc4go.PlcConnectionConnectResult, 1),
@@ -1039,8 +1100,6 @@ func TestConnection_sendReset(t *testing.T) {
 			},
 			setup: func(t *testing.T, fields *fields, args *args) {
 				_options := testutils.EnrichOptionsWithOptionsForTesting(t)
-
-				fields.DefaultConnection = _default.NewDefaultConnection(nil, _options...)
 				transport := test.NewTransport(_options...)
 				ti, err := transport.CreateTransportInstance(url.URL{Scheme: "test"}, nil, _options...)
 				require.NoError(t, err)
@@ -1059,16 +1118,16 @@ func TestConnection_sendReset(t *testing.T) {
 				tt.setup(t, &tt.fields, &tt.args)
 			}
 			c := &Connection{
-				DefaultConnection: tt.fields.DefaultConnection,
-				messageCodec:      tt.fields.messageCodec,
-				subscribers:       tt.fields.subscribers,
-				tm:                tt.fields.tm,
-				configuration:     tt.fields.configuration,
-				driverContext:     tt.fields.driverContext,
-				connectionId:      tt.fields.connectionId,
-				tracer:            tt.fields.tracer,
-				log:               testutils.ProduceTestingLogger(t),
+				messageCodec:  tt.fields.messageCodec,
+				subscribers:   tt.fields.subscribers,
+				tm:            tt.fields.tm,
+				configuration: tt.fields.configuration,
+				driverContext: tt.fields.driverContext,
+				connectionId:  tt.fields.connectionId,
+				tracer:        tt.fields.tracer,
+				log:           testutils.ProduceTestingLogger(t),
 			}
+			c.DefaultConnection = _default.NewDefaultConnection(c, testutils.EnrichOptionsWithOptionsForTesting(t)...)
 			assert.Equalf(t, tt.wantOk, c.sendReset(tt.args.ctx, tt.args.ch, tt.args.cbusOptions, tt.args.requestContext, tt.args.sendOutErrorNotification), "sendReset(%v, %v, %v, %v, %v)", tt.args.ctx, tt.args.ch, tt.args.cbusOptions, tt.args.requestContext, tt.args.sendOutErrorNotification)
 		})
 	}
@@ -1076,14 +1135,13 @@ func TestConnection_sendReset(t *testing.T) {
 
 func TestConnection_setApplicationFilter(t *testing.T) {
 	type fields struct {
-		DefaultConnection _default.DefaultConnection
-		messageCodec      *MessageCodec
-		subscribers       []*Subscriber
-		tm                transactions.RequestTransactionManager
-		configuration     Configuration
-		driverContext     DriverContext
-		connectionId      string
-		tracer            tracer.Tracer
+		messageCodec  *MessageCodec
+		subscribers   []*Subscriber
+		tm            transactions.RequestTransactionManager
+		configuration Configuration
+		driverContext DriverContext
+		connectionId  string
+		tracer        tracer.Tracer
 	}
 	type args struct {
 		ctx            context.Context
@@ -1100,6 +1158,12 @@ func TestConnection_setApplicationFilter(t *testing.T) {
 	}{
 		{
 			name: "set application filter (failing)",
+			fields: fields{
+				driverContext: DriverContext{
+					awaitSetupComplete:      true,
+					awaitDisconnectComplete: true,
+				},
+			},
 			args: args{
 				ctx: testutils.TestContext(t),
 				ch:  make(chan plc4go.PlcConnectionConnectResult, 1),
@@ -1116,7 +1180,6 @@ func TestConnection_setApplicationFilter(t *testing.T) {
 				_options := testutils.EnrichOptionsWithOptionsForTesting(t)
 
 				// Setup connection
-				fields.DefaultConnection = _default.NewDefaultConnection(nil, _options...)
 				transport := test.NewTransport(_options...)
 				ti, err := transport.CreateTransportInstance(url.URL{Scheme: "test"}, nil, _options...)
 				require.NoError(t, err)
@@ -1135,16 +1198,16 @@ func TestConnection_setApplicationFilter(t *testing.T) {
 				tt.setup(t, &tt.fields)
 			}
 			c := &Connection{
-				DefaultConnection: tt.fields.DefaultConnection,
-				messageCodec:      tt.fields.messageCodec,
-				subscribers:       tt.fields.subscribers,
-				tm:                tt.fields.tm,
-				configuration:     tt.fields.configuration,
-				driverContext:     tt.fields.driverContext,
-				connectionId:      tt.fields.connectionId,
-				tracer:            tt.fields.tracer,
-				log:               testutils.ProduceTestingLogger(t),
+				messageCodec:  tt.fields.messageCodec,
+				subscribers:   tt.fields.subscribers,
+				tm:            tt.fields.tm,
+				configuration: tt.fields.configuration,
+				driverContext: tt.fields.driverContext,
+				connectionId:  tt.fields.connectionId,
+				tracer:        tt.fields.tracer,
+				log:           testutils.ProduceTestingLogger(t),
 			}
+			c.DefaultConnection = _default.NewDefaultConnection(c, testutils.EnrichOptionsWithOptionsForTesting(t)...)
 			assert.Equalf(t, tt.wantOk, c.setApplicationFilter(tt.args.ctx, tt.args.ch, tt.args.requestContext, tt.args.cbusOptions), "setApplicationFilter(%v, %v, %v, %v)", tt.args.ctx, tt.args.ch, tt.args.requestContext, tt.args.cbusOptions)
 		})
 	}
@@ -1152,14 +1215,13 @@ func TestConnection_setApplicationFilter(t *testing.T) {
 
 func TestConnection_setInterface1PowerUpSettings(t *testing.T) {
 	type fields struct {
-		DefaultConnection _default.DefaultConnection
-		messageCodec      *MessageCodec
-		subscribers       []*Subscriber
-		tm                transactions.RequestTransactionManager
-		configuration     Configuration
-		driverContext     DriverContext
-		connectionId      string
-		tracer            tracer.Tracer
+		messageCodec  *MessageCodec
+		subscribers   []*Subscriber
+		tm            transactions.RequestTransactionManager
+		configuration Configuration
+		driverContext DriverContext
+		connectionId  string
+		tracer        tracer.Tracer
 	}
 	type args struct {
 		ctx            context.Context
@@ -1176,6 +1238,12 @@ func TestConnection_setInterface1PowerUpSettings(t *testing.T) {
 	}{
 		{
 			name: "set interface 1 PUN options (failing)",
+			fields: fields{
+				driverContext: DriverContext{
+					awaitSetupComplete:      true,
+					awaitDisconnectComplete: true,
+				},
+			},
 			args: args{
 				ctx: testutils.TestContext(t),
 				ch:  make(chan plc4go.PlcConnectionConnectResult, 1),
@@ -1192,7 +1260,6 @@ func TestConnection_setInterface1PowerUpSettings(t *testing.T) {
 				_options := testutils.EnrichOptionsWithOptionsForTesting(t)
 
 				// Setup connection
-				fields.DefaultConnection = _default.NewDefaultConnection(nil, _options...)
 				transport := test.NewTransport(_options...)
 				ti, err := transport.CreateTransportInstance(url.URL{Scheme: "test"}, nil, _options...)
 				require.NoError(t, err)
@@ -1211,16 +1278,16 @@ func TestConnection_setInterface1PowerUpSettings(t *testing.T) {
 				tt.setup(t, &tt.fields, &tt.args)
 			}
 			c := &Connection{
-				DefaultConnection: tt.fields.DefaultConnection,
-				messageCodec:      tt.fields.messageCodec,
-				subscribers:       tt.fields.subscribers,
-				tm:                tt.fields.tm,
-				configuration:     tt.fields.configuration,
-				driverContext:     tt.fields.driverContext,
-				connectionId:      tt.fields.connectionId,
-				tracer:            tt.fields.tracer,
-				log:               testutils.ProduceTestingLogger(t),
+				messageCodec:  tt.fields.messageCodec,
+				subscribers:   tt.fields.subscribers,
+				tm:            tt.fields.tm,
+				configuration: tt.fields.configuration,
+				driverContext: tt.fields.driverContext,
+				connectionId:  tt.fields.connectionId,
+				tracer:        tt.fields.tracer,
+				log:           testutils.ProduceTestingLogger(t),
 			}
+			c.DefaultConnection = _default.NewDefaultConnection(c, testutils.EnrichOptionsWithOptionsForTesting(t)...)
 			assert.Equalf(t, tt.wantOk, c.setInterface1PowerUpSettings(tt.args.ctx, tt.args.ch, tt.args.requestContext, tt.args.cbusOptions), "setInterface1PowerUpSettings(%v, %v, %v, %v)", tt.args.ctx, tt.args.ch, tt.args.requestContext, tt.args.cbusOptions)
 		})
 	}
@@ -1228,14 +1295,13 @@ func TestConnection_setInterface1PowerUpSettings(t *testing.T) {
 
 func TestConnection_setInterfaceOptions1(t *testing.T) {
 	type fields struct {
-		DefaultConnection _default.DefaultConnection
-		messageCodec      *MessageCodec
-		subscribers       []*Subscriber
-		tm                transactions.RequestTransactionManager
-		configuration     Configuration
-		driverContext     DriverContext
-		connectionId      string
-		tracer            tracer.Tracer
+		messageCodec  *MessageCodec
+		subscribers   []*Subscriber
+		tm            transactions.RequestTransactionManager
+		configuration Configuration
+		driverContext DriverContext
+		connectionId  string
+		tracer        tracer.Tracer
 	}
 	type args struct {
 		ctx            context.Context
@@ -1252,6 +1318,12 @@ func TestConnection_setInterfaceOptions1(t *testing.T) {
 	}{
 		{
 			name: "set interface 1 options (failing)",
+			fields: fields{
+				driverContext: DriverContext{
+					awaitSetupComplete:      true,
+					awaitDisconnectComplete: true,
+				},
+			},
 			args: args{
 				ctx: testutils.TestContext(t),
 				ch:  make(chan plc4go.PlcConnectionConnectResult, 1),
@@ -1268,7 +1340,6 @@ func TestConnection_setInterfaceOptions1(t *testing.T) {
 				_options := testutils.EnrichOptionsWithOptionsForTesting(t)
 
 				// Setup connection
-				fields.DefaultConnection = _default.NewDefaultConnection(nil, _options...)
 				transport := test.NewTransport(_options...)
 				ti, err := transport.CreateTransportInstance(url.URL{Scheme: "test"}, nil, _options...)
 				require.NoError(t, err)
@@ -1287,16 +1358,16 @@ func TestConnection_setInterfaceOptions1(t *testing.T) {
 				tt.setup(t, &tt.fields)
 			}
 			c := &Connection{
-				DefaultConnection: tt.fields.DefaultConnection,
-				messageCodec:      tt.fields.messageCodec,
-				subscribers:       tt.fields.subscribers,
-				tm:                tt.fields.tm,
-				configuration:     tt.fields.configuration,
-				driverContext:     tt.fields.driverContext,
-				connectionId:      tt.fields.connectionId,
-				tracer:            tt.fields.tracer,
-				log:               testutils.ProduceTestingLogger(t),
+				messageCodec:  tt.fields.messageCodec,
+				subscribers:   tt.fields.subscribers,
+				tm:            tt.fields.tm,
+				configuration: tt.fields.configuration,
+				driverContext: tt.fields.driverContext,
+				connectionId:  tt.fields.connectionId,
+				tracer:        tt.fields.tracer,
+				log:           testutils.ProduceTestingLogger(t),
 			}
+			c.DefaultConnection = _default.NewDefaultConnection(c, testutils.EnrichOptionsWithOptionsForTesting(t)...)
 			assert.Equalf(t, tt.want, c.setInterfaceOptions1(tt.args.ctx, tt.args.ch, tt.args.requestContext, tt.args.cbusOptions), "setInterfaceOptions1(%v, %v, %v, %v)", tt.args.ctx, tt.args.ch, tt.args.requestContext, tt.args.cbusOptions)
 		})
 	}
@@ -1304,14 +1375,13 @@ func TestConnection_setInterfaceOptions1(t *testing.T) {
 
 func TestConnection_setInterfaceOptions3(t *testing.T) {
 	type fields struct {
-		DefaultConnection _default.DefaultConnection
-		messageCodec      *MessageCodec
-		subscribers       []*Subscriber
-		tm                transactions.RequestTransactionManager
-		configuration     Configuration
-		driverContext     DriverContext
-		connectionId      string
-		tracer            tracer.Tracer
+		messageCodec  *MessageCodec
+		subscribers   []*Subscriber
+		tm            transactions.RequestTransactionManager
+		configuration Configuration
+		driverContext DriverContext
+		connectionId  string
+		tracer        tracer.Tracer
 	}
 	type args struct {
 		ctx            context.Context
@@ -1328,6 +1398,12 @@ func TestConnection_setInterfaceOptions3(t *testing.T) {
 	}{
 		{
 			name: "set interface 3 options (failing)",
+			fields: fields{
+				driverContext: DriverContext{
+					awaitSetupComplete:      true,
+					awaitDisconnectComplete: true,
+				},
+			},
 			args: args{
 				ctx: testutils.TestContext(t),
 				ch:  make(chan plc4go.PlcConnectionConnectResult, 1),
@@ -1344,7 +1420,6 @@ func TestConnection_setInterfaceOptions3(t *testing.T) {
 				_options := testutils.EnrichOptionsWithOptionsForTesting(t)
 
 				// Setup connection
-				fields.DefaultConnection = _default.NewDefaultConnection(nil, _options...)
 				transport := test.NewTransport(_options...)
 				ti, err := transport.CreateTransportInstance(url.URL{Scheme: "test"}, nil, _options...)
 				require.NoError(t, err)
@@ -1363,16 +1438,16 @@ func TestConnection_setInterfaceOptions3(t *testing.T) {
 				tt.setup(t, &tt.fields)
 			}
 			c := &Connection{
-				DefaultConnection: tt.fields.DefaultConnection,
-				messageCodec:      tt.fields.messageCodec,
-				subscribers:       tt.fields.subscribers,
-				tm:                tt.fields.tm,
-				configuration:     tt.fields.configuration,
-				driverContext:     tt.fields.driverContext,
-				connectionId:      tt.fields.connectionId,
-				tracer:            tt.fields.tracer,
-				log:               testutils.ProduceTestingLogger(t),
+				messageCodec:  tt.fields.messageCodec,
+				subscribers:   tt.fields.subscribers,
+				tm:            tt.fields.tm,
+				configuration: tt.fields.configuration,
+				driverContext: tt.fields.driverContext,
+				connectionId:  tt.fields.connectionId,
+				tracer:        tt.fields.tracer,
+				log:           testutils.ProduceTestingLogger(t),
 			}
+			c.DefaultConnection = _default.NewDefaultConnection(c, testutils.EnrichOptionsWithOptionsForTesting(t)...)
 			assert.Equalf(t, tt.wantOk, c.setInterfaceOptions3(tt.args.ctx, tt.args.ch, tt.args.requestContext, tt.args.cbusOptions), "setInterfaceOptions3(%v, %v, %v, %v)", tt.args.ctx, tt.args.ch, tt.args.requestContext, tt.args.cbusOptions)
 		})
 	}
@@ -1394,12 +1469,11 @@ func TestConnection_setupConnection(t *testing.T) {
 		ch  chan plc4go.PlcConnectionConnectResult
 	}
 	tests := []struct {
-		name        string
-		fields      fields
-		args        args
-		setup       func(t *testing.T, fields *fields)
-		manipulator func(t *testing.T, connection *Connection)
-		validator   func(t *testing.T, result plc4go.PlcConnectionConnectResult)
+		name      string
+		fields    fields
+		args      args
+		setup     func(t *testing.T, fields *fields)
+		validator func(t *testing.T, result plc4go.PlcConnectionConnectResult)
 	}{
 		{
 			name: "setup connection (failing)",
@@ -1426,10 +1500,6 @@ func TestConnection_setupConnection(t *testing.T) {
 				})
 				fields.messageCodec = codec
 			},
-			manipulator: func(t *testing.T, connection *Connection) {
-				_options := testutils.EnrichOptionsWithOptionsForTesting(t)
-				connection.DefaultConnection = _default.NewDefaultConnection(connection, _options...)
-			},
 			validator: func(t *testing.T, result plc4go.PlcConnectionConnectResult) {
 				assert.NotNil(t, result)
 				assert.Error(t, result.GetErr())
@@ -1483,10 +1553,6 @@ func TestConnection_setupConnection(t *testing.T) {
 
 				fields.messageCodec = codec
 			},
-			manipulator: func(t *testing.T, connection *Connection) {
-				_options := testutils.EnrichOptionsWithOptionsForTesting(t)
-				connection.DefaultConnection = _default.NewDefaultConnection(connection, _options...)
-			},
 			validator: func(t *testing.T, result plc4go.PlcConnectionConnectResult) {
 				assert.NotNil(t, result)
 				assert.Error(t, result.GetErr())
@@ -1551,10 +1617,6 @@ func TestConnection_setupConnection(t *testing.T) {
 
 				fields.messageCodec = codec
 			},
-			manipulator: func(t *testing.T, connection *Connection) {
-				_options := testutils.EnrichOptionsWithOptionsForTesting(t)
-				connection.DefaultConnection = _default.NewDefaultConnection(connection, _options...)
-			},
 			validator: func(t *testing.T, result plc4go.PlcConnectionConnectResult) {
 				assert.NotNil(t, result)
 				assert.Error(t, result.GetErr())
@@ -1627,10 +1689,6 @@ func TestConnection_setupConnection(t *testing.T) {
 
 				fields.messageCodec = codec
 			},
-			manipulator: func(t *testing.T, connection *Connection) {
-				_options := testutils.EnrichOptionsWithOptionsForTesting(t)
-				connection.DefaultConnection = _default.NewDefaultConnection(connection, _options...)
-			},
 			validator: func(t *testing.T, result plc4go.PlcConnectionConnectResult) {
 				assert.NotNil(t, result)
 				assert.Error(t, result.GetErr())
@@ -1708,10 +1766,6 @@ func TestConnection_setupConnection(t *testing.T) {
 
 				fields.messageCodec = codec
 			},
-			manipulator: func(t *testing.T, connection *Connection) {
-				_options := testutils.EnrichOptionsWithOptionsForTesting(t)
-				connection.DefaultConnection = _default.NewDefaultConnection(connection, _options...)
-			},
 			validator: func(t *testing.T, result plc4go.PlcConnectionConnectResult) {
 				assert.NotNil(t, result)
 				assert.Error(t, result.GetErr())
@@ -1794,10 +1848,6 @@ func TestConnection_setupConnection(t *testing.T) {
 				})
 				fields.messageCodec = codec
 			},
-			manipulator: func(t *testing.T, connection *Connection) {
-				_options := testutils.EnrichOptionsWithOptionsForTesting(t)
-				connection.DefaultConnection = _default.NewDefaultConnection(connection, _options...)
-			},
 			validator: func(t *testing.T, result plc4go.PlcConnectionConnectResult) {
 				assert.NotNil(t, result)
 				assert.NoError(t, result.GetErr())
@@ -1820,9 +1870,7 @@ func TestConnection_setupConnection(t *testing.T) {
 				tracer:        tt.fields.tracer,
 				log:           testutils.ProduceTestingLogger(t),
 			}
-			if tt.manipulator != nil {
-				tt.manipulator(t, c)
-			}
+			c.DefaultConnection = _default.NewDefaultConnection(c, testutils.EnrichOptionsWithOptionsForTesting(t)...)
 			c.setupConnection(tt.args.ctx, tt.args.ch)
 			assert.NotNil(t, tt.args.ch, "We always need a result channel")
 			chanTimeout := time.NewTimer(10 * time.Second)
@@ -1854,14 +1902,13 @@ func TestConnection_setupConnection(t *testing.T) {
 
 func TestConnection_startSubscriptionHandler(t *testing.T) {
 	type fields struct {
-		DefaultConnection _default.DefaultConnection
-		messageCodec      *MessageCodec
-		subscribers       []*Subscriber
-		tm                transactions.RequestTransactionManager
-		configuration     Configuration
-		driverContext     DriverContext
-		connectionId      string
-		tracer            tracer.Tracer
+		messageCodec  *MessageCodec
+		subscribers   []*Subscriber
+		tm            transactions.RequestTransactionManager
+		configuration Configuration
+		driverContext DriverContext
+		connectionId  string
+		tracer        tracer.Tracer
 	}
 	tests := []struct {
 		name        string
@@ -1871,6 +1918,12 @@ func TestConnection_startSubscriptionHandler(t *testing.T) {
 	}{
 		{
 			name: "just start",
+			fields: fields{
+				driverContext: DriverContext{
+					awaitSetupComplete:      true,
+					awaitDisconnectComplete: true,
+				},
+			},
 			manipulator: func(t *testing.T, connection *Connection) {
 				_options := testutils.EnrichOptionsWithOptionsForTesting(t)
 				connection.DefaultConnection = _default.NewDefaultConnection(connection, _options...)
@@ -1878,6 +1931,12 @@ func TestConnection_startSubscriptionHandler(t *testing.T) {
 		},
 		{
 			name: "just start and feed (no subs)",
+			fields: fields{
+				driverContext: DriverContext{
+					awaitSetupComplete:      true,
+					awaitDisconnectComplete: true,
+				},
+			},
 			setup: func(t *testing.T, fields *fields) {
 				_options := testutils.EnrichOptionsWithOptionsForTesting(t)
 
@@ -1898,14 +1957,17 @@ func TestConnection_startSubscriptionHandler(t *testing.T) {
 				fields.messageCodec = codec
 			},
 			manipulator: func(t *testing.T, connection *Connection) {
-				_options := testutils.EnrichOptionsWithOptionsForTesting(t)
-				defaultConnection := _default.NewDefaultConnection(connection, _options...)
-				defaultConnection.SetConnected(true)
-				connection.DefaultConnection = defaultConnection
+				connection.SetConnected(true)
 			},
 		},
 		{
 			name: "just start and feed",
+			fields: fields{
+				driverContext: DriverContext{
+					awaitSetupComplete:      true,
+					awaitDisconnectComplete: true,
+				},
+			},
 			setup: func(t *testing.T, fields *fields) {
 				_options := testutils.EnrichOptionsWithOptionsForTesting(t)
 
@@ -1930,29 +1992,23 @@ func TestConnection_startSubscriptionHandler(t *testing.T) {
 				fields.messageCodec = codec
 			},
 			manipulator: func(t *testing.T, connection *Connection) {
-				_options := testutils.EnrichOptionsWithOptionsForTesting(t)
-				defaultConnection := _default.NewDefaultConnection(connection, _options...)
-				defaultConnection.SetConnected(true)
-				connection.DefaultConnection = defaultConnection
+				connection.SetConnected(true)
 			},
 		},
 	}
 	for _, tt := range tests {
 		t.Run(tt.name, func(t *testing.T) {
 			c := &Connection{
-				DefaultConnection: tt.fields.DefaultConnection,
-				messageCodec:      tt.fields.messageCodec,
-				subscribers:       tt.fields.subscribers,
-				tm:                tt.fields.tm,
-				configuration:     tt.fields.configuration,
-				driverContext:     tt.fields.driverContext,
-				connectionId:      tt.fields.connectionId,
-				tracer:            tt.fields.tracer,
-				log:               testutils.ProduceTestingLogger(t),
-			}
-			if tt.manipulator != nil {
-				tt.manipulator(t, c)
+				messageCodec:  tt.fields.messageCodec,
+				subscribers:   tt.fields.subscribers,
+				tm:            tt.fields.tm,
+				configuration: tt.fields.configuration,
+				driverContext: tt.fields.driverContext,
+				connectionId:  tt.fields.connectionId,
+				tracer:        tt.fields.tracer,
+				log:           testutils.ProduceTestingLogger(t),
 			}
+			c.DefaultConnection = _default.NewDefaultConnection(c, testutils.EnrichOptionsWithOptionsForTesting(t)...)
 			c.startSubscriptionHandler()
 			// To shut down properly we always do that
 			c.SetConnected(false)