@@ -183,8 +183,8 @@ unit "db" {
183183}
184184` ), 0644 ))
185185
186- refs := hclparse .DiscoverStackChildUnits (fs , "/test/stack-src" , "/gen/networking" )
187-
186+ refs , err := hclparse .DiscoverStackChildUnits (fs , "/test/stack-src" , "/gen/networking" )
187+ require . NoError ( t , err )
188188 require .Len (t , refs , 2 )
189189 assert .Equal (t , "vpc" , refs [0 ].Name )
190190 assert .Equal (t , filepath .Join ("/gen/networking" , ".terragrunt-stack" , "vpc" ), refs [0 ].Path )
@@ -210,13 +210,11 @@ unit "db" {
210210}
211211` ), 0644 ))
212212
213- refs := hclparse .DiscoverStackChildUnits (fs , "/test/stack-src" , "/gen/networking" )
214-
213+ refs , err := hclparse .DiscoverStackChildUnits (fs , "/test/stack-src" , "/gen/networking" )
214+ require . NoError ( t , err )
215215 require .Len (t , refs , 2 )
216- // vpc has no_dot_terragrunt_stack=true, goes directly under stackGenDir
217216 assert .Equal (t , "vpc" , refs [0 ].Name )
218217 assert .Equal (t , filepath .Join ("/gen/networking" , "vpc" ), refs [0 ].Path )
219- // db is normal, goes under .terragrunt-stack/
220218 assert .Equal (t , "db" , refs [1 ].Name )
221219 assert .Equal (t , filepath .Join ("/gen/networking" , ".terragrunt-stack" , "db" ), refs [1 ].Path )
222220}
@@ -226,7 +224,8 @@ func TestDiscoverStackChildUnits_NoStackFile(t *testing.T) {
226224
227225 fs := vfs .NewMemMapFS ()
228226
229- refs := hclparse .DiscoverStackChildUnits (fs , "/nonexistent" , "/gen" )
227+ refs , err := hclparse .DiscoverStackChildUnits (fs , "/nonexistent" , "/gen" )
228+ require .NoError (t , err )
230229 assert .Nil (t , refs )
231230}
232231
@@ -273,7 +272,8 @@ unit "db" {
273272}
274273` ), 0644 ))
275274
276- paths := hclparse .UnitPathsFromStackDir (fs , "/test" )
275+ paths , err := hclparse .UnitPathsFromStackDir (fs , "/test" )
276+ require .NoError (t , err )
277277 require .Len (t , paths , 2 )
278278 assert .Contains (t , paths [0 ], ".terragrunt-stack" )
279279 assert .Contains (t , paths [1 ], ".terragrunt-stack" )
@@ -285,15 +285,31 @@ func TestUnitPathsFromStackDir_NotAStack(t *testing.T) {
285285 fs := vfs .NewMemMapFS ()
286286 require .NoError (t , fs .MkdirAll ("/test" , 0755 ))
287287
288- assert .Nil (t , hclparse .UnitPathsFromStackDir (fs , "/test" ))
288+ paths , err := hclparse .UnitPathsFromStackDir (fs , "/test" )
289+ require .NoError (t , err )
290+ assert .Nil (t , paths )
289291}
290292
291293func TestUnitPathsFromStackDir_Nonexistent (t * testing.T ) {
292294 t .Parallel ()
293295
294296 fs := vfs .NewMemMapFS ()
295297
296- assert .Nil (t , hclparse .UnitPathsFromStackDir (fs , "/nonexistent" ))
298+ paths , err := hclparse .UnitPathsFromStackDir (fs , "/nonexistent" )
299+ require .NoError (t , err )
300+ assert .Nil (t , paths )
301+ }
302+
303+ func TestUnitPathsFromStackDir_MalformedReturnsError (t * testing.T ) {
304+ t .Parallel ()
305+
306+ fs := vfs .NewMemMapFS ()
307+ require .NoError (t , fs .MkdirAll ("/test" , 0755 ))
308+ require .NoError (t , vfs .WriteFile (fs , "/test/terragrunt.stack.hcl" , []byte (`unit "x" { source = "." ` ), 0644 ))
309+
310+ paths , err := hclparse .UnitPathsFromStackDir (fs , "/test" )
311+ require .Error (t , err )
312+ assert .Nil (t , paths )
297313}
298314
299315func TestParseStackFileFromPath (t * testing.T ) {
@@ -370,8 +386,8 @@ unit "vpc" {
370386 symlinkDir := filepath .Join (tmpDir , "symlinked-stack" )
371387 require .NoError (t , os .Symlink (realDir , symlinkDir ))
372388
373- // UnitPathsFromStackDir via symlink should return paths based on resolved real dir
374- paths := hclparse . UnitPathsFromStackDir ( vfs . NewOSFS (), symlinkDir )
389+ paths , err := hclparse . UnitPathsFromStackDir ( vfs . NewOSFS (), symlinkDir )
390+ require . NoError ( t , err )
375391 require .Len (t , paths , 1 )
376392 // Path should be based on the REAL directory, not the symlink
377393 assert .Contains (t , paths [0 ], "real-stack" )
@@ -397,12 +413,24 @@ unit "db" {
397413 symlinkSrcDir := filepath .Join (tmpDir , "symlinked-source" )
398414 require .NoError (t , os .Symlink (realSrcDir , symlinkSrcDir ))
399415
400- // DiscoverStackChildUnits via symlink should work
401- refs := hclparse . DiscoverStackChildUnits ( vfs . NewOSFS (), symlinkSrcDir , "/gen/stack" )
416+ refs , err := hclparse . DiscoverStackChildUnits ( vfs . NewOSFS (), symlinkSrcDir , "/gen/stack" )
417+ require . NoError ( t , err )
402418 require .Len (t , refs , 1 )
403419 assert .Equal (t , "db" , refs [0 ].Name )
404420}
405421
422+ func TestDiscoverStackChildUnits_MalformedReturnsError (t * testing.T ) {
423+ t .Parallel ()
424+
425+ fs := vfs .NewMemMapFS ()
426+ require .NoError (t , fs .MkdirAll ("/test/stack-src" , 0755 ))
427+ require .NoError (t , vfs .WriteFile (fs , "/test/stack-src/terragrunt.stack.hcl" , []byte (`unit "x" { source = "."` ), 0644 ))
428+
429+ refs , err := hclparse .DiscoverStackChildUnits (fs , "/test/stack-src" , "/gen" )
430+ require .Error (t , err )
431+ assert .Nil (t , refs )
432+ }
433+
406434func TestParseStackFile_WithInclude (t * testing.T ) {
407435 t .Parallel ()
408436
0 commit comments