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  }