github.com/szyn/goreleaser@v0.76.1-0.20180517112710-333da09a1297/pipeline/snapcraft/snapcraft_test.go (about)

     1  package snapcraft
     2  
     3  import (
     4  	"fmt"
     5  	"io/ioutil"
     6  	"os"
     7  	"path/filepath"
     8  	"testing"
     9  
    10  	"github.com/goreleaser/goreleaser/config"
    11  	"github.com/goreleaser/goreleaser/context"
    12  	"github.com/goreleaser/goreleaser/internal/artifact"
    13  	"github.com/goreleaser/goreleaser/pipeline"
    14  	"github.com/stretchr/testify/assert"
    15  	yaml "gopkg.in/yaml.v2"
    16  )
    17  
    18  func TestDescription(t *testing.T) {
    19  	assert.NotEmpty(t, Pipe{}.String())
    20  }
    21  
    22  func TestRunPipeMissingInfo(t *testing.T) {
    23  	for eerr, snap := range map[error]config.Snapcraft{
    24  		ErrNoSummary: {
    25  			Description: "dummy desc",
    26  		},
    27  		ErrNoDescription: {
    28  			Summary: "dummy summary",
    29  		},
    30  		pipeline.Skip("no summary nor description were provided"): {},
    31  	} {
    32  		t.Run(fmt.Sprintf("testing if %v happens", eerr), func(t *testing.T) {
    33  			var ctx = &context.Context{
    34  				Config: config.Project{
    35  					Snapcraft: snap,
    36  				},
    37  			}
    38  			assert.Equal(t, eerr, Pipe{}.Run(ctx))
    39  		})
    40  	}
    41  }
    42  
    43  func TestRunPipe(t *testing.T) {
    44  	folder, err := ioutil.TempDir("", "archivetest")
    45  	assert.NoError(t, err)
    46  	var dist = filepath.Join(folder, "dist")
    47  	assert.NoError(t, os.Mkdir(dist, 0755))
    48  	assert.NoError(t, err)
    49  	var ctx = context.New(config.Project{
    50  		ProjectName: "mybin",
    51  		Dist:        dist,
    52  		Snapcraft: config.Snapcraft{
    53  			NameTemplate: "foo_{{.Arch}}",
    54  			Summary:      "test summary",
    55  			Description:  "test description",
    56  		},
    57  	})
    58  	ctx.Version = "testversion"
    59  	addBinaries(t, ctx, "mybin", dist)
    60  	assert.NoError(t, Pipe{}.Run(ctx))
    61  }
    62  
    63  func TestRunPipeInvalidNameTemplate(t *testing.T) {
    64  	folder, err := ioutil.TempDir("", "archivetest")
    65  	assert.NoError(t, err)
    66  	var dist = filepath.Join(folder, "dist")
    67  	assert.NoError(t, os.Mkdir(dist, 0755))
    68  	assert.NoError(t, err)
    69  	var ctx = context.New(config.Project{
    70  		ProjectName: "mybin",
    71  		Dist:        dist,
    72  		Snapcraft: config.Snapcraft{
    73  			NameTemplate: "foo_{{.Arch}",
    74  			Summary:      "test summary",
    75  			Description:  "test description",
    76  		},
    77  	})
    78  	ctx.Version = "testversion"
    79  	addBinaries(t, ctx, "mybin", dist)
    80  	assert.EqualError(t, Pipe{}.Run(ctx), `template: foo_{{.Arch}:1: unexpected "}" in operand`)
    81  }
    82  
    83  func TestRunPipeWithName(t *testing.T) {
    84  	folder, err := ioutil.TempDir("", "archivetest")
    85  	assert.NoError(t, err)
    86  	var dist = filepath.Join(folder, "dist")
    87  	assert.NoError(t, os.Mkdir(dist, 0755))
    88  	assert.NoError(t, err)
    89  	var ctx = context.New(config.Project{
    90  		ProjectName: "testprojectname",
    91  		Dist:        dist,
    92  		Snapcraft: config.Snapcraft{
    93  			NameTemplate: "foo_{{.Arch}}",
    94  			Name:         "testsnapname",
    95  			Summary:      "test summary",
    96  			Description:  "test description",
    97  		},
    98  	})
    99  	ctx.Version = "testversion"
   100  	addBinaries(t, ctx, "testprojectname", dist)
   101  	assert.NoError(t, Pipe{}.Run(ctx))
   102  	yamlFile, err := ioutil.ReadFile(filepath.Join(dist, "foo_amd64", "prime", "meta", "snap.yaml"))
   103  	assert.NoError(t, err)
   104  	var metadata Metadata
   105  	err = yaml.Unmarshal(yamlFile, &metadata)
   106  	assert.NoError(t, err)
   107  	assert.Equal(t, metadata.Name, "testsnapname")
   108  }
   109  
   110  func TestRunPipeWithPlugsAndDaemon(t *testing.T) {
   111  	folder, err := ioutil.TempDir("", "archivetest")
   112  	assert.NoError(t, err)
   113  	var dist = filepath.Join(folder, "dist")
   114  	assert.NoError(t, os.Mkdir(dist, 0755))
   115  	assert.NoError(t, err)
   116  	var ctx = context.New(config.Project{
   117  		ProjectName: "mybin",
   118  		Dist:        dist,
   119  		Snapcraft: config.Snapcraft{
   120  			NameTemplate: "foo_{{.Arch}}",
   121  			Summary:      "test summary",
   122  			Description:  "test description",
   123  			Apps: map[string]config.SnapcraftAppMetadata{
   124  				"mybin": {
   125  					Plugs:  []string{"home", "network"},
   126  					Daemon: "simple",
   127  				},
   128  			},
   129  		},
   130  	})
   131  	ctx.Version = "testversion"
   132  	addBinaries(t, ctx, "mybin", dist)
   133  	assert.NoError(t, Pipe{}.Run(ctx))
   134  	yamlFile, err := ioutil.ReadFile(filepath.Join(dist, "foo_amd64", "prime", "meta", "snap.yaml"))
   135  	assert.NoError(t, err)
   136  	var metadata Metadata
   137  	err = yaml.Unmarshal(yamlFile, &metadata)
   138  	assert.NoError(t, err)
   139  	assert.Equal(t, metadata.Apps["mybin"].Plugs, []string{"home", "network"})
   140  	assert.Equal(t, metadata.Apps["mybin"].Daemon, "simple")
   141  }
   142  
   143  func TestNoSnapcraftInPath(t *testing.T) {
   144  	var path = os.Getenv("PATH")
   145  	defer func() {
   146  		assert.NoError(t, os.Setenv("PATH", path))
   147  	}()
   148  	assert.NoError(t, os.Setenv("PATH", ""))
   149  	var ctx = context.New(config.Project{
   150  		Snapcraft: config.Snapcraft{
   151  			Summary:     "dummy",
   152  			Description: "dummy",
   153  		},
   154  	})
   155  	assert.EqualError(t, Pipe{}.Run(ctx), ErrNoSnapcraft.Error())
   156  }
   157  
   158  func TestDefault(t *testing.T) {
   159  	var ctx = context.New(config.Project{})
   160  	assert.NoError(t, Pipe{}.Default(ctx))
   161  	assert.Equal(t, defaultNameTemplate, ctx.Config.Snapcraft.NameTemplate)
   162  }
   163  
   164  func TestDefaultSet(t *testing.T) {
   165  	var ctx = context.New(config.Project{
   166  		Snapcraft: config.Snapcraft{
   167  			NameTemplate: "foo",
   168  		},
   169  	})
   170  	assert.NoError(t, Pipe{}.Default(ctx))
   171  	assert.Equal(t, "foo", ctx.Config.Snapcraft.NameTemplate)
   172  }
   173  
   174  func addBinaries(t *testing.T, ctx *context.Context, name, dist string) {
   175  	for _, goos := range []string{"linux", "darwin"} {
   176  		for _, goarch := range []string{"amd64", "386"} {
   177  			var folder = goos + goarch
   178  			assert.NoError(t, os.Mkdir(filepath.Join(dist, folder), 0755))
   179  			var binPath = filepath.Join(dist, folder, name)
   180  			_, err := os.Create(binPath)
   181  			assert.NoError(t, err)
   182  			ctx.Artifacts.Add(artifact.Artifact{
   183  				Name:   "mybin",
   184  				Path:   binPath,
   185  				Goarch: goarch,
   186  				Goos:   goos,
   187  				Type:   artifact.Binary,
   188  			})
   189  		}
   190  	}
   191  }