mirror of
https://github.com/opentofu/opentofu.git
synced 2024-12-23 23:50:12 -06:00
cb2e9119aa
Signed-off-by: namgyalangmo <75657887+namgyalangmo@users.noreply.github.com>
91 lines
3.3 KiB
Go
91 lines
3.3 KiB
Go
// Copyright (c) The OpenTofu Authors
|
|
// SPDX-License-Identifier: MPL-2.0
|
|
// Copyright (c) 2023 HashiCorp, Inc.
|
|
// SPDX-License-Identifier: MPL-2.0
|
|
|
|
package tofu
|
|
|
|
import (
|
|
"testing"
|
|
|
|
"github.com/opentofu/opentofu/internal/addrs"
|
|
"github.com/opentofu/opentofu/internal/configs"
|
|
"github.com/opentofu/opentofu/internal/configs/configschema"
|
|
"github.com/opentofu/opentofu/internal/providers"
|
|
"github.com/opentofu/opentofu/internal/provisioners"
|
|
"github.com/zclconf/go-cty/cty"
|
|
)
|
|
|
|
// contextTestFixture is a container for a set of objects that work together
|
|
// to create a base testing scenario. This is used to represent some common
|
|
// situations used as the basis for multiple tests.
|
|
type contextTestFixture struct {
|
|
Config *configs.Config
|
|
Providers map[addrs.Provider]providers.Factory
|
|
Provisioners map[string]provisioners.Factory
|
|
}
|
|
|
|
// ContextOpts returns a ContextOps pre-populated with the elements of this
|
|
// fixture. Each call returns a distinct object, so callers can apply further
|
|
// _shallow_ modifications to the options as needed.
|
|
func (f *contextTestFixture) ContextOpts() *ContextOpts {
|
|
return &ContextOpts{
|
|
Providers: f.Providers,
|
|
Provisioners: f.Provisioners,
|
|
}
|
|
}
|
|
|
|
// contextFixtureApplyVars builds and returns a test fixture for testing
|
|
// input variables, primarily during the apply phase. The configuration is
|
|
// loaded from testdata/apply-vars, and the provider resolver is
|
|
// configured with a resource type schema for aws_instance that matches
|
|
// what's used in that configuration.
|
|
func contextFixtureApplyVars(t *testing.T) *contextTestFixture {
|
|
c := testModule(t, "apply-vars")
|
|
p := mockProviderWithResourceTypeSchema("aws_instance", &configschema.Block{
|
|
Attributes: map[string]*configschema.Attribute{
|
|
"id": {Type: cty.String, Computed: true},
|
|
"foo": {Type: cty.String, Optional: true},
|
|
"bar": {Type: cty.String, Optional: true},
|
|
"baz": {Type: cty.String, Optional: true},
|
|
"num": {Type: cty.Number, Optional: true},
|
|
"list": {Type: cty.List(cty.String), Optional: true},
|
|
"map": {Type: cty.Map(cty.String), Optional: true},
|
|
},
|
|
})
|
|
p.ApplyResourceChangeFn = testApplyFn
|
|
p.PlanResourceChangeFn = testDiffFn
|
|
return &contextTestFixture{
|
|
Config: c,
|
|
Providers: map[addrs.Provider]providers.Factory{
|
|
addrs.NewDefaultProvider("aws"): testProviderFuncFixed(p),
|
|
},
|
|
}
|
|
}
|
|
|
|
// contextFixtureApplyVarsEnv builds and returns a test fixture for testing
|
|
// input variables set from the environment. The configuration is
|
|
// loaded from testdata/apply-vars-env, and the provider resolver is
|
|
// configured with a resource type schema for aws_instance that matches
|
|
// what's used in that configuration.
|
|
func contextFixtureApplyVarsEnv(t *testing.T) *contextTestFixture {
|
|
c := testModule(t, "apply-vars-env")
|
|
p := mockProviderWithResourceTypeSchema("aws_instance", &configschema.Block{
|
|
Attributes: map[string]*configschema.Attribute{
|
|
"string": {Type: cty.String, Optional: true},
|
|
"list": {Type: cty.List(cty.String), Optional: true},
|
|
"map": {Type: cty.Map(cty.String), Optional: true},
|
|
"id": {Type: cty.String, Computed: true},
|
|
"type": {Type: cty.String, Computed: true},
|
|
},
|
|
})
|
|
p.ApplyResourceChangeFn = testApplyFn
|
|
p.PlanResourceChangeFn = testDiffFn
|
|
return &contextTestFixture{
|
|
Config: c,
|
|
Providers: map[addrs.Provider]providers.Factory{
|
|
addrs.NewDefaultProvider("aws"): testProviderFuncFixed(p),
|
|
},
|
|
}
|
|
}
|