Skip to content

Commit d5fa8d3

Browse files
author
Clément Decoodt
committed
test(iot): Add IoT routes tests
1 parent 546b9a9 commit d5fa8d3

File tree

1 file changed

+169
-0
lines changed

1 file changed

+169
-0
lines changed

scaleway/resource_iot_routes_test.go

+169
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,169 @@
1+
package scaleway
2+
3+
import (
4+
"fmt"
5+
"testing"
6+
7+
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource"
8+
"github.com/hashicorp/terraform-plugin-sdk/v2/terraform"
9+
iot "github.com/scaleway/scaleway-sdk-go/api/iot/v1"
10+
)
11+
12+
func TestAccScalewayIotRoute_Minimal(t *testing.T) {
13+
tt := NewTestTools(t)
14+
defer tt.Cleanup()
15+
resource.ParallelTest(t, resource.TestCase{
16+
PreCheck: func() { testAccPreCheck(t) },
17+
ProviderFactories: tt.ProviderFactories,
18+
// Destruction is done via the hub destruction.
19+
CheckDestroy: func(state *terraform.State) error {
20+
err1 := testAccCheckScalewayIotHubDestroy(tt)(state)
21+
err2 := testAccCheckScalewayRdbInstanceDestroy(tt)(state)
22+
err3 := testAccCheckScalewayObjectBucketDestroy(tt)(state)
23+
if err1 != nil {
24+
return err1
25+
}
26+
if err2 != nil {
27+
return err2
28+
}
29+
if err3 != nil {
30+
return err3
31+
}
32+
return nil
33+
},
34+
Steps: []resource.TestStep{
35+
{
36+
Config: `
37+
resource "scaleway_iot_route" "default" {
38+
name = "default"
39+
hub_id = scaleway_iot_hub.minimal.id
40+
topic = "#"
41+
database {
42+
query = "SELECT NOW()"
43+
host = scaleway_rdb_instance.minimal.endpoint_ip
44+
port = scaleway_rdb_instance.minimal.endpoint_port
45+
dbname = "rdb"
46+
username = scaleway_rdb_instance.minimal.user_name
47+
password = scaleway_rdb_instance.minimal.password
48+
}
49+
}
50+
resource "scaleway_iot_hub" "minimal" {
51+
name = "minimal"
52+
product_plan = "plan_shared"
53+
}
54+
resource "scaleway_rdb_instance" "minimal" {
55+
name = "minimal"
56+
node_type = "db-dev-s"
57+
engine = "PostgreSQL-12"
58+
is_ha_cluster = false
59+
disable_backup = true
60+
user_name = "root"
61+
password = "T3stP4ssw0rdD0N0tUs3!"
62+
}
63+
`,
64+
Check: resource.ComposeTestCheckFunc(
65+
testAccCheckScalewayIotHubExists(tt, "scaleway_iot_hub.minimal"),
66+
testAccCheckScalewayIotRouteExists(tt, "scaleway_iot_route.default"),
67+
resource.TestCheckResourceAttrSet("scaleway_iot_route.default", "id"),
68+
resource.TestCheckResourceAttrSet("scaleway_iot_route.default", "hub_id"),
69+
resource.TestCheckResourceAttr("scaleway_iot_route.default", "topic", "#"),
70+
resource.TestCheckResourceAttr("scaleway_iot_route.default", "database.0.query", "SELECT NOW()"),
71+
resource.TestCheckResourceAttrSet("scaleway_iot_route.default", "database.0.host"),
72+
resource.TestCheckResourceAttrSet("scaleway_iot_route.default", "database.0.port"),
73+
resource.TestCheckResourceAttrSet("scaleway_iot_route.default", "database.0.username"),
74+
resource.TestCheckResourceAttr("scaleway_iot_route.default", "database.0.password", "T3stP4ssw0rdD0N0tUs3!"),
75+
resource.TestCheckResourceAttr("scaleway_iot_route.default", "database.0.dbname", "rdb"),
76+
),
77+
},
78+
{
79+
Config: `
80+
resource "scaleway_iot_route" "default" {
81+
name = "default"
82+
hub_id = scaleway_iot_hub.minimal.id
83+
topic = "#"
84+
s3 {
85+
bucket_region = "fr-par"
86+
bucket_name = "test-acc-scaleway-iot-route-minimal"
87+
object_prefix = "foo"
88+
strategy = "per_topic"
89+
}
90+
}
91+
resource "scaleway_iot_hub" "minimal" {
92+
name = "minimal"
93+
product_plan = "plan_shared"
94+
}
95+
96+
resource "scaleway_object_bucket" "minimal" {
97+
region = "fr-par"
98+
name = "test-acc-scaleway-iot-route-minimal"
99+
}
100+
`,
101+
Check: resource.ComposeTestCheckFunc(
102+
testAccCheckScalewayIotHubExists(tt, "scaleway_iot_hub.minimal"),
103+
testAccCheckScalewayIotRouteExists(tt, "scaleway_iot_route.default"),
104+
resource.TestCheckResourceAttrSet("scaleway_iot_route.default", "id"),
105+
resource.TestCheckResourceAttrSet("scaleway_iot_route.default", "hub_id"),
106+
resource.TestCheckResourceAttr("scaleway_iot_route.default", "topic", "#"),
107+
resource.TestCheckResourceAttr("scaleway_iot_route.default", "s3.0.bucket_region", "fr-par"),
108+
resource.TestCheckResourceAttrSet("scaleway_iot_route.default", "s3.0.bucket_name"),
109+
resource.TestCheckResourceAttr("scaleway_iot_route.default", "s3.0.object_prefix", "foo"),
110+
resource.TestCheckResourceAttr("scaleway_iot_route.default", "s3.0.strategy", "per_topic"),
111+
),
112+
},
113+
{
114+
Config: `
115+
resource "scaleway_iot_route" "default" {
116+
name = "default"
117+
hub_id = scaleway_iot_hub.minimal.id
118+
topic = "#"
119+
rest {
120+
verb = "get"
121+
uri = "http://scaleway.com"
122+
headers = {
123+
X-terraform-test = "inprogress"
124+
}
125+
}
126+
}
127+
resource "scaleway_iot_hub" "minimal" {
128+
name = "minimal"
129+
product_plan = "plan_shared"
130+
}
131+
`,
132+
Check: resource.ComposeTestCheckFunc(
133+
testAccCheckScalewayIotHubExists(tt, "scaleway_iot_hub.minimal"),
134+
testAccCheckScalewayIotRouteExists(tt, "scaleway_iot_route.default"),
135+
resource.TestCheckResourceAttrSet("scaleway_iot_route.default", "id"),
136+
resource.TestCheckResourceAttrSet("scaleway_iot_route.default", "hub_id"),
137+
resource.TestCheckResourceAttr("scaleway_iot_route.default", "topic", "#"),
138+
resource.TestCheckResourceAttr("scaleway_iot_route.default", "rest.0.verb", "get"),
139+
resource.TestCheckResourceAttr("scaleway_iot_route.default", "rest.0.uri", "http://scaleway.com"),
140+
resource.TestCheckResourceAttr("scaleway_iot_route.default", "rest.0.headers.X-terraform-test", "inprogress"),
141+
),
142+
},
143+
},
144+
})
145+
}
146+
147+
func testAccCheckScalewayIotRouteExists(tt *TestTools, n string) resource.TestCheckFunc {
148+
return func(s *terraform.State) error {
149+
rs, ok := s.RootModule().Resources[n]
150+
if !ok {
151+
return fmt.Errorf("resource not found: %s", n)
152+
}
153+
154+
iotAPI, region, routeID, err := iotAPIWithRegionAndID(tt.Meta, rs.Primary.ID)
155+
if err != nil {
156+
return err
157+
}
158+
159+
_, err = iotAPI.GetRoute(&iot.GetRouteRequest{
160+
Region: region,
161+
RouteID: routeID,
162+
})
163+
if err != nil {
164+
return err
165+
}
166+
167+
return nil
168+
}
169+
}

0 commit comments

Comments
 (0)