blob: 5ba08f03c3d8825528729564b4740c172608ee0a [file] [log] [blame]
package tests
import (
"io/ioutil"
"testing"
"github.com/openwhisk/openwhisk-wskdeploy/parsers"
"github.com/stretchr/testify/assert"
)
var manifest_yaml = "../../usecases/helloworld/manifest.yaml"
var manifestfile1 = "../../dat/manifest1.yaml"
var manifestfile3 = "../../dat/manifest3.yaml"
var manifestfile4 = "../../dat/manifest4.yaml"
var manifestfile5 = "../../dat/manifest5.yaml"
var manifestfile6 = "../../dat/manifest6.yaml"
var testfile1 = "../../dat/deploy1.yaml"
var testfile2 = "../../dat/deploy2.yaml"
var testfile3 = "../../dat/deploy3.yaml"
var testfile4 = "../../dat/deploy4.yaml"
func TestParseManifestYAML(t *testing.T) {
data, err := ioutil.ReadFile(manifest_yaml)
if err != nil {
panic(err)
}
var manifest parsers.ManifestYAML
err = parsers.NewYAMLParser().Unmarshal(data, &manifest)
if err != nil {
panic(err)
}
//get and verify package name
assert.Equal(t, "helloworld", manifest.Package.Packagename, "Get package name failed.")
count := 0
for action_name := range manifest.Package.Actions {
var action = manifest.Package.Actions[action_name]
//get and verify action location
//assert.Equal(t, "src/greeting.js", action.Location, "Get action location failed.")
//get and verify total param number
assert.Equal(t, 2, len(action.Inputs), "Get input param number failed.")
count++
}
//get and verify action count
assert.Equal(t, 2, count, "Get action number failed.")
}
func TestParseManifestYAML_trigger(t *testing.T) {
data, err := ioutil.ReadFile(manifestfile3)
if err != nil {
panic(err)
}
var manifest parsers.ManifestYAML
err = parsers.NewYAMLParser().Unmarshal(data, &manifest)
if err != nil {
panic(err)
}
assert.Equal(t, 2, len(manifest.Package.Triggers), "Get trigger list failed.")
for trigger_name := range manifest.Package.Triggers {
var trigger = manifest.Package.Triggers[trigger_name]
switch trigger_name {
case "trigger1":
case "trigger2":
assert.Equal(t, "myfeed", trigger.Feed, "Get trigger feed name failed.")
default:
t.Error("Get trigger name failed")
}
}
}
func TestParseManifestYAML_rule(t *testing.T) {
data, err := ioutil.ReadFile(manifestfile4)
if err != nil {
panic(err)
}
var manifest parsers.ManifestYAML
err = parsers.NewYAMLParser().Unmarshal(data, &manifest)
if err != nil {
panic(err)
}
assert.Equal(t, 1, len(manifest.Package.Rules), "Get trigger list failed.")
for rule_name := range manifest.Package.Rules {
var rule = manifest.Package.Rules[rule_name]
switch rule_name {
case "rule1":
assert.Equal(t, "trigger1", rule.Trigger, "Get trigger name failed.")
assert.Equal(t, "hellpworld", rule.Action, "Get action name failed.")
assert.Equal(t, "true", rule.Rule, "Get rule expression failed.")
default:
t.Error("Get rule name failed")
}
}
}
func TestParseManifestYAML_feed(t *testing.T) {
data, err := ioutil.ReadFile(manifestfile5)
if err != nil {
panic(err)
}
var manifest parsers.ManifestYAML
err = parsers.NewYAMLParser().Unmarshal(data, &manifest)
if err != nil {
panic(err)
}
assert.Equal(t, 1, len(manifest.Package.Feeds), "Get feed list failed.")
for feed_name := range manifest.Package.Feeds {
var feed = manifest.Package.Feeds[feed_name]
switch feed_name {
case "feed1":
assert.Equal(t, "https://my.company.com/services/eventHub", feed.Location, "Get feed location failed.")
assert.Equal(t, "my_credential", feed.Credential, "Get feed credential failed.")
assert.Equal(t, 2, len(feed.Operations), "Get operations number failed.")
for operation_name := range feed.Operations {
switch operation_name {
case "operation1":
case "operation2":
default:
t.Error("Get feed operation name failed")
}
}
default:
t.Error("Get feed name failed")
}
}
}
func TestParseManifestYAML_param(t *testing.T) {
data, err := ioutil.ReadFile(manifestfile6)
if err != nil {
panic(err)
}
var manifest parsers.ManifestYAML
err = parsers.NewYAMLParser().Unmarshal(data, &manifest)
if err != nil {
panic(err)
}
assert.Equal(t, 1, len(manifest.Package.Actions), "Get action list failed.")
for action_name := range manifest.Package.Actions {
var action = manifest.Package.Actions[action_name]
switch action_name {
case "action1":
for param_name := range action.Inputs {
var param = action.Inputs[param_name]
switch param_name {
case "inline1":
assert.Equal(t, "{ \"key\": true }", param.Value, "Get param value failed.")
case "inline2":
assert.Equal(t, "Just a string", param.Value, "Get param value failed.")
case "inline3":
assert.Equal(t, nil, param.Value, "Get param value failed.")
case "inline4":
assert.Equal(t, true, param.Value, "Get param value failed.")
case "inline5":
assert.Equal(t, 42, param.Value, "Get param value failed.")
case "inline6":
assert.Equal(t, -531, param.Value, "Get param value failed.")
case "inline7":
assert.Equal(t, 432.432E-43, param.Value, "Get param value failed.")
case "inline8":
assert.Equal(t, "[ true, null, \"boo\", { \"key\": 0 }]", param.Value, "Get param value failed.")
case "inline9":
assert.Equal(t, false, param.Value, "Get param value failed.")
case "inline0":
assert.Equal(t, 456.423, param.Value, "Get param value failed.")
case "inlin10":
assert.Equal(t, nil, param.Value, "Get param value failed.")
case "inlin11":
assert.Equal(t, true, param.Value, "Get param value failed.")
case "expand1":
assert.Equal(t, nil, param.Value, "Get param value failed.")
case "expand2":
assert.Equal(t, true, param.Value, "Get param value failed.")
case "expand3":
assert.Equal(t, false, param.Value, "Get param value failed.")
case "expand4":
assert.Equal(t, 15646, param.Value, "Get param value failed.")
case "expand5":
assert.Equal(t, "{ \"key\": true }", param.Value, "Get param value failed.")
case "expand6":
assert.Equal(t, "[ true, null, \"boo\", { \"key\": 0 }]", param.Value, "Get param value failed.")
case "expand7":
assert.Equal(t, nil, param.Value, "Get param value failed.")
default:
t.Error("Get param name failed")
}
}
default:
t.Error("Get action name failed")
}
}
}
func TestParseDeploymentYAML_Application(t *testing.T) {
//var deployment utils.DeploymentYAML
mm := parsers.NewYAMLParser()
deployment := mm.ParseDeployment(testfile1)
//get and verify application name
assert.Equal(t, "wskdeploy-samples", deployment.Application.Name, "Get application name failed.")
assert.Equal(t, "/wskdeploy/samples/", deployment.Application.Namespace, "Get application namespace failed.")
assert.Equal(t, "user-credential", deployment.Application.Credential, "Get application credential failed.")
assert.Equal(t, "https://172.17.0.1/api", deployment.Application.BaseUrl, "Get application base url failed.")
}
func TestParseDeploymentYAML_Package(t *testing.T) {
//var deployment utils.DeploymentYAML
mm := parsers.NewYAMLParser()
deployment := mm.ParseDeployment(testfile2)
assert.Equal(t, 1, len(deployment.Application.Packages), "Get package list failed.")
for pkg_name := range deployment.Application.Packages {
assert.Equal(t, "test_package", pkg_name, "Get package name failed.")
var pkg = deployment.Application.Packages[pkg_name]
assert.Equal(t, "http://abc.com/bbb", pkg.Function, "Get package function failed.")
assert.Equal(t, "12345678ABCDEF", pkg.PackageCredential, "Get package credential failed.")
assert.Equal(t, "/wskdeploy/samples/test", pkg.Namespace, "Get package namespace failed.")
assert.Equal(t, "12345678ABCDEF", pkg.Credential, "Get package credential failed.")
assert.Equal(t, 1, len(pkg.Inputs), "Get package input list failed.")
//get and verify inputs
for param_name, param := range pkg.Inputs {
assert.Equal(t, "value", param.Value, "Get input value failed.")
assert.Equal(t, "param", param_name, "Get input param name failed.")
}
}
}
func TestParseDeploymentYAML_Action(t *testing.T) {
mm := parsers.NewYAMLParser()
deployment := mm.ParseDeployment(testfile2)
for pkg_name := range deployment.Application.Packages {
var pkg = deployment.Application.Packages[pkg_name]
for action_name := range pkg.Actions {
assert.Equal(t, "hello", action_name, "Get action name failed.")
var action = pkg.Actions[action_name]
assert.Equal(t, "/wskdeploy/samples/test/hello", action.Namespace, "Get action namespace failed.")
assert.Equal(t, "12345678ABCDEF", action.Credential, "Get action credential failed.")
assert.Equal(t, 1, len(action.Inputs), "Get package input list failed.")
//get and verify inputs
for param_name, param := range action.Inputs {
switch param.Value.(type) {
case string:
assert.Equal(t, "name", param_name, "Get input param name failed.")
assert.Equal(t, "Bernie", param.Value, "Get input value failed.")
default:
t.Error("Get input value type failed.")
}
}
}
}
}
func TestComposeWskPackage(t *testing.T) {
mm := parsers.NewYAMLParser()
deployment := mm.ParseDeployment(testfile2)
manifest := mm.ParseManifest(manifestfile1)
pkglist := deployment.Application.GetPackageList()
for _, pkg := range pkglist {
wskpkg := pkg.ComposeWskPackage()
assert.Equal(t, "test_package", wskpkg.Name, "Get package name failed.")
assert.Equal(t, "/wskdeploy/samples/test", wskpkg.Namespace, "Get package namespace failed.")
}
pkg := manifest.Package
wskpkg := pkg.ComposeWskPackage()
assert.Equal(t, "helloworld", wskpkg.Name, "Get package name failed.")
assert.Equal(t, "1.0", wskpkg.Version, "Get package version failed.")
}
func TestComposeWskTrigger(t *testing.T) {
mm := parsers.NewYAMLParser()
deployment := mm.ParseDeployment(testfile4)
manifest := mm.ParseManifest(manifestfile3)
pkg := deployment.Application.GetPackageList()[0]
for _, trigger := range pkg.GetTriggerList() {
//temporarily add the nil to make test pass, as we plan refactor the parser as well as test codes.
wsktrigger := trigger.ComposeWskTrigger(nil)
assert.Equal(t, "hello-trigger", wsktrigger.Name, "Get trigger name failed.")
assert.Equal(t, "/wskdeploy/samples/test/hello-trigger", wsktrigger.Namespace, "Get trigger namespace failed.")
}
pkg = manifest.Package
for _, trigger := range pkg.GetTriggerList() {
//temporarily add the nil to make test pass, as we plan refactor the parser as well as test codes.
wsktrigger := trigger.ComposeWskTrigger(nil)
switch wsktrigger.Name {
case "trigger1":
case "trigger2":
default:
t.Error("Get trigger name failed")
}
}
}
func TestComposeWskRule(t *testing.T) {
mm := parsers.NewYAMLParser()
manifest := mm.ParseManifest(manifestfile4)
pkg := manifest.Package
for _, rule := range pkg.GetRuleList() {
wskrule := rule.ComposeWskRule()
switch wskrule.Name {
case "rule1":
assert.Equal(t, "trigger1", wskrule.Trigger, "Get rule trigger failed.")
assert.Equal(t, "hellpworld", wskrule.Action, "Get rule action failed.")
default:
t.Error("Get rule name failed")
}
}
}