github.com/eliastor/durgaform@v0.0.0-20220816172711-d0ab2d17673e/internal/durgaform/eval_context_builtin_test.go (about)

     1  package durgaform
     2  
     3  import (
     4  	"reflect"
     5  	"sync"
     6  	"testing"
     7  
     8  	"github.com/eliastor/durgaform/internal/addrs"
     9  	"github.com/eliastor/durgaform/internal/providers"
    10  	"github.com/zclconf/go-cty/cty"
    11  )
    12  
    13  func TestBuiltinEvalContextProviderInput(t *testing.T) {
    14  	var lock sync.Mutex
    15  	cache := make(map[string]map[string]cty.Value)
    16  
    17  	ctx1 := testBuiltinEvalContext(t)
    18  	ctx1 = ctx1.WithPath(addrs.RootModuleInstance).(*BuiltinEvalContext)
    19  	ctx1.ProviderInputConfig = cache
    20  	ctx1.ProviderLock = &lock
    21  
    22  	ctx2 := testBuiltinEvalContext(t)
    23  	ctx2 = ctx2.WithPath(addrs.RootModuleInstance.Child("child", addrs.NoKey)).(*BuiltinEvalContext)
    24  	ctx2.ProviderInputConfig = cache
    25  	ctx2.ProviderLock = &lock
    26  
    27  	providerAddr1 := addrs.AbsProviderConfig{
    28  		Module:   addrs.RootModule,
    29  		Provider: addrs.NewDefaultProvider("foo"),
    30  	}
    31  	providerAddr2 := addrs.AbsProviderConfig{
    32  		Module:   addrs.RootModule.Child("child"),
    33  		Provider: addrs.NewDefaultProvider("foo"),
    34  	}
    35  
    36  	expected1 := map[string]cty.Value{"value": cty.StringVal("foo")}
    37  	ctx1.SetProviderInput(providerAddr1, expected1)
    38  
    39  	try2 := map[string]cty.Value{"value": cty.StringVal("bar")}
    40  	ctx2.SetProviderInput(providerAddr2, try2) // ignored because not a root module
    41  
    42  	actual1 := ctx1.ProviderInput(providerAddr1)
    43  	actual2 := ctx2.ProviderInput(providerAddr2)
    44  
    45  	if !reflect.DeepEqual(actual1, expected1) {
    46  		t.Errorf("wrong result 1\ngot:  %#v\nwant: %#v", actual1, expected1)
    47  	}
    48  	if actual2 != nil {
    49  		t.Errorf("wrong result 2\ngot:  %#v\nwant: %#v", actual2, nil)
    50  	}
    51  }
    52  
    53  func TestBuildingEvalContextInitProvider(t *testing.T) {
    54  	var lock sync.Mutex
    55  
    56  	testP := &MockProvider{}
    57  
    58  	ctx := testBuiltinEvalContext(t)
    59  	ctx = ctx.WithPath(addrs.RootModuleInstance).(*BuiltinEvalContext)
    60  	ctx.ProviderLock = &lock
    61  	ctx.ProviderCache = make(map[string]providers.Interface)
    62  	ctx.Plugins = newContextPlugins(map[addrs.Provider]providers.Factory{
    63  		addrs.NewDefaultProvider("test"): providers.FactoryFixed(testP),
    64  	}, nil)
    65  
    66  	providerAddrDefault := addrs.AbsProviderConfig{
    67  		Module:   addrs.RootModule,
    68  		Provider: addrs.NewDefaultProvider("test"),
    69  	}
    70  	providerAddrAlias := addrs.AbsProviderConfig{
    71  		Module:   addrs.RootModule,
    72  		Provider: addrs.NewDefaultProvider("test"),
    73  		Alias:    "foo",
    74  	}
    75  
    76  	_, err := ctx.InitProvider(providerAddrDefault)
    77  	if err != nil {
    78  		t.Fatalf("error initializing provider test: %s", err)
    79  	}
    80  	_, err = ctx.InitProvider(providerAddrAlias)
    81  	if err != nil {
    82  		t.Fatalf("error initializing provider test.foo: %s", err)
    83  	}
    84  }
    85  
    86  func testBuiltinEvalContext(t *testing.T) *BuiltinEvalContext {
    87  	return &BuiltinEvalContext{}
    88  }