states/statemgr: Fix the Filesystem state manager tests
Now that we're verifying the Terraform version during state loading, we need to force a particular Terraform version to use during these tests.
This commit is contained in:
parent
aacbe1d14b
commit
985b414dca
|
@ -4,23 +4,26 @@ import (
|
||||||
"io/ioutil"
|
"io/ioutil"
|
||||||
"os"
|
"os"
|
||||||
"os/exec"
|
"os/exec"
|
||||||
|
"strings"
|
||||||
"sync"
|
"sync"
|
||||||
"testing"
|
"testing"
|
||||||
|
|
||||||
"github.com/go-test/deep"
|
"github.com/go-test/deep"
|
||||||
|
|
||||||
version "github.com/hashicorp/go-version"
|
version "github.com/hashicorp/go-version"
|
||||||
|
|
||||||
"github.com/hashicorp/terraform/states/statefile"
|
"github.com/hashicorp/terraform/states/statefile"
|
||||||
|
tfversion "github.com/hashicorp/terraform/version"
|
||||||
)
|
)
|
||||||
|
|
||||||
func TestFilesystem(t *testing.T) {
|
func TestFilesystem(t *testing.T) {
|
||||||
|
defer testOverrideVersion(t, "1.2.3")()
|
||||||
ls := testFilesystem(t)
|
ls := testFilesystem(t)
|
||||||
defer os.Remove(ls.readPath)
|
defer os.Remove(ls.readPath)
|
||||||
TestFull(t, ls)
|
TestFull(t, ls)
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestFilesystemRace(t *testing.T) {
|
func TestFilesystemRace(t *testing.T) {
|
||||||
|
defer testOverrideVersion(t, "1.2.3")()
|
||||||
ls := testFilesystem(t)
|
ls := testFilesystem(t)
|
||||||
defer os.Remove(ls.readPath)
|
defer os.Remove(ls.readPath)
|
||||||
|
|
||||||
|
@ -37,6 +40,7 @@ func TestFilesystemRace(t *testing.T) {
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestFilesystemLocks(t *testing.T) {
|
func TestFilesystemLocks(t *testing.T) {
|
||||||
|
defer testOverrideVersion(t, "1.2.3")()
|
||||||
s := testFilesystem(t)
|
s := testFilesystem(t)
|
||||||
defer os.Remove(s.readPath)
|
defer os.Remove(s.readPath)
|
||||||
|
|
||||||
|
@ -97,6 +101,7 @@ func TestFilesystemLocks(t *testing.T) {
|
||||||
// Verify that we can write to the state file, as Windows' mandatory locking
|
// Verify that we can write to the state file, as Windows' mandatory locking
|
||||||
// will prevent writing to a handle different than the one that hold the lock.
|
// will prevent writing to a handle different than the one that hold the lock.
|
||||||
func TestFilesystem_writeWhileLocked(t *testing.T) {
|
func TestFilesystem_writeWhileLocked(t *testing.T) {
|
||||||
|
defer testOverrideVersion(t, "1.2.3")()
|
||||||
s := testFilesystem(t)
|
s := testFilesystem(t)
|
||||||
defer os.Remove(s.readPath)
|
defer os.Remove(s.readPath)
|
||||||
|
|
||||||
|
@ -119,6 +124,7 @@ func TestFilesystem_writeWhileLocked(t *testing.T) {
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestFilesystem_pathOut(t *testing.T) {
|
func TestFilesystem_pathOut(t *testing.T) {
|
||||||
|
defer testOverrideVersion(t, "1.2.3")()
|
||||||
f, err := ioutil.TempFile("", "tf")
|
f, err := ioutil.TempFile("", "tf")
|
||||||
if err != nil {
|
if err != nil {
|
||||||
t.Fatalf("err: %s", err)
|
t.Fatalf("err: %s", err)
|
||||||
|
@ -134,6 +140,7 @@ func TestFilesystem_pathOut(t *testing.T) {
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestFilesystem_backup(t *testing.T) {
|
func TestFilesystem_backup(t *testing.T) {
|
||||||
|
defer testOverrideVersion(t, "1.2.3")()
|
||||||
f, err := ioutil.TempFile("", "tf")
|
f, err := ioutil.TempFile("", "tf")
|
||||||
if err != nil {
|
if err != nil {
|
||||||
t.Fatalf("err: %s", err)
|
t.Fatalf("err: %s", err)
|
||||||
|
@ -166,6 +173,7 @@ func TestFilesystem_backup(t *testing.T) {
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestFilesystem_nonExist(t *testing.T) {
|
func TestFilesystem_nonExist(t *testing.T) {
|
||||||
|
defer testOverrideVersion(t, "1.2.3")()
|
||||||
ls := NewFilesystem("ishouldntexist")
|
ls := NewFilesystem("ishouldntexist")
|
||||||
if err := ls.RefreshState(); err != nil {
|
if err := ls.RefreshState(); err != nil {
|
||||||
t.Fatalf("err: %s", err)
|
t.Fatalf("err: %s", err)
|
||||||
|
@ -177,6 +185,7 @@ func TestFilesystem_nonExist(t *testing.T) {
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestFilesystem_impl(t *testing.T) {
|
func TestFilesystem_impl(t *testing.T) {
|
||||||
|
defer testOverrideVersion(t, "1.2.3")()
|
||||||
var _ Reader = new(Filesystem)
|
var _ Reader = new(Filesystem)
|
||||||
var _ Writer = new(Filesystem)
|
var _ Writer = new(Filesystem)
|
||||||
var _ Persister = new(Filesystem)
|
var _ Persister = new(Filesystem)
|
||||||
|
@ -212,6 +221,7 @@ func testFilesystem(t *testing.T) *Filesystem {
|
||||||
|
|
||||||
// Make sure we can refresh while the state is locked
|
// Make sure we can refresh while the state is locked
|
||||||
func TestFilesystem_refreshWhileLocked(t *testing.T) {
|
func TestFilesystem_refreshWhileLocked(t *testing.T) {
|
||||||
|
defer testOverrideVersion(t, "1.2.3")()
|
||||||
f, err := ioutil.TempFile("", "tf")
|
f, err := ioutil.TempFile("", "tf")
|
||||||
if err != nil {
|
if err != nil {
|
||||||
t.Fatalf("err: %s", err)
|
t.Fatalf("err: %s", err)
|
||||||
|
@ -253,3 +263,31 @@ func TestFilesystem_refreshWhileLocked(t *testing.T) {
|
||||||
t.Fatal("missing state")
|
t.Fatal("missing state")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func testOverrideVersion(t *testing.T, v string) func() {
|
||||||
|
oldVersionStr := tfversion.Version
|
||||||
|
oldPrereleaseStr := tfversion.Prerelease
|
||||||
|
oldSemVer := tfversion.SemVer
|
||||||
|
|
||||||
|
var newPrereleaseStr string
|
||||||
|
if dash := strings.Index(v, "-"); dash != -1 {
|
||||||
|
newPrereleaseStr = v[dash+1:]
|
||||||
|
v = v[:dash]
|
||||||
|
}
|
||||||
|
|
||||||
|
newSemVer, err := version.NewVersion(v)
|
||||||
|
if err != nil {
|
||||||
|
t.Errorf("invalid override version %q: %s", v, err)
|
||||||
|
}
|
||||||
|
newVersionStr := newSemVer.String()
|
||||||
|
|
||||||
|
tfversion.Version = newVersionStr
|
||||||
|
tfversion.Prerelease = newPrereleaseStr
|
||||||
|
tfversion.SemVer = newSemVer
|
||||||
|
|
||||||
|
return func() { // reset function
|
||||||
|
tfversion.Version = oldVersionStr
|
||||||
|
tfversion.Prerelease = oldPrereleaseStr
|
||||||
|
tfversion.SemVer = oldSemVer
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
|
@ -7,6 +7,6 @@ import (
|
||||||
// The git commit that was compiled. This will be filled in by the compiler.
|
// The git commit that was compiled. This will be filled in by the compiler.
|
||||||
var GitCommit string
|
var GitCommit string
|
||||||
|
|
||||||
const Version = version.Version
|
var Version = version.Version
|
||||||
|
|
||||||
var VersionPrerelease = version.Prerelease
|
var VersionPrerelease = version.Prerelease
|
||||||
|
|
|
@ -11,7 +11,7 @@ import (
|
||||||
)
|
)
|
||||||
|
|
||||||
// The main version number that is being run at the moment.
|
// The main version number that is being run at the moment.
|
||||||
const Version = "0.12.0"
|
var Version = "0.12.0"
|
||||||
|
|
||||||
// A pre-release marker for the version. If this is "" (empty string)
|
// A pre-release marker for the version. If this is "" (empty string)
|
||||||
// then it means that it is a final release. Otherwise, this is a pre-release
|
// then it means that it is a final release. Otherwise, this is a pre-release
|
||||||
|
@ -21,7 +21,11 @@ var Prerelease = "dev"
|
||||||
// SemVer is an instance of version.Version. This has the secondary
|
// SemVer is an instance of version.Version. This has the secondary
|
||||||
// benefit of verifying during tests and init time that our version is a
|
// benefit of verifying during tests and init time that our version is a
|
||||||
// proper semantic version, which should always be the case.
|
// proper semantic version, which should always be the case.
|
||||||
var SemVer = version.Must(version.NewVersion(Version))
|
var SemVer *version.Version
|
||||||
|
|
||||||
|
func init() {
|
||||||
|
SemVer = version.Must(version.NewVersion(Version))
|
||||||
|
}
|
||||||
|
|
||||||
// Header is the header name used to send the current terraform version
|
// Header is the header name used to send the current terraform version
|
||||||
// in http requests.
|
// in http requests.
|
||||||
|
|
Loading…
Reference in New Issue