@@ -2,22 +2,27 @@ package wallarm
22
33import (
44 "fmt"
5+ "strconv"
56 "testing"
67
78 "github.com/hashicorp/terraform-plugin-sdk/helper/resource"
9+ "github.com/hashicorp/terraform-plugin-sdk/terraform"
10+ wallarm "github.com/wallarm/wallarm-go"
811)
912
1013func TestAccWallarmNode (t * testing.T ) {
1114 rnd := generateRandomResourceName (10 )
1215 name := "wallarm_node." + rnd
1316
1417 resource .Test (t , resource.TestCase {
15- PreCheck : func () { testAccPreCheck (t ) },
16- Providers : testAccProviders ,
18+ PreCheck : func () { testAccPreCheck (t ) },
19+ Providers : testAccProviders ,
20+ CheckDestroy : testAccCheckWallarmDestroy (name ),
1721 Steps : []resource.TestStep {
1822 {
1923 Config : testWallarmNodeConfig (rnd , "tf-test-" + rnd ),
2024 Check : resource .ComposeTestCheckFunc (
25+ testAccCheckWallarmNodeExists (name ),
2126 resource .TestCheckResourceAttr (name , "hostname" , "tf-test-" + rnd ),
2227 ),
2328 },
@@ -31,3 +36,70 @@ resource "wallarm_node" "%[1]s" {
3136 hostname = "%[2]s"
3237}` , resourceID , hostname )
3338}
39+
40+ func testAccCheckWallarmDestroy (name string ) resource.TestCheckFunc {
41+ return func (s * terraform.State ) error {
42+ client := testAccProvider .Meta ().(wallarm.API )
43+
44+ for _ , resource := range s .RootModule ().Resources {
45+ if resource .Type != name {
46+ continue
47+ }
48+
49+ clientID , err := strconv .Atoi (resource .Primary .Attributes ["client_id" ])
50+ if err != nil {
51+ return err
52+ }
53+
54+ hostname := resource .Primary .Attributes ["hostname" ]
55+
56+ // TODO: Add filter by hostname in wallarm-go and use here and resource
57+ nodes , err := client .NodeRead (clientID , "all" )
58+ if err != nil {
59+ return err
60+ }
61+
62+ for _ , node := range nodes .Body {
63+ if node .Hostname == hostname {
64+ return fmt .Errorf ("Resource still exists: %s" , name )
65+ }
66+ }
67+
68+ return nil
69+ }
70+
71+ return nil
72+ }
73+ }
74+
75+ func testAccCheckWallarmNodeExists (name string ) resource.TestCheckFunc {
76+ return func (s * terraform.State ) error {
77+ client := testAccProvider .Meta ().(wallarm.API )
78+
79+ resource , ok := s .RootModule ().Resources [name ]
80+ if ! ok {
81+ return fmt .Errorf ("Not found: %s" , name )
82+ }
83+
84+ clientID , err := strconv .Atoi (resource .Primary .Attributes ["client_id" ])
85+ if err != nil {
86+ return err
87+ }
88+
89+ hostname := resource .Primary .Attributes ["hostname" ]
90+
91+ // TODO: Add filter by hostname in wallarm-go and use here and resource
92+ nodes , err := client .NodeRead (clientID , "all" )
93+ if err != nil {
94+ return err
95+ }
96+
97+ for _ , node := range nodes .Body {
98+ if node .Hostname == hostname {
99+ return nil
100+ }
101+ }
102+
103+ return fmt .Errorf ("WallarmNode not found: %s" , name )
104+ }
105+ }
0 commit comments