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 }