github.com/droot/goreleaser@v0.66.2-0.20180420030140-c2db5fb17157/pipeline/env/env_test.go (about) 1 package env 2 3 import ( 4 "fmt" 5 "io/ioutil" 6 "os" 7 "testing" 8 9 "github.com/goreleaser/goreleaser/config" 10 "github.com/goreleaser/goreleaser/context" 11 "github.com/goreleaser/goreleaser/internal/testlib" 12 "github.com/stretchr/testify/assert" 13 ) 14 15 func TestDescription(t *testing.T) { 16 assert.NotEmpty(t, Pipe{}.String()) 17 } 18 19 func TestDefault(t *testing.T) { 20 t.Run("empty config", func(tt *testing.T) { 21 ctx := context.New(config.Project{}) 22 assert.NoError(t, Pipe{}.Default(ctx)) 23 assert.Equal(t, "~/.config/goreleaser/github_token", ctx.Config.EnvFiles.GitHubToken) 24 }) 25 t.Run("custom config config", func(tt *testing.T) { 26 cfg := "what" 27 ctx := context.New(config.Project{ 28 EnvFiles: config.EnvFiles{ 29 GitHubToken: cfg, 30 }, 31 }) 32 assert.NoError(t, Pipe{}.Default(ctx)) 33 assert.Equal(t, cfg, ctx.Config.EnvFiles.GitHubToken) 34 }) 35 } 36 37 func TestValidEnv(t *testing.T) { 38 assert.NoError(t, os.Setenv("GITHUB_TOKEN", "asdf")) 39 var ctx = &context.Context{ 40 Config: config.Project{}, 41 } 42 assert.NoError(t, Pipe{}.Run(ctx)) 43 } 44 45 func TestInvalidEnv(t *testing.T) { 46 assert.NoError(t, os.Unsetenv("GITHUB_TOKEN")) 47 var ctx = &context.Context{ 48 Config: config.Project{}, 49 } 50 assert.Error(t, Pipe{}.Run(ctx)) 51 } 52 53 func TestEmptyFileEnv(t *testing.T) { 54 assert.NoError(t, os.Unsetenv("GITHUB_TOKEN")) 55 var ctx = &context.Context{ 56 Config: config.Project{}, 57 } 58 assert.Error(t, Pipe{}.Run(ctx)) 59 } 60 61 func TestEmptyEnvFile(t *testing.T) { 62 assert.NoError(t, os.Unsetenv("GITHUB_TOKEN")) 63 f, err := ioutil.TempFile("", "token") 64 assert.NoError(t, err) 65 assert.NoError(t, os.Chmod(f.Name(), 0377)) 66 var ctx = &context.Context{ 67 Config: config.Project{ 68 EnvFiles: config.EnvFiles{ 69 GitHubToken: f.Name(), 70 }, 71 }, 72 } 73 assert.EqualError(t, Pipe{}.Run(ctx), fmt.Sprintf("failed to load github token: open %s: permission denied", f.Name())) 74 } 75 76 func TestInvalidEnvChecksSkipped(t *testing.T) { 77 assert.NoError(t, os.Unsetenv("GITHUB_TOKEN")) 78 var ctx = &context.Context{ 79 Config: config.Project{}, 80 SkipPublish: true, 81 } 82 testlib.AssertSkipped(t, Pipe{}.Run(ctx)) 83 } 84 85 func TestLoadEnv(t *testing.T) { 86 t.Run("env exists", func(tt *testing.T) { 87 var env = "SUPER_SECRET_ENV" 88 assert.NoError(tt, os.Setenv(env, "1")) 89 v, err := loadEnv(env, "nope") 90 assert.NoError(tt, err) 91 assert.Equal(tt, "1", v) 92 }) 93 t.Run("env file exists", func(tt *testing.T) { 94 var env = "SUPER_SECRET_ENV_NOPE" 95 assert.NoError(tt, os.Unsetenv(env)) 96 f, err := ioutil.TempFile("", "token") 97 assert.NoError(t, err) 98 fmt.Fprintf(f, "123") 99 v, err := loadEnv(env, f.Name()) 100 assert.NoError(tt, err) 101 assert.Equal(tt, "123", v) 102 }) 103 t.Run("env file with an empty line at the end", func(tt *testing.T) { 104 var env = "SUPER_SECRET_ENV_NOPE" 105 assert.NoError(tt, os.Unsetenv(env)) 106 f, err := ioutil.TempFile("", "token") 107 assert.NoError(t, err) 108 fmt.Fprintf(f, "123\n") 109 v, err := loadEnv(env, f.Name()) 110 assert.NoError(tt, err) 111 assert.Equal(tt, "123", v) 112 }) 113 t.Run("env file is not readable", func(tt *testing.T) { 114 var env = "SUPER_SECRET_ENV_NOPE" 115 assert.NoError(tt, os.Unsetenv(env)) 116 f, err := ioutil.TempFile("", "token") 117 assert.NoError(t, err) 118 fmt.Fprintf(f, "123") 119 os.Chmod(f.Name(), 0377) 120 v, err := loadEnv(env, f.Name()) 121 assert.EqualError(tt, err, fmt.Sprintf("open %s: permission denied", f.Name())) 122 assert.Equal(tt, "", v) 123 }) 124 }