Skip to content

Commit 8b1a648

Browse files
authored
Merge pull request #109 from devops-rob/echo
added echo tests for ephemeral resources
2 parents 98168cb + e5409dc commit 8b1a648

3 files changed

Lines changed: 96 additions & 21 deletions

File tree

internal/provider/curl_ephemeral_resource_test.go

Lines changed: 90 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,10 @@ package provider
33
import (
44
"fmt"
55
"github.com/hashicorp/terraform-plugin-testing/helper/resource"
6+
"github.com/hashicorp/terraform-plugin-testing/knownvalue"
7+
"github.com/hashicorp/terraform-plugin-testing/statecheck"
68
"github.com/hashicorp/terraform-plugin-testing/terraform"
9+
"github.com/hashicorp/terraform-plugin-testing/tfjsonpath"
710
"github.com/jarcoal/httpmock"
811
"net/http"
912
"os"
@@ -44,7 +47,14 @@ resource "terracurl_request" "test" {
4447
skip_destroy = true
4548
skip_read = true
4649
47-
}`
50+
}
51+
52+
provider "echo" {
53+
data = ephemeral.terracurl_request.ephems
54+
}
55+
56+
resource "echo" "test" {}
57+
`
4858

4959
func TestAccEphemeralResource(t *testing.T) {
5060
t.Setenv("TF_ACC", "true")
@@ -59,12 +69,12 @@ func TestAccEphemeralResource(t *testing.T) {
5969
httpmock.RegisterResponder(
6070
"POST",
6171
"https://example.com/open",
62-
httpmock.NewStringResponder(201, `{"name": "devopsrob"}`),
72+
httpmock.NewStringResponder(201, `token-123`),
6373
)
6474
httpmock.RegisterResponder(
6575
"GET",
6676
"https://example.com/renew",
67-
httpmock.NewStringResponder(200, `{"name": "devopsrob"}`),
77+
httpmock.NewStringResponder(200, `token-123`),
6878
)
6979
httpmock.RegisterResponder(
7080
"DELETE",
@@ -86,7 +96,7 @@ func TestAccEphemeralResource(t *testing.T) {
8696

8797
resource.Test(t, resource.TestCase{
8898
PreCheck: func() { testAccPreCheck(t) },
89-
ProtoV6ProviderFactories: testAccProtoV6ProviderFactories,
99+
ProtoV6ProviderFactories: testAccProtoV6ProviderFactoriesWithEcho,
90100
CheckDestroy: nil,
91101
Steps: []resource.TestStep{
92102
{
@@ -108,6 +118,13 @@ func TestAccEphemeralResource(t *testing.T) {
108118
return nil
109119
},
110120
),
121+
ConfigStateChecks: []statecheck.StateCheck{
122+
statecheck.ExpectKnownValue(
123+
"echo.test",
124+
tfjsonpath.New("data").AtMapKey("response"),
125+
knownvalue.StringExact("token-123"),
126+
),
127+
},
111128
},
112129
{
113130
RefreshState: true,
@@ -170,6 +187,11 @@ resource "terracurl_request" "test" {
170187
171188
}
172189
190+
provider "echo" {
191+
data = ephemeral.terracurl_request.ephems
192+
}
193+
194+
resource "echo" "test" {}
173195
174196
`
175197

@@ -195,7 +217,7 @@ func TestAccEphemeralResourceWithHeaders(t *testing.T) {
195217
httpmock.RegisterResponder("POST", "https://example.com/open",
196218
func(req *http.Request) (*http.Response, error) {
197219
if req.Header.Get("Authorization") == "Bearer root" {
198-
return httpmock.NewStringResponse(201, `{"message": "success"}`), nil
220+
return httpmock.NewStringResponse(201, `token-123`), nil
199221
}
200222
return httpmock.NewStringResponse(400, `{"error": "missing or invalid header"}`), nil
201223
})
@@ -218,7 +240,7 @@ func TestAccEphemeralResourceWithHeaders(t *testing.T) {
218240

219241
resource.Test(t, resource.TestCase{
220242
PreCheck: func() { testAccPreCheck(t) },
221-
ProtoV6ProviderFactories: testAccProtoV6ProviderFactories,
243+
ProtoV6ProviderFactories: testAccProtoV6ProviderFactoriesWithEcho,
222244
CheckDestroy: nil,
223245
Steps: []resource.TestStep{
224246
{
@@ -228,6 +250,13 @@ func TestAccEphemeralResourceWithHeaders(t *testing.T) {
228250
testMockEndpointRegister("GET https://example.com/renew"),
229251
testMockEndpointRegister("DELETE https://example.com/close"),
230252
),
253+
ConfigStateChecks: []statecheck.StateCheck{
254+
statecheck.ExpectKnownValue(
255+
"echo.test",
256+
tfjsonpath.New("data").AtMapKey("response"),
257+
knownvalue.StringExact("token-123"),
258+
),
259+
},
231260
},
232261
},
233262
})
@@ -279,7 +308,14 @@ resource "terracurl_request" "test" {
279308
skip_destroy = true
280309
skip_read = true
281310
282-
}`
311+
}
312+
313+
provider "echo" {
314+
data = ephemeral.terracurl_request.ephems
315+
}
316+
317+
resource "echo" "test" {}
318+
`
283319

284320
func TestAccEphemeralResourceWithParameters(t *testing.T) {
285321
t.Setenv("TF_ACC", "true")
@@ -292,12 +328,12 @@ func TestAccEphemeralResourceWithParameters(t *testing.T) {
292328
httpmock.RegisterResponder(
293329
"POST",
294330
"https://example.com/open?params=true",
295-
httpmock.NewStringResponder(201, `{"message": "success"}`),
331+
httpmock.NewStringResponder(201, `token-123`),
296332
)
297333
httpmock.RegisterResponder(
298334
"GET",
299335
"https://example.com/renew?params=true",
300-
httpmock.NewStringResponder(200, `{"message": "success"}`),
336+
httpmock.NewStringResponder(200, `token-123`),
301337
)
302338
httpmock.RegisterResponder(
303339
"DELETE",
@@ -318,7 +354,7 @@ func TestAccEphemeralResourceWithParameters(t *testing.T) {
318354

319355
resource.Test(t, resource.TestCase{
320356
PreCheck: func() { testAccPreCheck(t) },
321-
ProtoV6ProviderFactories: testAccProtoV6ProviderFactories,
357+
ProtoV6ProviderFactories: testAccProtoV6ProviderFactoriesWithEcho,
322358
CheckDestroy: nil,
323359
Steps: []resource.TestStep{
324360
{
@@ -328,6 +364,13 @@ func TestAccEphemeralResourceWithParameters(t *testing.T) {
328364
testMockEndpointRegister("GET https://example.com/renew?params=true"),
329365
testMockEndpointRegister("DELETE https://example.com/close?params=true"),
330366
),
367+
ConfigStateChecks: []statecheck.StateCheck{
368+
statecheck.ExpectKnownValue(
369+
"echo.test",
370+
tfjsonpath.New("data").AtMapKey("response"),
371+
knownvalue.StringExact("token-123"),
372+
),
373+
},
331374
},
332375
},
333376
})
@@ -368,7 +411,14 @@ resource "terracurl_request" "test" {
368411
skip_destroy = true
369412
skip_read = true
370413
371-
}`
414+
}
415+
416+
provider "echo" {
417+
data = ephemeral.terracurl_request.ephems
418+
}
419+
420+
resource "echo" "test" {}
421+
`
372422

373423
func TestAccEphemeralResourceSkipRenew(t *testing.T) {
374424
t.Setenv("TF_ACC", "true")
@@ -381,12 +431,12 @@ func TestAccEphemeralResourceSkipRenew(t *testing.T) {
381431
httpmock.RegisterResponder(
382432
"POST",
383433
"https://example.com/open",
384-
httpmock.NewStringResponder(201, `{"message": "success"}`),
434+
httpmock.NewStringResponder(201, `token-123`),
385435
)
386436
httpmock.RegisterResponder(
387437
"GET",
388438
"https://example.com/renew",
389-
httpmock.NewStringResponder(200, `{"message": "success"}`),
439+
httpmock.NewStringResponder(200, `token-123`),
390440
)
391441
httpmock.RegisterResponder(
392442
"DELETE",
@@ -407,14 +457,21 @@ func TestAccEphemeralResourceSkipRenew(t *testing.T) {
407457

408458
resource.Test(t, resource.TestCase{
409459
PreCheck: func() { testAccPreCheck(t) },
410-
ProtoV6ProviderFactories: testAccProtoV6ProviderFactories,
460+
ProtoV6ProviderFactories: testAccProtoV6ProviderFactoriesWithEcho,
411461
CheckDestroy: nil,
412462
Steps: []resource.TestStep{
413463
{
414464
Config: testAccEphemeralResourceSkipRenew,
415465
Check: resource.ComposeTestCheckFunc(
416466
testMockEndpointCount("GET https://example.com/renew", 0),
417467
),
468+
ConfigStateChecks: []statecheck.StateCheck{
469+
statecheck.ExpectKnownValue(
470+
"echo.test",
471+
tfjsonpath.New("data").AtMapKey("response"),
472+
knownvalue.StringExact("token-123"),
473+
),
474+
},
418475
},
419476
},
420477
})
@@ -451,7 +508,14 @@ resource "terracurl_request" "test" {
451508
skip_destroy = true
452509
skip_read = true
453510
454-
}`
511+
}
512+
513+
provider "echo" {
514+
data = ephemeral.terracurl_request.ephems
515+
}
516+
517+
resource "echo" "test" {}
518+
`
455519

456520
func TestAccEphemeralResourceSkipClose(t *testing.T) {
457521
t.Setenv("TF_ACC", "true")
@@ -464,12 +528,12 @@ func TestAccEphemeralResourceSkipClose(t *testing.T) {
464528
httpmock.RegisterResponder(
465529
"POST",
466530
"https://example.com/open",
467-
httpmock.NewStringResponder(201, `{"message": "success"}`),
531+
httpmock.NewStringResponder(201, `token-123`),
468532
)
469533
httpmock.RegisterResponder(
470534
"GET",
471535
"https://example.com/renew",
472-
httpmock.NewStringResponder(200, `{"message": "success"}`),
536+
httpmock.NewStringResponder(200, `token-123`),
473537
)
474538
httpmock.RegisterResponder(
475539
"DELETE",
@@ -490,14 +554,21 @@ func TestAccEphemeralResourceSkipClose(t *testing.T) {
490554

491555
resource.Test(t, resource.TestCase{
492556
PreCheck: func() { testAccPreCheck(t) },
493-
ProtoV6ProviderFactories: testAccProtoV6ProviderFactories,
557+
ProtoV6ProviderFactories: testAccProtoV6ProviderFactoriesWithEcho,
494558
CheckDestroy: nil,
495559
Steps: []resource.TestStep{
496560
{
497561
Config: testAccEphemeralResourceSkipClose,
498562
Check: resource.ComposeTestCheckFunc(
499563
testMockEndpointCount("GET https://example.com/close", 0),
500564
),
565+
ConfigStateChecks: []statecheck.StateCheck{
566+
statecheck.ExpectKnownValue(
567+
"echo.test",
568+
tfjsonpath.New("data").AtMapKey("response"),
569+
knownvalue.StringExact("token-123"),
570+
),
571+
},
501572
},
502573
},
503574
})
@@ -554,6 +625,7 @@ resource "terracurl_request" "test" {
554625
555626
}
556627
628+
557629
`, url, certFile, certFile, keyFile, renewUrl, renewCertFile, renewCertFile, renewKeyFile, closeUrl, closeCertFile, closeCertFile, closeKeyFile)
558630
}
559631

internal/provider/provider_test.go

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ import (
88
"crypto/tls"
99
"encoding/hex"
1010
"fmt"
11+
"github.com/hashicorp/terraform-plugin-testing/echoprovider"
1112
"log"
1213
"net/http"
1314
"net/http/httptest"
@@ -28,6 +29,11 @@ var testAccProtoV6ProviderFactories = map[string]func() (tfprotov6.ProviderServe
2829
"terracurl": providerserver.NewProtocol6WithError(New("test")()),
2930
}
3031

32+
var testAccProtoV6ProviderFactoriesWithEcho = map[string]func() (tfprotov6.ProviderServer, error){
33+
"terracurl": providerserver.NewProtocol6WithError(New("test")()),
34+
"echo": echoprovider.NewProviderServer(),
35+
}
36+
3137
const localCert = `-----BEGIN CERTIFICATE-----
3238
MIICnDCCAkOgAwIBAgIRAJ7vRKfNUfgTzPf3A2usN5MwCgYIKoZIzj0EAwIwgbkx
3339
CzAJBgNVBAYTAlVTMQswCQYDVQQIEwJDQTEWMBQGA1UEBxMNU2FuIEZyYW5jaXNj

main.go

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,3 @@
1-
// Copyright (c) HashiCorp, Inc.
2-
// SPDX-License-Identifier: MPL-2.0.
3-
41
package main
52

63
import (

0 commit comments

Comments
 (0)