@@ -19,6 +19,7 @@ package docker
19
19
import (
20
20
"context"
21
21
"fmt"
22
+ "os"
22
23
"path/filepath"
23
24
"testing"
24
25
@@ -559,3 +560,68 @@ func TestGetDependencies(t *testing.T) {
559
560
})
560
561
}
561
562
}
563
+
564
+ func TestNormalizeDockerfilePath (t * testing.T ) {
565
+ tests := []struct {
566
+ description string
567
+ files []string
568
+ dockerfile string
569
+
570
+ expected string // relative path
571
+ }{
572
+ {
573
+ description : "dockerfile found in context" ,
574
+ files : []string {"Dockerfile" , "context/Dockerfile" },
575
+ dockerfile : "Dockerfile" ,
576
+ expected : "context/Dockerfile" ,
577
+ },
578
+ {
579
+ description : "path to dockerfile resolved in context first" ,
580
+ files : []string {"context/context/Dockerfile" , "context/Dockerfile" },
581
+ dockerfile : "context/Dockerfile" ,
582
+ expected : "context/context/Dockerfile" ,
583
+ },
584
+ {
585
+ description : "path to dockerfile in working directory" ,
586
+ files : []string {"context/Dockerfile" },
587
+ dockerfile : "context/Dockerfile" ,
588
+ expected : "context/Dockerfile" ,
589
+ },
590
+ {
591
+ description : "workspace dockerfile when missing in context" ,
592
+ files : []string {"Dockerfile" , "context/randomfile.txt" },
593
+ dockerfile : "Dockerfile" ,
594
+ expected : "Dockerfile" ,
595
+ },
596
+ {
597
+ description : "explicit dockerfile path" ,
598
+ files : []string {"context/Dockerfile" , "elsewhere/Dockerfile" },
599
+ dockerfile : "elsewhere/Dockerfile" ,
600
+ expected : "elsewhere/Dockerfile" ,
601
+ },
602
+ }
603
+ for _ , test := range tests {
604
+ testutil .Run (t , test .description , func (t * testutil.T ) {
605
+ d := t .NewTempDir ()
606
+ t .Chdir (d .Root ())
607
+
608
+ d .Mkdir ("context" )
609
+ d .Touch (test .files ... )
610
+
611
+ f , err := NormalizeDockerfilePath (d .Path ("context" ), test .dockerfile )
612
+ t .CheckError (false , err )
613
+ checkSameFile (t , d .Path (test .expected ), f )
614
+ })
615
+ }
616
+ }
617
+
618
+ func checkSameFile (t * testutil.T , expected , result string ) {
619
+ t .Helper ()
620
+ i1 , err := os .Stat (expected )
621
+ t .CheckError (false , err )
622
+ i2 , err := os .Stat (result )
623
+ t .CheckError (false , err )
624
+ if ! os .SameFile (i1 , i2 ) {
625
+ t .Errorf ("returned wrong file\n got: %s\n wanted: %s" , result , expected )
626
+ }
627
+ }
0 commit comments