@@ -82,7 +82,21 @@ func makeTar(t *testing.T, files map[string]string) []byte {
82
82
t .Helper ()
83
83
var buffer bytes.Buffer
84
84
writer := tar .NewWriter (& buffer )
85
+
86
+ addedDirs := make (map [string ]bool )
85
87
for name , content := range files {
88
+ // Add parent directories if they don't exist
89
+ dir := filepath .Dir (name )
90
+ if dir != "." && ! addedDirs [dir ] {
91
+ err := writer .WriteHeader (& tar.Header {
92
+ Name : dir + "/" , // Directory names must end with /
93
+ Mode : 0o755 ,
94
+ Typeflag : tar .TypeDir ,
95
+ })
96
+ require .NoError (t , err )
97
+ addedDirs [dir ] = true
98
+ }
99
+
86
100
err := writer .WriteHeader (& tar.Header {
87
101
Name : name ,
88
102
Size : int64 (len (content )),
@@ -703,6 +717,45 @@ func TestProvision(t *testing.T) {
703
717
}},
704
718
},
705
719
},
720
+ {
721
+ Name : "returns-modules" ,
722
+ Files : map [string ]string {
723
+ "main.tf" : `module "hello" {
724
+ source = "./module"
725
+ }` ,
726
+ "module/module.tf" : `
727
+ resource "null_resource" "example" {}
728
+
729
+ module "there" {
730
+ source = "./inner_module"
731
+ }
732
+ ` ,
733
+ "module/inner_module/inner_module.tf" : `
734
+ resource "null_resource" "inner_example" {}
735
+ ` ,
736
+ },
737
+ Request : & proto.PlanRequest {},
738
+ Response : & proto.PlanComplete {
739
+ Resources : []* proto.Resource {{
740
+ Name : "example" ,
741
+ Type : "null_resource" ,
742
+ ModulePath : "module.hello" ,
743
+ }, {
744
+ Name : "inner_example" ,
745
+ Type : "null_resource" ,
746
+ ModulePath : "module.hello.module.there" ,
747
+ }},
748
+ Modules : []* proto.Module {{
749
+ Key : "hello" ,
750
+ Version : "" ,
751
+ Source : "./module" ,
752
+ }, {
753
+ Key : "hello.there" ,
754
+ Version : "" ,
755
+ Source : "./inner_module" ,
756
+ }},
757
+ },
758
+ },
706
759
}
707
760
708
761
for _ , testCase := range testCases {
@@ -753,7 +806,7 @@ func TestProvision(t *testing.T) {
753
806
if testCase .Response != nil {
754
807
require .Equal (t , testCase .Response .Error , planComplete .Error )
755
808
756
- // Remove randomly generated data.
809
+ // Remove randomly generated data and sort by name .
757
810
normalizeResources (planComplete .Resources )
758
811
resourcesGot , err := json .Marshal (planComplete .Resources )
759
812
require .NoError (t , err )
@@ -766,6 +819,12 @@ func TestProvision(t *testing.T) {
766
819
parametersWant , err := json .Marshal (testCase .Response .Parameters )
767
820
require .NoError (t , err )
768
821
require .Equal (t , string (parametersWant ), string (parametersGot ))
822
+
823
+ modulesGot , err := json .Marshal (planComplete .Modules )
824
+ require .NoError (t , err )
825
+ modulesWant , err := json .Marshal (testCase .Response .Modules )
826
+ require .NoError (t , err )
827
+ require .Equal (t , string (modulesWant ), string (modulesGot ))
769
828
}
770
829
771
830
if testCase .Apply {
@@ -806,6 +865,9 @@ func normalizeResources(resources []*proto.Resource) {
806
865
agent .Auth = & proto.Agent_Token {}
807
866
}
808
867
}
868
+ sort .Slice (resources , func (i , j int ) bool {
869
+ return resources [i ].Name < resources [j ].Name
870
+ })
809
871
}
810
872
811
873
// nolint:paralleltest
0 commit comments