github.com/aspring/terraform@v0.8.2-0.20161216122603-6a8619a5db2e/builtin/providers/datadog/resource_datadog_timeboard_test.go (about) 1 package datadog 2 3 import ( 4 "fmt" 5 "strconv" 6 "strings" 7 "testing" 8 9 "github.com/hashicorp/terraform/helper/resource" 10 "github.com/hashicorp/terraform/terraform" 11 "github.com/zorkian/go-datadog-api" 12 ) 13 14 const config1 = ` 15 resource "datadog_timeboard" "acceptance_test" { 16 title = "Acceptance Test Timeboard" 17 description = "Created using the Datadog provider in Terraform" 18 read_only = true 19 graph { 20 title = "Top System CPU by Docker container" 21 viz = "toplist" 22 request { 23 q = "top(avg:docker.cpu.system{*} by {container_name}, 10, 'mean', 'desc')" 24 } 25 } 26 } 27 ` 28 29 const config2 = ` 30 resource "datadog_timeboard" "acceptance_test" { 31 title = "Acceptance Test Timeboard" 32 description = "Created using the Datadog provider in Terraform" 33 graph { 34 title = "Redis latency (ms)" 35 viz = "timeseries" 36 request { 37 q = "avg:redis.info.latency_ms{$host}" 38 } 39 } 40 graph { 41 title = "Redis memory usage" 42 viz = "timeseries" 43 request { 44 q = "avg:redis.mem.used{$host} - avg:redis.mem.lua{$host}, avg:redis.mem.lua{$host}" 45 stacked = true 46 } 47 request { 48 q = "avg:redis.mem.rss{$host}" 49 } 50 request { 51 q = "avg:redis.mem.rss{$host}" 52 type = "bars" 53 style { 54 palette = "warm" 55 } 56 } 57 } 58 template_variable { 59 name = "host" 60 prefix = "host" 61 } 62 } 63 ` 64 65 const config3 = ` 66 resource "datadog_timeboard" "acceptance_test" { 67 title = "Acceptance Test Timeboard" 68 description = "Created using the Datadog provider in Terraform" 69 graph { 70 title = "Redis latency (ms)" 71 viz = "timeseries" 72 request { 73 q = "avg:redis.info.latency_ms{$host}" 74 } 75 events = ["sources:capistrano"] 76 77 marker { 78 label = "High Latency" 79 type = "error solid" 80 value = "y > 100" 81 } 82 yaxis { 83 max = "50" 84 scale = "sqrt" 85 } 86 } 87 graph { 88 title = "ELB Requests" 89 viz = "query_value" 90 request { 91 q = "sum:aws.elb.request_count{*}.as_count()" 92 type = "line" 93 conditional_format { 94 comparator = ">" 95 value = "1000" 96 palette = "white_on_red" 97 } 98 conditional_format { 99 comparator = "<=" 100 value = "1000" 101 palette = "white_on_green" 102 } 103 } 104 custom_unit = "hits" 105 precision = "*" 106 text_align = "left" 107 } 108 template_variable { 109 name = "host" 110 prefix = "host" 111 } 112 } 113 ` 114 115 func TestAccDatadogTimeboard_update(t *testing.T) { 116 117 step1 := resource.TestStep{ 118 Config: config1, 119 Check: resource.ComposeTestCheckFunc( 120 checkExists, 121 resource.TestCheckResourceAttr("datadog_timeboard.acceptance_test", "title", "Acceptance Test Timeboard"), 122 resource.TestCheckResourceAttr("datadog_timeboard.acceptance_test", "description", "Created using the Datadog provider in Terraform"), 123 resource.TestCheckResourceAttr("datadog_timeboard.acceptance_test", "read_only", "true"), 124 resource.TestCheckResourceAttr("datadog_timeboard.acceptance_test", "graph.0.title", "Top System CPU by Docker container"), 125 resource.TestCheckResourceAttr("datadog_timeboard.acceptance_test", "graph.0.viz", "toplist"), 126 resource.TestCheckResourceAttr("datadog_timeboard.acceptance_test", "graph.0.request.0.q", "top(avg:docker.cpu.system{*} by {container_name}, 10, 'mean', 'desc')"), 127 ), 128 } 129 130 step2 := resource.TestStep{ 131 Config: config2, 132 Check: resource.ComposeTestCheckFunc( 133 checkExists, 134 resource.TestCheckResourceAttr("datadog_timeboard.acceptance_test", "title", "Acceptance Test Timeboard"), 135 resource.TestCheckResourceAttr("datadog_timeboard.acceptance_test", "description", "Created using the Datadog provider in Terraform"), 136 resource.TestCheckResourceAttr("datadog_timeboard.acceptance_test", "graph.0.title", "Redis latency (ms)"), 137 resource.TestCheckResourceAttr("datadog_timeboard.acceptance_test", "graph.0.viz", "timeseries"), 138 resource.TestCheckResourceAttr("datadog_timeboard.acceptance_test", "graph.0.request.0.q", "avg:redis.info.latency_ms{$host}"), 139 resource.TestCheckResourceAttr("datadog_timeboard.acceptance_test", "graph.1.title", "Redis memory usage"), 140 resource.TestCheckResourceAttr("datadog_timeboard.acceptance_test", "graph.1.viz", "timeseries"), 141 resource.TestCheckResourceAttr("datadog_timeboard.acceptance_test", "graph.1.request.0.q", "avg:redis.mem.used{$host} - avg:redis.mem.lua{$host}, avg:redis.mem.lua{$host}"), 142 resource.TestCheckResourceAttr("datadog_timeboard.acceptance_test", "graph.1.request.0.stacked", "true"), 143 resource.TestCheckResourceAttr("datadog_timeboard.acceptance_test", "graph.1.request.1.q", "avg:redis.mem.rss{$host}"), 144 resource.TestCheckResourceAttr("datadog_timeboard.acceptance_test", "template_variable.0.name", "host"), 145 resource.TestCheckResourceAttr("datadog_timeboard.acceptance_test", "template_variable.0.prefix", "host"), 146 resource.TestCheckResourceAttr("datadog_timeboard.acceptance_test", "graph.1.request.2.type", "bars"), 147 resource.TestCheckResourceAttr("datadog_timeboard.acceptance_test", "graph.1.request.2.style.palette", "warm"), 148 ), 149 } 150 151 step3 := resource.TestStep{ 152 Config: config3, 153 Check: resource.ComposeTestCheckFunc( 154 checkExists, 155 resource.TestCheckResourceAttr("datadog_timeboard.acceptance_test", "title", "Acceptance Test Timeboard"), 156 resource.TestCheckResourceAttr("datadog_timeboard.acceptance_test", "description", "Created using the Datadog provider in Terraform"), 157 resource.TestCheckResourceAttr("datadog_timeboard.acceptance_test", "graph.0.title", "Redis latency (ms)"), 158 resource.TestCheckResourceAttr("datadog_timeboard.acceptance_test", "graph.0.viz", "timeseries"), 159 resource.TestCheckResourceAttr("datadog_timeboard.acceptance_test", "graph.0.request.0.q", "avg:redis.info.latency_ms{$host}"), 160 resource.TestCheckResourceAttr("datadog_timeboard.acceptance_test", "graph.0.events.#", "1"), 161 resource.TestCheckResourceAttr("datadog_timeboard.acceptance_test", "graph.0.marker.0.label", "High Latency"), 162 resource.TestCheckResourceAttr("datadog_timeboard.acceptance_test", "graph.0.marker.0.type", "error solid"), 163 resource.TestCheckResourceAttr("datadog_timeboard.acceptance_test", "graph.0.marker.0.value", "y > 100"), 164 resource.TestCheckResourceAttr("datadog_timeboard.acceptance_test", "graph.0.yaxis.max", "50"), 165 resource.TestCheckResourceAttr("datadog_timeboard.acceptance_test", "graph.0.yaxis.scale", "sqrt"), 166 resource.TestCheckResourceAttr("datadog_timeboard.acceptance_test", "graph.1.title", "ELB Requests"), 167 resource.TestCheckResourceAttr("datadog_timeboard.acceptance_test", "graph.1.viz", "query_value"), 168 resource.TestCheckResourceAttr("datadog_timeboard.acceptance_test", "graph.1.request.0.q", "sum:aws.elb.request_count{*}.as_count()"), 169 resource.TestCheckResourceAttr("datadog_timeboard.acceptance_test", "graph.1.request.0.type", "line"), 170 resource.TestCheckResourceAttr("datadog_timeboard.acceptance_test", "graph.1.request.0.conditional_format.0.comparator", ">"), 171 resource.TestCheckResourceAttr("datadog_timeboard.acceptance_test", "graph.1.request.0.conditional_format.0.value", "1000"), 172 resource.TestCheckResourceAttr("datadog_timeboard.acceptance_test", "graph.1.request.0.conditional_format.0.palette", "white_on_red"), 173 resource.TestCheckResourceAttr("datadog_timeboard.acceptance_test", "graph.1.request.0.conditional_format.1.comparator", "<="), 174 resource.TestCheckResourceAttr("datadog_timeboard.acceptance_test", "graph.1.request.0.conditional_format.1.value", "1000"), 175 resource.TestCheckResourceAttr("datadog_timeboard.acceptance_test", "graph.1.request.0.conditional_format.1.palette", "white_on_green"), 176 resource.TestCheckResourceAttr("datadog_timeboard.acceptance_test", "graph.1.custom_unit", "hits"), 177 resource.TestCheckResourceAttr("datadog_timeboard.acceptance_test", "graph.1.precision", "*"), 178 resource.TestCheckResourceAttr("datadog_timeboard.acceptance_test", "graph.1.text_align", "left"), 179 resource.TestCheckResourceAttr("datadog_timeboard.acceptance_test", "template_variable.0.name", "host"), 180 resource.TestCheckResourceAttr("datadog_timeboard.acceptance_test", "template_variable.0.prefix", "host"), 181 ), 182 } 183 184 resource.Test(t, resource.TestCase{ 185 PreCheck: func() { testAccPreCheck(t) }, 186 Providers: testAccProviders, 187 CheckDestroy: checkDestroy, 188 Steps: []resource.TestStep{step1, step2, step3}, 189 }) 190 } 191 192 func checkExists(s *terraform.State) error { 193 client := testAccProvider.Meta().(*datadog.Client) 194 for _, r := range s.RootModule().Resources { 195 i, _ := strconv.Atoi(r.Primary.ID) 196 if _, err := client.GetDashboard(i); err != nil { 197 return fmt.Errorf("Received an error retrieving monitor %s", err) 198 } 199 } 200 return nil 201 } 202 203 func checkDestroy(s *terraform.State) error { 204 client := testAccProvider.Meta().(*datadog.Client) 205 for _, r := range s.RootModule().Resources { 206 i, _ := strconv.Atoi(r.Primary.ID) 207 if _, err := client.GetDashboard(i); err != nil { 208 if strings.Contains(err.Error(), "404 Not Found") { 209 continue 210 } 211 return fmt.Errorf("Received an error retrieving timeboard %s", err) 212 } 213 return fmt.Errorf("Timeboard still exists") 214 } 215 return nil 216 }