blob: 2e94d2528317f1ca76f5cf9be097e170e5980a6d [file] [log] [blame]
package stacks
import (
"fmt"
"net/http"
"net/url"
"strings"
"testing"
th "gerrit.mcp.mirantis.net/debian/gophercloud.git/testhelper"
)
func TestTemplateValidation(t *testing.T) {
templateJSON := new(Template)
templateJSON.Bin = []byte(ValidJSONTemplate)
err := templateJSON.Validate()
th.AssertNoErr(t, err)
templateYAML := new(Template)
templateYAML.Bin = []byte(ValidYAMLTemplate)
err = templateYAML.Validate()
th.AssertNoErr(t, err)
templateInvalid := new(Template)
templateInvalid.Bin = []byte(InvalidTemplateNoVersion)
if err = templateInvalid.Validate(); err == nil {
t.Error("Template validation did not catch invalid template")
}
}
func TestTemplateParsing(t *testing.T) {
templateJSON := new(Template)
templateJSON.Bin = []byte(ValidJSONTemplate)
err := templateJSON.Parse()
th.AssertNoErr(t, err)
th.AssertDeepEquals(t, ValidJSONTemplateParsed, templateJSON.Parsed)
templateYAML := new(Template)
templateYAML.Bin = []byte(ValidJSONTemplate)
err = templateYAML.Parse()
th.AssertNoErr(t, err)
th.AssertDeepEquals(t, ValidJSONTemplateParsed, templateYAML.Parsed)
templateInvalid := new(Template)
templateInvalid.Bin = []byte("Keep Austin Weird")
err = templateInvalid.Parse()
if err == nil {
t.Error("Template parsing did not catch invalid template")
}
}
func TestIgnoreIfTemplate(t *testing.T) {
var keyValueTests = []struct {
key string
value interface{}
out bool
}{
{"not_get_file", "afksdf", true},
{"not_type", "sdfd", true},
{"get_file", "shdfuisd", false},
{"type", "dfsdfsd", true},
{"type", "sdfubsduf.yaml", false},
{"type", "sdfsdufs.template", false},
{"type", "sdfsdf.file", true},
{"type", map[string]string{"key": "value"}, true},
}
var result bool
for _, kv := range keyValueTests {
result = ignoreIfTemplate(kv.key, kv.value)
if result != kv.out {
t.Errorf("key: %v, value: %v expected: %v, actual: %v", kv.key, kv.value, result, kv.out)
}
}
}
func TestGetFileContents(t *testing.T) {
th.SetupHTTP()
defer th.TeardownHTTP()
baseurl, err := getBasePath()
th.AssertNoErr(t, err)
fakeURL := strings.Join([]string{baseurl, "my_nova.yaml"}, "/")
urlparsed, err := url.Parse(fakeURL)
th.AssertNoErr(t, err)
myNovaContent := `heat_template_version: 2014-10-16
parameters:
flavor:
type: string
description: Flavor for the server to be created
default: 4353
hidden: true
resources:
test_server:
type: "OS::Nova::Server"
properties:
name: test-server
flavor: 2 GB General Purpose v1
image: Debian 7 (Wheezy) (PVHVM)
networks:
- {uuid: 11111111-1111-1111-1111-111111111111}`
th.Mux.HandleFunc(urlparsed.Path, func(w http.ResponseWriter, r *http.Request) {
th.TestMethod(t, r, "GET")
w.Header().Set("Content-Type", "application/json")
w.WriteHeader(http.StatusOK)
fmt.Fprintf(w, myNovaContent)
})
client := fakeClient{BaseClient: getHTTPClient()}
te := new(Template)
te.Bin = []byte(`heat_template_version: 2015-04-30
resources:
my_server:
type: my_nova.yaml`)
te.client = client
err = te.Parse()
th.AssertNoErr(t, err)
err = te.getFileContents(te.Parsed, ignoreIfTemplate, true)
th.AssertNoErr(t, err)
expectedFiles := map[string]string{
"my_nova.yaml": `heat_template_version: 2014-10-16
parameters:
flavor:
type: string
description: Flavor for the server to be created
default: 4353
hidden: true
resources:
test_server:
type: "OS::Nova::Server"
properties:
name: test-server
flavor: 2 GB General Purpose v1
image: Debian 7 (Wheezy) (PVHVM)
networks:
- {uuid: 11111111-1111-1111-1111-111111111111}`}
th.AssertEquals(t, expectedFiles["my_nova.yaml"], te.Files[fakeURL])
te.fixFileRefs()
expectedParsed := map[string]interface{}{
"heat_template_version": "2015-04-30",
"resources": map[string]interface{}{
"my_server": map[string]interface{}{
"type": fakeURL,
},
},
}
te.Parse()
th.AssertDeepEquals(t, expectedParsed, te.Parsed)
}