@@ -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 )),
@@ -745,6 +759,45 @@ func TestProvision(t *testing.T) {
745
759
}},
746
760
},
747
761
},
762
+ {
763
+ Name : "returns-modules" ,
764
+ Files : map [string ]string {
765
+ "main.tf" : `module "hello" {
766
+ source = "./module"
767
+ }` ,
768
+ "module/module.tf" : `
769
+ resource "null_resource" "example" {}
770
+
771
+ module "there" {
772
+ source = "./inner_module"
773
+ }
774
+ ` ,
775
+ "module/inner_module/inner_module.tf" : `
776
+ resource "null_resource" "inner_example" {}
777
+ ` ,
778
+ },
779
+ Request : & proto.PlanRequest {},
780
+ Response : & proto.PlanComplete {
781
+ Resources : []* proto.Resource {{
782
+ Name : "example" ,
783
+ Type : "null_resource" ,
784
+ ModulePath : "module.hello" ,
785
+ }, {
786
+ Name : "inner_example" ,
787
+ Type : "null_resource" ,
788
+ ModulePath : "module.hello.module.there" ,
789
+ }},
790
+ Modules : []* proto.Module {{
791
+ Key : "hello" ,
792
+ Version : "" ,
793
+ Source : "./module" ,
794
+ }, {
795
+ Key : "hello.there" ,
796
+ Version : "" ,
797
+ Source : "./inner_module" ,
798
+ }},
799
+ },
800
+ },
748
801
}
749
802
750
803
for _ , testCase := range testCases {
@@ -799,7 +852,7 @@ func TestProvision(t *testing.T) {
799
852
if testCase .Response != nil {
800
853
require .Equal (t , testCase .Response .Error , planComplete .Error )
801
854
802
- // Remove randomly generated data.
855
+ // Remove randomly generated data and sort by name .
803
856
normalizeResources (planComplete .Resources )
804
857
resourcesGot , err := json .Marshal (planComplete .Resources )
805
858
require .NoError (t , err )
@@ -812,6 +865,12 @@ func TestProvision(t *testing.T) {
812
865
parametersWant , err := json .Marshal (testCase .Response .Parameters )
813
866
require .NoError (t , err )
814
867
require .Equal (t , string (parametersWant ), string (parametersGot ))
868
+
869
+ modulesGot , err := json .Marshal (planComplete .Modules )
870
+ require .NoError (t , err )
871
+ modulesWant , err := json .Marshal (testCase .Response .Modules )
872
+ require .NoError (t , err )
873
+ require .Equal (t , string (modulesWant ), string (modulesGot ))
815
874
}
816
875
817
876
if testCase .Apply {
@@ -852,6 +911,9 @@ func normalizeResources(resources []*proto.Resource) {
852
911
agent .Auth = & proto.Agent_Token {}
853
912
}
854
913
}
914
+ sort .Slice (resources , func (i , j int ) bool {
915
+ return resources [i ].Name < resources [j ].Name
916
+ })
855
917
}
856
918
857
919
// nolint:paralleltest
0 commit comments