mirror of
https://github.com/hashicorp/terraform.git
synced 2026-02-19 02:39:17 -05:00
Some checks are pending
build / Determine intended Terraform version (push) Waiting to run
build / Determine Go toolchain version (push) Waiting to run
build / Generate release metadata (push) Blocked by required conditions
build / Build for freebsd_386 (push) Blocked by required conditions
build / Build for linux_386 (push) Blocked by required conditions
build / Build for openbsd_386 (push) Blocked by required conditions
build / Build for windows_386 (push) Blocked by required conditions
build / Build for darwin_amd64 (push) Blocked by required conditions
build / Build for freebsd_amd64 (push) Blocked by required conditions
build / Build for linux_amd64 (push) Blocked by required conditions
build / Build for openbsd_amd64 (push) Blocked by required conditions
build / Build for solaris_amd64 (push) Blocked by required conditions
build / Build for windows_amd64 (push) Blocked by required conditions
build / Build for freebsd_arm (push) Blocked by required conditions
build / Build for linux_arm (push) Blocked by required conditions
build / Build for darwin_arm64 (push) Blocked by required conditions
build / Build for linux_arm64 (push) Blocked by required conditions
build / Build for windows_arm64 (push) Blocked by required conditions
build / Build Docker image for linux_386 (push) Blocked by required conditions
build / Build Docker image for linux_amd64 (push) Blocked by required conditions
build / Build Docker image for linux_arm (push) Blocked by required conditions
build / Build Docker image for linux_arm64 (push) Blocked by required conditions
build / Build e2etest for linux_386 (push) Blocked by required conditions
build / Build e2etest for windows_386 (push) Blocked by required conditions
build / Build e2etest for darwin_amd64 (push) Blocked by required conditions
build / Build e2etest for linux_amd64 (push) Blocked by required conditions
build / Build e2etest for windows_amd64 (push) Blocked by required conditions
build / Build e2etest for linux_arm (push) Blocked by required conditions
build / Build e2etest for darwin_arm64 (push) Blocked by required conditions
build / Build e2etest for linux_arm64 (push) Blocked by required conditions
build / Run e2e test for linux_386 (push) Blocked by required conditions
build / Run e2e test for windows_386 (push) Blocked by required conditions
build / Run e2e test for darwin_amd64 (push) Blocked by required conditions
build / Run e2e test for linux_amd64 (push) Blocked by required conditions
build / Run e2e test for windows_amd64 (push) Blocked by required conditions
build / Run e2e test for linux_arm (push) Blocked by required conditions
build / Run e2e test for linux_arm64 (push) Blocked by required conditions
build / Run terraform-exec test for linux amd64 (push) Blocked by required conditions
Quick Checks / Unit Tests (push) Waiting to run
Quick Checks / Race Tests (push) Waiting to run
Quick Checks / End-to-end Tests (push) Waiting to run
Quick Checks / Code Consistency Checks (push) Waiting to run
* Add a generic method for loading an operations backend in non-init commands * Refactor commands to use new prepareBackend method: group 1 * Refactor commands to use new prepareBackend method: group 2, where config parsing needs to be explicitly added * Refactor commands to use new prepareBackend method: group 3, where we can use already parsed config * Additional, more nested, places where logic for accessing backends needs to be refactored * Remove duplicated comment * Add test coverage of `(m *Meta) prepareBackend()` * Add TODO related to using plans for backend/state_store config in apply commands * Add `testStateStoreMockWithChunkNegotiation` test helper * Add assertions to tests about the backend (remote-state, local, etc) in use within operations backend * Stop prepareBackend taking locks as argument * Code comment in prepareBackend * Replace c.Meta.prepareBackend with c.prepareBackend * Change `c.Meta.loadSingleModule` to `c.loadSingleModule` * Rename (Meta).prepareBackend to (Meta).backend, update godoc comment to make relationship to (Meta).Backend more obvious. * Revert change from config.Module to config.Root.Module * Update `(m *Meta) backend` method to parse config itself, and also to adhere to calling code's viewtype instructions * Update all tests and calling code following previous commit * Change how an operations backend is obtained by autocomplete code * Update autocomplete to return nil if no workspace names are returned from the backend * Add test coverage for autocompleting workspace names when using a pluggable state store * Fix output command: pass view type data to new `backend` method * Fix in plan command: pass correct view type to `backend` method * Fix `providers schema` command to use correct viewtype when preparing a backend
127 lines
3.5 KiB
Go
127 lines
3.5 KiB
Go
// Copyright (c) HashiCorp, Inc.
|
|
// SPDX-License-Identifier: BUSL-1.1
|
|
|
|
package command
|
|
|
|
import (
|
|
"reflect"
|
|
"testing"
|
|
|
|
"github.com/hashicorp/cli"
|
|
"github.com/hashicorp/terraform/internal/addrs"
|
|
"github.com/hashicorp/terraform/internal/command/workdir"
|
|
"github.com/hashicorp/terraform/internal/providers"
|
|
"github.com/posener/complete"
|
|
)
|
|
|
|
func TestMetaCompletePredictWorkspaceName(t *testing.T) {
|
|
|
|
t.Run("test autocompletion using the local backend", func(t *testing.T) {
|
|
// Create a temporary working directory that is empty
|
|
td := t.TempDir()
|
|
t.Chdir(td)
|
|
|
|
ui := new(cli.MockUi)
|
|
meta := &Meta{Ui: ui}
|
|
|
|
predictor := meta.completePredictWorkspaceName()
|
|
|
|
got := predictor.Predict(complete.Args{
|
|
Last: "",
|
|
})
|
|
want := []string{"default"}
|
|
if !reflect.DeepEqual(got, want) {
|
|
t.Errorf("wrong result\ngot: %#v\nwant: %#v", got, want)
|
|
}
|
|
})
|
|
|
|
t.Run("test autocompletion using a state store", func(t *testing.T) {
|
|
// Create a temporary working directory with state_store config
|
|
td := t.TempDir()
|
|
testCopyDir(t, testFixturePath("state-store-unchanged"), td)
|
|
t.Chdir(td)
|
|
|
|
// Set up pluggable state store provider mock
|
|
mockProvider := mockPluggableStateStorageProvider()
|
|
// Mock the existence of workspaces
|
|
mockProvider.MockStates = map[string]interface{}{
|
|
"default": true,
|
|
"foobar": true,
|
|
}
|
|
mockProviderAddress := addrs.NewDefaultProvider("test")
|
|
providerSource, close := newMockProviderSource(t, map[string][]string{
|
|
"hashicorp/test": {"1.0.0"},
|
|
})
|
|
defer close()
|
|
|
|
ui := new(cli.MockUi)
|
|
view, _ := testView(t)
|
|
wd := workdir.NewDir(".")
|
|
wd.OverrideOriginalWorkingDir(td)
|
|
meta := Meta{
|
|
WorkingDir: wd, // Use the test's temp dir
|
|
Ui: ui,
|
|
View: view,
|
|
AllowExperimentalFeatures: true,
|
|
testingOverrides: &testingOverrides{
|
|
Providers: map[addrs.Provider]providers.Factory{
|
|
mockProviderAddress: providers.FactoryFixed(mockProvider),
|
|
},
|
|
},
|
|
ProviderSource: providerSource,
|
|
}
|
|
|
|
predictor := meta.completePredictWorkspaceName()
|
|
|
|
got := predictor.Predict(complete.Args{
|
|
Last: "",
|
|
})
|
|
want := []string{"default", "foobar"}
|
|
if !reflect.DeepEqual(got, want) {
|
|
t.Errorf("wrong result\ngot: %#v\nwant: %#v", got, want)
|
|
}
|
|
})
|
|
|
|
t.Run("test autocompletion using a state store containing no workspaces", func(t *testing.T) {
|
|
// Create a temporary working directory with state_store config
|
|
td := t.TempDir()
|
|
testCopyDir(t, testFixturePath("state-store-unchanged"), td)
|
|
t.Chdir(td)
|
|
|
|
// Set up pluggable state store provider mock
|
|
mockProvider := mockPluggableStateStorageProvider()
|
|
// No workspaces exist in the mock
|
|
mockProvider.MockStates = map[string]interface{}{}
|
|
mockProviderAddress := addrs.NewDefaultProvider("test")
|
|
providerSource, close := newMockProviderSource(t, map[string][]string{
|
|
"hashicorp/test": {"1.0.0"},
|
|
})
|
|
defer close()
|
|
|
|
ui := new(cli.MockUi)
|
|
view, _ := testView(t)
|
|
wd := workdir.NewDir(".")
|
|
wd.OverrideOriginalWorkingDir(td)
|
|
meta := Meta{
|
|
WorkingDir: wd, // Use the test's temp dir
|
|
Ui: ui,
|
|
View: view,
|
|
AllowExperimentalFeatures: true,
|
|
testingOverrides: &testingOverrides{
|
|
Providers: map[addrs.Provider]providers.Factory{
|
|
mockProviderAddress: providers.FactoryFixed(mockProvider),
|
|
},
|
|
},
|
|
ProviderSource: providerSource,
|
|
}
|
|
|
|
predictor := meta.completePredictWorkspaceName()
|
|
|
|
got := predictor.Predict(complete.Args{
|
|
Last: "",
|
|
})
|
|
if got != nil {
|
|
t.Errorf("wrong result\ngot: %#v\nwant: %#v", got, nil)
|
|
}
|
|
})
|
|
}
|