@@ -611,6 +611,7 @@ func TestValidateComposeFile(t *testing.T) {
611611 fn string
612612 dt []byte
613613 isCompose bool
614+ wantErr bool
614615 }{
615616 {
616617 name : "empty service" ,
@@ -620,6 +621,7 @@ services:
620621 foo:
621622` ),
622623 isCompose : true ,
624+ wantErr : false ,
623625 },
624626 {
625627 name : "build" ,
@@ -630,6 +632,7 @@ services:
630632 build: .
631633` ),
632634 isCompose : true ,
635+ wantErr : false ,
633636 },
634637 {
635638 name : "image" ,
@@ -640,6 +643,7 @@ services:
640643 image: nginx
641644` ),
642645 isCompose : true ,
646+ wantErr : false ,
643647 },
644648 {
645649 name : "unknown ext" ,
@@ -650,6 +654,7 @@ services:
650654 image: nginx
651655` ),
652656 isCompose : true ,
657+ wantErr : false ,
653658 },
654659 {
655660 name : "hcl" ,
@@ -660,13 +665,64 @@ target "default" {
660665}
661666` ),
662667 isCompose : false ,
668+ wantErr : false ,
669+ },
670+ {
671+ name : "json" ,
672+ fn : "docker-bake.json" ,
673+ dt : []byte (`
674+ {
675+ "group": [
676+ {
677+ "targets": [
678+ "my-service"
679+ ]
680+ }
681+ ],
682+ "target": [
683+ {
684+ "context": ".",
685+ "dockerfile": "Dockerfile"
686+ }
687+ ]
688+ }
689+ ` ),
690+ isCompose : false ,
691+ wantErr : false ,
692+ },
693+ {
694+ name : "json unknown ext" ,
695+ fn : "docker-bake.foo" ,
696+ dt : []byte (`
697+ {
698+ "group": [
699+ {
700+ "targets": [
701+ "my-service"
702+ ]
703+ }
704+ ],
705+ "target": [
706+ {
707+ "context": ".",
708+ "dockerfile": "Dockerfile"
709+ }
710+ ]
711+ }
712+ ` ),
713+ isCompose : false ,
714+ wantErr : true ,
663715 },
664716 }
665717 for _ , tt := range cases {
666718 t .Run (tt .name , func (t * testing.T ) {
667719 isCompose , err := validateComposeFile (tt .dt , tt .fn )
668720 assert .Equal (t , tt .isCompose , isCompose )
669- require .NoError (t , err )
721+ if tt .wantErr {
722+ require .Error (t , err )
723+ } else {
724+ require .NoError (t , err )
725+ }
670726 })
671727 }
672728}
@@ -913,6 +969,14 @@ services:
913969 require .ErrorContains (t , err , `additional properties 'foo' not allowed` )
914970}
915971
972+ func TestEmptyComposeFile (t * testing.T ) {
973+ tmpdir := t .TempDir ()
974+ chdir (t , tmpdir )
975+ _ , err := ParseComposeFiles ([]File {{Name : "compose.yml" , Data : []byte (`` )}})
976+ require .Error (t , err )
977+ require .ErrorContains (t , err , `empty compose file` ) // https://github.com/compose-spec/compose-go/blob/a42e7579d813e64c0c1f598a666358bc0c0a0eb4/loader/loader.go#L542
978+ }
979+
916980// chdir changes the current working directory to the named directory,
917981// and then restore the original working directory at the end of the test.
918982func chdir (t * testing.T , dir string ) {
0 commit comments