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  }