@@ -19,13 +19,14 @@ import (
1919)
2020
2121type taskDockerTest struct {
22- id string
23- cmd string
24- disableNet bool
25- input io.Reader
26- output io.Writer
27- errors io.Writer
28- logURL string
22+ id string
23+ cmd string
24+ disableNet bool
25+ input io.Reader
26+ output io.Writer
27+ errors io.Writer
28+ logURL string
29+ exposedPort * uint64
2930}
3031
3132func (f * taskDockerTest ) Command () string { return f .cmd }
@@ -67,6 +68,7 @@ func (f *taskDockerTest) BeforeCall(context.Context, *models.Call, drivers.CallE
6768func (f * taskDockerTest ) AfterCall (context.Context , * models.Call , drivers.CallExtensions ) error {
6869 return nil
6970}
71+ func (f * taskDockerTest ) ExposedPort () * uint64 { return f .exposedPort }
7072
7173func createTask (id string ) * taskDockerTest {
7274 return & taskDockerTest {
@@ -557,3 +559,59 @@ func TestRunnerDockerInvalidSyslog(t *testing.T) {
557559 }
558560
559561}
562+
563+ func TestRunnerDockerLocalDebug (t * testing.T ) {
564+ ctx , cancel := context .WithTimeout (context .Background (), time .Duration (30 )* time .Second )
565+ defer cancel ()
566+
567+ dkr := NewDocker (drivers.Config {})
568+ defer dkr .Close ()
569+
570+ var output bytes.Buffer
571+ var errors bytes.Buffer
572+ var exposedPort uint64 = 5678
573+
574+ task := createTask ("test-docker-local-debug" )
575+ task .output = & output
576+ task .errors = & errors
577+ task .exposedPort = & exposedPort
578+
579+ cookie , err := dkr .CreateCookie (ctx , task )
580+ if err != nil {
581+ t .Fatal ("Couldn't create task cookie" )
582+ }
583+
584+ defer cookie .Close (ctx )
585+
586+ err = commonCookiePull (ctx , cookie )
587+ if err != nil {
588+ t .Fatal (err )
589+ }
590+ err , result := commonCookieRun (ctx , cookie )
591+ if err != nil {
592+ t .Fatal (err )
593+ }
594+ if result .Error () != nil {
595+ t .Fatal (result .Error ())
596+ }
597+
598+ if result .Status () != "success" {
599+ t .Fatalf ("Test should successfully run the image: %s output: %s errors: %s" ,
600+ result .Error (), output .String (), errors .String ())
601+ }
602+
603+ port := docker .Port ("5678/tcp" )
604+ var containerOptions docker.CreateContainerOptions
605+ containerOptions = cookie .ContainerOptions ().(docker.CreateContainerOptions )
606+ if _ , ok := containerOptions .Config .ExposedPorts [port ]; ! ok {
607+ t .Errorf ("Expected ExposedPorts to contain 5678/tcp, got: %+v" , containerOptions .Config .ExposedPorts )
608+ }
609+ bindings , ok := containerOptions .HostConfig .PortBindings [port ]
610+ if ! ok || len (bindings ) != 1 {
611+ t .Fatalf ("Expected PortBindings for '5678/tcp', got: %+v" , containerOptions .HostConfig .PortBindings )
612+ }
613+ binding := bindings [0 ]
614+ if binding .HostIP != "0.0.0.0" || binding .HostPort != "5678" {
615+ t .Errorf ("Expected HostIP '0.0.0.0' and HostPort '5678', got HostIP '%s', HostPort '%s'" , binding .HostIP , binding .HostPort )
616+ }
617+ }
0 commit comments