github.com/medzin/terraform@v0.11.11/config/import_tree_test.go (about)

     1  package config
     2  
     3  import (
     4  	"testing"
     5  )
     6  
     7  func TestImportTreeHCL2Experiment(t *testing.T) {
     8  	// Can only run this test if we're built with the experiment enabled.
     9  	// Enable this test by passing the following option to "go test":
    10  	//    -ldflags="-X github.com/hashicorp/terraform/config.enableHCL2Experiment=true"
    11  	// See the comment associated with this flag variable for more information.
    12  	if enableHCL2Experiment == "" {
    13  		t.Skip("HCL2 experiment is not enabled")
    14  	}
    15  
    16  	t.Run("HCL not opted in", func(t *testing.T) {
    17  		// .tf file without opt-in should use the old HCL parser
    18  		imp, err := loadTree("test-fixtures/hcl2-experiment-switch/not-opted-in.tf")
    19  		if err != nil {
    20  			t.Fatal(err)
    21  		}
    22  
    23  		tree, err := imp.ConfigTree()
    24  		if err != nil {
    25  			t.Fatalf("unexpected error loading not-opted-in.tf: %s", err)
    26  		}
    27  
    28  		cfg := tree.Config
    29  		if got, want := len(cfg.Locals), 1; got != want {
    30  			t.Fatalf("wrong number of locals %#v; want %#v", got, want)
    31  		}
    32  		if cfg.Locals[0].RawConfig.Raw == nil {
    33  			// Having RawConfig.Raw indicates the old loader
    34  			t.Fatal("local has no RawConfig.Raw")
    35  		}
    36  	})
    37  
    38  	t.Run("HCL opted in", func(t *testing.T) {
    39  		// .tf file with opt-in should use the new HCL2 parser
    40  		imp, err := loadTree("test-fixtures/hcl2-experiment-switch/opted-in.tf")
    41  		if err != nil {
    42  			t.Fatal(err)
    43  		}
    44  
    45  		tree, err := imp.ConfigTree()
    46  		if err != nil {
    47  			t.Fatalf("unexpected error loading opted-in.tf: %s", err)
    48  		}
    49  
    50  		cfg := tree.Config
    51  		if got, want := len(cfg.Locals), 1; got != want {
    52  			t.Fatalf("wrong number of locals %#v; want %#v", got, want)
    53  		}
    54  		if cfg.Locals[0].RawConfig.Body == nil {
    55  			// Having RawConfig.Body indicates the new loader
    56  			t.Fatal("local has no RawConfig.Body")
    57  		}
    58  	})
    59  
    60  	t.Run("JSON ineligible", func(t *testing.T) {
    61  		// .tf.json file should always use the old HCL parser
    62  		imp, err := loadTree("test-fixtures/hcl2-experiment-switch/not-eligible.tf.json")
    63  		if err != nil {
    64  			t.Fatal(err)
    65  		}
    66  
    67  		tree, err := imp.ConfigTree()
    68  		if err != nil {
    69  			t.Fatalf("unexpected error loading not-eligible.tf.json: %s", err)
    70  		}
    71  
    72  		cfg := tree.Config
    73  		if got, want := len(cfg.Locals), 1; got != want {
    74  			t.Fatalf("wrong number of locals %#v; want %#v", got, want)
    75  		}
    76  		if cfg.Locals[0].RawConfig.Raw == nil {
    77  			// Having RawConfig.Raw indicates the old loader
    78  			t.Fatal("local has no RawConfig.Raw")
    79  		}
    80  	})
    81  }