Skip to content

Commit

Permalink
refactor: factories struct
Browse files Browse the repository at this point in the history
  • Loading branch information
kmoe committed Jun 25, 2021
1 parent 03fc375 commit 60cd8fd
Show file tree
Hide file tree
Showing 4 changed files with 98 additions and 26 deletions.
14 changes: 10 additions & 4 deletions helper/resource/plugin.go
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,13 @@ import (
testing "github.com/mitchellh/go-testing-interface"
)

func runProviderCommand(t testing.T, f func() error, wd *plugintest.WorkingDir, factories map[string]func() (*schema.Provider, error), v5factories map[string]func() (tfprotov5.ProviderServer, error), v6factories map[string]func() (tfprotov6.ProviderServer, error)) error {
type providerFactories struct {
legacy map[string]func() (*schema.Provider, error)
protov5 map[string]func() (tfprotov5.ProviderServer, error)
protov6 map[string]func() (tfprotov6.ProviderServer, error)
}

func runProviderCommand(t testing.T, f func() error, wd *plugintest.WorkingDir, factories providerFactories) error {
// don't point to this as a test failure location
// point to whatever called it
t.Helper()
Expand Down Expand Up @@ -59,7 +65,7 @@ func runProviderCommand(t testing.T, f func() error, wd *plugintest.WorkingDir,
// WaitGroup to listen for all of the close channels.
var wg sync.WaitGroup
reattachInfo := map[string]tfexec.ReattachConfig{}
for providerName, factory := range factories {
for providerName, factory := range factories.legacy {
// providerName may be returned as terraform-provider-foo, and
// we need just foo. So let's fix that.
providerName = strings.TrimPrefix(providerName, "terraform-provider-")
Expand Down Expand Up @@ -124,7 +130,7 @@ func runProviderCommand(t testing.T, f func() error, wd *plugintest.WorkingDir,

// Now spin up gRPC servers for every protov5 provider factory
// in the same way.
for providerName, factory := range v5factories {
for providerName, factory := range factories.protov5 {
// providerName may be returned as terraform-provider-foo, and
// we need just foo. So let's fix that.
providerName = strings.TrimPrefix(providerName, "terraform-provider-")
Expand Down Expand Up @@ -202,7 +208,7 @@ func runProviderCommand(t testing.T, f func() error, wd *plugintest.WorkingDir,

// Now spin up gRPC servers for every protov6 provider factory
// in the same way.
for providerName, factory := range v6factories {
for providerName, factory := range factories.protov6 {
// providerName may be returned as terraform-provider-foo, and
// we need just foo. So let's fix that.
providerName = strings.TrimPrefix(providerName, "terraform-provider-")
Expand Down
20 changes: 16 additions & 4 deletions helper/resource/testing_new.go
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,10 @@ func runPostTestDestroy(t testing.T, c TestCase, wd *plugintest.WorkingDir, fact

err := runProviderCommand(t, func() error {
return wd.Destroy()
}, wd, factories, v5factories, v6factories)
}, wd, providerFactories{
legacy: factories,
protov5: v5factories,
protov6: v6factories})
if err != nil {
return err
}
Expand Down Expand Up @@ -52,7 +55,10 @@ func runNewTest(t testing.T, c TestCase, helper *plugintest.Helper) {
return err
}
return nil
}, wd, c.ProviderFactories, c.ProtoV5ProviderFactories, c.ProtoV6ProviderFactories)
}, wd, providerFactories{
legacy: c.ProviderFactories,
protov5: c.ProtoV5ProviderFactories,
protov6: c.ProtoV6ProviderFactories})
if err != nil {
t.Fatalf("Error retrieving state, there may be dangling resources: %s", err.Error())
return
Expand All @@ -79,7 +85,10 @@ func runNewTest(t testing.T, c TestCase, helper *plugintest.Helper) {
}
err = runProviderCommand(t, func() error {
return wd.Init()
}, wd, c.ProviderFactories, c.ProtoV5ProviderFactories, c.ProtoV6ProviderFactories)
}, wd, providerFactories{
legacy: c.ProviderFactories,
protov5: c.ProtoV5ProviderFactories,
protov6: c.ProtoV6ProviderFactories})
if err != nil {
t.Fatalf("Error running init: %s", err.Error())
return
Expand Down Expand Up @@ -219,7 +228,10 @@ func testIDRefresh(c TestCase, t testing.T, wd *plugintest.WorkingDir, step Test
return err
}
return nil
}, wd, c.ProviderFactories, c.ProtoV5ProviderFactories, c.ProtoV6ProviderFactories)
}, wd, providerFactories{
legacy: c.ProviderFactories,
protov5: c.ProtoV5ProviderFactories,
protov6: c.ProtoV6ProviderFactories})
if err != nil {
return err
}
Expand Down
70 changes: 56 additions & 14 deletions helper/resource/testing_new_config.go
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,10 @@ func testStepNewConfig(t testing.T, c TestCase, wd *plugintest.WorkingDir, step
return err
}
return nil
}, wd, c.ProviderFactories, c.ProtoV5ProviderFactories, c.ProtoV6ProviderFactories)
}, wd, providerFactories{
legacy: c.ProviderFactories,
protov5: c.ProtoV5ProviderFactories,
protov6: c.ProtoV6ProviderFactories})
if err != nil {
return err
}
Expand All @@ -44,7 +47,10 @@ func testStepNewConfig(t testing.T, c TestCase, wd *plugintest.WorkingDir, step
// failing to do this will result in data sources not being updated
err = runProviderCommand(t, func() error {
return wd.Refresh()
}, wd, c.ProviderFactories, c.ProtoV5ProviderFactories, c.ProtoV6ProviderFactories)
}, wd, providerFactories{
legacy: c.ProviderFactories,
protov5: c.ProtoV5ProviderFactories,
protov6: c.ProtoV6ProviderFactories})
if err != nil {
return fmt.Errorf("Error running pre-apply refresh: %w", err)
}
Expand All @@ -59,7 +65,10 @@ func testStepNewConfig(t testing.T, c TestCase, wd *plugintest.WorkingDir, step
return wd.CreateDestroyPlan()
}
return wd.CreatePlan()
}, wd, c.ProviderFactories, c.ProtoV5ProviderFactories, c.ProtoV6ProviderFactories)
}, wd, providerFactories{
legacy: c.ProviderFactories,
protov5: c.ProtoV5ProviderFactories,
protov6: c.ProtoV6ProviderFactories})
if err != nil {
return fmt.Errorf("Error running pre-apply plan: %w", err)
}
Expand All @@ -74,15 +83,21 @@ func testStepNewConfig(t testing.T, c TestCase, wd *plugintest.WorkingDir, step
return err
}
return nil
}, wd, c.ProviderFactories, c.ProtoV5ProviderFactories, c.ProtoV6ProviderFactories)
}, wd, providerFactories{
legacy: c.ProviderFactories,
protov5: c.ProtoV5ProviderFactories,
protov6: c.ProtoV6ProviderFactories})
if err != nil {
return fmt.Errorf("Error retrieving pre-apply state: %w", err)
}

// Apply the diff, creating real resources
err = runProviderCommand(t, func() error {
return wd.Apply()
}, wd, c.ProviderFactories, c.ProtoV5ProviderFactories, c.ProtoV6ProviderFactories)
}, wd, providerFactories{
legacy: c.ProviderFactories,
protov5: c.ProtoV5ProviderFactories,
protov6: c.ProtoV6ProviderFactories})
if err != nil {
if step.Destroy {
return fmt.Errorf("Error running destroy: %w", err)
Expand All @@ -98,7 +113,10 @@ func testStepNewConfig(t testing.T, c TestCase, wd *plugintest.WorkingDir, step
return err
}
return nil
}, wd, c.ProviderFactories, c.ProtoV5ProviderFactories, c.ProtoV6ProviderFactories)
}, wd, providerFactories{
legacy: c.ProviderFactories,
protov5: c.ProtoV5ProviderFactories,
protov6: c.ProtoV6ProviderFactories})
if err != nil {
return fmt.Errorf("Error retrieving state after apply: %w", err)
}
Expand Down Expand Up @@ -126,7 +144,10 @@ func testStepNewConfig(t testing.T, c TestCase, wd *plugintest.WorkingDir, step
return wd.CreateDestroyPlan()
}
return wd.CreatePlan()
}, wd, c.ProviderFactories, c.ProtoV5ProviderFactories, c.ProtoV6ProviderFactories)
}, wd, providerFactories{
legacy: c.ProviderFactories,
protov5: c.ProtoV5ProviderFactories,
protov6: c.ProtoV6ProviderFactories})
if err != nil {
return fmt.Errorf("Error running post-apply plan: %w", err)
}
Expand All @@ -136,7 +157,10 @@ func testStepNewConfig(t testing.T, c TestCase, wd *plugintest.WorkingDir, step
var err error
plan, err = wd.SavedPlan()
return err
}, wd, c.ProviderFactories, c.ProtoV5ProviderFactories, c.ProtoV6ProviderFactories)
}, wd, providerFactories{
legacy: c.ProviderFactories,
protov5: c.ProtoV5ProviderFactories,
protov6: c.ProtoV6ProviderFactories})
if err != nil {
return fmt.Errorf("Error retrieving post-apply plan: %w", err)
}
Expand All @@ -147,7 +171,10 @@ func testStepNewConfig(t testing.T, c TestCase, wd *plugintest.WorkingDir, step
var err error
stdout, err = wd.SavedPlanRawStdout()
return err
}, wd, c.ProviderFactories, c.ProtoV5ProviderFactories, c.ProtoV6ProviderFactories)
}, wd, providerFactories{
legacy: c.ProviderFactories,
protov5: c.ProtoV5ProviderFactories,
protov6: c.ProtoV6ProviderFactories})
if err != nil {
return fmt.Errorf("Error retrieving formatted plan output: %w", err)
}
Expand All @@ -158,7 +185,10 @@ func testStepNewConfig(t testing.T, c TestCase, wd *plugintest.WorkingDir, step
if !step.Destroy || (step.Destroy && !step.PreventPostDestroyRefresh) {
err := runProviderCommand(t, func() error {
return wd.Refresh()
}, wd, c.ProviderFactories, c.ProtoV5ProviderFactories, c.ProtoV6ProviderFactories)
}, wd, providerFactories{
legacy: c.ProviderFactories,
protov5: c.ProtoV5ProviderFactories,
protov6: c.ProtoV6ProviderFactories})
if err != nil {
return fmt.Errorf("Error running post-apply refresh: %w", err)
}
Expand All @@ -170,7 +200,10 @@ func testStepNewConfig(t testing.T, c TestCase, wd *plugintest.WorkingDir, step
return wd.CreateDestroyPlan()
}
return wd.CreatePlan()
}, wd, c.ProviderFactories, c.ProtoV5ProviderFactories, c.ProtoV6ProviderFactories)
}, wd, providerFactories{
legacy: c.ProviderFactories,
protov5: c.ProtoV5ProviderFactories,
protov6: c.ProtoV6ProviderFactories})
if err != nil {
return fmt.Errorf("Error running second post-apply plan: %w", err)
}
Expand All @@ -179,7 +212,10 @@ func testStepNewConfig(t testing.T, c TestCase, wd *plugintest.WorkingDir, step
var err error
plan, err = wd.SavedPlan()
return err
}, wd, c.ProviderFactories, c.ProtoV5ProviderFactories, c.ProtoV6ProviderFactories)
}, wd, providerFactories{
legacy: c.ProviderFactories,
protov5: c.ProtoV5ProviderFactories,
protov6: c.ProtoV6ProviderFactories})
if err != nil {
return fmt.Errorf("Error retrieving second post-apply plan: %w", err)
}
Expand All @@ -191,7 +227,10 @@ func testStepNewConfig(t testing.T, c TestCase, wd *plugintest.WorkingDir, step
var err error
stdout, err = wd.SavedPlanRawStdout()
return err
}, wd, c.ProviderFactories, c.ProtoV5ProviderFactories, c.ProtoV6ProviderFactories)
}, wd, providerFactories{
legacy: c.ProviderFactories,
protov5: c.ProtoV5ProviderFactories,
protov6: c.ProtoV6ProviderFactories})
if err != nil {
return fmt.Errorf("Error retrieving formatted second plan output: %w", err)
}
Expand All @@ -210,7 +249,10 @@ func testStepNewConfig(t testing.T, c TestCase, wd *plugintest.WorkingDir, step
return err
}
return nil
}, wd, c.ProviderFactories, c.ProtoV5ProviderFactories, c.ProtoV6ProviderFactories)
}, wd, providerFactories{
legacy: c.ProviderFactories,
protov5: c.ProtoV5ProviderFactories,
protov6: c.ProtoV6ProviderFactories})
if err != nil {
return err
}
Expand Down
20 changes: 16 additions & 4 deletions helper/resource/testing_new_import_state.go
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,10 @@ func testStepNewImportState(t testing.T, c TestCase, helper *plugintest.Helper,
return err
}
return nil
}, wd, c.ProviderFactories, c.ProtoV5ProviderFactories, c.ProtoV6ProviderFactories)
}, wd, providerFactories{
legacy: c.ProviderFactories,
protov5: c.ProtoV5ProviderFactories,
protov6: c.ProtoV6ProviderFactories})
if err != nil {
t.Fatalf("Error getting state: %s", err)
}
Expand Down Expand Up @@ -71,14 +74,20 @@ func testStepNewImportState(t testing.T, c TestCase, helper *plugintest.Helper,

err = runProviderCommand(t, func() error {
return importWd.Init()
}, importWd, c.ProviderFactories, c.ProtoV5ProviderFactories, c.ProtoV6ProviderFactories)
}, importWd, providerFactories{
legacy: c.ProviderFactories,
protov5: c.ProtoV5ProviderFactories,
protov6: c.ProtoV6ProviderFactories})
if err != nil {
t.Fatalf("Error running init: %s", err)
}

err = runProviderCommand(t, func() error {
return importWd.Import(step.ResourceName, importId)
}, importWd, c.ProviderFactories, c.ProtoV5ProviderFactories, c.ProtoV6ProviderFactories)
}, importWd, providerFactories{
legacy: c.ProviderFactories,
protov5: c.ProtoV5ProviderFactories,
protov6: c.ProtoV6ProviderFactories})
if err != nil {
return err
}
Expand All @@ -90,7 +99,10 @@ func testStepNewImportState(t testing.T, c TestCase, helper *plugintest.Helper,
return err
}
return nil
}, importWd, c.ProviderFactories, c.ProtoV5ProviderFactories, c.ProtoV6ProviderFactories)
}, importWd, providerFactories{
legacy: c.ProviderFactories,
protov5: c.ProtoV5ProviderFactories,
protov6: c.ProtoV6ProviderFactories})
if err != nil {
t.Fatalf("Error getting state: %s", err)
}
Expand Down

0 comments on commit 60cd8fd

Please sign in to comment.