blob: dc018c1bcecb1673dcb6939ef26921f08de6affe [file] [log] [blame]
package stacks
import (
"testing"
"github.com/gophercloud/gophercloud/pagination"
th "github.com/gophercloud/gophercloud/testhelper"
fake "github.com/gophercloud/gophercloud/testhelper/client"
)
func TestCreateStack(t *testing.T) {
th.SetupHTTP()
defer th.TeardownHTTP()
HandleCreateSuccessfully(t, CreateOutput)
createOpts := CreateOpts{
Name: "stackcreated",
Timeout: 60,
Template: `
{
"stack_name": "postman_stack",
"template": {
"heat_template_version": "2013-05-23",
"description": "Simple template to test heat commands",
"parameters": {
"flavor": {
"default": "m1.tiny",
"type": "string"
}
},
"resources": {
"hello_world": {
"type":"OS::Nova::Server",
"properties": {
"key_name": "heat_key",
"flavor": {
"get_param": "flavor"
},
"image": "ad091b52-742f-469e-8f3c-fd81cadf0743",
"user_data": "#!/bin/bash -xv\necho \"hello world\" > /root/hello-world.txt\n"
}
}
}
}
}`,
DisableRollback: Disable,
}
actual, err := Create(fake.ServiceClient(), createOpts).Extract()
th.AssertNoErr(t, err)
expected := CreateExpected
th.AssertDeepEquals(t, expected, actual)
}
func TestCreateStackNewTemplateFormat(t *testing.T) {
th.SetupHTTP()
defer th.TeardownHTTP()
HandleCreateSuccessfully(t, CreateOutput)
template := new(Template)
template.Bin = []byte(`
{
"heat_template_version": "2013-05-23",
"description": "Simple template to test heat commands",
"parameters": {
"flavor": {
"default": "m1.tiny",
"type": "string"
}
}
}`)
createOpts := CreateOpts{
Name: "stackcreated",
Timeout: 60,
TemplateOpts: template,
DisableRollback: Disable,
}
actual, err := Create(fake.ServiceClient(), createOpts).Extract()
th.AssertNoErr(t, err)
expected := CreateExpected
th.AssertDeepEquals(t, expected, actual)
}
func TestAdoptStack(t *testing.T) {
th.SetupHTTP()
defer th.TeardownHTTP()
HandleCreateSuccessfully(t, CreateOutput)
adoptOpts := AdoptOpts{
AdoptStackData: `{environment{parameters{}}}`,
Name: "stackcreated",
Timeout: 60,
Template: `
{
"stack_name": "postman_stack",
"template": {
"heat_template_version": "2013-05-23",
"description": "Simple template to test heat commands",
"parameters": {
"flavor": {
"default": "m1.tiny",
"type": "string"
}
},
"resources": {
"hello_world": {
"type":"OS::Nova::Server",
"properties": {
"key_name": "heat_key",
"flavor": {
"get_param": "flavor"
},
"image": "ad091b52-742f-469e-8f3c-fd81cadf0743",
"user_data": "#!/bin/bash -xv\necho \"hello world\" > /root/hello-world.txt\n"
}
}
}
}
}`,
DisableRollback: Disable,
}
actual, err := Adopt(fake.ServiceClient(), adoptOpts).Extract()
th.AssertNoErr(t, err)
expected := CreateExpected
th.AssertDeepEquals(t, expected, actual)
}
func TestAdoptStackNewTemplateFormat(t *testing.T) {
th.SetupHTTP()
defer th.TeardownHTTP()
HandleCreateSuccessfully(t, CreateOutput)
template := new(Template)
template.Bin = []byte(`
{
"stack_name": "postman_stack",
"template": {
"heat_template_version": "2013-05-23",
"description": "Simple template to test heat commands",
"parameters": {
"flavor": {
"default": "m1.tiny",
"type": "string"
}
},
"resources": {
"hello_world": {
"type":"OS::Nova::Server",
"properties": {
"key_name": "heat_key",
"flavor": {
"get_param": "flavor"
},
"image": "ad091b52-742f-469e-8f3c-fd81cadf0743",
"user_data": "#!/bin/bash -xv\necho \"hello world\" > /root/hello-world.txt\n"
}
}
}
}
}`)
adoptOpts := AdoptOpts{
AdoptStackData: `{environment{parameters{}}}`,
Name: "stackcreated",
Timeout: 60,
TemplateOpts: template,
DisableRollback: Disable,
}
actual, err := Adopt(fake.ServiceClient(), adoptOpts).Extract()
th.AssertNoErr(t, err)
expected := CreateExpected
th.AssertDeepEquals(t, expected, actual)
}
func TestListStack(t *testing.T) {
th.SetupHTTP()
defer th.TeardownHTTP()
HandleListSuccessfully(t, FullListOutput)
count := 0
err := List(fake.ServiceClient(), nil).EachPage(func(page pagination.Page) (bool, error) {
count++
actual, err := ExtractStacks(page)
th.AssertNoErr(t, err)
th.CheckDeepEquals(t, ListExpected, actual)
return true, nil
})
th.AssertNoErr(t, err)
th.CheckEquals(t, count, 1)
}
func TestGetStack(t *testing.T) {
th.SetupHTTP()
defer th.TeardownHTTP()
HandleGetSuccessfully(t, GetOutput)
actual, err := Get(fake.ServiceClient(), "postman_stack", "16ef0584-4458-41eb-87c8-0dc8d5f66c87").Extract()
th.AssertNoErr(t, err)
expected := GetExpected
th.AssertDeepEquals(t, expected, actual)
}
func TestUpdateStack(t *testing.T) {
th.SetupHTTP()
defer th.TeardownHTTP()
HandleUpdateSuccessfully(t)
updateOpts := UpdateOpts{
Template: `
{
"heat_template_version": "2013-05-23",
"description": "Simple template to test heat commands",
"parameters": {
"flavor": {
"default": "m1.tiny",
"type": "string"
}
},
"resources": {
"hello_world": {
"type":"OS::Nova::Server",
"properties": {
"key_name": "heat_key",
"flavor": {
"get_param": "flavor"
},
"image": "ad091b52-742f-469e-8f3c-fd81cadf0743",
"user_data": "#!/bin/bash -xv\necho \"hello world\" > /root/hello-world.txt\n"
}
}
}
}`,
}
err := Update(fake.ServiceClient(), "gophercloud-test-stack-2", "db6977b2-27aa-4775-9ae7-6213212d4ada", updateOpts).ExtractErr()
th.AssertNoErr(t, err)
}
func TestUpdateStackNewTemplateFormat(t *testing.T) {
th.SetupHTTP()
defer th.TeardownHTTP()
HandleUpdateSuccessfully(t)
template := new(Template)
template.Bin = []byte(`
{
"heat_template_version": "2013-05-23",
"description": "Simple template to test heat commands",
"parameters": {
"flavor": {
"default": "m1.tiny",
"type": "string"
}
}
}`)
updateOpts := UpdateOpts{
TemplateOpts: template,
}
err := Update(fake.ServiceClient(), "gophercloud-test-stack-2", "db6977b2-27aa-4775-9ae7-6213212d4ada", updateOpts).ExtractErr()
th.AssertNoErr(t, err)
}
func TestDeleteStack(t *testing.T) {
th.SetupHTTP()
defer th.TeardownHTTP()
HandleDeleteSuccessfully(t)
err := Delete(fake.ServiceClient(), "gophercloud-test-stack-2", "db6977b2-27aa-4775-9ae7-6213212d4ada").ExtractErr()
th.AssertNoErr(t, err)
}
func TestPreviewStack(t *testing.T) {
th.SetupHTTP()
defer th.TeardownHTTP()
HandlePreviewSuccessfully(t, GetOutput)
previewOpts := PreviewOpts{
Name: "stackcreated",
Timeout: 60,
Template: `
{
"stack_name": "postman_stack",
"template": {
"heat_template_version": "2013-05-23",
"description": "Simple template to test heat commands",
"parameters": {
"flavor": {
"default": "m1.tiny",
"type": "string"
}
},
"resources": {
"hello_world": {
"type":"OS::Nova::Server",
"properties": {
"key_name": "heat_key",
"flavor": {
"get_param": "flavor"
},
"image": "ad091b52-742f-469e-8f3c-fd81cadf0743",
"user_data": "#!/bin/bash -xv\necho \"hello world\" > /root/hello-world.txt\n"
}
}
}
}
}`,
DisableRollback: Disable,
}
actual, err := Preview(fake.ServiceClient(), previewOpts).Extract()
th.AssertNoErr(t, err)
expected := PreviewExpected
th.AssertDeepEquals(t, expected, actual)
}
func TestPreviewStackNewTemplateFormat(t *testing.T) {
th.SetupHTTP()
defer th.TeardownHTTP()
HandlePreviewSuccessfully(t, GetOutput)
template := new(Template)
template.Bin = []byte(`
{
"heat_template_version": "2013-05-23",
"description": "Simple template to test heat commands",
"parameters": {
"flavor": {
"default": "m1.tiny",
"type": "string"
}
}
}`)
previewOpts := PreviewOpts{
Name: "stackcreated",
Timeout: 60,
TemplateOpts: template,
DisableRollback: Disable,
}
actual, err := Preview(fake.ServiceClient(), previewOpts).Extract()
th.AssertNoErr(t, err)
expected := PreviewExpected
th.AssertDeepEquals(t, expected, actual)
}
func TestAbandonStack(t *testing.T) {
th.SetupHTTP()
defer th.TeardownHTTP()
HandleAbandonSuccessfully(t, AbandonOutput)
actual, err := Abandon(fake.ServiceClient(), "postman_stack", "16ef0584-4458-41eb-87c8-0dc8d5f66c8").Extract()
th.AssertNoErr(t, err)
expected := AbandonExpected
th.AssertDeepEquals(t, expected, actual)
}