This is an automated email from the ASF dual-hosted git repository.

pdesai pushed a commit to branch master
in repository 
https://gitbox.apache.org/repos/asf/incubator-openwhisk-wskdeploy.git


The following commit(s) were added to refs/heads/master by this push:
     new 71be344  Update deploymentreader.go tests and fix bind logic. (#765)
71be344 is described below

commit 71be3441e0eddd3f218532134b3bc8b8d2a7de79
Author: Matt Rutkowski <mrutk...@us.ibm.com>
AuthorDate: Tue Mar 6 14:15:29 2018 -0600

    Update deploymentreader.go tests and fix bind logic. (#765)
    
    * Update deploymentreader.go tests and fix bind logic.
    
    * gofmt ...
    
    * Exclude i18n_resource.go (generated file) from gofmt.
    
    * Add i18n debug/trace to depl. file binding functions.
    
    * Formalize trace function and use in deploymentreader.go.
    
    * Print trace output on when go test -v (verbose) is true.
    
    * Print trace output on when go test -v (verbose) is true.
    
    * Print trace output on when go test -v (verbose) is true.
    
    * fix another broken init test and add last i18n trace messages.
    
    * replace in-line strings on unit test asserts.
---
 .travis.yml                                        |   2 +-
 cmd/report.go                                      |   2 +
 cmd/version.go                                     |   1 +
 deployers/deploymentreader.go                      | 168 ++++++++--------
 deployers/deploymentreader_test.go                 | 222 +++++++++++++--------
 deployers/servicedeployer.go                       |   2 +-
 parsers/manifest_parser.go                         |   4 +-
 parsers/yamlparser.go                              |   4 +-
 .../deployment-deploymentreader-test-package.yml   |  32 ---
 ...ent_deploymentreader_packages_bind_trigger.yml} |  30 +--
 ...ment_deploymentreader_project_bind_trigger.yml} |   0
 .../deployment-with-invalid-annotations.yaml       |  38 ----
 .../validate-action-annotations_test.go            |   8 -
 utils/conversion.go                                |   9 +-
 wski18n/i18n_ids.go                                | 102 ++++------
 wski18n/i18n_resources.go                          |  81 +++-----
 wski18n/resources/en_US.all.json                   |  40 ++--
 wskprint/console.go                                |  16 ++
 18 files changed, 358 insertions(+), 403 deletions(-)

diff --git a/.travis.yml b/.travis.yml
index bb7e6ef..8b98781 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -30,7 +30,7 @@ install:
 - go get -u github.com/stretchr/testify
 - go get -u github.com/tools/godep
 before_script:
-- GO_FILES=$(find . -iname '*.go' -type f | grep -v /vendor/)
+- GO_FILES=$(find . -iname '*.go' -type f -not -path 
"./wski18n/i18n_resources.go")
 - export BAD_GO=$(gofmt -s -l $(echo $GO_FILES))
 - echo $BAD_GO
 - test -z "$BAD_GO"
diff --git a/cmd/report.go b/cmd/report.go
index 787e16a..655a4b2 100644
--- a/cmd/report.go
+++ b/cmd/report.go
@@ -62,6 +62,8 @@ func init() {
        RootCmd.AddCommand(reportCmd)
 
        // TODO() REMOVE this flag... the flag -config exists already
+       // TODO() whiskclient alread retrieves wskprops and has a constant 
defined for it SOURCE_WSKPROPS
+       // Please remove or reuse code from whiskclient.go
        reportCmd.Flags().StringVarP(&wskpropsPath, "wskproppath", "w",
                path.Join(os.Getenv("HOME"), ".wskprops"),
                wski18n.T(wski18n.ID_CMD_FLAG_CONFIG))
diff --git a/cmd/version.go b/cmd/version.go
index 7ad5bc5..c0f194a 100644
--- a/cmd/version.go
+++ b/cmd/version.go
@@ -36,6 +36,7 @@ var versionCmd = &cobra.Command{
        Run: func(cmd *cobra.Command, args []string) {
                wskprint.PrintlnOpenWhiskOutput(
                        // Note: no need to translate the following string
+                       // TODO(#767) - Flags.CliBuild and CliVersion are not 
set during build
                        fmt.Sprintf("wskdeploy build-version: %s--%s",
                                utils.Flags.CliBuild,
                                utils.Flags.CliVersion))
diff --git a/deployers/deploymentreader.go b/deployers/deploymentreader.go
index dd15c8b..a31addd 100644
--- a/deployers/deploymentreader.go
+++ b/deployers/deploymentreader.go
@@ -20,8 +20,6 @@ package deployers
 import (
        "github.com/apache/incubator-openwhisk-client-go/whisk"
        "github.com/apache/incubator-openwhisk-wskdeploy/parsers"
-       "github.com/apache/incubator-openwhisk-wskdeploy/utils"
-       "github.com/apache/incubator-openwhisk-wskdeploy/wskderrors"
        "github.com/apache/incubator-openwhisk-wskdeploy/wskenv"
        "github.com/apache/incubator-openwhisk-wskdeploy/wski18n"
        "github.com/apache/incubator-openwhisk-wskdeploy/wskprint"
@@ -46,7 +44,6 @@ func (reader *DeploymentReader) HandleYaml() error {
 
        deploymentParser := parsers.NewYAMLParser()
        deployment, err := deploymentParser.ParseDeployment(dep.DeploymentPath)
-
        reader.DeploymentDescriptor = deployment
 
        return err
@@ -68,48 +65,67 @@ func (reader *DeploymentReader) BindAssets() error {
        return nil
 }
 
-func (reader *DeploymentReader) bindPackageInputsAndAnnotations() error {
-
+func (reader *DeploymentReader) getPackageMap() map[string]parsers.Package {
        packMap := make(map[string]parsers.Package)
 
-       if reader.DeploymentDescriptor.GetProject().Packages == nil {
-               if reader.DeploymentDescriptor.Packages != nil {
+       // Create local packages list from Deployment file for us to iterate 
over
+       // either from top-level or under project schema
+       if len(reader.DeploymentDescriptor.GetProject().Packages) == 0 {
+
+               if len(reader.DeploymentDescriptor.Packages) > 0 {
+                       infoMsg := wski18n.T(
+                               
wski18n.ID_DEBUG_PACKAGES_FOUND_UNDER_ROOT_X_path_X,
+                               map[string]interface{}{
+                                       wski18n.KEY_PATH: 
reader.DeploymentDescriptor.Filepath})
+                       wskprint.PrintlnOpenWhiskTrace(false, infoMsg)
                        for packName, depPacks := range 
reader.DeploymentDescriptor.Packages {
                                depPacks.Packagename = packName
                                packMap[packName] = depPacks
                        }
                }
        } else {
+
+               infoMsg := wski18n.T(
+                       
wski18n.ID_DEBUG_PACKAGES_FOUND_UNDER_PROJECT_X_path_X_name_X,
+                       map[string]interface{}{
+                               wski18n.KEY_PATH: 
reader.DeploymentDescriptor.Filepath,
+                               wski18n.KEY_NAME: 
reader.DeploymentDescriptor.GetProject().Name})
+               wskprint.PrintlnOpenWhiskTrace(false, infoMsg)
+
                for packName, depPacks := range 
reader.DeploymentDescriptor.GetProject().Packages {
                        depPacks.Packagename = packName
                        packMap[packName] = depPacks
                }
        }
 
+       return packMap
+}
+
+func (reader *DeploymentReader) bindPackageInputsAndAnnotations() error {
+
+       // retrieve "packages" list from depl. file; either at top-level or 
under "Project" schema
+       packMap := reader.getPackageMap()
+
        for packName, pack := range packMap {
 
                serviceDeployPack := 
reader.serviceDeployer.Deployment.Packages[packName]
 
                if serviceDeployPack == nil {
-                       warningString := wski18n.T(
-                               
wski18n.ID_ERR_DEPLOYMENT_NAME_NOT_FOUND_X_key_X_name_X,
-                               map[string]interface{}{
-                                       wski18n.KEY_KEY:  wski18n.PACKAGE_NAME,
-                                       wski18n.KEY_NAME: packName})
-                       wskprint.PrintlnOpenWhiskWarning(warningString)
+                       
displayEntityNotFoundInDeploymentWarning(parsers.YAML_KEY_PACKAGE, packName)
                        break
                }
 
-               keyValArr := make(whisk.KeyValueArr, 0)
+               displayEntityFoundInDeploymentTrace(parsers.YAML_KEY_PACKAGE, 
packName)
 
                if len(pack.Inputs) > 0 {
+
+                       keyValArr := make(whisk.KeyValueArr, 0)
+
                        for name, input := range pack.Inputs {
                                var keyVal whisk.KeyValue
 
                                keyVal.Key = name
-
                                keyVal.Value = 
wskenv.InterpolateStringWithEnvVar(input.Value)
-
                                keyValArr = append(keyValArr, keyVal)
                        }
 
@@ -136,6 +152,9 @@ func (reader *DeploymentReader) 
bindPackageInputsAndAnnotations() error {
                                // iterate over each annotation from manifest 
file
                                for i, a := range 
serviceDeployPack.Package.Annotations {
                                        if name == a.Key {
+                                               
displayEntityFoundInDeploymentTrace(
+                                                       
parsers.YAML_KEY_ANNOTATION, a.Key)
+
                                                // annotation key is found in 
manifest
                                                keyExistsInManifest = true
                                                // overwrite annotation in 
manifest file with deployment file
@@ -144,13 +163,7 @@ func (reader *DeploymentReader) 
bindPackageInputsAndAnnotations() error {
                                        }
                                }
                                if !keyExistsInManifest {
-                                       warningString := wski18n.T(
-                                               
wski18n.ID_ERR_DEPLOYMENT_NAME_NOT_FOUND_X_key_X_name_X,
-                                               map[string]interface{}{
-                                                       wski18n.KEY_KEY:  
parsers.YAML_KEY_ANNOTATION,
-                                                       wski18n.KEY_NAME: name})
-                                       
wskprint.PrintlnOpenWhiskWarning(warningString)
-                                       return 
wskderrors.NewYAMLFileFormatError(reader.DeploymentDescriptor.Filepath, 
warningString)
+                                       
displayEntityNotFoundInDeploymentWarning(parsers.YAML_KEY_ANNOTATION, name)
                                }
                        }
                }
@@ -160,30 +173,15 @@ func (reader *DeploymentReader) 
bindPackageInputsAndAnnotations() error {
 
 func (reader *DeploymentReader) bindActionInputsAndAnnotations() error {
 
-       packMap := make(map[string]parsers.Package)
-
-       if reader.DeploymentDescriptor.GetProject().Packages == nil {
-               if reader.DeploymentDescriptor.Packages != nil {
-                       for packName, depPacks := range 
reader.DeploymentDescriptor.Packages {
-                               depPacks.Packagename = packName
-                               packMap[packName] = depPacks
-                       }
-               }
-               //else {
-               //              
packMap[reader.DeploymentDescriptor.Package.Packagename] = 
reader.DeploymentDescriptor.Package
-               //      }
-       } else {
-               for packName, depPacks := range 
reader.DeploymentDescriptor.GetProject().Packages {
-                       depPacks.Packagename = packName
-                       packMap[packName] = depPacks
-               }
-       }
+       // retrieve "packages" list from depl. file; either at top-level or 
under "Project" schema
+       packMap := reader.getPackageMap()
 
        for packName, pack := range packMap {
 
                serviceDeployPack := 
reader.serviceDeployer.Deployment.Packages[packName]
 
                if serviceDeployPack == nil {
+                       
displayEntityNotFoundInDeploymentWarning(parsers.YAML_KEY_PACKAGE, packName)
                        break
                }
 
@@ -203,6 +201,9 @@ func (reader *DeploymentReader) 
bindActionInputsAndAnnotations() error {
                                }
 
                                if wskAction, exists := 
serviceDeployPack.Actions[actionName]; exists {
+
+                                       
displayEntityFoundInDeploymentTrace(parsers.YAML_KEY_ACTION, actionName)
+
                                        depParams := 
make(map[string]whisk.KeyValue)
                                        for _, kv := range keyValArr {
                                                depParams[kv.Key] = kv
@@ -214,6 +215,8 @@ func (reader *DeploymentReader) 
bindActionInputsAndAnnotations() error {
                                                }
                                        }
                                        wskAction.Action.Parameters = keyValArr
+                               } else {
+                                       
displayEntityNotFoundInDeploymentWarning(parsers.YAML_KEY_ACTION, actionName)
                                }
                        }
 
@@ -226,22 +229,24 @@ func (reader *DeploymentReader) 
bindActionInputsAndAnnotations() error {
                                        // iterate over each annotation from 
manifest file
                                        for i, a := range 
wskAction.Action.Annotations {
                                                if name == a.Key {
+
+                                                       
displayEntityFoundInDeploymentTrace(
+                                                               
parsers.YAML_KEY_ANNOTATION, a.Key)
+
                                                        // annotation key is 
found in manifest
                                                        keyExistsInManifest = 
true
+
                                                        // overwrite annotation 
in manifest file with deployment file
                                                        
wskAction.Action.Annotations[i].Value = input
                                                        break
                                                }
                                        }
                                        if !keyExistsInManifest {
-                                               errMsg := wski18n.T(
-                                                       
wski18n.ID_ERR_DEPLOYMENT_NAME_NOT_FOUND_X_key_X_name_X,
-                                                       map[string]interface{}{
-                                                               
wski18n.KEY_KEY:  parsers.YAML_KEY_ANNOTATION,
-                                                               
wski18n.KEY_NAME: name})
-                                               return 
wskderrors.NewYAMLFileFormatError(reader.DeploymentDescriptor.Filepath, errMsg)
+                                               
displayEntityNotFoundInDeploymentWarning(parsers.YAML_KEY_ANNOTATION, name)
                                        }
                                }
+                       } else {
+                               
displayEntityNotFoundInDeploymentWarning(parsers.YAML_KEY_ACTION, actionName)
                        }
                }
        }
@@ -250,31 +255,22 @@ func (reader *DeploymentReader) 
bindActionInputsAndAnnotations() error {
 
 func (reader *DeploymentReader) bindTriggerInputsAndAnnotations() error {
 
-       packMap := make(map[string]parsers.Package)
-
-       if reader.DeploymentDescriptor.GetProject().Packages == nil {
-               if reader.DeploymentDescriptor.Packages != nil {
-                       for packName, depPacks := range 
reader.DeploymentDescriptor.Packages {
-                               depPacks.Packagename = packName
-                               packMap[packName] = depPacks
-                       }
-               }
-       } else {
-               for packName, depPacks := range 
reader.DeploymentDescriptor.GetProject().Packages {
-                       depPacks.Packagename = packName
-                       packMap[packName] = depPacks
-               }
-       }
+       // retrieve "packages" list from depl. file; either at top-level or 
under "Project" schema
+       packMap := reader.getPackageMap()
 
+       // go through all packages in our local package map
        for _, pack := range packMap {
-
                serviceDeployment := reader.serviceDeployer.Deployment
 
+               // for each Deployment file Trigger found in the current package
                for triggerName, trigger := range pack.Triggers {
 
-                       keyValArr := make(whisk.KeyValueArr, 0)
-
+                       // If the Deployment file trigger has Input values we 
will attempt to bind them
                        if len(trigger.Inputs) > 0 {
+
+                               keyValArr := make(whisk.KeyValueArr, 0)
+
+                               // Interpolate values before we bind
                                for name, input := range trigger.Inputs {
                                        var keyVal whisk.KeyValue
 
@@ -284,28 +280,27 @@ func (reader *DeploymentReader) 
bindTriggerInputsAndAnnotations() error {
                                        keyValArr = append(keyValArr, keyVal)
                                }
 
+                               // See if a matching Trigger (name) exists in 
manifest
                                if wskTrigger, exists := 
serviceDeployment.Triggers[triggerName]; exists {
 
+                                       
displayEntityFoundInDeploymentTrace(parsers.YAML_KEY_TRIGGER, triggerName)
+
                                        depParams := 
make(map[string]whisk.KeyValue)
                                        for _, kv := range keyValArr {
                                                depParams[kv.Key] = kv
                                        }
 
-                                       var traceMsg string
                                        for _, keyVal := range 
wskTrigger.Parameters {
-                                               traceMsg = wski18n.T(
-                                                       
wski18n.ID_DEBUG_KEY_VERIFY_X_name_X_key_X,
-                                                       map[string]interface{}{
-                                                               
wski18n.KEY_NAME: parsers.YAML_KEY_ANNOTATION,
-                                                               
wski18n.KEY_KEY:  keyVal.Key})
-                                               
wskprint.PrintOpenWhiskVerbose(utils.Flags.Verbose, traceMsg)
-
                                                // TODO() verify logic and add 
Verbose/trace say "found" or "not found"
                                                if _, exists := 
depParams[keyVal.Key]; !exists {
+                                                       
displayEntityFoundInDeploymentTrace(
+                                                               
parsers.YAML_KEY_ANNOTATION, keyVal.Key)
                                                        keyValArr = 
append(keyValArr, keyVal)
                                                }
                                        }
                                        wskTrigger.Parameters = keyValArr
+                               } else {
+                                       
displayEntityNotFoundInDeploymentWarning(parsers.YAML_KEY_TRIGGER, triggerName)
                                }
                        }
 
@@ -326,14 +321,11 @@ func (reader *DeploymentReader) 
bindTriggerInputsAndAnnotations() error {
                                                }
                                        }
                                        if !keyExistsInManifest {
-                                               errMsg := wski18n.T(
-                                                       
wski18n.ID_ERR_DEPLOYMENT_NAME_NOT_FOUND_X_key_X_name_X,
-                                                       map[string]interface{}{
-                                                               
wski18n.KEY_KEY:  parsers.YAML_KEY_ANNOTATION,
-                                                               
wski18n.KEY_NAME: name})
-                                               return 
wskderrors.NewYAMLFileFormatError(reader.DeploymentDescriptor.Filepath, errMsg)
+                                               
displayEntityNotFoundInDeploymentWarning(parsers.YAML_KEY_ANNOTATION, name)
                                        }
                                }
+                       } else {
+                               
displayEntityNotFoundInDeploymentWarning(parsers.YAML_KEY_TRIGGER, triggerName)
                        }
 
                }
@@ -341,3 +333,21 @@ func (reader *DeploymentReader) 
bindTriggerInputsAndAnnotations() error {
        }
        return nil
 }
+
+func displayEntityNotFoundInDeploymentWarning(entityType string, entityName 
string) {
+       warnMsg := wski18n.T(
+               wski18n.ID_WARN_DEPLOYMENT_NAME_NOT_FOUND_X_key_X_name_X,
+               map[string]interface{}{
+                       wski18n.KEY_KEY:  entityType,
+                       wski18n.KEY_NAME: entityName})
+       wskprint.PrintOpenWhiskWarning(warnMsg)
+}
+
+func displayEntityFoundInDeploymentTrace(entityType string, entityName string) 
{
+       infoMsg := wski18n.T(
+               wski18n.ID_DEBUG_DEPLOYMENT_NAME_FOUND_X_key_X_name_X,
+               map[string]interface{}{
+                       wski18n.KEY_KEY:  entityType,
+                       wski18n.KEY_NAME: entityName})
+       wskprint.PrintlnOpenWhiskTrace(true, infoMsg)
+}
diff --git a/deployers/deploymentreader_test.go 
b/deployers/deploymentreader_test.go
index d5312d1..cc48f2c 100644
--- a/deployers/deploymentreader_test.go
+++ b/deployers/deploymentreader_test.go
@@ -20,144 +20,196 @@
 package deployers
 
 import (
+       "fmt"
        "github.com/apache/incubator-openwhisk-client-go/whisk"
        "github.com/stretchr/testify/assert"
        "reflect"
        "testing"
 )
 
+const (
+       // local error messages
+       TEST_ERROR_DEPLOYMENT_PARSE_FAILURE        = "Deployment [%s]: Failed 
to parse."
+       TEST_ERROR_DEPLOYMENT_BIND_TRIGGER_FAILURE = "Deployment [%s]: Failed 
to bind Trigger."
+       TEST_ERROR_DEPLOYMENT_FIND_PROJECT         = "Deployment [%s]: Failed 
to find Project [%s]."
+       TEST_ERROR_DEPLOYMENT_FIND_PACKAGES        = "Deployment [%s]: Failed 
to find Packages for project [%s]."
+       TEST_ERROR_DEPLOYMENT_FIND_PACKAGE         = "Deployment [%s]: Failed 
to find Package [%s]."
+       TEST_ERROR_DEPLOYMENT_FIND_TRIGGER         = "Deployment [%s]: Failed 
to find Trigger [%s]."
+       TEST_ERROR_DEPLOYMENT_SET_ANNOTATION       = "Failed to set Annotation 
value."
+       TEST_ERROR_DEPLOYMENT_SET_INPUT_PARAMETER  = "Failed to set input 
Parameter value."
+       TEST_ERROR_DEPLOYMENT_GET_ANNOTATION       = "Failed to get Annotation 
key."
+       TEST_ERROR_DEPLOYMENT_GET_INPUT_PARAMETER  = "Failed to get input 
Parameter key."
+)
+
+// TODO() these globals are shared by manifest_reader_test.go; these tests 
should be independent of each other
 var sd *ServiceDeployer
 var dr *DeploymentReader
 var deployment_file = "../tests/usecases/github/deployment.yaml"
 var manifest_file = "../tests/usecases/github/manifest.yaml"
 
 func init() {
+       // TODO(): setup "trace" flag here (and in all unit test files)
+}
+
+// Check DeploymentReader could handle deployment yaml successfully.
+func TestDeploymentReader_HandleYaml(t *testing.T) {
+
        sd = NewServiceDeployer()
        sd.DeploymentPath = deployment_file
        sd.ManifestPath = manifest_file
        sd.Check()
        dr = NewDeploymentReader(sd)
-}
 
-// Check DeploymentReader could handle deployment yaml successfully.
-func TestDeploymentReader_HandleYaml(t *testing.T) {
+       TEST_PACKAGE := "GitHubCommits"
        dr.HandleYaml()
-       assert.NotNil(t, 
dr.DeploymentDescriptor.GetProject().Packages["GitHubCommits"], 
"DeploymentReader handle deployment yaml failed.")
+
+       if _, exists := 
dr.DeploymentDescriptor.GetProject().Packages[TEST_PACKAGE]; !exists {
+               assert.Fail(t, fmt.Sprintf(TEST_ERROR_DEPLOYMENT_FIND_PACKAGE,
+                       dr.serviceDeployer.DeploymentPath, TEST_PACKAGE))
+       }
+
 }
 
-// TODO(750) remove this unused test?
-func TestDeployerCheck(t *testing.T) {
-       sd := NewServiceDeployer()
-       sd.DeploymentPath = "../tests/usecases/badyaml/deployment.yaml"
-       sd.ManifestPath = "../tests/usecases/badyaml/manifest.yaml"
-       // The system will exit thus the test will fail.
-       // sd.Check()
+func createAnnotationArray(t *testing.T, kv whisk.KeyValue) whisk.KeyValueArr {
+       kva := make(whisk.KeyValueArr, 0)
+       kva = append(kva, kv)
+       return kva
 }
 
-func TestDeploymentReader_bindTrigger(t *testing.T) {
-       //init variables
+// Create a ServiceDeployer with a "dummy" DeploymentPlan (i.e., simulate a 
fake manifest parse)
+// load the deployment YAMl into dReader.DeploymentDescriptor
+// bind the deployment inputs and annotations to the named Trigger from 
Deployment to Manifest YAML
+func testLoadAndBindDeploymentYAML(t *testing.T, path string, triggerName 
string, kv whisk.KeyValue) (*ServiceDeployer, *DeploymentReader) {
+
        sDeployer := NewServiceDeployer()
-       sDeployer.DeploymentPath = 
"../tests/dat/deployment-deploymentreader-test.yml"
-       sDeployer.Deployment.Triggers["locationUpdate"] = new(whisk.Trigger)
+       sDeployer.DeploymentPath = path
 
-       //parse deployment and bind triggers input and annotation
+       // Create Trigger for "bind" function to use (as a Manifest parse would 
have created)
+       sDeployer.Deployment.Triggers[triggerName] = new(whisk.Trigger)
+       sDeployer.Deployment.Triggers[triggerName].Annotations = 
createAnnotationArray(t, kv)
+
+       //parse deployment and bind triggers input and annotations
        dReader := NewDeploymentReader(sDeployer)
-       dReader.HandleYaml()
-       dReader.bindTriggerInputsAndAnnotations()
+       err := dReader.HandleYaml()
 
-       trigger := sDeployer.Deployment.Triggers["locationUpdate"]
-       for _, param := range trigger.Parameters {
-               switch param.Key {
-               case "name":
-                       assert.Equal(t, "Bernie", param.Value, "Failed to set 
inputs")
-               case "place":
-                       assert.Equal(t, "DC", param.Value, "Failed to set 
inputs")
-               default:
-                       assert.Fail(t, "Failed to get inputs key")
+       // DEBUG() Uncomment to display initial DeploymentDescriptor (manifest, 
deployemnt befopre binding)
+       //fmt.Println(utils.ConvertMapToJSONString("BEFORE: 
dReader.DeploymentDescriptor", dReader.DeploymentDescriptor))
+       //fmt.Println(utils.ConvertMapToJSONString("BEFORE: 
sDeployer.Deployment", sDeployer.Deployment))
 
-               }
+       // test load of deployment YAML
+       if err != nil {
+               assert.Fail(t, fmt.Sprintf(TEST_ERROR_DEPLOYMENT_PARSE_FAILURE, 
sDeployer.DeploymentPath))
        }
-       for _, annos := range trigger.Annotations {
-               switch annos.Key {
-               case "bbb":
-                       assert.Equal(t, "this is an annotation", annos.Value, 
"Failed to set annotations")
-               default:
-                       assert.Fail(t, "Failed to get annotation key")
 
-               }
+       // Test that we can bind Triggers and Annotations
+       err = dReader.bindTriggerInputsAndAnnotations()
+
+       // test load of deployment YAML
+       if err != nil {
+               fmt.Println(err)
+               assert.Fail(t, 
fmt.Sprintf(TEST_ERROR_DEPLOYMENT_BIND_TRIGGER_FAILURE, 
sDeployer.DeploymentPath))
        }
+
+       // DEBUG() Uncomment to display resultant DeploymentDescriptor 
(manifest + deployment file binding)
+       //fmt.Println(utils.ConvertMapToJSONString("AFTER: 
dReader.DeploymentDescriptor", dReader.DeploymentDescriptor))
+       //fmt.Println(utils.ConvertMapToJSONString("AFTER: 
sDeployer.Deployment", sDeployer.Deployment))
+
+       return sDeployer, dReader
 }
 
-func TestDeploymentReader_bindTrigger_packages(t *testing.T) {
+func TestDeploymentReader_ProjectBindTrigger(t *testing.T) {
+
        //init variables
-       sDeployer := NewServiceDeployer()
-       sDeployer.DeploymentPath = 
"../tests/dat/deployment-deploymentreader-test-packages.yml"
-       sDeployer.Deployment.Triggers["locationUpdate"] = new(whisk.Trigger)
+       TEST_DATA := 
"../tests/dat/deployment_deploymentreader_project_bind_trigger.yml"
+       TEST_TRIGGER := "locationUpdate"
+       TEST_PROJECT := "AppWithTriggerRule"
+       TEST_ANNOTATION_KEY := "bbb"
+       // Create an annotation (in manifest representation) with key we 
expect, with value that should be overwritten
+       TEST_ANNOTATION := whisk.KeyValue{TEST_ANNOTATION_KEY, "foo"}
 
-       //parse deployment and bind triggers input and annotation
-       dReader := NewDeploymentReader(sDeployer)
-       dReader.HandleYaml()
-       dReader.bindTriggerInputsAndAnnotations()
+       // create ServicedEployer
+       sDeployer, dReader := testLoadAndBindDeploymentYAML(t, TEST_DATA, 
TEST_TRIGGER, TEST_ANNOTATION)
+
+       // test Project exists with expected name in Deployment file
+       projectNameDeploy := dReader.DeploymentDescriptor.GetProject().Name
+       if projectNameDeploy != TEST_PROJECT {
+               assert.Fail(t, fmt.Sprintf(TEST_ERROR_DEPLOYMENT_FIND_PROJECT, 
TEST_PROJECT))
+       }
+
+       // test that the Project has Packages
+       if len(dReader.DeploymentDescriptor.GetProject().Packages) == 0 {
+               assert.Fail(t, fmt.Sprintf(TEST_ERROR_DEPLOYMENT_FIND_PACKAGES, 
TEST_PROJECT))
+       }
+
+       trigger := sDeployer.Deployment.Triggers[TEST_TRIGGER]
 
-       trigger := sDeployer.Deployment.Triggers["locationUpdate"]
+       // test that Input values from dReader.DeploymentDescriptor wore 
"bound" onto sDeployer.Deployment
        for _, param := range trigger.Parameters {
                switch param.Key {
                case "name":
-                       assert.Equal(t, "Bernie", param.Value, "Failed to set 
inputs")
+                       assert.Equal(t, "Bernie", param.Value, 
TEST_ERROR_DEPLOYMENT_SET_INPUT_PARAMETER)
                case "place":
-                       assert.Equal(t, "DC", param.Value, "Failed to set 
inputs")
+                       assert.Equal(t, "DC", param.Value, 
TEST_ERROR_DEPLOYMENT_SET_INPUT_PARAMETER)
                default:
-                       assert.Fail(t, "Failed to get inputs key")
+                       assert.Fail(t, 
TEST_ERROR_DEPLOYMENT_GET_INPUT_PARAMETER)
 
                }
        }
+
+       // test that Annotations from dReader.DeploymentDescriptor wore "bound" 
onto sDeployer.Deployment
        for _, annos := range trigger.Annotations {
                switch annos.Key {
-               case "bbb":
-                       assert.Equal(t, "this is an annotation", annos.Value, 
"Failed to set annotations")
+               case TEST_ANNOTATION_KEY:
+                       // Manifest's value should be overwritten
+                       assert.Equal(t, "this is an annotation", annos.Value, 
TEST_ERROR_DEPLOYMENT_SET_ANNOTATION)
                default:
-                       assert.Fail(t, "Failed to get annotation key")
+                       assert.Fail(t, TEST_ERROR_DEPLOYMENT_GET_ANNOTATION)
 
                }
        }
 }
 
-// TODO(749) - rewrite test to remove "package"
-//func TestDeploymentReader_bindTrigger_package(t *testing.T) {
-//     //init variables
-//     sDeployer := NewServiceDeployer()
-//     sDeployer.DeploymentPath = 
"../tests/dat/deployment-deploymentreader-test-package.yml"
-//     sDeployer.Deployment.Triggers["locationUpdate"] = new(whisk.Trigger)
-//
-//     //parse deployment and bind triggers input and annotation
-//     dReader := NewDeploymentReader(sDeployer)
-//     dReader.HandleYaml()
-//     dReader.bindTriggerInputsAndAnnotations()
-//
-//     assert.Equal(t, "triggerrule", 
dReader.DeploymentDescriptor.Package.Packagename)
-//     trigger := sDeployer.Deployment.Triggers["locationUpdate"]
-//     for _, param := range trigger.Parameters {
-//             switch param.Key {
-//             case "name":
-//                     assert.Equal(t, "Bernie", param.Value, "Failed to set 
inputs")
-//             case "place":
-//                     assert.Equal(t, "DC", param.Value, "Failed to set 
inputs")
-//             default:
-//                     assert.Fail(t, "Failed to get inputs key")
-//
-//             }
-//     }
-//     for _, annos := range trigger.Annotations {
-//             switch annos.Key {
-//             case "bbb":
-//                     assert.Equal(t, "this is an annotation", annos.Value, 
"Failed to set annotations")
-//             default:
-//                     assert.Fail(t, "Failed to get annotation key")
-//
-//             }
-//     }
-//}
+func TestDeploymentReader_PackagesBindTrigger(t *testing.T) {
+       //init variables
+       TEST_DATA := 
"../tests/dat/deployment_deploymentreader_packages_bind_trigger.yml"
+       TEST_TRIGGER := "locationUpdate"
+       TEST_ANOTATION_KEY := "bbb"
+       // Create an annotation (in manifest representation) with key we 
expect, with value that should be overwritten
+       TEST_ANNOTATION := whisk.KeyValue{TEST_ANOTATION_KEY, "bar"}
+
+       sDeployer, _ := testLoadAndBindDeploymentYAML(t, TEST_DATA, 
TEST_TRIGGER, TEST_ANNOTATION)
+
+       // test that Input values from dReader.DeploymentDescriptor wore 
"bound" onto sDeployer.Deployment
+       if trigger, ok := sDeployer.Deployment.Triggers[TEST_TRIGGER]; ok {
+
+               for _, param := range trigger.Parameters {
+                       switch param.Key {
+                       case "name":
+                               assert.Equal(t, "Bernie", param.Value, 
TEST_ERROR_DEPLOYMENT_SET_INPUT_PARAMETER)
+                       case "place":
+                               assert.Equal(t, "DC", param.Value, 
TEST_ERROR_DEPLOYMENT_SET_INPUT_PARAMETER)
+                       default:
+                               assert.Fail(t, 
TEST_ERROR_DEPLOYMENT_GET_INPUT_PARAMETER)
+
+                       }
+               }
+               for _, annos := range trigger.Annotations {
+                       switch annos.Key {
+                       case "bbb":
+                               assert.Equal(t, "this is an annotation", 
annos.Value, TEST_ERROR_DEPLOYMENT_SET_ANNOTATION)
+                       default:
+                               assert.Fail(t, 
TEST_ERROR_DEPLOYMENT_GET_ANNOTATION)
+
+                       }
+               }
+       } else {
+               assert.Fail(t, fmt.Sprintf(TEST_ERROR_DEPLOYMENT_FIND_TRIGGER,
+                       sDeployer.DeploymentPath,
+                       TEST_TRIGGER))
+       }
+}
 
+// TODO() use local "load" function
 func TestDeploymentReader_BindAssets_ActionAnnotations(t *testing.T) {
        sDeployer := NewServiceDeployer()
        sDeployer.DeploymentPath = 
"../tests/dat/deployment_validate_action_annotations.yaml"
diff --git a/deployers/servicedeployer.go b/deployers/servicedeployer.go
index 0cea27a..377c425 100644
--- a/deployers/servicedeployer.go
+++ b/deployers/servicedeployer.go
@@ -138,7 +138,7 @@ func (deployer *ServiceDeployer) ConstructDeploymentPlan() 
error {
                // Project Name in manifest/deployment file is mandatory for 
managed deployments
                if deployer.ProjectName == "" {
                        errmsg := wski18n.T(wski18n.ID_ERR_KEY_MISSING_X_key_X,
-                               map[string]interface{}{wski18n.KEY_KEY: 
wski18n.PROJECT_NAME})
+                               map[string]interface{}{wski18n.KEY_KEY: 
wski18n.NAME_PROJECT})
 
                        return 
wskderrors.NewYAMLFileFormatError(manifest.Filepath, errmsg)
                }
diff --git a/parsers/manifest_parser.go b/parsers/manifest_parser.go
index 56b500c..d97a2a3 100644
--- a/parsers/manifest_parser.go
+++ b/parsers/manifest_parser.go
@@ -487,7 +487,7 @@ func (dm *YAMLParser) ComposeActions(filePath string, 
actions map[string]Action,
                                        errMessage := 
wski18n.T(wski18n.ID_ERR_RUNTIME_MISMATCH_X_runtime_X_ext_X_action_X,
                                                map[string]interface{}{
                                                        wski18n.KEY_RUNTIME:   
action.Runtime,
-                                                       wski18n.KEY_EXTENTION: 
ext,
+                                                       wski18n.KEY_EXTENSION: 
ext,
                                                        wski18n.KEY_ACTION:    
action.Name})
                                        return nil, 
wskderrors.NewInvalidRuntimeError(errMessage,
                                                
splitFilePath[len(splitFilePath)-1], action.Name,
@@ -542,7 +542,7 @@ func (dm *YAMLParser) ComposeActions(filePath string, 
actions map[string]Action,
                                                warnStr := 
wski18n.T(wski18n.ID_ERR_RUNTIME_MISMATCH_X_runtime_X_ext_X_action_X,
                                                        map[string]interface{}{
                                                                
wski18n.KEY_RUNTIME:   action.Runtime,
-                                                               
wski18n.KEY_EXTENTION: ext,
+                                                               
wski18n.KEY_EXTENSION: ext,
                                                                
wski18n.KEY_ACTION:    action.Name})
                                                
wskprint.PrintOpenWhiskWarning(warnStr)
 
diff --git a/parsers/yamlparser.go b/parsers/yamlparser.go
index fb526dd..7974830 100644
--- a/parsers/yamlparser.go
+++ b/parsers/yamlparser.go
@@ -26,17 +26,17 @@ import (
 // DO NOT translate
 const (
        YAML_KEY_ACTION     = "action"
-       YAML_KEY_ANNOTATION = "annotoation"
+       YAML_KEY_ANNOTATION = "annotation"
        YAML_KEY_API        = "api"
        YAML_KEY_FEED       = "feed"
        YAML_KEY_MANIFEST   = "manifest"
        YAML_KEY_NAMESPACE  = "namespace"
+       YAML_KEY_PACKAGE    = "package"
        YAML_KEY_PACKAGES   = "packages"
        YAML_KEY_PROJECT    = "project"
        YAML_KEY_RULE       = "rule"
        YAML_KEY_SEQUENCE   = "sequence"
        YAML_KEY_TRIGGER    = "trigger"
-       YAML_KEY_PACKAGE    = "package"
        YAML_KEY_SOURCE     = "source" // deprecated
 )
 
diff --git a/tests/dat/deployment-deploymentreader-test-package.yml 
b/tests/dat/deployment-deploymentreader-test-package.yml
deleted file mode 100644
index 15c5d4e..0000000
--- a/tests/dat/deployment-deploymentreader-test-package.yml
+++ /dev/null
@@ -1,32 +0,0 @@
-#
-# Licensed to the Apache Software Foundation (ASF) under one or more 
contributor
-# license agreements.  See the NOTICE file distributed with this work for 
additional
-# information regarding copyright ownership.  The ASF licenses this file to you
-# under the Apache License, Version 2.0 (the # "License"); you may not use this
-# file except in compliance with the License.  You may obtain a copy of the 
License
-# at:
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software 
distributed
-# under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR
-# CONDITIONS OF ANY KIND, either express or implied.  See the License for the
-# specific language governing permissions and limitations under the License.
-#
-
-package:
-      name: triggerrule
-      actions:
-        greeting:
-          inputs:
-            name: Amy
-            place: Paris
-          annotations:
-            aaa: this is an annotation
-      triggers:
-        locationUpdate:
-          inputs:
-            name: Bernie
-            place: DC
-          annotations:
-            bbb: this is an annotation
diff --git a/tests/dat/deployment-deploymentreader-test-packages.yml 
b/tests/dat/deployment_deploymentreader_packages_bind_trigger.yml
similarity index 69%
rename from tests/dat/deployment-deploymentreader-test-packages.yml
rename to tests/dat/deployment_deploymentreader_packages_bind_trigger.yml
index 6c76f03..31749b0 100644
--- a/tests/dat/deployment-deploymentreader-test-packages.yml
+++ b/tests/dat/deployment_deploymentreader_packages_bind_trigger.yml
@@ -15,18 +15,18 @@
 #
 
 packages:
-    triggerrule:
-      actions:
-        greeting:
-          inputs:
-            name: Amy
-            place: Paris
-          annotations:
-            aaa: this is an annotation
-      triggers:
-        locationUpdate:
-          inputs:
-            name: Bernie
-            place: DC
-          annotations:
-            bbb: this is an annotation
+  triggerrule:
+    actions:
+      greeting:
+        inputs:
+          name: Amy
+          place: Paris
+        annotations:
+          aaa: this is an annotation
+    triggers:
+      locationUpdate:
+        inputs:
+          name: Bernie
+          place: DC
+        annotations:
+          bbb: this is an annotation
diff --git a/tests/dat/deployment-deploymentreader-test.yml 
b/tests/dat/deployment_deploymentreader_project_bind_trigger.yml
similarity index 100%
rename from tests/dat/deployment-deploymentreader-test.yml
rename to tests/dat/deployment_deploymentreader_project_bind_trigger.yml
diff --git 
a/tests/src/integration/validate-action-annotations/deployment-with-invalid-annotations.yaml
 
b/tests/src/integration/validate-action-annotations/deployment-with-invalid-annotations.yaml
deleted file mode 100644
index cd3168b..0000000
--- 
a/tests/src/integration/validate-action-annotations/deployment-with-invalid-annotations.yaml
+++ /dev/null
@@ -1,38 +0,0 @@
-#
-# Licensed to the Apache Software Foundation (ASF) under one or more 
contributor
-# license agreements.  See the NOTICE file distributed with this work for 
additional
-# information regarding copyright ownership.  The ASF licenses this file to you
-# under the Apache License, Version 2.0 (the # "License"); you may not use this
-# file except in compliance with the License.  You may obtain a copy of the 
License
-# at:
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software 
distributed
-# under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR
-# CONDITIONS OF ANY KIND, either express or implied.  See the License for the
-# specific language governing permissions and limitations under the License.
-#
-
-project:
-    name: TestActionAnnotations
-    packages:
-        packageActionAnnotations:
-            actions:
-                helloworld:
-                    inputs:
-                        name: Amy
-                        place: New York
-                    annotations:
-                        action_annotation_5: this is annotation 5
-                        action_annotation_6: this is annotation 6
-        packageActionAnnotationsWithWebAction:
-            actions:
-                helloworld:
-                    inputs:
-                        name: Amy
-                        place: New York
-                    annotations:
-                        action_annotation_5: this is annotation 5
-                        action_annotation_6: this is annotation 6
-                        web-export: true
diff --git 
a/tests/src/integration/validate-action-annotations/validate-action-annotations_test.go
 
b/tests/src/integration/validate-action-annotations/validate-action-annotations_test.go
index 78f86fb..842c4e8 100644
--- 
a/tests/src/integration/validate-action-annotations/validate-action-annotations_test.go
+++ 
b/tests/src/integration/validate-action-annotations/validate-action-annotations_test.go
@@ -37,11 +37,3 @@ func TestActionAnnotations(t *testing.T) {
        _, err = wskdeploy.Undeploy(manifestPath, deploymentPath)
        assert.Equal(t, nil, err, "Failed to undeploy based on the manifest and 
deployment files.")
 }
-
-func TestInvalidActionAnnotations(t *testing.T) {
-       manifestPath := os.Getenv("GOPATH") + path + "manifest.yaml"
-       deploymentPath := os.Getenv("GOPATH") + path + 
"deployment-with-invalid-annotations.yaml"
-       wskdeploy := common.NewWskdeploy()
-       _, err := wskdeploy.Deploy(manifestPath, deploymentPath)
-       assert.NotNil(t, err, "Failed to validate invalid annotations in 
deployment file")
-}
diff --git a/utils/conversion.go b/utils/conversion.go
index e6c1e34..8b3ce5d 100644
--- a/utils/conversion.go
+++ b/utils/conversion.go
@@ -51,13 +51,8 @@ func convertMapValue(value interface{}) interface{} {
        }
 }
 
-func PrintTypeInfo(name string, value interface{}) {
-       info := fmt.Sprintf("Name=[%s], Value=[%v], Type=[%T]\n", name, value, 
value)
-       fmt.Print(info)
-}
-
+// TODO() add a Print function to wskprint that calls this and adds the label
 func ConvertMapToJSONString(name string, mapIn interface{}) string {
-       PrintTypeInfo(name, mapIn)
        strMapOut, _ := json.MarshalIndent(mapIn, "", "  ")
-       return string(strMapOut)
+       return fmt.Sprintf("%s: %s", name, string(strMapOut))
 }
diff --git a/wski18n/i18n_ids.go b/wski18n/i18n_ids.go
index 564ef27..b8c1bdc 100644
--- a/wski18n/i18n_ids.go
+++ b/wski18n/i18n_ids.go
@@ -29,25 +29,14 @@ const (
        DEPLOYMENT         = "deployment"
        CONFIGURATION      = "Configuration"
        MANIFEST           = "manifest"
-       NAME_ACTION        = "Action Name"
-       NAME_FEED          = "Feed Name"
-       NAME_RULE          = "Rule Name"
-       NAME_RUNTIME       = "Runtime Name"
-       NAME_TRIGGER       = "Trigger Name"
+       NAME_PROJECT       = "project name"
        NAMESPACES         = "Namespaces"
        PACKAGE_BINDING    = "package binding"
        PACKAGE_LICENSE    = "package license"
-       PACKAGE_NAME       = "package name"
        PACKAGE_VERSION    = "package version"
        PACKAGES           = "Packages"
-       PROJECT_NAME       = "project name"
-       REGISTRY           = "registry"
-       REGISTRY_URL       = "registry URL"
-       REPOSITORY         = "repository"
        RULES              = "Rules"
        TRIGGER_FEED       = "trigger feed"
-       TRIGGERS           = "Triggers"
-       WHISK_PROPS        = "wskprops"
        APIGW_ACCESS_TOKEN = "API Gateway Access Token"
 )
 
@@ -61,15 +50,11 @@ const (
        ID_MSG_PREFIX_WARNING = "msg_prefix_warning" // "Warning"
 
        // Cobra command descriptions
-       ID_CMD_DESC_LONG_PUBLISH      = "msg_cmd_desc_long_publish"
-       ID_CMD_DESC_LONG_REPORT       = "msg_cmd_desc_long_report"
-       ID_CMD_DESC_LONG_ROOT         = "msg_cmd_desc_long_root"
-       ID_CMD_DESC_SHORT_ADD         = "msg_cmd_desc_short_add"
-       ID_CMD_DESC_SHORT_ADD_X_key_X = "msg_cmd_desc_short_add_entity"
-       ID_CMD_DESC_SHORT_PUBLISH     = "msg_cmd_desc_short_publish"
-       ID_CMD_DESC_SHORT_REPORT      = "msg_cmd_desc_short_report"
-       ID_CMD_DESC_SHORT_ROOT        = "msg_cmd_desc_short_root"
-       ID_CMD_DESC_SHORT_VERSION     = "msg_cmd_desc_short_version"
+       ID_CMD_DESC_LONG_REPORT   = "msg_cmd_desc_long_report"
+       ID_CMD_DESC_LONG_ROOT     = "msg_cmd_desc_long_root"
+       ID_CMD_DESC_SHORT_REPORT  = "msg_cmd_desc_short_report"
+       ID_CMD_DESC_SHORT_ROOT    = "msg_cmd_desc_short_root"
+       ID_CMD_DESC_SHORT_VERSION = "msg_cmd_desc_short_version"
 
        // Cobra Flag messages
        ID_CMD_FLAG_API_HOST    = "msg_cmd_flag_api_host"
@@ -143,7 +128,6 @@ const (
 
        // Errors
        ID_ERR_DEPENDENCY_UNKNOWN_TYPE                               = 
"msg_err_dependency_unknown_type"
-       ID_ERR_DEPLOYMENT_NAME_NOT_FOUND_X_key_X_name_X              = 
"msg_err_deployment_name_not_found"
        ID_ERR_ENTITY_CREATE_X_key_X_err_X_code_X                    = 
"msg_err_entity_create"
        ID_ERR_ENTITY_DELETE_X_key_X_err_X_code_X                    = 
"msg_err_entity_delete"
        ID_ERR_FEED_INVOKE_X_err_X_code_X                            = 
"msg_err_feed_invoke"
@@ -178,54 +162,50 @@ const (
        ID_WARN_WHISK_PROPS_DEPRECATED                            = 
"msg_warn_whisk_properties"
        ID_WARN_ENTITY_NAME_EXISTS_X_key_X_name_X                 = 
"msg_warn_entity_name_exists"
        ID_WARN_PACKAGES_NOT_FOUND_X_path_X                       = 
"msg_warn_packages_not_found"
+       ID_WARN_DEPLOYMENT_NAME_NOT_FOUND_X_key_X_name_X          = 
"msg_warn_deployment_name_not_found"
 
        // Verbose (Debug/Trace) messages
-       ID_DEBUG_KEY_VERIFY_X_name_X_key_X     = "msg_dbg_key_verify"
-       ID_DEBUG_DEPLOYING_USING               = "msg_dbg_deploying_using"
-       ID_DEBUG_UNDEPLOYING_USING             = "msg_dbg_undeploying_using"
-       ID_DEBUG_PROJECT_SEARCH_X_path_X_key_X = 
"msg_dbg_searching_project_directory"
+       ID_DEBUG_DEPLOYING_USING                              = 
"msg_dbg_deploying_using"
+       ID_DEBUG_UNDEPLOYING_USING                            = 
"msg_dbg_undeploying_using"
+       ID_DEBUG_PROJECT_SEARCH_X_path_X_key_X                = 
"msg_dbg_searching_project_directory"
+       ID_DEBUG_DEPLOYMENT_NAME_FOUND_X_key_X_name_X         = 
"msg_dbg_deployment_name_found"
+       ID_DEBUG_PACKAGES_FOUND_UNDER_ROOT_X_path_X           = 
"msg_dbg_packages_found_root"
+       ID_DEBUG_PACKAGES_FOUND_UNDER_PROJECT_X_path_X_name_X = 
"msg_dbg_packages_found_project"
 )
 
 // Known keys used for text replacement in i18n translated strings
 const (
-       KEY_ACTION             = "action"
-       KEY_CMD                = "cmd"
-       KEY_CODE               = "code"
-       KEY_DEPLOYMENT_NAME    = "dname"
-       KEY_DEPLOYMENT_PATH    = "dpath"
-       KEY_ERR                = "err"
-       KEY_EXTENTION          = "ext"
-       KEY_FILE_TYPE          = "filetype"
-       KEY_HOST               = "host"
-       KEY_KEY                = "key"
-       KEY_LIMIT              = "limit"
-       KEY_MANIFEST_NAME      = "mname"
-       KEY_MANIFEST_PATH      = "mpath"
-       KEY_NAME               = "name"
-       KEY_NAMESPACE          = "namespace"
-       KEY_NEW                = "newkey"
-       KEY_OLD                = "oldkey"
-       KEY_PATH               = "path"
-       KEY_PROJECT            = "project"
-       KEY_RUNTIME            = "runtime"
-       KEY_SOURCE             = "source"
-       KEY_URL                = "url"
-       KEY_URL_TYPE           = "urltype"
-       KEY_VALUE              = "value"
-       KEY_VALUE_MIN          = "min" // TODO() attempt to use this for Limit 
value range errors
-       KEY_VALUE_MAX          = "max" // TODO() attempt to use this for Limit 
value range errors
-       KEY_API                = "api"
-       KEY_APIGW_ACCESS_TOKEN = "apigw_access_token"
+       KEY_ACTION          = "action"
+       KEY_CMD             = "cmd"
+       KEY_CODE            = "code"
+       KEY_DEPLOYMENT_NAME = "dname"
+       KEY_DEPLOYMENT_PATH = "dpath"
+       KEY_ERR             = "err"
+       KEY_EXTENSION       = "ext"
+       KEY_FILE_TYPE       = "filetype"
+       KEY_HOST            = "host"
+       KEY_KEY             = "key"
+       KEY_LIMIT           = "limit"
+       KEY_MANIFEST_NAME   = "mname"
+       KEY_MANIFEST_PATH   = "mpath"
+       KEY_NAME            = "name"
+       KEY_NAMESPACE       = "namespace"
+       KEY_NEW             = "newkey"
+       KEY_OLD             = "oldkey"
+       KEY_PATH            = "path"
+       KEY_PROJECT         = "project"
+       KEY_RUNTIME         = "runtime"
+       KEY_SOURCE          = "source"
+       KEY_VALUE           = "value"
+       KEY_VALUE_MIN       = "min" // TODO() attempt to use this for Limit 
value range errors
+       KEY_VALUE_MAX       = "max" // TODO() attempt to use this for Limit 
value range errors
+       KEY_API             = "api"
 )
 
 // Used to unit test that translations exist with these IDs
 var I18N_ID_SET = [](string){
-       ID_CMD_DESC_LONG_PUBLISH,
        ID_CMD_DESC_LONG_REPORT,
        ID_CMD_DESC_LONG_ROOT,
-       ID_CMD_DESC_SHORT_ADD,
-       ID_CMD_DESC_SHORT_ADD_X_key_X,
-       ID_CMD_DESC_SHORT_PUBLISH,
        ID_CMD_DESC_SHORT_REPORT,
        ID_CMD_DESC_SHORT_ROOT,
        ID_CMD_DESC_SHORT_VERSION,
@@ -246,11 +226,12 @@ var I18N_ID_SET = [](string){
        ID_CMD_FLAG_TOGGLE_HELP,
        ID_CMD_FLAG_VERBOSE,
        ID_DEBUG_DEPLOYING_USING,
-       ID_DEBUG_KEY_VERIFY_X_name_X_key_X,
+       ID_DEBUG_DEPLOYMENT_NAME_FOUND_X_key_X_name_X,
+       ID_DEBUG_PACKAGES_FOUND_UNDER_PROJECT_X_path_X_name_X,
+       ID_DEBUG_PACKAGES_FOUND_UNDER_ROOT_X_path_X,
        ID_DEBUG_PROJECT_SEARCH_X_path_X_key_X,
        ID_DEBUG_UNDEPLOYING_USING,
        ID_ERR_DEPENDENCY_UNKNOWN_TYPE,
-       ID_ERR_DEPLOYMENT_NAME_NOT_FOUND_X_key_X_name_X,
        ID_ERR_ENTITY_CREATE_X_key_X_err_X_code_X,
        ID_ERR_ENTITY_DELETE_X_key_X_err_X_code_X,
        ID_ERR_JSON_MISSING_KEY_CMD,
@@ -303,6 +284,7 @@ var I18N_ID_SET = [](string){
        ID_MSG_UNMARSHAL_NETWORK_X_url_X,
        ID_WARN_COMMAND_RETRY,
        ID_WARN_CONFIG_INVALID_X_path_X,
+       ID_WARN_DEPLOYMENT_NAME_NOT_FOUND_X_key_X_name_X,
        ID_WARN_ENTITY_NAME_EXISTS_X_key_X_name_X,
        ID_WARN_KEY_DEPRECATED_X_oldkey_X_filetype_X_newkey_X,
        ID_WARN_KEY_MISSING_X_key_X_value_X,
diff --git a/wski18n/i18n_resources.go b/wski18n/i18n_resources.go
index 74eed75..440b072 100644
--- a/wski18n/i18n_resources.go
+++ b/wski18n/i18n_resources.go
@@ -1,20 +1,3 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
 // Code generated by go-bindata.
 // sources:
 // wski18n/resources/de_DE.all.json
@@ -109,12 +92,12 @@ func wski18nResourcesDe_deAllJson() (*asset, error) {
                return nil, err
        }
 
-       info := bindataFileInfo{name: "wski18n/resources/de_DE.all.json", size: 
0, mode: os.FileMode(420), modTime: time.Unix(1518211603, 0)}
+       info := bindataFileInfo{name: "wski18n/resources/de_DE.all.json", size: 
0, mode: os.FileMode(420), modTime: time.Unix(1515697090, 0)}
        a := &asset{bytes: bytes, info: info}
        return a, nil
 }
 
-var _wski18nResourcesEn_usAllJson = 
[]byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xc4\x1a\x6b\x8f\x1b\xb7\xf1\xbb\x7f\xc5\xc0\x28\xe0\x04\x38\xcb\x4e\x8a\x02\x85\x81\x43\xe1\xd6\x6e\x72\x4d\xec\x33\xee\xec\x04\x81\x73\x58\x53\xcb\x91\xc4\x68\x97\x5c\x90\xdc\x93\x95\x83\xfa\xdb\x8b\xe1\x63\x77\xa5\x3b\xee\x52\x72\x82\xe6\x4b\xe4\xe3\x70\xde\x9c\xe7\x7e\x7c\x04\x70\xf7\x08\x00\xe0\xb1\xe0\x8f\x5f\xc0\xe3\xda\x2c\x8b\x46\xe3\x42\x7c\x2e\x50\x6b\xa5\x1f\x9f\xf9\x53\xab\x99\x34\x15\xb3\x42
 [...]
+var _wski18nResourcesEn_usAllJson = 
[]byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xc4\x5a\x6d\x6f\x1b\x37\xf2\x7f\x9f\x4f\x31\x08\xfe\x40\x5a\xc0\x51\xd2\xfe\x71\xc0\x21\x80\x71\xc8\x5d\xd2\x36\xd7\x26\x0e\xec\xf8\x8a\x22\x35\x36\xd4\x72\xb4\xcb\x6a\x97\x5c\x90\x5c\x2b\xaa\xa1\xef\x7e\x18\x92\xfb\x20\xd9\xdc\xa5\x94\x06\xd7\x37\x55\xcc\xe1\xcc\x6f\x86\xe4\x3c\xee\xc7\x47\x00\x77\x8f\x00\x00\x1e\x0b\xfe\xf8\x05\x3c\xae\x4d\x91\x35\x1a\x57\xe2\x73\x86\x5a\x2b\xfd\xf8\xcc\xaf\x5a\xcd\xa4
 [...]
 
 func wski18nResourcesEn_usAllJsonBytes() ([]byte, error) {
        return bindataRead(
@@ -129,7 +112,7 @@ func wski18nResourcesEn_usAllJson() (*asset, error) {
                return nil, err
        }
 
-       info := bindataFileInfo{name: "wski18n/resources/en_US.all.json", size: 
13150, mode: os.FileMode(420), modTime: time.Unix(1519437986, 0)}
+       info := bindataFileInfo{name: "wski18n/resources/en_US.all.json", size: 
13032, mode: os.FileMode(420), modTime: time.Unix(1520362388, 0)}
        a := &asset{bytes: bytes, info: info}
        return a, nil
 }
@@ -149,7 +132,7 @@ func wski18nResourcesEs_esAllJson() (*asset, error) {
                return nil, err
        }
 
-       info := bindataFileInfo{name: "wski18n/resources/es_ES.all.json", size: 
0, mode: os.FileMode(420), modTime: time.Unix(1518211603, 0)}
+       info := bindataFileInfo{name: "wski18n/resources/es_ES.all.json", size: 
0, mode: os.FileMode(420), modTime: time.Unix(1515697090, 0)}
        a := &asset{bytes: bytes, info: info}
        return a, nil
 }
@@ -169,7 +152,7 @@ func wski18nResourcesFr_frAllJson() (*asset, error) {
                return nil, err
        }
 
-       info := bindataFileInfo{name: "wski18n/resources/fr_FR.all.json", size: 
101, mode: os.FileMode(420), modTime: time.Unix(1518211603, 0)}
+       info := bindataFileInfo{name: "wski18n/resources/fr_FR.all.json", size: 
101, mode: os.FileMode(420), modTime: time.Unix(1515697090, 0)}
        a := &asset{bytes: bytes, info: info}
        return a, nil
 }
@@ -189,7 +172,7 @@ func wski18nResourcesIt_itAllJson() (*asset, error) {
                return nil, err
        }
 
-       info := bindataFileInfo{name: "wski18n/resources/it_IT.all.json", size: 
0, mode: os.FileMode(420), modTime: time.Unix(1518211603, 0)}
+       info := bindataFileInfo{name: "wski18n/resources/it_IT.all.json", size: 
0, mode: os.FileMode(420), modTime: time.Unix(1515697090, 0)}
        a := &asset{bytes: bytes, info: info}
        return a, nil
 }
@@ -209,7 +192,7 @@ func wski18nResourcesJa_jaAllJson() (*asset, error) {
                return nil, err
        }
 
-       info := bindataFileInfo{name: "wski18n/resources/ja_JA.all.json", size: 
0, mode: os.FileMode(420), modTime: time.Unix(1518211603, 0)}
+       info := bindataFileInfo{name: "wski18n/resources/ja_JA.all.json", size: 
0, mode: os.FileMode(420), modTime: time.Unix(1515697090, 0)}
        a := &asset{bytes: bytes, info: info}
        return a, nil
 }
@@ -229,7 +212,7 @@ func wski18nResourcesKo_krAllJson() (*asset, error) {
                return nil, err
        }
 
-       info := bindataFileInfo{name: "wski18n/resources/ko_KR.all.json", size: 
0, mode: os.FileMode(420), modTime: time.Unix(1518211603, 0)}
+       info := bindataFileInfo{name: "wski18n/resources/ko_KR.all.json", size: 
0, mode: os.FileMode(420), modTime: time.Unix(1515697090, 0)}
        a := &asset{bytes: bytes, info: info}
        return a, nil
 }
@@ -249,7 +232,7 @@ func wski18nResourcesPt_brAllJson() (*asset, error) {
                return nil, err
        }
 
-       info := bindataFileInfo{name: "wski18n/resources/pt_BR.all.json", size: 
0, mode: os.FileMode(420), modTime: time.Unix(1518211603, 0)}
+       info := bindataFileInfo{name: "wski18n/resources/pt_BR.all.json", size: 
0, mode: os.FileMode(420), modTime: time.Unix(1515697090, 0)}
        a := &asset{bytes: bytes, info: info}
        return a, nil
 }
@@ -269,7 +252,7 @@ func wski18nResourcesZh_hansAllJson() (*asset, error) {
                return nil, err
        }
 
-       info := bindataFileInfo{name: "wski18n/resources/zh_Hans.all.json", 
size: 0, mode: os.FileMode(420), modTime: time.Unix(1518211603, 0)}
+       info := bindataFileInfo{name: "wski18n/resources/zh_Hans.all.json", 
size: 0, mode: os.FileMode(420), modTime: time.Unix(1515697090, 0)}
        a := &asset{bytes: bytes, info: info}
        return a, nil
 }
@@ -289,7 +272,7 @@ func wski18nResourcesZh_hantAllJson() (*asset, error) {
                return nil, err
        }
 
-       info := bindataFileInfo{name: "wski18n/resources/zh_Hant.all.json", 
size: 0, mode: os.FileMode(420), modTime: time.Unix(1518211603, 0)}
+       info := bindataFileInfo{name: "wski18n/resources/zh_Hant.all.json", 
size: 0, mode: os.FileMode(420), modTime: time.Unix(1515697090, 0)}
        a := &asset{bytes: bytes, info: info}
        return a, nil
 }
@@ -346,14 +329,14 @@ func AssetNames() []string {
 
 // _bindata is a table, holding each asset generator, mapped to its name.
 var _bindata = map[string]func() (*asset, error){
-       "wski18n/resources/de_DE.all.json":   wski18nResourcesDe_deAllJson,
-       "wski18n/resources/en_US.all.json":   wski18nResourcesEn_usAllJson,
-       "wski18n/resources/es_ES.all.json":   wski18nResourcesEs_esAllJson,
-       "wski18n/resources/fr_FR.all.json":   wski18nResourcesFr_frAllJson,
-       "wski18n/resources/it_IT.all.json":   wski18nResourcesIt_itAllJson,
-       "wski18n/resources/ja_JA.all.json":   wski18nResourcesJa_jaAllJson,
-       "wski18n/resources/ko_KR.all.json":   wski18nResourcesKo_krAllJson,
-       "wski18n/resources/pt_BR.all.json":   wski18nResourcesPt_brAllJson,
+       "wski18n/resources/de_DE.all.json": wski18nResourcesDe_deAllJson,
+       "wski18n/resources/en_US.all.json": wski18nResourcesEn_usAllJson,
+       "wski18n/resources/es_ES.all.json": wski18nResourcesEs_esAllJson,
+       "wski18n/resources/fr_FR.all.json": wski18nResourcesFr_frAllJson,
+       "wski18n/resources/it_IT.all.json": wski18nResourcesIt_itAllJson,
+       "wski18n/resources/ja_JA.all.json": wski18nResourcesJa_jaAllJson,
+       "wski18n/resources/ko_KR.all.json": wski18nResourcesKo_krAllJson,
+       "wski18n/resources/pt_BR.all.json": wski18nResourcesPt_brAllJson,
        "wski18n/resources/zh_Hans.all.json": wski18nResourcesZh_hansAllJson,
        "wski18n/resources/zh_Hant.all.json": wski18nResourcesZh_hantAllJson,
 }
@@ -397,20 +380,19 @@ type bintree struct {
        Func     func() (*asset, error)
        Children map[string]*bintree
 }
-
 var _bintree = &bintree{nil, map[string]*bintree{
-       "wski18n": {nil, map[string]*bintree{
-               "resources": {nil, map[string]*bintree{
-                       "de_DE.all.json":   {wski18nResourcesDe_deAllJson, 
map[string]*bintree{}},
-                       "en_US.all.json":   {wski18nResourcesEn_usAllJson, 
map[string]*bintree{}},
-                       "es_ES.all.json":   {wski18nResourcesEs_esAllJson, 
map[string]*bintree{}},
-                       "fr_FR.all.json":   {wski18nResourcesFr_frAllJson, 
map[string]*bintree{}},
-                       "it_IT.all.json":   {wski18nResourcesIt_itAllJson, 
map[string]*bintree{}},
-                       "ja_JA.all.json":   {wski18nResourcesJa_jaAllJson, 
map[string]*bintree{}},
-                       "ko_KR.all.json":   {wski18nResourcesKo_krAllJson, 
map[string]*bintree{}},
-                       "pt_BR.all.json":   {wski18nResourcesPt_brAllJson, 
map[string]*bintree{}},
-                       "zh_Hans.all.json": {wski18nResourcesZh_hansAllJson, 
map[string]*bintree{}},
-                       "zh_Hant.all.json": {wski18nResourcesZh_hantAllJson, 
map[string]*bintree{}},
+       "wski18n": &bintree{nil, map[string]*bintree{
+               "resources": &bintree{nil, map[string]*bintree{
+                       "de_DE.all.json": 
&bintree{wski18nResourcesDe_deAllJson, map[string]*bintree{}},
+                       "en_US.all.json": 
&bintree{wski18nResourcesEn_usAllJson, map[string]*bintree{}},
+                       "es_ES.all.json": 
&bintree{wski18nResourcesEs_esAllJson, map[string]*bintree{}},
+                       "fr_FR.all.json": 
&bintree{wski18nResourcesFr_frAllJson, map[string]*bintree{}},
+                       "it_IT.all.json": 
&bintree{wski18nResourcesIt_itAllJson, map[string]*bintree{}},
+                       "ja_JA.all.json": 
&bintree{wski18nResourcesJa_jaAllJson, map[string]*bintree{}},
+                       "ko_KR.all.json": 
&bintree{wski18nResourcesKo_krAllJson, map[string]*bintree{}},
+                       "pt_BR.all.json": 
&bintree{wski18nResourcesPt_brAllJson, map[string]*bintree{}},
+                       "zh_Hans.all.json": 
&bintree{wski18nResourcesZh_hansAllJson, map[string]*bintree{}},
+                       "zh_Hant.all.json": 
&bintree{wski18nResourcesZh_hantAllJson, map[string]*bintree{}},
                }},
        }},
 }}
@@ -461,3 +443,4 @@ func _filePath(dir, name string) string {
        cannonicalName := strings.Replace(name, "\\", "/", -1)
        return filepath.Join(append([]string{dir}, 
strings.Split(cannonicalName, "/")...)...)
 }
+
diff --git a/wski18n/resources/en_US.all.json b/wski18n/resources/en_US.all.json
index b98062a..7d1a2d7 100644
--- a/wski18n/resources/en_US.all.json
+++ b/wski18n/resources/en_US.all.json
@@ -16,10 +16,6 @@
     "translation": "Warning"
   },
   {
-    "id": "msg_cmd_desc_long_publish",
-    "translation": "Publish a package to the registry set in ~/.wskprops."
-  },
-  {
     "id": "msg_cmd_desc_long_report",
     "translation": "Reports on deployed entities (i.e., Packages, Actions, 
Triggers, Rules, etc.) as well as recent Activations in the specified 
namespace."
   },
@@ -28,10 +24,6 @@
     "translation": "A tool to deploy, undeploy and sync openwhisk packages 
using a manifest and optional deployment files using YAML."
   },
   {
-    "id": "msg_cmd_desc_short_publish",
-    "translation": "Publish a package to a registry."
-  },
-  {
     "id": "msg_cmd_desc_short_report",
     "translation": "Provides a summary report of what's been deployed in the 
specified namespace."
   },
@@ -40,14 +32,6 @@
     "translation": "A tool set to help deploy your openwhisk packages using a 
manifest file."
   },
   {
-    "id": "msg_cmd_desc_short_add",
-    "translation": "Add an action, feed, trigger or rule to the manifest"
-  },
-  {
-    "id": "msg_cmd_desc_short_add_entity",
-    "translation": "Add a/an {{.key}} to the manifest file"
-  },
-  {
     "id": "msg_cmd_desc_short_version",
     "translation": "Print the version number of wskdeploy"
   },
@@ -268,10 +252,6 @@
     "translation": "Dependency type is unknown.  wskdeploy only supports 
/whisk.system bindings or github.com packages.\n"
   },
   {
-    "id": "msg_err_deployment_name_not_found",
-    "translation": "The {{.key}} [{{.name}}] in deployment file not found in 
manifest file.\n"
-  },
-  {
     "id": "msg_err_entity_create",
     "translation": "Error creating {{.key}} with error message: {{.err}} and 
error code: {{.code}}.\n"
   },
@@ -396,12 +376,12 @@
     "translation": "The manifest file [{{.path}}] contained no packages.\n"
   },
   {
-    "id": "DEBUG",
-    "translation": "================= DEBUG ==================="
+    "id": "msg_warn_deployment_name_not_found",
+    "translation": "The {{.key}} [{{.name}}] in the deployment file was not 
found in the manifest file.\n"
   },
   {
-    "id": "msg_dbg_key_verify",
-    "translation": "Verifying {{.name}} [{{.key}}] exists...\n"
+    "id": "DEBUG",
+    "translation": "================= DEBUG ==================="
   },
   {
     "id": "msg_dbg_deploying_using",
@@ -414,5 +394,17 @@
   {
     "id": "msg_dbg_searching_project_directory",
     "translation": "Searching project directory [{{.path}}] for 
[{{.key}}]...\n"
+  },
+  {
+    "id": "msg_dbg_deployment_name_found",
+    "translation": "The {{.key}} [{{.name}}] in the deployment file was found 
in the manifest file.\n"
+  },
+  {
+    "id": "msg_dbg_packages_found_root",
+    "translation": "Deployment file [{{.path}}]: Found packages under root.\n"
+  },
+  {
+    "id": "msg_dbg_packages_found_project",
+    "translation": "Deployment file [{{.path}}]: Found packages under project 
[{{.name}}].\n"
   }
 ]
diff --git a/wskprint/console.go b/wskprint/console.go
index 94e0f5d..6e74565 100644
--- a/wskprint/console.go
+++ b/wskprint/console.go
@@ -22,6 +22,8 @@ import (
        "github.com/apache/incubator-openwhisk-wskdeploy/wski18n"
        "github.com/fatih/color"
        "github.com/mattn/go-colorable"
+       "os"
+       "strings"
 )
 
 const (
@@ -101,3 +103,17 @@ func PrintOpenWhiskVerbose(verbose bool, message string) {
 func PrintlnOpenWhiskVerbose(verbose bool, message string) {
        PrintOpenWhiskVerbose(verbose, message+"\n")
 }
+
+// Display "trace" output if either param is true OR we are running Go test 
verbose (i.e., "go test -v")
+// arg[0] = 
[/var/folders/nj/2blqqtm500l5ch2d5k0hvqvm0000gn/T/go-build041478919/github.com/apache/incubator-openwhisk-wskdeploy/deployers/_test/deployers.test
+// arg[1] = -test.v=true
+// arg[2] = -test.run=TestDeploymentReader_PackagesBindTrigger]
+// TODO() introduce "trace" as an optional flag (perhaps hidden or picked up 
from environment)
+func PrintlnOpenWhiskTrace(trace bool, message string) {
+       GO_TEST_VERBOSE := false
+       if len(os.Args) >= 2 {
+               // TODO() move this to an init() routine
+               GO_TEST_VERBOSE = strings.Contains(os.Args[1], "-test.v=true")
+       }
+       PrintOpenWhiskVerbose(GO_TEST_VERBOSE || trace, message+"\n")
+}

-- 
To stop receiving notification emails like this one, please contact
pde...@apache.org.

Reply via email to