Skip to content

Commit 0f5a544

Browse files
authored
helper/resource: Added error logging before failing tests (#958)
Reference: hashicorp/terraform-plugin-sdk#956 If provider developers are using `TF_ACC_LOG_PATH` or `TF_LOG_PATH_MASK`, this will ensure that the separate log file will include the test failure reason, in addition to the test output.
1 parent 68ff107 commit 0f5a544

File tree

2 files changed

+53
-3
lines changed

2 files changed

+53
-3
lines changed

.changelog/958.txt

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
```release-note:enhancement
2+
helper/resource: Added error logging before failing tests, so errors are visible in test output and any separate log file
3+
```

helper/resource/testing_new.go

Lines changed: 50 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -69,13 +69,21 @@ func runNewTest(ctx context.Context, t testing.T, c TestCase, helper *plugintest
6969
protov5: c.ProtoV5ProviderFactories,
7070
protov6: c.ProtoV6ProviderFactories})
7171
if err != nil {
72+
logging.HelperResourceError(ctx,
73+
"Error retrieving state, there may be dangling resources",
74+
map[string]interface{}{logging.KeyError: err},
75+
)
7276
t.Fatalf("Error retrieving state, there may be dangling resources: %s", err.Error())
7377
return
7478
}
7579

7680
if !stateIsEmpty(statePreDestroy) {
7781
err := runPostTestDestroy(ctx, t, c, wd, c.ProviderFactories, c.ProtoV5ProviderFactories, c.ProtoV6ProviderFactories, statePreDestroy)
7882
if err != nil {
83+
logging.HelperResourceError(ctx,
84+
"Error running post-test destroy, there may be dangling resources",
85+
map[string]interface{}{logging.KeyError: err},
86+
)
7987
t.Fatalf("Error running post-test destroy, there may be dangling resources: %s", err.Error())
8088
}
8189
}
@@ -85,12 +93,20 @@ func runNewTest(ctx context.Context, t testing.T, c TestCase, helper *plugintest
8593

8694
providerCfg, err := testProviderConfig(c)
8795
if err != nil {
88-
t.Fatal(err)
96+
logging.HelperResourceError(ctx,
97+
"Error creating test provider configuration",
98+
map[string]interface{}{logging.KeyError: err},
99+
)
100+
t.Fatalf("Error creating test provider configuration: %s", err.Error())
89101
}
90102

91103
err = wd.SetConfig(ctx, providerCfg)
92104
if err != nil {
93-
t.Fatalf("Error setting test config: %s", err)
105+
logging.HelperResourceError(ctx,
106+
"Error setting test provider configuration",
107+
map[string]interface{}{logging.KeyError: err},
108+
)
109+
t.Fatalf("Error setting test provider configuration: %s", err)
94110
}
95111
err = runProviderCommand(ctx, t, func() error {
96112
return wd.Init(ctx)
@@ -99,6 +115,10 @@ func runNewTest(ctx context.Context, t testing.T, c TestCase, helper *plugintest
99115
protov5: c.ProtoV5ProviderFactories,
100116
protov6: c.ProtoV6ProviderFactories})
101117
if err != nil {
118+
logging.HelperResourceError(ctx,
119+
"Error running init",
120+
map[string]interface{}{logging.KeyError: err},
121+
)
102122
t.Fatalf("Error running init: %s", err.Error())
103123
return
104124
}
@@ -125,7 +145,11 @@ func runNewTest(ctx context.Context, t testing.T, c TestCase, helper *plugintest
125145

126146
skip, err := step.SkipFunc()
127147
if err != nil {
128-
t.Fatal(err)
148+
logging.HelperResourceError(ctx,
149+
"Error calling TestStep SkipFunc",
150+
map[string]interface{}{logging.KeyError: err},
151+
)
152+
t.Fatalf("Error calling TestStep SkipFunc: %s", err.Error())
129153
}
130154

131155
logging.HelperResourceDebug(ctx, "Called TestStep SkipFunc")
@@ -144,17 +168,29 @@ func runNewTest(ctx context.Context, t testing.T, c TestCase, helper *plugintest
144168
if step.ExpectError != nil {
145169
logging.HelperResourceDebug(ctx, "Checking TestStep ExpectError")
146170
if err == nil {
171+
logging.HelperResourceError(ctx,
172+
"Error running import: expected an error but got none",
173+
)
147174
t.Fatalf("Step %d/%d error running import: expected an error but got none", i+1, len(c.Steps))
148175
}
149176
if !step.ExpectError.MatchString(err.Error()) {
177+
logging.HelperResourceError(ctx,
178+
fmt.Sprintf("Error running import: expected an error with pattern (%s)", step.ExpectError.String()),
179+
map[string]interface{}{logging.KeyError: err},
180+
)
150181
t.Fatalf("Step %d/%d error running import, expected an error with pattern (%s), no match on: %s", i+1, len(c.Steps), step.ExpectError.String(), err)
151182
}
152183
} else {
153184
if err != nil && c.ErrorCheck != nil {
154185
logging.HelperResourceDebug(ctx, "Calling TestCase ErrorCheck")
155186
err = c.ErrorCheck(err)
187+
logging.HelperResourceDebug(ctx, "Called TestCase ErrorCheck")
156188
}
157189
if err != nil {
190+
logging.HelperResourceError(ctx,
191+
"Error running import",
192+
map[string]interface{}{logging.KeyError: err},
193+
)
158194
t.Fatalf("Step %d/%d error running import: %s", i+1, len(c.Steps), err)
159195
}
160196
}
@@ -172,9 +208,16 @@ func runNewTest(ctx context.Context, t testing.T, c TestCase, helper *plugintest
172208
logging.HelperResourceDebug(ctx, "Checking TestStep ExpectError")
173209

174210
if err == nil {
211+
logging.HelperResourceError(ctx,
212+
"Expected an error but got none",
213+
)
175214
t.Fatalf("Step %d/%d, expected an error but got none", i+1, len(c.Steps))
176215
}
177216
if !step.ExpectError.MatchString(err.Error()) {
217+
logging.HelperResourceError(ctx,
218+
fmt.Sprintf("Expected an error with pattern (%s)", step.ExpectError.String()),
219+
map[string]interface{}{logging.KeyError: err},
220+
)
178221
t.Fatalf("Step %d/%d, expected an error with pattern, no match on: %s", i+1, len(c.Steps), err)
179222
}
180223
} else {
@@ -186,6 +229,10 @@ func runNewTest(ctx context.Context, t testing.T, c TestCase, helper *plugintest
186229
logging.HelperResourceDebug(ctx, "Called TestCase ErrorCheck")
187230
}
188231
if err != nil {
232+
logging.HelperResourceError(ctx,
233+
"Unexpected error",
234+
map[string]interface{}{logging.KeyError: err},
235+
)
189236
t.Fatalf("Step %d/%d error: %s", i+1, len(c.Steps), err)
190237
}
191238
}

0 commit comments

Comments
 (0)