github.com/sarguru/terraform@v0.6.17-0.20160525232901-8fcdfd7e3dc9/builtin/providers/nsone/resource_monitoringjob_test.go (about)

     1  package nsone
     2  
     3  import (
     4  	"fmt"
     5  	"testing"
     6  
     7  	"github.com/bobtfish/go-nsone-api"
     8  	"github.com/hashicorp/terraform/helper/resource"
     9  	"github.com/hashicorp/terraform/terraform"
    10  )
    11  
    12  func TestAccMonitoringJob_basic(t *testing.T) {
    13  	var mj nsone.MonitoringJob
    14  	resource.Test(t, resource.TestCase{
    15  		PreCheck:     func() { testAccPreCheck(t) },
    16  		Providers:    testAccProviders,
    17  		CheckDestroy: testAccCheckMonitoringJobDestroy,
    18  		Steps: []resource.TestStep{
    19  			resource.TestStep{
    20  				Config: testAccMonitoringJobBasic,
    21  				Check: resource.ComposeTestCheckFunc(
    22  					testAccCheckMonitoringJobState("name", "terraform test"),
    23  					testAccCheckMonitoringJobExists("nsone_monitoringjob.foobar", &mj),
    24  					testAccCheckMonitoringJobAttributes(&mj),
    25  				),
    26  			},
    27  		},
    28  	})
    29  }
    30  
    31  func TestAccMonitoringJob_updated(t *testing.T) {
    32  	var mj nsone.MonitoringJob
    33  	resource.Test(t, resource.TestCase{
    34  		PreCheck:     func() { testAccPreCheck(t) },
    35  		Providers:    testAccProviders,
    36  		CheckDestroy: testAccCheckMonitoringJobDestroy,
    37  		Steps: []resource.TestStep{
    38  			resource.TestStep{
    39  				Config: testAccMonitoringJobBasic,
    40  				Check: resource.ComposeTestCheckFunc(
    41  					testAccCheckMonitoringJobState("name", "terraform test"),
    42  					testAccCheckMonitoringJobExists("nsone_monitoringjob.foobar", &mj),
    43  					testAccCheckMonitoringJobAttributes(&mj),
    44  				),
    45  			},
    46  			resource.TestStep{
    47  				Config: testAccMonitoringJobUpdated,
    48  				Check: resource.ComposeTestCheckFunc(
    49  					testAccCheckMonitoringJobState("name", "terraform test"),
    50  					testAccCheckMonitoringJobExists("nsone_monitoringjob.foobar", &mj),
    51  					testAccCheckMonitoringJobAttributesUpdated(&mj),
    52  				),
    53  			},
    54  		},
    55  	})
    56  }
    57  
    58  func testAccCheckMonitoringJobState(key, value string) resource.TestCheckFunc {
    59  	return func(s *terraform.State) error {
    60  		rs, ok := s.RootModule().Resources["nsone_monitoringjob.foobar"]
    61  		if !ok {
    62  			return fmt.Errorf("Not found: %s", "nsone_monitoringjob.foobar")
    63  		}
    64  
    65  		if rs.Primary.ID == "" {
    66  			return fmt.Errorf("No ID is set")
    67  		}
    68  
    69  		p := rs.Primary
    70  		if p.Attributes[key] != value {
    71  			return fmt.Errorf(
    72  				"%s != %s (actual: %s)", key, value, p.Attributes[key])
    73  		}
    74  
    75  		return nil
    76  	}
    77  }
    78  
    79  func testAccCheckMonitoringJobExists(n string, monitoringJob *nsone.MonitoringJob) resource.TestCheckFunc {
    80  	return func(s *terraform.State) error {
    81  		rs, ok := s.RootModule().Resources[n]
    82  
    83  		if !ok {
    84  			return fmt.Errorf("Not found: %s", n)
    85  		}
    86  
    87  		if rs.Primary.ID == "" {
    88  			return fmt.Errorf("NoID is set")
    89  		}
    90  
    91  		client := testAccProvider.Meta().(*nsone.APIClient)
    92  
    93  		foundMj, err := client.GetMonitoringJob(rs.Primary.Attributes["id"])
    94  
    95  		p := rs.Primary
    96  
    97  		if err != nil {
    98  			return err
    99  		}
   100  
   101  		if foundMj.Id != p.Attributes["id"] {
   102  			return fmt.Errorf("Monitoring Job not found")
   103  		}
   104  
   105  		*monitoringJob = foundMj
   106  
   107  		return nil
   108  	}
   109  }
   110  
   111  func testAccCheckMonitoringJobDestroy(s *terraform.State) error {
   112  	client := testAccProvider.Meta().(*nsone.APIClient)
   113  
   114  	for _, rs := range s.RootModule().Resources {
   115  		if rs.Type != "nsone_monitoringjob" {
   116  			continue
   117  		}
   118  
   119  		_, err := client.GetMonitoringJob(rs.Primary.Attributes["id"])
   120  
   121  		if err == nil {
   122  			return fmt.Errorf("Record still exists")
   123  		}
   124  	}
   125  
   126  	return nil
   127  }
   128  
   129  func testAccCheckMonitoringJobAttributes(mj *nsone.MonitoringJob) resource.TestCheckFunc {
   130  	return func(s *terraform.State) error {
   131  		if mj.Frequency != 60 {
   132  			return fmt.Errorf("Bad value : %d", mj.Frequency)
   133  		}
   134  
   135  		if mj.RapidRecheck != true {
   136  			return fmt.Errorf("Bad value : %s", mj.RapidRecheck)
   137  		}
   138  
   139  		if mj.Policy != "all" {
   140  			return fmt.Errorf("Bad value : %s", mj.Policy)
   141  		}
   142  
   143  		if mj.Config["port"].(float64) != 80 {
   144  			return fmt.Errorf("Bad value : %b", mj.Config["port"].(float64))
   145  		}
   146  
   147  		return nil
   148  	}
   149  }
   150  
   151  func testAccCheckMonitoringJobAttributesUpdated(mj *nsone.MonitoringJob) resource.TestCheckFunc {
   152  	return func(s *terraform.State) error {
   153  		if mj.Frequency != 120 {
   154  			return fmt.Errorf("Bad value : %d", mj.Frequency)
   155  		}
   156  
   157  		if mj.RapidRecheck != false {
   158  			return fmt.Errorf("Bad value : %s", mj.RapidRecheck)
   159  		}
   160  
   161  		if mj.Policy != "quorum" {
   162  			return fmt.Errorf("Bad value : %s", mj.Policy)
   163  		}
   164  
   165  		if mj.Config["port"].(float64) != 443 {
   166  			return fmt.Errorf("Bad value : %b", mj.Config["port"].(float64))
   167  		}
   168  
   169  		return nil
   170  	}
   171  }
   172  
   173  const testAccMonitoringJobBasic = `
   174  resource "nsone_monitoringjob" "foobar" {
   175    name = "terraform test"
   176    active = true
   177    regions = [ "lga" ]
   178    job_type = "tcp"
   179    frequency = 60
   180    rapid_recheck = true
   181    policy = "all"
   182    config {
   183      send = "HEAD / HTTP/1.0\r\n\r\n"
   184      port = 80
   185      host = "1.1.1.1"
   186    }
   187  }`
   188  
   189  const testAccMonitoringJobUpdated = `
   190  resource "nsone_monitoringjob" "foobar" {
   191  	name = "terraform test"
   192  	active = true
   193  	regions = [ "lga" ]
   194  	job_type = "tcp"
   195  	frequency = 120
   196  	rapid_recheck = false
   197  	policy = "quorum"
   198  	config {
   199  		send = "HEAD / HTTP/1.0\r\n\r\n"
   200  		port = 443
   201  		host = "1.1.1.1"
   202  	}
   203  }`