github.com/danrjohnson/terraform@v0.7.0-rc2.0.20160627135212-d0fc1fa086ff/terraform/upgrade_state_v1_test.go (about) 1 package terraform 2 3 import ( 4 "bytes" 5 "reflect" 6 "strings" 7 "testing" 8 9 "github.com/davecgh/go-spew/spew" 10 ) 11 12 // TestReadUpgradeStateV1toV3 tests the state upgrade process from the V1 state 13 // to the current version, and needs editing each time. This means it tests the 14 // entire pipeline of upgrades (which migrate version to version). 15 func TestReadUpgradeStateV1toV3(t *testing.T) { 16 // ReadState should transparently detect the old version but will upgrade 17 // it on Write. 18 actual, err := ReadState(strings.NewReader(testV1State)) 19 if err != nil { 20 t.Fatalf("err: %s", err) 21 } 22 23 buf := new(bytes.Buffer) 24 if err := WriteState(actual, buf); err != nil { 25 t.Fatalf("err: %s", err) 26 } 27 28 if actual.Version != 3 { 29 t.Fatalf("bad: State version not incremented; is %d", actual.Version) 30 } 31 32 roundTripped, err := ReadState(buf) 33 if err != nil { 34 t.Fatalf("err: %s", err) 35 } 36 37 if !reflect.DeepEqual(actual, roundTripped) { 38 t.Fatalf("bad: %#v", actual) 39 } 40 } 41 42 func TestReadUpgradeStateV1toV3_outputs(t *testing.T) { 43 // ReadState should transparently detect the old version but will upgrade 44 // it on Write. 45 actual, err := ReadState(strings.NewReader(testV1StateWithOutputs)) 46 if err != nil { 47 t.Fatalf("err: %s", err) 48 } 49 50 buf := new(bytes.Buffer) 51 if err := WriteState(actual, buf); err != nil { 52 t.Fatalf("err: %s", err) 53 } 54 55 if actual.Version != 3 { 56 t.Fatalf("bad: State version not incremented; is %d", actual.Version) 57 } 58 59 roundTripped, err := ReadState(buf) 60 if err != nil { 61 t.Fatalf("err: %s", err) 62 } 63 64 if !reflect.DeepEqual(actual, roundTripped) { 65 spew.Config.DisableMethods = true 66 t.Fatalf("bad:\n%s\n\nround tripped:\n%s\n", spew.Sdump(actual), spew.Sdump(roundTripped)) 67 spew.Config.DisableMethods = false 68 } 69 } 70 71 const testV1State = `{ 72 "version": 1, 73 "serial": 9, 74 "remote": { 75 "type": "http", 76 "config": { 77 "url": "http://my-cool-server.com/" 78 } 79 }, 80 "modules": [ 81 { 82 "path": [ 83 "root" 84 ], 85 "outputs": null, 86 "resources": { 87 "foo": { 88 "type": "", 89 "primary": { 90 "id": "bar" 91 } 92 } 93 }, 94 "depends_on": [ 95 "aws_instance.bar" 96 ] 97 } 98 ] 99 } 100 ` 101 102 const testV1StateWithOutputs = `{ 103 "version": 1, 104 "serial": 9, 105 "remote": { 106 "type": "http", 107 "config": { 108 "url": "http://my-cool-server.com/" 109 } 110 }, 111 "modules": [ 112 { 113 "path": [ 114 "root" 115 ], 116 "outputs": { 117 "foo": "bar", 118 "baz": "foo" 119 }, 120 "resources": { 121 "foo": { 122 "type": "", 123 "primary": { 124 "id": "bar" 125 } 126 } 127 }, 128 "depends_on": [ 129 "aws_instance.bar" 130 ] 131 } 132 ] 133 } 134 `