github.com/danp/terraform@v0.9.5-0.20170426144147-39d740081351/builtin/providers/clc/resource_clc_public_ip_test.go (about)

     1  package clc
     2  
     3  import (
     4  	"fmt"
     5  	"testing"
     6  
     7  	clc "github.com/CenturyLinkCloud/clc-sdk"
     8  	"github.com/CenturyLinkCloud/clc-sdk/server"
     9  	"github.com/hashicorp/terraform/helper/resource"
    10  	"github.com/hashicorp/terraform/terraform"
    11  )
    12  
    13  // things to test:
    14  //   maps to internal specified ip
    15  //   port range
    16  //   update existing rule
    17  //   CIDR restriction
    18  
    19  func TestAccPublicIPBasic(t *testing.T) {
    20  	var resp server.PublicIP
    21  	resource.Test(t, resource.TestCase{
    22  		PreCheck:     func() { testAccPreCheck(t) },
    23  		Providers:    testAccProviders,
    24  		CheckDestroy: testAccCheckPublicIPDestroy,
    25  		Steps: []resource.TestStep{
    26  			resource.TestStep{
    27  				Config: testAccCheckPublicIPConfigBasic,
    28  				Check: resource.ComposeTestCheckFunc(
    29  					testAccCheckPublicIPExists("clc_public_ip.acc_test_public_ip", &resp),
    30  					testAccCheckPublicIPNIC("clc_public_ip.acc_test_public_ip", &resp),
    31  					testAccCheckPublicIPPortRange("clc_public_ip.acc_test_public_ip", &resp),
    32  					testAccCheckPublicIPBlockCIDR("clc_public_ip.acc_test_public_ip", &resp),
    33  					//testAccCheckPublicIPUpdated("clc_public_ip.eip", &resp),
    34  				),
    35  			},
    36  		},
    37  	})
    38  }
    39  
    40  func testAccCheckPublicIPDestroy(s *terraform.State) error {
    41  	client := testAccProvider.Meta().(*clc.Client)
    42  	for _, rs := range s.RootModule().Resources {
    43  		if rs.Type != "clc_public_ip" {
    44  			continue
    45  		}
    46  		sid := rs.Primary.Attributes["server_id"]
    47  		_, err := client.Server.GetPublicIP(sid, rs.Primary.ID)
    48  		if err == nil {
    49  			return fmt.Errorf("IP still exists")
    50  		}
    51  	}
    52  	return nil
    53  
    54  }
    55  
    56  func testAccCheckPublicIPExists(n string, resp *server.PublicIP) resource.TestCheckFunc {
    57  	return func(s *terraform.State) error {
    58  		rs, ok := s.RootModule().Resources[n]
    59  		if !ok {
    60  			return fmt.Errorf("Not found: %s", n)
    61  		}
    62  		if rs.Primary.ID == "" {
    63  			return fmt.Errorf("No PublicIP ID is set")
    64  		}
    65  		client := testAccProvider.Meta().(*clc.Client)
    66  		sid := rs.Primary.Attributes["server_id"]
    67  		p, err := client.Server.GetPublicIP(sid, rs.Primary.ID)
    68  		if err != nil {
    69  			return err
    70  		}
    71  		*resp = *p
    72  		return nil
    73  	}
    74  }
    75  
    76  func testAccCheckPublicIPPortRange(n string, resp *server.PublicIP) resource.TestCheckFunc {
    77  	return func(s *terraform.State) error {
    78  		// check the passed port range made it through
    79  		var spec server.Port
    80  		for _, p := range resp.Ports {
    81  			if p.Protocol == "UDP" {
    82  				spec = p
    83  				break
    84  			}
    85  		}
    86  		if spec.Port != 53 || spec.PortTo != 55 {
    87  			return fmt.Errorf("Expected udp ports from 53-55 but found: %v", spec)
    88  		}
    89  		return nil
    90  	}
    91  }
    92  func testAccCheckPublicIPBlockCIDR(n string, resp *server.PublicIP) resource.TestCheckFunc {
    93  	return func(s *terraform.State) error {
    94  		// check the passed port range made it through
    95  		spec := resp.SourceRestrictions[0]
    96  		if spec.CIDR != "108.19.67.15/32" {
    97  			return fmt.Errorf("Expected cidr restriction but found: %v", spec)
    98  		}
    99  		return nil
   100  	}
   101  }
   102  
   103  func testAccCheckPublicIPNIC(n string, resp *server.PublicIP) resource.TestCheckFunc {
   104  	return func(s *terraform.State) error {
   105  		rs, ok := s.RootModule().Resources[n]
   106  		if !ok {
   107  			return fmt.Errorf("Not found: %s", n)
   108  		}
   109  		sid := rs.Primary.Attributes["server_id"]
   110  		nic := rs.Primary.Attributes["internal_ip_address"]
   111  
   112  		client := testAccProvider.Meta().(*clc.Client)
   113  		srv, err := client.Server.Get(sid)
   114  		if err != nil {
   115  			return fmt.Errorf("Failed fetching server? %v", err)
   116  		}
   117  		first := srv.Details.IPaddresses[0].Internal
   118  		if nic != first {
   119  			return fmt.Errorf("Expected public ip to be mapped to %s but found: %s", first, nic)
   120  		}
   121  		return nil
   122  	}
   123  }
   124  
   125  var testAccCheckPublicIPConfigBasic = `
   126  variable "dc" { default = "IL1" }
   127  
   128  resource "clc_group" "acc_test_group_ip" {
   129    location_id		= "${var.dc}"
   130    name			= "acc_test_group_ip"
   131    parent		= "Default Group"
   132  }
   133  
   134  resource "clc_server" "acc_test_server" {
   135    name_template		= "test"
   136    source_server_id	= "UBUNTU-14-64-TEMPLATE"
   137    group_id		= "${clc_group.acc_test_group_ip.id}"
   138    cpu			= 1
   139    memory_mb		= 1024
   140    password		= "Green123$"
   141  }
   142  
   143  resource "clc_public_ip" "acc_test_public_ip" {
   144    server_id		= "${clc_server.acc_test_server.id}"
   145    internal_ip_address	= "${clc_server.acc_test_server.private_ip_address}"
   146    source_restrictions
   147       { cidr		= "108.19.67.15/32" }
   148    ports
   149      {
   150        protocol		= "TCP"
   151        port		= 80
   152      }
   153    ports
   154      {
   155        protocol		= "UDP"
   156        port		= 53
   157        port_to		= 55
   158      }
   159  }
   160  `