55 "errors"
66 "fmt"
77 "net"
8+ "strconv"
89 "strings"
910
1011 "github.com/docker/go-connections/nat"
@@ -54,13 +55,10 @@ strategies:
5455`
5556)
5657
57- type hydraDependancy struct {
58+ type dependancy struct {
5859 opts definition.ContainerOpts
5960 configuration string
6061
61- conn frame.DataSource
62- internalConn frame.DataSource
63-
6462 container testcontainers.Container
6563}
6664
@@ -76,21 +74,21 @@ func NewWithOpts(configuration string, containerOpts ...definition.ContainerOpti
7674 }
7775 opts .Setup (containerOpts ... )
7876
79- return & hydraDependancy {
77+ return & dependancy {
8078 opts : opts ,
8179 configuration : configuration ,
8280 }
8381}
8482
85- func (d * hydraDependancy ) Name () string {
83+ func (d * dependancy ) Name () string {
8684 return d .opts .ImageName
8785}
8886
89- func (d * hydraDependancy ) Container () testcontainers.Container {
87+ func (d * dependancy ) Container () testcontainers.Container {
9088 return d .container
9189}
9290
93- func (d * hydraDependancy ) migrateContainer (
91+ func (d * dependancy ) migrateContainer (
9492 ctx context.Context ,
9593 ntwk * testcontainers.DockerNetwork ,
9694 databaseURL string ,
@@ -130,12 +128,12 @@ func (d *hydraDependancy) migrateContainer(
130128 return nil
131129}
132130
133- func (d * hydraDependancy ) Setup (ctx context.Context , ntwk * testcontainers.DockerNetwork ) error {
134- if len (d .opts .Dependencies ) == 0 || ! d .opts .Dependencies [0 ].GetDS ().IsDB () {
131+ func (d * dependancy ) Setup (ctx context.Context , ntwk * testcontainers.DockerNetwork ) error {
132+ if len (d .opts .Dependencies ) == 0 || ! d .opts .Dependencies [0 ].GetDS (ctx ).IsDB () {
135133 return errors .New ("no Database dependencies was supplied" )
136134 }
137135
138- databaseURL := d .opts .Dependencies [0 ].GetInternalDS ().String ()
136+ databaseURL := d .opts .Dependencies [0 ].GetInternalDS (ctx ).String ()
139137 err := d .migrateContainer (ctx , ntwk , databaseURL )
140138 if err != nil {
141139 return err
@@ -175,51 +173,51 @@ func (d *hydraDependancy) Setup(ctx context.Context, ntwk *testcontainers.Docker
175173 return fmt .Errorf ("failed to start hydraContainer: %w" , err )
176174 }
177175
178- port , err := hydraContainer .MappedPort (ctx , adminPort )
179- if err != nil {
180- return fmt .Errorf ("failed to get connection string for hydraContainer: %w" , err )
181- }
176+ d .container = hydraContainer
177+ return nil
178+ }
182179
183- host , err := hydraContainer .Host (ctx )
180+ func (d * dependancy ) GetDS (ctx context.Context ) frame.DataSource {
181+ port := nat .Port (d .opts .Ports [1 ])
182+ conn , err := d .container .PortEndpoint (ctx , port , "http" )
184183 if err != nil {
185- return fmt .Errorf ("failed to get connection string for hydraContainer: %w" , err )
184+ logger := util .Log (ctx ).WithField ("image" , d .opts .ImageName )
185+ logger .WithError (err ).Error ("failed to get connection for Container" )
186186 }
187187
188- d .conn = frame .DataSource (fmt .Sprintf ("http://%s" , net .JoinHostPort (host , port .Port ())))
188+ return frame .DataSource (conn )
189+ }
189190
190- internalIP , err := hydraContainer .ContainerIP (ctx )
191+ func (d * dependancy ) GetInternalDS (ctx context.Context ) frame.DataSource {
192+ internalIP , err := d .container .ContainerIP (ctx )
191193 if err != nil {
192- return fmt .Errorf ("failed to get internal host ip for hydraContainer: %w" , err )
194+ logger := util .Log (ctx ).WithField ("image" , d .opts .ImageName )
195+ logger .WithError (err ).Error ("failed to get internal host ip for Container" )
196+ return ""
193197 }
194198
195- if d .opts .UseHostMode && internalIP == "" {
196- internalIP = host
199+ if internalIP == "" && d .opts .UseHostMode {
200+ internalIP , err = d .container .Host (ctx )
201+ if err != nil {
202+ logger := util .Log (ctx ).WithField ("image" , d .opts .ImageName )
203+ logger .WithError (err ).Error ("failed to get host ip for Container" )
204+ return ""
205+ }
197206 }
207+ port := nat .Port (d .opts .Ports [1 ])
198208
199- d .internalConn = frame .DataSource (
200- fmt .Sprintf ("http://%s" , net .JoinHostPort (internalIP , adminPort .Port ())),
201- )
202-
203- d .container = hydraContainer
204- return nil
209+ return frame .DataSource (fmt .Sprintf ("http://%s" , net .JoinHostPort (internalIP , strconv .Itoa (port .Int ()))))
205210}
206211
207- func (d * hydraDependancy ) GetDS () frame.DataSource {
208- return d .conn
209- }
210- func (d * hydraDependancy ) GetInternalDS () frame.DataSource {
211- return d .internalConn
212- }
213-
214- func (d * hydraDependancy ) GetRandomisedDS (
215- _ context.Context ,
212+ func (d * dependancy ) GetRandomisedDS (
213+ ctx context.Context ,
216214 _ string ,
217215) (frame.DataSource , func (context.Context ), error ) {
218- return d .GetDS (), func (_ context.Context ) {
216+ return d .GetDS (ctx ), func (_ context.Context ) {
219217 }, nil
220218}
221219
222- func (d * hydraDependancy ) Cleanup (ctx context.Context ) {
220+ func (d * dependancy ) Cleanup (ctx context.Context ) {
223221 if d .container != nil {
224222 if err := d .container .Terminate (ctx ); err != nil {
225223 log := util .Log (ctx )
0 commit comments