@@ -1691,3 +1691,98 @@ resource "test_resource" "foo" {
1691
1691
t .Fatalf ("invalid state\n expected: %s\n got: %s\n " , expected , jsonState )
1692
1692
}
1693
1693
}
1694
+
1695
+ func TestContext2Refresh_identityUpgradeJSON (t * testing.T ) {
1696
+ m := testModule (t , "refresh-schema-upgrade" )
1697
+ p := testProvider ("test" )
1698
+ p .GetProviderSchemaResponse = getProviderSchemaResponseFromProviderSchema (& providerSchema {
1699
+ ResourceTypes : map [string ]* configschema.Block {
1700
+ "test_thing" : {
1701
+ Attributes : map [string ]* configschema.Attribute {
1702
+ "id" : {
1703
+ Type : cty .String ,
1704
+ Optional : true ,
1705
+ },
1706
+ },
1707
+ },
1708
+ },
1709
+ IdentityTypes : map [string ]* configschema.Object {
1710
+ "test_thing" : {
1711
+ Attributes : map [string ]* configschema.Attribute {
1712
+ "name" : {
1713
+ Type : cty .String ,
1714
+ Required : true ,
1715
+ },
1716
+ },
1717
+ Nesting : configschema .NestingSingle ,
1718
+ },
1719
+ },
1720
+ IdentityTypeSchemaVersions : map [string ]uint64 {
1721
+ "test_thing" : 5 ,
1722
+ },
1723
+ })
1724
+ p .UpgradeResourceIdentityResponse = & providers.UpgradeResourceIdentityResponse {
1725
+ UpgradedIdentity : cty .ObjectVal (map [string ]cty.Value {
1726
+ "name" : cty .StringVal ("foo" ),
1727
+ }),
1728
+ }
1729
+
1730
+ s := states .BuildState (func (s * states.SyncState ) {
1731
+ s .SetResourceInstanceCurrent (
1732
+ addrs.Resource {
1733
+ Mode : addrs .ManagedResourceMode ,
1734
+ Type : "test_thing" ,
1735
+ Name : "bar" ,
1736
+ }.Instance (addrs .NoKey ).Absolute (addrs .RootModuleInstance ),
1737
+ & states.ResourceInstanceObjectSrc {
1738
+ Status : states .ObjectReady ,
1739
+ SchemaVersion : 0 ,
1740
+ AttrsJSON : []byte (`{"id":"foo"}` ),
1741
+ IdentitySchemaVersion : 3 ,
1742
+ IdentityJSON : []byte (`{"id":"foo"}` ),
1743
+ },
1744
+ addrs.AbsProviderConfig {
1745
+ Provider : addrs .NewDefaultProvider ("test" ),
1746
+ Module : addrs .RootModule ,
1747
+ },
1748
+ )
1749
+ })
1750
+
1751
+ ctx := testContext2 (t , & ContextOpts {
1752
+ Providers : map [addrs.Provider ]providers.Factory {
1753
+ addrs .NewDefaultProvider ("test" ): testProviderFuncFixed (p ),
1754
+ },
1755
+ })
1756
+
1757
+ state , diags := ctx .Refresh (m , s , & PlanOpts {Mode : plans .NormalMode })
1758
+ if diags .HasErrors () {
1759
+ t .Fatal (diags .Err ())
1760
+ }
1761
+
1762
+ {
1763
+ got := p .UpgradeResourceIdentityRequest
1764
+ want := providers.UpgradeResourceIdentityRequest {
1765
+ TypeName : "test_thing" ,
1766
+ Version : 3 ,
1767
+ RawIdentityJSON : []byte (`{"id":"foo"}` ),
1768
+ }
1769
+ if ! cmp .Equal (got , want ) {
1770
+ t .Errorf ("wrong identity upgrade request\n %s" , cmp .Diff (want , got ))
1771
+ }
1772
+ }
1773
+
1774
+ addr := mustResourceInstanceAddr ("test_thing.bar" )
1775
+ res := state .ResourceInstance (addr )
1776
+ if res == nil {
1777
+ t .Fatalf ("no resource in state for %s" , addr )
1778
+ }
1779
+
1780
+ expectedIdentity := `{"name":"foo"}`
1781
+ if string (res .Current .IdentityJSON ) != expectedIdentity {
1782
+ t .Fatalf ("identity not updated in state\n expected: %s\n got: %s" , expectedIdentity , res .Current .IdentityJSON )
1783
+ }
1784
+ expectedVersion := uint64 (5 )
1785
+ if res .Current .IdentitySchemaVersion != expectedVersion {
1786
+ t .Fatalf ("identity schema version not updated in state\n expected: %d\n got: %d" , expectedVersion , res .Current .IdentitySchemaVersion )
1787
+ }
1788
+ }
0 commit comments