github.com/jdolitsky/cnab-go@v0.7.1-beta1/driver/command/command_nix_test.go (about) 1 // +build !windows 2 3 package command 4 5 import ( 6 "os" 7 "testing" 8 9 "github.com/deislabs/cnab-go/bundle" 10 "github.com/deislabs/cnab-go/bundle/definition" 11 "github.com/deislabs/cnab-go/driver" 12 "github.com/stretchr/testify/assert" 13 ) 14 15 func TestCommandDriverOutputs(t *testing.T) { 16 content := `#!/bin/sh 17 mkdir -p "${CNAB_OUTPUT_DIR}/cnab/app/outputs" 18 echo "TEST_OUTPUT_1" >> "${CNAB_OUTPUT_DIR}/cnab/app/outputs/output1" 19 echo "TEST_OUTPUT_2" >> "${CNAB_OUTPUT_DIR}/cnab/app/outputs/output2" 20 ` 21 name := "test-outputs-exist.sh" 22 testfunc := func(t *testing.T, cmddriver *Driver) { 23 if !cmddriver.CheckDriverExists() { 24 t.Fatalf("Expected driver %s to exist Driver Name %s ", name, cmddriver.Name) 25 } 26 op := driver.Operation{ 27 Action: "install", 28 Installation: "test", 29 Parameters: map[string]interface{}{}, 30 Image: bundle.InvocationImage{ 31 BaseImage: bundle.BaseImage{ 32 Image: "cnab/helloworld:latest", 33 ImageType: "docker", 34 }, 35 }, 36 Revision: "01DDY0MT808KX0GGZ6SMXN4TW", 37 Environment: map[string]string{}, 38 Files: map[string]string{ 39 "/cnab/app/image-map.json": "{}", 40 }, 41 Outputs: []string{"/cnab/app/outputs/output1", "/cnab/app/outputs/output2"}, 42 Out: os.Stdout, 43 Bundle: &bundle.Bundle{ 44 Definitions: definition.Definitions{ 45 "output1": &definition.Schema{}, 46 "output2": &definition.Schema{}, 47 }, 48 Outputs: map[string]bundle.Output{ 49 "output1": { 50 Definition: "output1", 51 Path: "/cnab/app/outputs/output1", 52 }, 53 "output2": { 54 Definition: "output2", 55 Path: "/cnab/app/outputs/output2", 56 }, 57 }, 58 }, 59 } 60 opResult, err := cmddriver.Run(&op) 61 if err != nil { 62 t.Fatalf("Driver Run failed %v", err) 63 } 64 assert.Equal(t, 2, len(opResult.Outputs), "Expecting two output files") 65 assert.Equal(t, map[string]string{ 66 "/cnab/app/outputs/output1": "TEST_OUTPUT_1\n", 67 "/cnab/app/outputs/output2": "TEST_OUTPUT_2\n", 68 }, opResult.Outputs) 69 } 70 CreateAndRunTestCommandDriver(t, name, content, testfunc) 71 // Test for an output missing and no defaults 72 content = `#!/bin/sh 73 mkdir -p "${CNAB_OUTPUT_DIR}/cnab/app/outputs" 74 echo "TEST_OUTPUT_1" >> "${CNAB_OUTPUT_DIR}/cnab/app/outputs/output1" 75 ` 76 name = "test-outputs-missing.sh" 77 testfunc = func(t *testing.T, cmddriver *Driver) { 78 if !cmddriver.CheckDriverExists() { 79 t.Fatalf("Expected driver %s to exist Driver Name %s ", name, cmddriver.Name) 80 } 81 op := driver.Operation{ 82 Action: "install", 83 Installation: "test", 84 Parameters: map[string]interface{}{}, 85 Image: bundle.InvocationImage{ 86 BaseImage: bundle.BaseImage{ 87 Image: "cnab/helloworld:latest", 88 ImageType: "docker", 89 }, 90 }, 91 Revision: "01DDY0MT808KX0GGZ6SMXN4TW", 92 Environment: map[string]string{}, 93 Files: map[string]string{ 94 "/cnab/app/image-map.json": "{}", 95 }, 96 Outputs: []string{"/cnab/app/outputs/output1", "/cnab/app/outputs/output2"}, 97 Out: os.Stdout, 98 Bundle: &bundle.Bundle{ 99 Definitions: definition.Definitions{ 100 "output1": &definition.Schema{}, 101 "output2": &definition.Schema{}, 102 }, 103 Outputs: map[string]bundle.Output{ 104 "output1": { 105 Definition: "output1", 106 Path: "/cnab/app/outputs/output1", 107 }, 108 "output2": { 109 Definition: "output2", 110 Path: "/cnab/app/outputs/output2", 111 }, 112 }, 113 }, 114 } 115 _, err := cmddriver.Run(&op) 116 assert.Errorf(t, err, "Command driver (test-outputs-missing.sh) failed for item: /cnab/app/outputs/output2 no output value found and no default value set") 117 } 118 CreateAndRunTestCommandDriver(t, name, content, testfunc) 119 // Test for an output missing with default value present 120 content = `#!/bin/sh 121 mkdir -p "${CNAB_OUTPUT_DIR}/cnab/app/outputs" 122 echo "TEST_OUTPUT_1" >> "${CNAB_OUTPUT_DIR}/cnab/app/outputs/output1" 123 ` 124 name = "test-outputs-missing.sh" 125 testfunc = func(t *testing.T, cmddriver *Driver) { 126 if !cmddriver.CheckDriverExists() { 127 t.Fatalf("Expected driver %s to exist Driver Name %s ", name, cmddriver.Name) 128 } 129 op := driver.Operation{ 130 Action: "install", 131 Installation: "test", 132 Parameters: map[string]interface{}{}, 133 Image: bundle.InvocationImage{ 134 BaseImage: bundle.BaseImage{ 135 Image: "cnab/helloworld:latest", 136 ImageType: "docker", 137 }, 138 }, 139 Revision: "01DDY0MT808KX0GGZ6SMXN4TW", 140 Environment: map[string]string{}, 141 Files: map[string]string{ 142 "/cnab/app/image-map.json": "{}", 143 }, 144 Outputs: []string{"/cnab/app/outputs/output1", "/cnab/app/outputs/output2"}, 145 Out: os.Stdout, 146 Bundle: &bundle.Bundle{ 147 Definitions: definition.Definitions{ 148 "output1": &definition.Schema{}, 149 "output2": &definition.Schema{ 150 Default: "DEFAULT OUTPUT 2", 151 }, 152 }, 153 Outputs: map[string]bundle.Output{ 154 "output1": { 155 Definition: "output1", 156 Path: "/cnab/app/outputs/output1", 157 }, 158 "output2": { 159 Definition: "output2", 160 Path: "/cnab/app/outputs/output2", 161 }, 162 }, 163 }, 164 } 165 opResult, err := cmddriver.Run(&op) 166 if err != nil { 167 t.Fatalf("Driver Run failed %v", err) 168 } 169 assert.Equal(t, 2, len(opResult.Outputs), "Expecting two output files") 170 assert.Equal(t, map[string]string{ 171 "/cnab/app/outputs/output1": "TEST_OUTPUT_1\n", 172 "/cnab/app/outputs/output2": "DEFAULT OUTPUT 2", 173 }, opResult.Outputs) 174 } 175 CreateAndRunTestCommandDriver(t, name, content, testfunc) 176 }