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

     1  package nfpm
     2  
     3  import (
     4  	"io/ioutil"
     5  	"os"
     6  	"path/filepath"
     7  	"runtime"
     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/internal/testlib"
    14  	"github.com/stretchr/testify/assert"
    15  )
    16  
    17  func TestDescription(t *testing.T) {
    18  	assert.NotEmpty(t, Pipe{}.String())
    19  }
    20  
    21  func TestRunPipeNoFormats(t *testing.T) {
    22  	var ctx = &context.Context{
    23  		Git: context.GitInfo{
    24  			CurrentTag: "v1.0.0",
    25  		},
    26  		Config:      config.Project{},
    27  		Parallelism: runtime.NumCPU(),
    28  	}
    29  	testlib.AssertSkipped(t, Pipe{}.Run(ctx))
    30  }
    31  
    32  func TestRunPipeInvalidFormat(t *testing.T) {
    33  	var ctx = context.New(config.Project{
    34  		ProjectName: "nope",
    35  		NFPM: config.NFPM{
    36  			Bindir:  "/usr/bin",
    37  			Formats: []string{"nope"},
    38  			NFPMOverridables: config.NFPMOverridables{
    39  				NameTemplate: defaultNameTemplate,
    40  				Files:        map[string]string{},
    41  			},
    42  		},
    43  	})
    44  	ctx.Git = context.GitInfo{
    45  		CurrentTag: "v1.2.3",
    46  	}
    47  	for _, goos := range []string{"linux", "darwin"} {
    48  		for _, goarch := range []string{"amd64", "386"} {
    49  			ctx.Artifacts.Add(artifact.Artifact{
    50  				Name:   "mybin",
    51  				Path:   "whatever",
    52  				Goarch: goarch,
    53  				Goos:   goos,
    54  				Type:   artifact.Binary,
    55  			})
    56  		}
    57  	}
    58  	assert.Contains(t, Pipe{}.Run(ctx).Error(), `no packager registered for the format nope`)
    59  }
    60  
    61  func TestRunPipe(t *testing.T) {
    62  	folder, err := ioutil.TempDir("", "archivetest")
    63  	assert.NoError(t, err)
    64  	var dist = filepath.Join(folder, "dist")
    65  	assert.NoError(t, os.Mkdir(dist, 0755))
    66  	assert.NoError(t, os.Mkdir(filepath.Join(dist, "mybin"), 0755))
    67  	var binPath = filepath.Join(dist, "mybin", "mybin")
    68  	_, err = os.Create(binPath)
    69  	assert.NoError(t, err)
    70  	var ctx = context.New(config.Project{
    71  		ProjectName: "mybin",
    72  		Dist:        dist,
    73  		NFPM: config.NFPM{
    74  			Bindir:      "/usr/bin",
    75  			Formats:     []string{"deb", "rpm"},
    76  			Description: "Some description",
    77  			License:     "MIT",
    78  			Maintainer:  "me@me",
    79  			Vendor:      "asdf",
    80  			Homepage:    "https://goreleaser.github.io",
    81  			NFPMOverridables: config.NFPMOverridables{
    82  				NameTemplate: defaultNameTemplate,
    83  				Dependencies: []string{"make"},
    84  				Recommends:   []string{"svn"},
    85  				Suggests:     []string{"bzr"},
    86  				Conflicts:    []string{"git"},
    87  				EmptyFolders: []string{"/var/log/foobar"},
    88  				Files: map[string]string{
    89  					"./testdata/testfile.txt": "/usr/share/testfile.txt",
    90  				},
    91  				ConfigFiles: map[string]string{
    92  					"./testdata/testfile.txt": "/etc/nope.conf",
    93  				},
    94  			},
    95  			Overrides: map[string]config.NFPMOverridables{
    96  				"rpm": {
    97  					ConfigFiles: map[string]string{
    98  						"./testdata/testfile.txt": "/etc/nope-rpm.conf",
    99  					},
   100  				},
   101  			},
   102  		},
   103  	})
   104  	ctx.Git = context.GitInfo{CurrentTag: "v1.0.0"}
   105  	for _, goos := range []string{"linux", "darwin"} {
   106  		for _, goarch := range []string{"amd64", "386"} {
   107  			ctx.Artifacts.Add(artifact.Artifact{
   108  				Name:   "mybin",
   109  				Path:   binPath,
   110  				Goarch: goarch,
   111  				Goos:   goos,
   112  				Type:   artifact.Binary,
   113  			})
   114  		}
   115  	}
   116  	assert.NoError(t, Pipe{}.Run(ctx))
   117  	assert.Len(t, ctx.Config.NFPM.Files, 1, "should not modify the config file list")
   118  }
   119  
   120  func TestInvalidNameTemplate(t *testing.T) {
   121  	var ctx = &context.Context{
   122  		Parallelism: runtime.NumCPU(),
   123  		Artifacts:   artifact.New(),
   124  		Config: config.Project{
   125  			NFPM: config.NFPM{
   126  				NFPMOverridables: config.NFPMOverridables{NameTemplate: "{{.Foo}"},
   127  				Formats:          []string{"deb"},
   128  			},
   129  		},
   130  	}
   131  	ctx.Artifacts.Add(artifact.Artifact{
   132  		Name:   "mybin",
   133  		Goos:   "linux",
   134  		Goarch: "amd64",
   135  		Type:   artifact.Binary,
   136  	})
   137  	assert.Contains(t, Pipe{}.Run(ctx).Error(), `template: {{.Foo}:1: unexpected "}" in operand`)
   138  }
   139  
   140  func TestCreateFileDoesntExist(t *testing.T) {
   141  	folder, err := ioutil.TempDir("", "archivetest")
   142  	assert.NoError(t, err)
   143  	var dist = filepath.Join(folder, "dist")
   144  	assert.NoError(t, os.Mkdir(dist, 0755))
   145  	assert.NoError(t, os.Mkdir(filepath.Join(dist, "mybin"), 0755))
   146  	var ctx = context.New(config.Project{
   147  		Dist:        dist,
   148  		ProjectName: "asd",
   149  		NFPM: config.NFPM{
   150  			Formats: []string{"deb", "rpm"},
   151  			NFPMOverridables: config.NFPMOverridables{
   152  				Files: map[string]string{
   153  					"testdata/testfile.txt": "/var/lib/test/testfile.txt",
   154  				},
   155  			},
   156  		},
   157  	})
   158  	ctx.Git = context.GitInfo{
   159  		CurrentTag: "v1.2.3",
   160  	}
   161  	ctx.Artifacts.Add(artifact.Artifact{
   162  		Name:   "mybin",
   163  		Path:   filepath.Join(dist, "mybin", "mybin"),
   164  		Goos:   "linux",
   165  		Goarch: "amd64",
   166  		Type:   artifact.Binary,
   167  	})
   168  	assert.Contains(t, Pipe{}.Run(ctx).Error(), `dist/mybin/mybin: file does not exist`)
   169  }
   170  
   171  func TestInvalidConfig(t *testing.T) {
   172  	folder, err := ioutil.TempDir("", "archivetest")
   173  	assert.NoError(t, err)
   174  	var dist = filepath.Join(folder, "dist")
   175  	assert.NoError(t, os.Mkdir(dist, 0755))
   176  	assert.NoError(t, os.Mkdir(filepath.Join(dist, "mybin"), 0755))
   177  	var ctx = context.New(config.Project{
   178  		Dist: dist,
   179  		NFPM: config.NFPM{
   180  			Formats: []string{"deb"},
   181  		},
   182  	})
   183  	ctx.Artifacts.Add(artifact.Artifact{
   184  		Name:   "mybin",
   185  		Path:   filepath.Join(dist, "mybin", "mybin"),
   186  		Goos:   "linux",
   187  		Goarch: "amd64",
   188  		Type:   artifact.Binary,
   189  	})
   190  	assert.Contains(t, Pipe{}.Run(ctx).Error(), `invalid nfpm config: package name cannot be empty`)
   191  }
   192  
   193  func TestDefault(t *testing.T) {
   194  	var ctx = &context.Context{
   195  		Config: config.Project{
   196  			NFPM: config.NFPM{},
   197  		},
   198  	}
   199  	assert.NoError(t, Pipe{}.Default(ctx))
   200  	assert.Equal(t, "/usr/local/bin", ctx.Config.NFPM.Bindir)
   201  	assert.Equal(t, defaultNameTemplate, ctx.Config.NFPM.NameTemplate)
   202  }
   203  
   204  func TestDefaultSet(t *testing.T) {
   205  	var ctx = &context.Context{
   206  		Config: config.Project{
   207  			NFPM: config.NFPM{
   208  				Bindir: "/bin",
   209  				NFPMOverridables: config.NFPMOverridables{
   210  					NameTemplate: "foo",
   211  				},
   212  			},
   213  		},
   214  	}
   215  	assert.NoError(t, Pipe{}.Default(ctx))
   216  	assert.Equal(t, "/bin", ctx.Config.NFPM.Bindir)
   217  	assert.Equal(t, "foo", ctx.Config.NFPM.NameTemplate)
   218  }
   219  
   220  func TestOverrides(t *testing.T) {
   221  	var ctx = &context.Context{
   222  		Config: config.Project{
   223  			NFPM: config.NFPM{
   224  				Bindir: "/bin",
   225  				NFPMOverridables: config.NFPMOverridables{
   226  					NameTemplate: "foo",
   227  				},
   228  				Overrides: map[string]config.NFPMOverridables{
   229  					"deb": {
   230  						NameTemplate: "bar",
   231  					},
   232  				},
   233  			},
   234  		},
   235  	}
   236  	assert.NoError(t, Pipe{}.Default(ctx))
   237  	merged, err := mergeOverrides(ctx, "deb")
   238  	assert.NoError(t, err)
   239  	assert.Equal(t, "/bin", ctx.Config.NFPM.Bindir)
   240  	assert.Equal(t, "foo", ctx.Config.NFPM.NameTemplate)
   241  	assert.Equal(t, "bar", ctx.Config.NFPM.Overrides["deb"].NameTemplate)
   242  	assert.Equal(t, "bar", merged.NameTemplate)
   243  }