mirror of https://github.com/hashicorp/terraform
parent
ba8386b8a2
commit
0ea25e3b40
@ -0,0 +1,136 @@
|
||||
// Copyright (c) HashiCorp, Inc.
|
||||
// SPDX-License-Identifier: BUSL-1.1
|
||||
|
||||
package arguments
|
||||
|
||||
import (
|
||||
"flag"
|
||||
"io"
|
||||
"strings"
|
||||
"testing"
|
||||
"time"
|
||||
|
||||
"github.com/google/go-cmp/cmp"
|
||||
)
|
||||
|
||||
func TestParseInit_basicValid(t *testing.T) {
|
||||
testCases := map[string]struct {
|
||||
args []string
|
||||
want *Init
|
||||
}{
|
||||
"with default options": {
|
||||
nil,
|
||||
&Init{
|
||||
FromModule: "",
|
||||
Lockfile: "",
|
||||
TestsDirectory: "tests",
|
||||
ViewType: ViewHuman,
|
||||
Backend: true,
|
||||
Cloud: true,
|
||||
Get: true,
|
||||
ForceInitCopy: false,
|
||||
StateLock: true,
|
||||
StateLockTimeout: 0,
|
||||
Reconfigure: false,
|
||||
MigrateState: false,
|
||||
Upgrade: false,
|
||||
Json: false,
|
||||
IgnoreRemoteVersion: false,
|
||||
},
|
||||
},
|
||||
"setting multiple options": {
|
||||
[]string{"-backend=false", "-force-copy=true",
|
||||
"-from-module=./main-dir", "-json", "-get=false",
|
||||
"-lock=false", "-lock-timeout=10s", "-reconfigure=true",
|
||||
"-upgrade=true", "-lockfile=readonly",
|
||||
"-ignore-remote-version=true", "-test-directory=./test-dir"},
|
||||
&Init{
|
||||
FromModule: "./main-dir",
|
||||
Lockfile: "readonly",
|
||||
TestsDirectory: "./test-dir",
|
||||
ViewType: ViewJSON,
|
||||
Backend: false,
|
||||
Cloud: false,
|
||||
Get: false,
|
||||
ForceInitCopy: true,
|
||||
StateLock: false,
|
||||
StateLockTimeout: time.Duration(10) * time.Second,
|
||||
Reconfigure: true,
|
||||
MigrateState: false,
|
||||
Upgrade: true,
|
||||
Json: true,
|
||||
IgnoreRemoteVersion: true,
|
||||
},
|
||||
},
|
||||
"with cloud option": {
|
||||
[]string{"-cloud=false"},
|
||||
&Init{
|
||||
FromModule: "",
|
||||
Lockfile: "",
|
||||
TestsDirectory: "tests",
|
||||
ViewType: ViewHuman,
|
||||
Backend: false,
|
||||
Cloud: false,
|
||||
Get: true,
|
||||
ForceInitCopy: false,
|
||||
StateLock: true,
|
||||
StateLockTimeout: 0,
|
||||
Reconfigure: false,
|
||||
MigrateState: false,
|
||||
Upgrade: false,
|
||||
Json: false,
|
||||
IgnoreRemoteVersion: false,
|
||||
},
|
||||
},
|
||||
}
|
||||
|
||||
for name, tc := range testCases {
|
||||
t.Run(name, func(t *testing.T) {
|
||||
cmdFlags := flag.NewFlagSet("init", flag.ContinueOnError)
|
||||
cmdFlags.SetOutput(io.Discard)
|
||||
|
||||
got, diags := ParseInit(tc.args, cmdFlags)
|
||||
if len(diags) > 0 {
|
||||
t.Fatalf("unexpected diags: %v", diags)
|
||||
}
|
||||
|
||||
if diff := cmp.Diff(tc.want, got); diff != "" {
|
||||
t.Errorf("unexpected result\n%s", diff)
|
||||
}
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
func TestParseInit_invalid(t *testing.T) {
|
||||
testCases := map[string]struct {
|
||||
args []string
|
||||
wantErr string
|
||||
}{
|
||||
"with unsupported options": {
|
||||
args: []string{"-raw"},
|
||||
wantErr: "flag provided but not defined",
|
||||
},
|
||||
"with both -backend and -cloud options set": {
|
||||
args: []string{"-backend=false", "-cloud=false"},
|
||||
wantErr: "The -backend and -cloud options are aliases of one another and mutually-exclusive in their use",
|
||||
},
|
||||
}
|
||||
|
||||
for name, tc := range testCases {
|
||||
t.Run(name, func(t *testing.T) {
|
||||
cmdFlags := flag.NewFlagSet("init", flag.ContinueOnError)
|
||||
cmdFlags.SetOutput(io.Discard)
|
||||
|
||||
got, diags := ParseInit(tc.args, cmdFlags)
|
||||
if len(diags) == 0 {
|
||||
t.Fatal("expected diags but got none")
|
||||
}
|
||||
if got, want := diags.Err().Error(), tc.wantErr; !strings.Contains(got, want) {
|
||||
t.Fatalf("wrong diags\n got: %s\nwant: %s", got, want)
|
||||
}
|
||||
if got.ViewType != ViewHuman {
|
||||
t.Fatalf("wrong view type, got %#v, want %#v", got.ViewType, ViewHuman)
|
||||
}
|
||||
})
|
||||
}
|
||||
}
|
||||
File diff suppressed because it is too large
Load Diff
@ -0,0 +1,8 @@
|
||||
{"@level":"info","@message":"Terraform 1.9.0-dev","@module":"terraform.ui","terraform":"1.9.0-dev","type":"version","ui":"1.2"}
|
||||
{"@level":"info","@message":"Initializing the backend...","@module":"terraform.ui","type":"init_output"}
|
||||
{"@level":"info","@message":"Initializing modules...","@module":"terraform.ui","type":"init_output"}
|
||||
{"@level":"info","@message":"- foo in foo","@module":"terraform.ui","type":"log"}
|
||||
{"@level":"info","@message":"Initializing provider plugins...","@module":"terraform.ui","type":"init_output"}
|
||||
{"@level":"info","@message":"","@module":"terraform.ui","type":"init_output"}
|
||||
{"@level":"info","@message":"Terraform has been successfully initialized!","@module":"terraform.ui","type":"init_output"}
|
||||
{"@level":"info","@message":"You may now begin working with Terraform. Try running \"terraform plan\" to see\nany changes that are required for your infrastructure. All Terraform commands\nshould now work.\n\nIf you ever set or change modules or backend configuration for Terraform,\nrerun this command to reinitialize your working directory. If you forget, other\ncommands will detect it and remind you to do so if necessary.","@module":"terraform.ui","type":"init_output"}
|
||||
@ -0,0 +1,2 @@
|
||||
{"@level":"info","@message":"Terraform 1.9.0-dev","@module":"terraform.ui","terraform":"1.9.0-dev","type":"version","ui":"1.2"}
|
||||
{"@level":"error","@message":"Error: The -migrate-state and -json options are mutually-exclusive","@module":"terraform.ui","diagnostic":{"severity":"error","summary":"The -migrate-state and -json options are mutually-exclusive","detail":"Terraform cannot ask for interactive approval when -json is set. To use the -migrate-state option, disable the -json option."},"type":"diagnostic"}
|
||||
@ -1,2 +0,0 @@
|
||||
{"@level":"info","@message":"Terraform 1.9.0-dev","@module":"terraform.ui","terraform":"1.9.0-dev","type":"version","ui":"1.2"}
|
||||
{"@level":"error","@message":"Error: Failed to query available provider packages","@module":"terraform.ui","diagnostic":{"severity":"error","summary":"Failed to query available provider packages","detail":"Could not retrieve the list of available versions for provider hashicorp/test: no available releases match the given constraints 1.0.1, 1.0.2"},"type":"diagnostic"}
|
||||
Loading…
Reference in new issue