Bumps [github.com/hashicorp/terraform-plugin-sdk/v2](https://github.com/hashicorp/terraform-plugin-sdk) from 2.26.1 to 2.27.0. - [Release notes](https://github.com/hashicorp/terraform-plugin-sdk/releases) - [Changelog](https://github.com/hashicorp/terraform-plugin-sdk/blob/main/CHANGELOG.md) - [Commits](https://github.com/hashicorp/terraform-plugin-sdk/compare/v2.26.1...v2.27.0) --- updated-dependencies: - dependency-name: github.com/hashicorp/terraform-plugin-sdk/v2 dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] <support@github.com>
88 lines
2.4 KiB
Go
88 lines
2.4 KiB
Go
// Copyright (c) HashiCorp, Inc.
|
|
// SPDX-License-Identifier: MPL-2.0
|
|
|
|
package resource
|
|
|
|
import (
|
|
"context"
|
|
"fmt"
|
|
|
|
"github.com/hashicorp/terraform-plugin-sdk/v2/internal/logging"
|
|
)
|
|
|
|
// hasProviders returns true if the TestCase has set any of the
|
|
// ExternalProviders, ProtoV5ProviderFactories, ProtoV6ProviderFactories,
|
|
// ProviderFactories, or Providers fields.
|
|
func (c TestCase) hasProviders(_ context.Context) bool {
|
|
if len(c.ExternalProviders) > 0 {
|
|
return true
|
|
}
|
|
|
|
if len(c.ProtoV5ProviderFactories) > 0 {
|
|
return true
|
|
}
|
|
|
|
if len(c.ProtoV6ProviderFactories) > 0 {
|
|
return true
|
|
}
|
|
|
|
if len(c.ProviderFactories) > 0 {
|
|
return true
|
|
}
|
|
|
|
if len(c.Providers) > 0 {
|
|
return true
|
|
}
|
|
|
|
return false
|
|
}
|
|
|
|
// validate ensures the TestCase is valid based on the following criteria:
|
|
//
|
|
// - No overlapping ExternalProviders and Providers entries
|
|
// - No overlapping ExternalProviders and ProviderFactories entries
|
|
// - TestStep validations performed by the (TestStep).validate() method.
|
|
func (c TestCase) validate(ctx context.Context) error {
|
|
logging.HelperResourceTrace(ctx, "Validating TestCase")
|
|
|
|
if len(c.Steps) == 0 {
|
|
err := fmt.Errorf("TestCase missing Steps")
|
|
logging.HelperResourceError(ctx, "TestCase validation error", map[string]interface{}{logging.KeyError: err})
|
|
return err
|
|
}
|
|
|
|
for name := range c.ExternalProviders {
|
|
if _, ok := c.Providers[name]; ok {
|
|
err := fmt.Errorf("TestCase provider %q set in both ExternalProviders and Providers", name)
|
|
logging.HelperResourceError(ctx, "TestCase validation error", map[string]interface{}{logging.KeyError: err})
|
|
return err
|
|
}
|
|
|
|
if _, ok := c.ProviderFactories[name]; ok {
|
|
err := fmt.Errorf("TestCase provider %q set in both ExternalProviders and ProviderFactories", name)
|
|
logging.HelperResourceError(ctx, "TestCase validation error", map[string]interface{}{logging.KeyError: err})
|
|
return err
|
|
}
|
|
}
|
|
|
|
testCaseHasProviders := c.hasProviders(ctx)
|
|
|
|
for stepIndex, step := range c.Steps {
|
|
stepNumber := stepIndex + 1 // Use 1-based index for humans
|
|
stepValidateReq := testStepValidateRequest{
|
|
StepNumber: stepNumber,
|
|
TestCaseHasProviders: testCaseHasProviders,
|
|
}
|
|
|
|
err := step.validate(ctx, stepValidateReq)
|
|
|
|
if err != nil {
|
|
err := fmt.Errorf("TestStep %d/%d validation error: %w", stepNumber, len(c.Steps), err)
|
|
logging.HelperResourceError(ctx, "TestCase validation error", map[string]interface{}{logging.KeyError: err})
|
|
return err
|
|
}
|
|
}
|
|
|
|
return nil
|
|
}
|