github.com/koding/terraform@v0.6.4-0.20170608090606-5d7e0339779d/builtin/providers/scaleway/resource_scaleway_server_test.go (about)

     1  package scaleway
     2  
     3  import (
     4  	"fmt"
     5  	"testing"
     6  
     7  	"github.com/hashicorp/terraform/helper/resource"
     8  	"github.com/hashicorp/terraform/terraform"
     9  )
    10  
    11  func TestAccScalewayServer_Basic(t *testing.T) {
    12  	resource.Test(t, resource.TestCase{
    13  		PreCheck:     func() { testAccPreCheck(t) },
    14  		Providers:    testAccProviders,
    15  		CheckDestroy: testAccCheckScalewayServerDestroy,
    16  		Steps: []resource.TestStep{
    17  			resource.TestStep{
    18  				Config: testAccCheckScalewayServerConfig,
    19  				Check: resource.ComposeTestCheckFunc(
    20  					testAccCheckScalewayServerExists("scaleway_server.base"),
    21  					testAccCheckScalewayServerAttributes("scaleway_server.base"),
    22  					resource.TestCheckResourceAttr(
    23  						"scaleway_server.base", "type", "C1"),
    24  					resource.TestCheckResourceAttr(
    25  						"scaleway_server.base", "name", "test"),
    26  					resource.TestCheckResourceAttr(
    27  						"scaleway_server.base", "tags.0", "terraform-test"),
    28  				),
    29  			},
    30  			resource.TestStep{
    31  				Config: testAccCheckScalewayServerConfig_IPAttachment,
    32  				Check: resource.ComposeTestCheckFunc(
    33  					testAccCheckScalewayServerIPAttachmentAttributes("scaleway_ip.base", "scaleway_server.base"),
    34  				),
    35  			},
    36  			resource.TestStep{
    37  				Config: testAccCheckScalewayServerConfig_IPDetachment,
    38  				Check: resource.ComposeTestCheckFunc(
    39  					testAccCheckScalewayServerIPDetachmentAttributes("scaleway_server.base"),
    40  				),
    41  			},
    42  		},
    43  	})
    44  }
    45  
    46  func TestAccScalewayServer_ExistingIP(t *testing.T) {
    47  	resource.Test(t, resource.TestCase{
    48  		PreCheck:     func() { testAccPreCheck(t) },
    49  		Providers:    testAccProviders,
    50  		CheckDestroy: testAccCheckScalewayServerDestroy,
    51  		Steps: []resource.TestStep{
    52  			resource.TestStep{
    53  				Config: testAccCheckScalewayServerConfig_IPAttachment,
    54  				Check: resource.ComposeTestCheckFunc(
    55  					testAccCheckScalewayServerExists("scaleway_server.base"),
    56  					testAccCheckScalewayServerIPAttachmentAttributes("scaleway_ip.base", "scaleway_server.base"),
    57  				),
    58  			},
    59  		},
    60  	})
    61  }
    62  
    63  func TestAccScalewayServer_Volumes(t *testing.T) {
    64  	resource.Test(t, resource.TestCase{
    65  		PreCheck:     func() { testAccPreCheck(t) },
    66  		Providers:    testAccProviders,
    67  		CheckDestroy: testAccCheckScalewayServerDestroy,
    68  		Steps: []resource.TestStep{
    69  			resource.TestStep{
    70  				Config: testAccCheckScalewayServerVolumeConfig,
    71  				Check: resource.ComposeTestCheckFunc(
    72  					testAccCheckScalewayServerExists("scaleway_server.base"),
    73  					testAccCheckScalewayServerAttributes("scaleway_server.base"),
    74  					resource.TestCheckResourceAttr(
    75  						"scaleway_server.base", "type", "C1"),
    76  					resource.TestCheckResourceAttr(
    77  						"scaleway_server.base", "volume.#", "2"),
    78  					resource.TestCheckResourceAttrSet(
    79  						"scaleway_server.base", "volume.0.volume_id"),
    80  					resource.TestCheckResourceAttr(
    81  						"scaleway_server.base", "volume.0.type", "l_ssd"),
    82  					resource.TestCheckResourceAttr(
    83  						"scaleway_server.base", "volume.0.size_in_gb", "20"),
    84  					resource.TestCheckResourceAttrSet(
    85  						"scaleway_server.base", "volume.1.volume_id"),
    86  					resource.TestCheckResourceAttr(
    87  						"scaleway_server.base", "volume.1.type", "l_ssd"),
    88  					resource.TestCheckResourceAttr(
    89  						"scaleway_server.base", "volume.1.size_in_gb", "30"),
    90  				),
    91  			},
    92  		},
    93  	})
    94  }
    95  
    96  func TestAccScalewayServer_SecurityGroup(t *testing.T) {
    97  	resource.Test(t, resource.TestCase{
    98  		PreCheck:     func() { testAccPreCheck(t) },
    99  		Providers:    testAccProviders,
   100  		CheckDestroy: testAccCheckScalewayServerDestroy,
   101  		Steps: []resource.TestStep{
   102  			resource.TestStep{
   103  				Config: testAccCheckScalewayServerConfig_SecurityGroup,
   104  				Check: resource.ComposeTestCheckFunc(
   105  					testAccCheckScalewayServerExists("scaleway_server.base"),
   106  					testAccCheckScalewayServerSecurityGroup("scaleway_server.base", "blue"),
   107  				),
   108  			},
   109  			resource.TestStep{
   110  				Config: testAccCheckScalewayServerConfig_SecurityGroup_Update,
   111  				Check: resource.ComposeTestCheckFunc(
   112  					testAccCheckScalewayServerExists("scaleway_server.base"),
   113  					testAccCheckScalewayServerSecurityGroup("scaleway_server.base", "red"),
   114  				),
   115  			},
   116  		},
   117  	})
   118  }
   119  
   120  func testAccCheckScalewayServerDestroy(s *terraform.State) error {
   121  	client := testAccProvider.Meta().(*Client).scaleway
   122  
   123  	for _, rs := range s.RootModule().Resources {
   124  		if rs.Type != "scaleway" {
   125  			continue
   126  		}
   127  
   128  		_, err := client.GetServer(rs.Primary.ID)
   129  
   130  		if err == nil {
   131  			return fmt.Errorf("Server still exists")
   132  		}
   133  	}
   134  
   135  	return nil
   136  }
   137  
   138  func testAccCheckScalewayServerIPAttachmentAttributes(ipName, serverName string) resource.TestCheckFunc {
   139  	return func(s *terraform.State) error {
   140  		ip, ok := s.RootModule().Resources[ipName]
   141  		if !ok {
   142  			return fmt.Errorf("Unknown scaleway_ip resource: %s", ipName)
   143  		}
   144  
   145  		server, ok := s.RootModule().Resources[serverName]
   146  		if !ok {
   147  			return fmt.Errorf("Unknown scaleway_server resource: %s", serverName)
   148  		}
   149  
   150  		client := testAccProvider.Meta().(*Client).scaleway
   151  
   152  		res, err := client.GetIP(ip.Primary.ID)
   153  		if err != nil {
   154  			return err
   155  		}
   156  		if res.IP.Server == nil || res.IP.Server.Identifier != server.Primary.ID {
   157  			return fmt.Errorf("IP %q is not attached to server %q", ip.Primary.ID, server.Primary.ID)
   158  		}
   159  
   160  		return nil
   161  	}
   162  }
   163  
   164  func testAccCheckScalewayServerIPDetachmentAttributes(n string) resource.TestCheckFunc {
   165  	return func(s *terraform.State) error {
   166  		rs, ok := s.RootModule().Resources[n]
   167  		if !ok {
   168  			return fmt.Errorf("Unknown resource: %s", n)
   169  		}
   170  
   171  		client := testAccProvider.Meta().(*Client).scaleway
   172  		server, err := client.GetServer(rs.Primary.ID)
   173  		if err != nil {
   174  			return err
   175  		}
   176  
   177  		if server.PublicAddress.Identifier != "" {
   178  			return fmt.Errorf("Expected server to have no public IP but got %q", server.PublicAddress.Identifier)
   179  		}
   180  		return nil
   181  	}
   182  }
   183  
   184  func testAccCheckScalewayServerAttributes(n string) resource.TestCheckFunc {
   185  	return func(s *terraform.State) error {
   186  		rs, ok := s.RootModule().Resources[n]
   187  		if !ok {
   188  			return fmt.Errorf("Unknown resource: %s", n)
   189  		}
   190  
   191  		client := testAccProvider.Meta().(*Client).scaleway
   192  		server, err := client.GetServer(rs.Primary.ID)
   193  
   194  		if err != nil {
   195  			return err
   196  		}
   197  
   198  		if server.Name != "test" {
   199  			return fmt.Errorf("Server has wrong name")
   200  		}
   201  		if server.Image.Identifier != armImageIdentifier {
   202  			return fmt.Errorf("Wrong server image")
   203  		}
   204  		if server.CommercialType != "C1" {
   205  			return fmt.Errorf("Wrong server type")
   206  		}
   207  
   208  		return nil
   209  	}
   210  }
   211  
   212  func testAccCheckScalewayServerSecurityGroup(n, securityGroupName string) resource.TestCheckFunc {
   213  	return func(s *terraform.State) error {
   214  		rs, ok := s.RootModule().Resources[n]
   215  		if !ok {
   216  			return fmt.Errorf("Unknown resource: %s", n)
   217  		}
   218  
   219  		client := testAccProvider.Meta().(*Client).scaleway
   220  		server, err := client.GetServer(rs.Primary.ID)
   221  
   222  		if err != nil {
   223  			return err
   224  		}
   225  
   226  		if server.SecurityGroup.Name != securityGroupName {
   227  			return fmt.Errorf("Server has wrong security_group")
   228  		}
   229  
   230  		return nil
   231  	}
   232  }
   233  
   234  func testAccCheckScalewayServerExists(n string) resource.TestCheckFunc {
   235  	return func(s *terraform.State) error {
   236  		rs, ok := s.RootModule().Resources[n]
   237  
   238  		if !ok {
   239  			return fmt.Errorf("Not found: %s", n)
   240  		}
   241  
   242  		if rs.Primary.ID == "" {
   243  			return fmt.Errorf("No Server ID is set")
   244  		}
   245  
   246  		client := testAccProvider.Meta().(*Client).scaleway
   247  		server, err := client.GetServer(rs.Primary.ID)
   248  
   249  		if err != nil {
   250  			return err
   251  		}
   252  
   253  		if server.Identifier != rs.Primary.ID {
   254  			return fmt.Errorf("Record not found")
   255  		}
   256  
   257  		return nil
   258  	}
   259  }
   260  
   261  var armImageIdentifier = "5faef9cd-ea9b-4a63-9171-9e26bec03dbc"
   262  
   263  var testAccCheckScalewayServerConfig = fmt.Sprintf(`
   264  resource "scaleway_server" "base" {
   265    name = "test"
   266    # ubuntu 14.04
   267    image = "%s"
   268    type = "C1"
   269    tags = [ "terraform-test" ]
   270  }`, armImageIdentifier)
   271  
   272  var testAccCheckScalewayServerConfig_IPAttachment = fmt.Sprintf(`
   273  resource "scaleway_ip" "base" {}
   274  
   275  resource "scaleway_server" "base" {
   276    name = "test"
   277    # ubuntu 14.04
   278    image = "%s"
   279    type = "C1"
   280    tags = [ "terraform-test" ]
   281    public_ip = "${scaleway_ip.base.ip}"
   282  }`, armImageIdentifier)
   283  
   284  var testAccCheckScalewayServerConfig_IPDetachment = fmt.Sprintf(`
   285  resource "scaleway_server" "base" {
   286    name = "test"
   287    # ubuntu 14.04
   288    image = "%s"
   289    type = "C1"
   290    tags = [ "terraform-test" ]
   291  }`, armImageIdentifier)
   292  
   293  var testAccCheckScalewayServerVolumeConfig = fmt.Sprintf(`
   294  resource "scaleway_server" "base" {
   295    name = "test"
   296    # ubuntu 14.04
   297    image = "%s"
   298    type = "C1"
   299    tags = [ "terraform-test" ]
   300  
   301    volume {
   302      size_in_gb = 20
   303      type = "l_ssd"
   304    }
   305  
   306    volume {
   307      size_in_gb = 30
   308      type = "l_ssd"
   309    }
   310  }`, armImageIdentifier)
   311  
   312  var testAccCheckScalewayServerConfig_SecurityGroup = fmt.Sprintf(`
   313  resource "scaleway_security_group" "blue" {
   314    name = "blue"
   315    description = "blue"
   316  }
   317  
   318  resource "scaleway_security_group" "red" {
   319    name = "red"
   320    description = "red"
   321  }
   322  
   323  resource "scaleway_server" "base" {
   324    name = "test"
   325    # ubuntu 14.04
   326    image = "%s"
   327    type = "C1"
   328    tags = [ "terraform-test" ]
   329    security_group = "${scaleway_security_group.blue.id}"
   330  }`, armImageIdentifier)
   331  
   332  var testAccCheckScalewayServerConfig_SecurityGroup_Update = fmt.Sprintf(`
   333  resource "scaleway_security_group" "blue" {
   334    name = "blue"
   335    description = "blue"
   336  }
   337  
   338  resource "scaleway_security_group" "red" {
   339    name = "red"
   340    description = "red"
   341  }
   342  
   343  resource "scaleway_server" "base" {
   344    name = "test"
   345    # ubuntu 14.04
   346    image = "%s"
   347    type = "C1"
   348    tags = [ "terraform-test" ]
   349    security_group = "${scaleway_security_group.red.id}"
   350  }`, armImageIdentifier)