@@ -309,6 +309,76 @@ func TestContext2Plan_resource_identity_refresh(t *testing.T) {
309309	}
310310}
311311
312+ func  TestContext2Plan_resource_identity_refresh_downgrade (t  * testing.T ) {
313+ 	p  :=  testProvider ("aws" )
314+ 	m  :=  testModule (t , "refresh-basic" )
315+ 	p .GetProviderSchemaResponse  =  getProviderSchemaResponseFromProviderSchema (& providerSchema {
316+ 		ResourceTypes : map [string ]* configschema.Block {
317+ 			"aws_instance" : {
318+ 				Attributes : map [string ]* configschema.Attribute {
319+ 					"id" : {
320+ 						Type :     cty .String ,
321+ 						Computed : true ,
322+ 					},
323+ 					"foo" : {
324+ 						Type :     cty .String ,
325+ 						Optional : true ,
326+ 						Computed : true ,
327+ 					},
328+ 				},
329+ 			},
330+ 		},
331+ 	})
332+ 
333+ 	state  :=  states .NewState ()
334+ 	root  :=  state .EnsureModule (addrs .RootModuleInstance )
335+ 
336+ 	root .SetResourceInstanceCurrent (
337+ 		mustResourceInstanceAddr ("aws_instance.web" ).Resource ,
338+ 		& states.ResourceInstanceObjectSrc {
339+ 			Status :                states .ObjectReady ,
340+ 			AttrsJSON :             []byte (`{"id":"foo","foo":"bar"}` ),
341+ 			IdentitySchemaVersion : 0 ,
342+ 			IdentityJSON :          []byte (`{"id": "foo"}` ),
343+ 		},
344+ 		mustProviderConfig (`provider["registry.terraform.io/hashicorp/aws"]` ),
345+ 	)
346+ 
347+ 	ctx  :=  testContext2 (t , & ContextOpts {
348+ 		Providers : map [addrs.Provider ]providers.Factory {
349+ 			addrs .NewDefaultProvider ("aws" ): testProviderFuncFixed (p ),
350+ 		},
351+ 	})
352+ 
353+ 	schema  :=  p .GetProviderSchemaResponse .ResourceTypes ["aws_instance" ]
354+ 
355+ 	p .ReadResourceFn  =  func (req  providers.ReadResourceRequest ) providers.ReadResourceResponse  {
356+ 		return  providers.ReadResourceResponse {
357+ 			NewState : req .PriorState ,
358+ 		}
359+ 	}
360+ 
361+ 	s , diags  :=  ctx .Plan (m , state , & PlanOpts {Mode : plans .RefreshOnlyMode })
362+ 
363+ 	if  diags .HasErrors () {
364+ 		t .Fatal (diags .Err ())
365+ 	}
366+ 
367+ 	if  ! p .ReadResourceCalled  {
368+ 		t .Fatal ("ReadResource should be called" )
369+ 	}
370+ 
371+ 	mod  :=  s .PriorState .RootModule ()
372+ 	fromState , err  :=  mod .Resources ["aws_instance.web" ].Instances [addrs .NoKey ].Current .Decode (schema )
373+ 	if  err  !=  nil  {
374+ 		t .Fatal (err )
375+ 	}
376+ 
377+ 	if  ! fromState .Identity .IsNull () {
378+ 		t .Fatalf ("wrong identity\n want: null\n got: %s" , fromState .Identity .GoString ())
379+ 	}
380+ }
381+ 
312382// This test validates if a resource identity that is deposed and will be destroyed 
313383// can be refreshed with an identity during the plan. 
314384func  TestContext2Plan_resource_identity_refresh_destroy_deposed (t  * testing.T ) {
0 commit comments