github.com/jameswoolfenden/terraform@v0.11.12-beta1/configs/module_merge_test.go (about)

     1  package configs
     2  
     3  import (
     4  	"testing"
     5  
     6  	"github.com/hashicorp/hcl2/gohcl"
     7  	"github.com/hashicorp/hcl2/hcl"
     8  	"github.com/zclconf/go-cty/cty"
     9  )
    10  
    11  func TestModuleOverrideVariable(t *testing.T) {
    12  	mod, diags := testModuleFromDir("test-fixtures/valid-modules/override-variable")
    13  	assertNoDiagnostics(t, diags)
    14  	if mod == nil {
    15  		t.Fatalf("module is nil")
    16  	}
    17  
    18  	got := mod.Variables
    19  	want := map[string]*Variable{
    20  		"fully_overridden": {
    21  			Name:           "fully_overridden",
    22  			Description:    "b_override description",
    23  			DescriptionSet: true,
    24  			Default:        cty.StringVal("b_override"),
    25  			Type:           cty.String,
    26  			ParsingMode:    VariableParseLiteral,
    27  			DeclRange: hcl.Range{
    28  				Filename: "test-fixtures/valid-modules/override-variable/primary.tf",
    29  				Start: hcl.Pos{
    30  					Line:   1,
    31  					Column: 1,
    32  					Byte:   0,
    33  				},
    34  				End: hcl.Pos{
    35  					Line:   1,
    36  					Column: 28,
    37  					Byte:   27,
    38  				},
    39  			},
    40  		},
    41  		"partially_overridden": {
    42  			Name:           "partially_overridden",
    43  			Description:    "base description",
    44  			DescriptionSet: true,
    45  			Default:        cty.StringVal("b_override partial"),
    46  			Type:           cty.String,
    47  			ParsingMode:    VariableParseLiteral,
    48  			DeclRange: hcl.Range{
    49  				Filename: "test-fixtures/valid-modules/override-variable/primary.tf",
    50  				Start: hcl.Pos{
    51  					Line:   7,
    52  					Column: 1,
    53  					Byte:   103,
    54  				},
    55  				End: hcl.Pos{
    56  					Line:   7,
    57  					Column: 32,
    58  					Byte:   134,
    59  				},
    60  			},
    61  		},
    62  	}
    63  	assertResultDeepEqual(t, got, want)
    64  }
    65  
    66  func TestModuleOverrideModule(t *testing.T) {
    67  	mod, diags := testModuleFromDir("test-fixtures/valid-modules/override-module")
    68  	assertNoDiagnostics(t, diags)
    69  	if mod == nil {
    70  		t.Fatalf("module is nil")
    71  	}
    72  
    73  	if _, exists := mod.ModuleCalls["example"]; !exists {
    74  		t.Fatalf("no module 'example'")
    75  	}
    76  	if len(mod.ModuleCalls) != 1 {
    77  		t.Fatalf("wrong number of module calls in result %d; want 1", len(mod.ModuleCalls))
    78  	}
    79  
    80  	got := mod.ModuleCalls["example"]
    81  	want := &ModuleCall{
    82  		Name:       "example",
    83  		SourceAddr: "./example2-a_override",
    84  		SourceAddrRange: hcl.Range{
    85  			Filename: "test-fixtures/valid-modules/override-module/a_override.tf",
    86  			Start: hcl.Pos{
    87  				Line:   3,
    88  				Column: 12,
    89  				Byte:   31,
    90  			},
    91  			End: hcl.Pos{
    92  				Line:   3,
    93  				Column: 35,
    94  				Byte:   54,
    95  			},
    96  		},
    97  		SourceSet: true,
    98  		DeclRange: hcl.Range{
    99  			Filename: "test-fixtures/valid-modules/override-module/primary.tf",
   100  			Start: hcl.Pos{
   101  				Line:   2,
   102  				Column: 1,
   103  				Byte:   1,
   104  			},
   105  			End: hcl.Pos{
   106  				Line:   2,
   107  				Column: 17,
   108  				Byte:   17,
   109  			},
   110  		},
   111  	}
   112  
   113  	// We're going to extract and nil out our hcl.Body here because DeepEqual
   114  	// is not a useful way to assert on that.
   115  	gotConfig := got.Config
   116  	got.Config = nil
   117  
   118  	assertResultDeepEqual(t, got, want)
   119  
   120  	type content struct {
   121  		Kept  *string `hcl:"kept"`
   122  		Foo   *string `hcl:"foo"`
   123  		New   *string `hcl:"new"`
   124  		Newer *string `hcl:"newer"`
   125  	}
   126  	var gotArgs content
   127  	diags = gohcl.DecodeBody(gotConfig, nil, &gotArgs)
   128  	assertNoDiagnostics(t, diags)
   129  
   130  	wantArgs := content{
   131  		Kept:  stringPtr("primary kept"),
   132  		Foo:   stringPtr("a_override foo"),
   133  		New:   stringPtr("b_override new"),
   134  		Newer: stringPtr("b_override newer"),
   135  	}
   136  
   137  	assertResultDeepEqual(t, gotArgs, wantArgs)
   138  }