Add support to parse the type slice (#1010)
Closes-bug: #999
diff --git a/parsers/manifest_parser_test.go b/parsers/manifest_parser_test.go
index 61f9e96..5b93a6d 100644
--- a/parsers/manifest_parser_test.go
+++ b/parsers/manifest_parser_test.go
@@ -56,6 +56,7 @@
TEST_MSG_ACTION_FUNCTION_PATH_MISSING = "Action function path missing"
TEST_MSG_INVALID_ACTION_ANNOTATION = "Action annotations are invalid"
TEST_MSG_PACKAGE_PARAMETER_VALUE_MISMATCH = "Package parameter value mismatched."
+ TEST_MSG_MISMATCH_ACTION_INPUT_PARAMS = "Action parameters mismatched."
// local error messages
TEST_ERROR_MANIFEST_PARSE_FAILURE = "Manifest [%s]: Failed to parse. Error: %s"
@@ -1338,6 +1339,28 @@
}
}
+// Test 18: validate manifest_parser.ComposeActions() method for parsing the correct inputs to the action
+func TestComposeActionsForInputs(t *testing.T) {
+ file := "../tests/dat/manifest_data_compose_actions_for_inputs.yaml"
+ _, m, _ := testLoadParseManifest(t, file)
+ packageName := "testActionInputsInManifest"
+ actionName := "helloNodejs"
+
+ if action, ok := m.Packages[packageName].Actions[actionName]; ok {
+ // validate Inputs to this action
+ for input, param := range action.Inputs {
+ switch input {
+ case "param1":
+ assert.Equal(t, []interface{}{"v1", "v2"},
+ param.Value.([]interface{}), TEST_MSG_MISMATCH_ACTION_INPUT_PARAMS)
+ case "param2":
+ assert.Equal(t, []interface{}{"value1", "value2"},
+ param.Value.([]interface{}), TEST_MSG_MISMATCH_ACTION_INPUT_PARAMS)
+ }
+ }
+ }
+}
+
func TestComposePackage(t *testing.T) {
file := "../tests/dat/manifest_data_compose_packages.yaml"
diff --git a/parsers/parameters.go b/parsers/parameters.go
index c9d9f85..25dff91 100644
--- a/parsers/parameters.go
+++ b/parsers/parameters.go
@@ -35,6 +35,7 @@
FLOAT string = "float"
BOOLEAN string = "boolean"
JSON string = "json"
+ SLICE string = "slice"
)
var validParameterNameMap = map[string]string{
@@ -52,6 +53,7 @@
"float64": FLOAT,
JSON: JSON,
"map": JSON,
+ "slice": SLICE,
}
var typeDefaultValueMap = map[string]interface{}{
@@ -347,6 +349,11 @@
value, errorParser = resolveJSONParameter(filePath, paramName, param, value)
}
+ if param.Value != nil && param.Type == "slice" {
+ value = wskenv.InterpolateStringWithEnvVar(param.Value)
+ value = utils.ConvertInterfaceValue(value)
+ }
+
// Default value to zero value for the Type
// Do NOT error/terminate as Value may be provided later by a Deployment file.
if value == nil {
diff --git a/runtimes/runtimes_test.go b/runtimes/runtimes_test.go
index 5ea5840..2f2ade0 100644
--- a/runtimes/runtimes_test.go
+++ b/runtimes/runtimes_test.go
@@ -32,7 +32,7 @@
println(converted["nodejs"])
println(converted["python"])
//println(converted["go"])
- assert.Equal(t, 2, len(converted["nodejs"]), "not expected length")
+ assert.Equal(t, 3, len(converted["nodejs"]), "not expected length")
assert.Equal(t, 2, len(converted["php"]), "not expected length")
assert.Equal(t, 1, len(converted["java"]), "not expected length")
assert.Equal(t, 6, len(converted["python"]), "not expected length")
diff --git a/tests/dat/manifest_data_compose_actions_for_inputs.yaml b/tests/dat/manifest_data_compose_actions_for_inputs.yaml
new file mode 100644
index 0000000..05fdfa9
--- /dev/null
+++ b/tests/dat/manifest_data_compose_actions_for_inputs.yaml
@@ -0,0 +1,14 @@
+# Licensed to the Apache Software Foundation (ASF) under one or more contributor
+# license agreements; and to You under the Apache License, Version 2.0.
+
+packages:
+ testActionInputsInManifest:
+ actions:
+ helloNodejs:
+ function: actions/hello.js
+ inputs:
+ name: Tom
+ param1: ["v1", "v2"]
+ param2:
+ - "value1"
+ - "value2"