@ -68,6 +68,54 @@ func TestReadUpgradeStateV1toV3_outputs(t *testing.T) {
}
}
// Upgrading the state should not lose empty module Outputs and Resources maps
// during upgrade. The init for a new module initializes new maps, so we may not
// be expecting to check for a nil map.
func TestReadUpgradeStateV1toV3_emptyState ( t * testing . T ) {
// ReadState should transparently detect the old version but will upgrade
// it on Write.
orig , err := ReadStateV1 ( [ ] byte ( testV1EmptyState ) )
if err != nil {
t . Fatalf ( "err: %s" , err )
}
stateV2 , err := upgradeStateV1ToV2 ( orig )
for _ , m := range stateV2 . Modules {
if m . Resources == nil {
t . Fatal ( "V1 to V2 upgrade lost module.Resources" )
}
if m . Outputs == nil {
t . Fatal ( "V1 to V2 upgrade lost module.Outputs" )
}
}
stateV3 , err := upgradeStateV2ToV3 ( stateV2 )
for _ , m := range stateV3 . Modules {
if m . Resources == nil {
t . Fatal ( "V2 to V3 upgrade lost module.Resources" )
}
if m . Outputs == nil {
t . Fatal ( "V2 to V3 upgrade lost module.Outputs" )
}
}
}
const testV1EmptyState = ` {
"version" : 1 ,
"serial" : 0 ,
"modules" : [
{
"path" : [
"root"
] ,
"outputs" : { } ,
"resources" : { }
}
]
}
`
const testV1State = ` {
"version" : 1 ,
"serial" : 9 ,