@ -11,8 +11,11 @@ import (
"strings"
"testing"
"github.com/hashicorp/terraform/backend/local"
"github.com/hashicorp/terraform/helper/copy"
"github.com/hashicorp/terraform/plugin/discovery"
"github.com/hashicorp/terraform/state"
"github.com/hashicorp/terraform/terraform"
"github.com/mitchellh/cli"
)
@ -543,12 +546,12 @@ func TestInit_getProvider(t *testing.T) {
defer os . RemoveAll ( td )
defer testChdir ( t , td ) ( )
overrides := metaOverridesForProvider ( testProvider ( ) )
ui := new ( cli . MockUi )
m := Meta {
testingOverrides : metaOverridesForProvider ( testProvider ( ) ) ,
testingOverrides : overrides ,
Ui : ui ,
}
installer := & mockProviderInstaller {
Providers : map [ string ] [ ] string {
// looking for an exact version
@ -591,6 +594,36 @@ func TestInit_getProvider(t *testing.T) {
if _ , err := os . Stat ( betweenPath ) ; os . IsNotExist ( err ) {
t . Fatal ( "provider 'between' not downloaded" )
}
t . Run ( "future-state" , func ( t * testing . T ) {
// getting providers should fail if a state from a newer version of
// terraform exists, since InitCommand.getProviders needs to inspect that
// state.
s := terraform . NewState ( )
s . TFVersion = "100.1.0"
local := & state . LocalState {
Path : local . DefaultStateFilename ,
}
if err := local . WriteState ( s ) ; err != nil {
t . Fatal ( err )
}
ui := new ( cli . MockUi )
m . Ui = ui
c := & InitCommand {
Meta : m ,
providerInstaller : installer ,
}
if code := c . Run ( nil ) ; code == 0 {
t . Fatal ( "expected error, got:" , ui . OutputWriter )
}
errMsg := ui . ErrorWriter . String ( )
if ! strings . Contains ( errMsg , "future Terraform version" ) {
t . Fatal ( "unexpected error:" , errMsg )
}
} )
}
// make sure we can locate providers in various paths