Script 'mail_helper' called by obssrc
Hello community,

here is the log from the commit of package opentofu for openSUSE:Factory 
checked in at 2025-08-02 00:43:09
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/opentofu (Old)
 and      /work/SRC/openSUSE:Factory/.opentofu.new.1085 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "opentofu"

Sat Aug  2 00:43:09 2025 rev:35 rq:1297059 version:1.10.4

Changes:
--------
--- /work/SRC/openSUSE:Factory/opentofu/opentofu.changes        2025-07-17 
17:18:34.631282347 +0200
+++ /work/SRC/openSUSE:Factory/.opentofu.new.1085/opentofu.changes      
2025-08-02 00:44:36.709674773 +0200
@@ -1,0 +2,12 @@
+Fri Aug 01 12:14:02 UTC 2025 - Johannes Kastl 
<opensuse_buildserv...@ojkastl.de>
+
+- Update to version 1.10.4:
+  * BUG FIXES:
+    - Fixed crash where sensitive set values used in for_each could
+      cause a panic. (#3070)
+    - Fixed incorrect approach to mocking provider "ReadResource"
+      calls in test. (#3068)
+    - Reduced calls to ListKeys in azure backend (for rate
+      limiting). (#3083)
+
+-------------------------------------------------------------------

Old:
----
  opentofu-1.10.3.obscpio

New:
----
  opentofu-1.10.4.obscpio

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Other differences:
------------------
++++++ opentofu.spec ++++++
--- /var/tmp/diff_new_pack.FCc5UK/_old  2025-08-02 00:44:37.885723651 +0200
+++ /var/tmp/diff_new_pack.FCc5UK/_new  2025-08-02 00:44:37.893723983 +0200
@@ -19,7 +19,7 @@
 %define executable_name tofu
 
 Name:           opentofu
-Version:        1.10.3
+Version:        1.10.4
 Release:        0
 Summary:        Declaratively manage your cloud infrastructure
 License:        MPL-2.0

++++++ _service ++++++
--- /var/tmp/diff_new_pack.FCc5UK/_old  2025-08-02 00:44:37.925725314 +0200
+++ /var/tmp/diff_new_pack.FCc5UK/_new  2025-08-02 00:44:37.933725646 +0200
@@ -3,7 +3,7 @@
     <param name="url">https://github.com/opentofu/opentofu/</param>
     <param name="scm">git</param>
     <param name="exclude">.git</param>
-    <param name="revision">v1.10.3</param>
+    <param name="revision">v1.10.4</param>
     <param name="versionformat">@PARENT_TAG@</param>
     <param name="versionrewrite-pattern">v(.*)</param>
     <param name="changesgenerate">enable</param>

++++++ _servicedata ++++++
--- /var/tmp/diff_new_pack.FCc5UK/_old  2025-08-02 00:44:37.953726477 +0200
+++ /var/tmp/diff_new_pack.FCc5UK/_new  2025-08-02 00:44:37.957726644 +0200
@@ -1,6 +1,6 @@
 <servicedata>
 <service name="tar_scm">
                 <param name="url">https://github.com/opentofu/opentofu/</param>
-              <param 
name="changesrevision">1e755e9a8f77a723b06e22971d79c4bc2c71eace</param></service></servicedata>
+              <param 
name="changesrevision">6d6c2fa96497c15fd8d0b46dc8db0e6877a88b1b</param></service></servicedata>
 (No newline at EOF)
 

++++++ opentofu-1.10.3.obscpio -> opentofu-1.10.4.obscpio ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/opentofu-1.10.3/CHANGELOG.md 
new/opentofu-1.10.4/CHANGELOG.md
--- old/opentofu-1.10.3/CHANGELOG.md    2025-07-15 15:50:38.000000000 +0200
+++ new/opentofu-1.10.4/CHANGELOG.md    2025-07-31 15:22:01.000000000 +0200
@@ -4,6 +4,14 @@
 
 BUG FIXES:
 
+- Fixed crash where sensitive set values used in for_each could cause a panic. 
([#3070](https://github.com/opentofu/opentofu/pull/3070))
+- Fixed incorrect approach to mocking provider "ReadResource" calls in test. 
([#3068](https://github.com/opentofu/opentofu/pull/3068))
+- Reduced calls to  ListKeys in azure backend (for rate limiting). 
([#3083](https://github.com/opentofu/opentofu/pull/3083))
+
+## 1.10.3
+
+BUG FIXES:
+
 - OpenTofu will no longer crash in a rare case where a dynamically-invalid 
expression has its error suppressed by `try` or `can` and then that expression 
becomes relevant for deciding whether to report a "change outside of OpenTofu" 
in the human-oriented plan diff. 
([#2988](https://github.com/opentofu/opentofu/pull/2988))
 - Ensure provider downloads into temp are cleaned up correctly on windows. 
([#2843](https://github.com/opentofu/opentofu/issues/2843))
 - Correctly handle structural typed attributes during test provider mocking. 
([#2994](https://github.com/opentofu/opentofu/pull/2994))
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/opentofu-1.10.3/go.mod new/opentofu-1.10.4/go.mod
--- old/opentofu-1.10.3/go.mod  2025-07-15 15:50:38.000000000 +0200
+++ new/opentofu-1.10.4/go.mod  2025-07-31 15:22:01.000000000 +0200
@@ -84,8 +84,8 @@
        github.com/posener/complete v1.2.3
        github.com/spf13/afero v1.9.3
        github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.588
-       github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/sts v1.0.588
-       github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/tag v1.0.233
+       github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/sts 
v1.0.587-0.20230206000712-97469a3dcd4e
+       github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/tag 
v1.0.233-0.20210823002710-8078545fa058
        github.com/tencentyun/cos-go-sdk-v5 v0.7.29
        github.com/tombuildsstuff/giovanni v0.15.1
        github.com/xanzy/ssh-agent v0.3.1
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/opentofu-1.10.3/go.sum new/opentofu-1.10.4/go.sum
--- old/opentofu-1.10.3/go.sum  2025-07-15 15:50:38.000000000 +0200
+++ new/opentofu-1.10.4/go.sum  2025-07-31 15:22:01.000000000 +0200
@@ -1022,10 +1022,10 @@
 github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.588 
h1:DYtBXB7sVc3EOW5horg8j55cLZynhsLYhHrvQ/jXKKM=
 github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common 
v1.0.588/go.mod h1:7sCQWVkxcsR38nffDW057DRGk8mUjK1Ing/EFOK8s8Y=
 github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/kms v1.0.194/go.mod 
h1:yrBKWhChnDqNz1xuXdSbWXG56XawEq0G5j1lg4VwBD4=
-github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/sts v1.0.588 
h1:PlkFOALQZ9BLUyX8EalATUQD5xEn1Sz34C+Rw5VSpvk=
-github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/sts v1.0.588/go.mod 
h1:vPvXNb+zBZVJfZCIKWcYxLpGzgScKKgiPUArobWZ+nU=
-github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/tag v1.0.233 
h1:5Tbi+jyZ2MojC6GK8V6hchwtnkP2IuENUTqSisbYOlA=
-github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/tag v1.0.233/go.mod 
h1:sX14+NSvMjOhNFaMtP2aDy6Bss8PyFXij21gpY6+DAs=
+github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/sts 
v1.0.587-0.20230206000712-97469a3dcd4e 
h1:0GIBenIbbvtMODPCkmMN9DI3l2BhRo6UzPO3GOSKDXI=
+github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/sts 
v1.0.587-0.20230206000712-97469a3dcd4e/go.mod 
h1:vPvXNb+zBZVJfZCIKWcYxLpGzgScKKgiPUArobWZ+nU=
+github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/tag 
v1.0.233-0.20210823002710-8078545fa058 
h1:Gad8z68kPfhIpPIQ97k/1kVB+Iq1bW+NTxqjFNsAPrw=
+github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/tag 
v1.0.233-0.20210823002710-8078545fa058/go.mod 
h1:sX14+NSvMjOhNFaMtP2aDy6Bss8PyFXij21gpY6+DAs=
 github.com/tencentyun/cos-go-sdk-v5 v0.7.29 
h1:uwRBzc70Wgtc5iQQCowqecfRT0OpCXUOZzodZHOOEDs=
 github.com/tencentyun/cos-go-sdk-v5 v0.7.29/go.mod 
h1:4E4+bQ2gBVJcgEC9Cufwylio4mXOct2iu05WjgEBx1o=
 github.com/thanhpk/randstr v1.0.4 
h1:IN78qu/bR+My+gHCvMEXhR/i5oriVHcTB/BJJIRTsNo=
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/opentofu-1.10.3/internal/backend/remote-state/azure/arm_client.go 
new/opentofu-1.10.4/internal/backend/remote-state/azure/arm_client.go
--- old/opentofu-1.10.3/internal/backend/remote-state/azure/arm_client.go       
2025-07-15 15:50:38.000000000 +0200
+++ new/opentofu-1.10.4/internal/backend/remote-state/azure/arm_client.go       
2025-07-31 15:22:01.000000000 +0200
@@ -35,6 +35,8 @@
        // azureAdStorageAuth is only here if we're using AzureAD 
Authentication but is an Authorizer for Storage
        azureAdStorageAuth *autorest.Authorizer
 
+       storageAuthCache autorest.Authorizer
+
        accessKey          string
        environment        azure.Environment
        resourceGroupName  string
@@ -143,23 +145,22 @@
        return &client, nil
 }
 
-func (c ArmClient) getBlobClient(ctx context.Context) (*blobs.Client, error) {
+func (c ArmClient) getStorageAuth(ctx context.Context) (autorest.Authorizer, 
error) {
+       if c.storageAuthCache != nil {
+               return c.storageAuthCache, nil
+       }
+       var err error
+       c.storageAuthCache, err = c.newStorageAuth(ctx)
+       return c.storageAuthCache, err
+}
+func (c ArmClient) newStorageAuth(ctx context.Context) (autorest.Authorizer, 
error) {
        if c.sasToken != "" {
-               log.Printf("[DEBUG] Building the Blob Client from a SAS Token")
-               storageAuth, err := autorest.NewSASTokenAuthorizer(c.sasToken)
-               if err != nil {
-                       return nil, fmt.Errorf("Error building SAS Token 
Authorizer: %w", err)
-               }
-
-               blobsClient := blobs.NewWithEnvironment(c.environment)
-               c.configureClient(&blobsClient.Client, storageAuth)
-               return &blobsClient, nil
+               log.Printf("[DEBUG] Building the Storage Auth from a SAS Token")
+               return autorest.NewSASTokenAuthorizer(c.sasToken)
        }
 
        if c.azureAdStorageAuth != nil {
-               blobsClient := blobs.NewWithEnvironment(c.environment)
-               c.configureClient(&blobsClient.Client, *c.azureAdStorageAuth)
-               return &blobsClient, nil
+               return *c.azureAdStorageAuth, nil
        }
 
        accessKey := c.accessKey
@@ -184,6 +185,14 @@
        if err != nil {
                return nil, fmt.Errorf("Error building Shared Key Authorizer: 
%w", err)
        }
+       return storageAuth, err
+}
+
+func (c ArmClient) getBlobClient(ctx context.Context) (*blobs.Client, error) {
+       storageAuth, err := c.getStorageAuth(ctx)
+       if err != nil {
+               return nil, err
+       }
 
        blobsClient := blobs.NewWithEnvironment(c.environment)
        c.configureClient(&blobsClient.Client, storageAuth)
@@ -191,45 +200,9 @@
 }
 
 func (c ArmClient) getContainersClient(ctx context.Context) 
(*containers.Client, error) {
-       if c.sasToken != "" {
-               log.Printf("[DEBUG] Building the Container Client from a SAS 
Token")
-               storageAuth, err := autorest.NewSASTokenAuthorizer(c.sasToken)
-               if err != nil {
-                       return nil, fmt.Errorf("Error building SAS Token 
Authorizer: %w", err)
-               }
-
-               containersClient := containers.NewWithEnvironment(c.environment)
-               c.configureClient(&containersClient.Client, storageAuth)
-               return &containersClient, nil
-       }
-
-       if c.azureAdStorageAuth != nil {
-               containersClient := containers.NewWithEnvironment(c.environment)
-               c.configureClient(&containersClient.Client, 
*c.azureAdStorageAuth)
-               return &containersClient, nil
-       }
-
-       accessKey := c.accessKey
-       if accessKey == "" {
-               log.Printf("[DEBUG] Building the Container Client from an 
Access Token (using user credentials)")
-               timeoutCtx, cancel := context.WithTimeout(ctx, 
time.Duration(c.timeoutSeconds)*time.Second)
-               defer cancel()
-               keys, err := c.storageAccountsClient.ListKeys(timeoutCtx, 
c.resourceGroupName, c.storageAccountName, "")
-               if err != nil {
-                       return nil, fmt.Errorf("Error retrieving keys for 
Storage Account %q: %w", c.storageAccountName, err)
-               }
-
-               if keys.Keys == nil {
-                       return nil, fmt.Errorf("Nil key returned for storage 
account %q", c.storageAccountName)
-               }
-
-               accessKeys := *keys.Keys
-               accessKey = *accessKeys[0].Value
-       }
-
-       storageAuth, err := 
autorest.NewSharedKeyAuthorizer(c.storageAccountName, accessKey, 
autorest.SharedKey)
+       storageAuth, err := c.getStorageAuth(ctx)
        if err != nil {
-               return nil, fmt.Errorf("Error building Shared Key Authorizer: 
%w", err)
+               return nil, err
        }
 
        containersClient := containers.NewWithEnvironment(c.environment)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/opentofu-1.10.3/internal/command/test_test.go 
new/opentofu-1.10.4/internal/command/test_test.go
--- old/opentofu-1.10.3/internal/command/test_test.go   2025-07-15 
15:50:38.000000000 +0200
+++ new/opentofu-1.10.4/internal/command/test_test.go   2025-07-31 
15:22:01.000000000 +0200
@@ -1496,6 +1496,18 @@
                                                        Type:     cty.String,
                                                        Optional: true,
                                                },
+                                               "object_attr": {
+                                                       Computed: true,
+                                                       NestedType: 
&configschema.Object{
+                                                               Nesting: 
configschema.NestingSingle,
+                                                               Attributes: 
map[string]*configschema.Attribute{
+                                                                       
"string_attr": {
+                                                                               
Type:     cty.String,
+                                                                               
Computed: true,
+                                                                       },
+                                                               },
+                                                       },
+                                               },
                                                "computed_value": {
                                                        Type:     cty.String,
                                                        Computed: true,
@@ -1506,14 +1518,12 @@
                },
        }
 
-       streams, _ := terminal.StreamsForTesting(t)
-       view := views.NewView(streams)
+       view, done := testView(t)
        ui := new(cli.MockUi)
        meta := Meta{
                testingOverrides: metaOverridesForProvider(provider.Provider),
                Ui:               ui,
                View:             view,
-               Streams:          streams,
                ProviderSource:   providerSource,
        }
 
@@ -1521,7 +1531,9 @@
                Meta: meta,
        }
 
-       if code := testCmd.Run(nil); code != 0 {
-               t.Fatalf("expected status code 0 but got %d: %s", code, 
ui.ErrorWriter)
+       code := testCmd.Run(nil)
+       output := done(t)
+       if code != 0 {
+               t.Fatalf("expected status code 0 but got %d: %s", code, 
output.All())
        }
 }
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/opentofu-1.10.3/internal/command/testdata/test/mock_provider_validation/main.tftest.hcl
 
new/opentofu-1.10.4/internal/command/testdata/test/mock_provider_validation/main.tftest.hcl
--- 
old/opentofu-1.10.3/internal/command/testdata/test/mock_provider_validation/main.tftest.hcl
 2025-07-15 15:50:38.000000000 +0200
+++ 
new/opentofu-1.10.4/internal/command/testdata/test/mock_provider_validation/main.tftest.hcl
 2025-07-31 15:22:01.000000000 +0200
@@ -2,6 +2,9 @@
   mock_resource "test_resource" {
     defaults = {
       computed_value = "bar"      
+      object_attr = {
+        string_attr = "bar"
+      }
     }
   }
 }
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/opentofu-1.10.3/internal/configs/hcl2shim/mock_value_composer.go 
new/opentofu-1.10.4/internal/configs/hcl2shim/mock_value_composer.go
--- old/opentofu-1.10.3/internal/configs/hcl2shim/mock_value_composer.go        
2025-07-15 15:50:38.000000000 +0200
+++ new/opentofu-1.10.4/internal/configs/hcl2shim/mock_value_composer.go        
2025-07-31 15:22:01.000000000 +0200
@@ -191,7 +191,7 @@
                                diags = 
diags.Append(tfdiags.WholeContainingBody(
                                        tfdiags.Error,
                                        fmt.Sprintf("Invalid override for block 
field `%v`", k),
-                                       "Cannot overridde block value, because 
it's not present in configuration.",
+                                       "Cannot override block value, because 
it's not present in configuration.",
                                ))
                                continue
                        }
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/opentofu-1.10.3/internal/lang/evalchecks/eval_for_each.go 
new/opentofu-1.10.4/internal/lang/evalchecks/eval_for_each.go
--- old/opentofu-1.10.3/internal/lang/evalchecks/eval_for_each.go       
2025-07-15 15:50:38.000000000 +0200
+++ new/opentofu-1.10.4/internal/lang/evalchecks/eval_for_each.go       
2025-07-31 15:22:01.000000000 +0200
@@ -225,7 +225,8 @@
 
        // A set of strings may contain null, which makes it impossible to
        // convert to a map, so we must return an error
-       it := forEachVal.ElementIterator()
+       forEachValUnmarked, _ := forEachVal.UnmarkDeep()
+       it := forEachValUnmarked.ElementIterator()
        for it.Next() {
                item, _ := it.Element()
                if item.IsNull() {
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/opentofu-1.10.3/internal/lang/evalchecks/eval_for_each_test.go 
new/opentofu-1.10.4/internal/lang/evalchecks/eval_for_each_test.go
--- old/opentofu-1.10.3/internal/lang/evalchecks/eval_for_each_test.go  
2025-07-15 15:50:38.000000000 +0200
+++ new/opentofu-1.10.4/internal/lang/evalchecks/eval_for_each_test.go  
2025-07-31 15:22:01.000000000 +0200
@@ -744,6 +744,44 @@
                        },
                        PlanReturnValue: map[string]cty.Value{},
                },
+               "sensitive_set": {
+                       Input: 
cty.SetVal([]cty.Value{cty.StringVal("a")}).Mark(marks.Sensitive),
+                       ValidateExpectedErrs: []expectedErr{
+                               {
+                                       Summary:           "Invalid for_each 
argument",
+                                       Detail:            "Sensitive values, 
or values derived from sensitive values, cannot be used as for_each arguments",
+                                       CausedByUnknown:   false,
+                                       CausedBySensitive: true,
+                               }},
+                       ValidateReturnValue: cty.NullVal(cty.Set(cty.String)),
+                       PlanExpectedErrs: []expectedErr{
+                               {
+                                       Summary:           "Invalid for_each 
argument",
+                                       Detail:            "Sensitive values, 
or values derived from sensitive values, cannot be used as for_each arguments",
+                                       CausedByUnknown:   false,
+                                       CausedBySensitive: true,
+                               }},
+                       PlanReturnValue: map[string]cty.Value{},
+               },
+               "sensitive_set_elements": {
+                       Input: 
cty.SetVal([]cty.Value{cty.StringVal("a").Mark(marks.Sensitive)}),
+                       ValidateExpectedErrs: []expectedErr{
+                               {
+                                       Summary:           "Invalid for_each 
argument",
+                                       Detail:            "Sensitive values, 
or values derived from sensitive values, cannot be used as for_each arguments",
+                                       CausedByUnknown:   false,
+                                       CausedBySensitive: true,
+                               }},
+                       ValidateReturnValue: cty.NullVal(cty.Set(cty.String)),
+                       PlanExpectedErrs: []expectedErr{
+                               {
+                                       Summary:           "Invalid for_each 
argument",
+                                       Detail:            "Sensitive values, 
or values derived from sensitive values, cannot be used as for_each arguments",
+                                       CausedByUnknown:   false,
+                                       CausedBySensitive: true,
+                               }},
+                       PlanReturnValue: map[string]cty.Value{},
+               },
                "string": {
                        Input: cty.StringVal("i am definitely a set"),
                        ValidateExpectedErrs: []expectedErr{
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/opentofu-1.10.3/internal/tofu/provider_for_test_framework.go 
new/opentofu-1.10.4/internal/tofu/provider_for_test_framework.go
--- old/opentofu-1.10.3/internal/tofu/provider_for_test_framework.go    
2025-07-15 15:50:38.000000000 +0200
+++ new/opentofu-1.10.4/internal/tofu/provider_for_test_framework.go    
2025-07-31 15:22:01.000000000 +0200
@@ -13,6 +13,7 @@
        "github.com/opentofu/opentofu/internal/configs"
        "github.com/opentofu/opentofu/internal/configs/hcl2shim"
        "github.com/opentofu/opentofu/internal/providers"
+       "github.com/opentofu/opentofu/internal/tfdiags"
        "github.com/zclconf/go-cty/cty"
 )
 
@@ -59,14 +60,16 @@
 }
 
 func (p providerForTest) ReadResource(r providers.ReadResourceRequest) 
providers.ReadResourceResponse {
-       resSchema, _ := 
p.schema.SchemaForResourceType(addrs.ManagedResourceMode, r.TypeName)
-
-       mockValues := p.getMockValuesForManagedResource(r.TypeName)
-
        var resp providers.ReadResourceResponse
 
-       resp.NewState, resp.Diagnostics = newMockValueComposer(r.TypeName).
-               ComposeBySchema(resSchema, r.ProviderMeta, mockValues)
+       resp.NewState = r.PriorState
+       if resp.NewState.IsNull() {
+               resp.Diagnostics = 
tfdiags.Diagnostics{}.Append(tfdiags.WholeContainingBody(
+                       tfdiags.Error,
+                       fmt.Sprintf("Unexpected null value for prior state in 
`%v`", r.TypeName),
+                       "While reading a resource from a mock provider, the 
prior state was found to be missing.",
+               ))
+       }
 
        return resp
 }
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/opentofu-1.10.3/internal/tofu/provider_for_test_framework_test.go 
new/opentofu-1.10.4/internal/tofu/provider_for_test_framework_test.go
--- old/opentofu-1.10.3/internal/tofu/provider_for_test_framework_test.go       
1970-01-01 01:00:00.000000000 +0100
+++ new/opentofu-1.10.4/internal/tofu/provider_for_test_framework_test.go       
2025-07-31 15:22:01.000000000 +0200
@@ -0,0 +1,36 @@
+// Copyright (c) The OpenTofu Authors
+// SPDX-License-Identifier: MPL-2.0
+// Copyright (c) 2023 HashiCorp, Inc.
+// SPDX-License-Identifier: MPL-2.0
+
+package tofu
+
+import (
+       "strings"
+       "testing"
+
+       "github.com/opentofu/opentofu/internal/providers"
+)
+
+func TestProviderForTest_ReadResource(t *testing.T) {
+       mockProvider := &MockProvider{}
+
+       provider, err := newProviderForTestWithSchema(mockProvider, 
mockProvider.GetProviderSchema())
+       if err != nil {
+               t.Fatalf("unexpected error: %s", err.Error())
+       }
+
+       resp := provider.ReadResource(providers.ReadResourceRequest{
+               TypeName: "test",
+               Private:  []byte{},
+       })
+
+       if !resp.Diagnostics.HasErrors() {
+               t.Fatalf("expected errors but none were found")
+       }
+
+       errMsg := resp.Diagnostics[0].Description().Summary
+       if !strings.Contains(errMsg, "Unexpected null value for prior state") {
+               t.Fatalf("expected prior state not found error but got: %s", 
errMsg)
+       }
+}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/opentofu-1.10.3/version/VERSION 
new/opentofu-1.10.4/version/VERSION
--- old/opentofu-1.10.3/version/VERSION 2025-07-15 15:50:38.000000000 +0200
+++ new/opentofu-1.10.4/version/VERSION 2025-07-31 15:22:01.000000000 +0200
@@ -1 +1 @@
-1.10.3
+1.10.4

++++++ opentofu.obsinfo ++++++
--- /var/tmp/diff_new_pack.FCc5UK/_old  2025-08-02 00:44:43.325949752 +0200
+++ /var/tmp/diff_new_pack.FCc5UK/_new  2025-08-02 00:44:43.373951747 +0200
@@ -1,5 +1,5 @@
 name: opentofu
-version: 1.10.3
-mtime: 1752587438
-commit: 1e755e9a8f77a723b06e22971d79c4bc2c71eace
+version: 1.10.4
+mtime: 1753968121
+commit: 6d6c2fa96497c15fd8d0b46dc8db0e6877a88b1b
 

++++++ vendor.tar.gz ++++++
/work/SRC/openSUSE:Factory/opentofu/vendor.tar.gz 
/work/SRC/openSUSE:Factory/.opentofu.new.1085/vendor.tar.gz differ: char 30, 
line 1

Reply via email to