Add config test and update from env
All checks were successful
ci/woodpecker/push/woodpecker Pipeline was successful
All checks were successful
ci/woodpecker/push/woodpecker Pipeline was successful
This commit is contained in:
parent
d8817cc67f
commit
41e82fb21e
26
config.go
26
config.go
@ -3,6 +3,8 @@ package gpaste
|
||||
import (
|
||||
"fmt"
|
||||
"io"
|
||||
"os"
|
||||
"strings"
|
||||
|
||||
"github.com/pelletier/go-toml"
|
||||
)
|
||||
@ -25,5 +27,29 @@ func ServerConfigFromReader(r io.Reader) (*ServerConfig, error) {
|
||||
return nil, fmt.Errorf("error decoding server config: %w", err)
|
||||
}
|
||||
|
||||
if c.Store == nil {
|
||||
c.Store = &ServerStoreConfig{}
|
||||
}
|
||||
|
||||
c.updateFromEnv()
|
||||
|
||||
return &c, nil
|
||||
}
|
||||
|
||||
func (sc *ServerConfig) updateFromEnv() {
|
||||
if value, ok := os.LookupEnv("GPASTE_LOGLEVEL"); ok {
|
||||
sc.LogLevel = strings.ToUpper(value)
|
||||
}
|
||||
|
||||
if value, ok := os.LookupEnv("GPASTE_URL"); ok {
|
||||
sc.URL = value
|
||||
}
|
||||
|
||||
if value, ok := os.LookupEnv("GPASTE_LISTENADDR"); ok {
|
||||
sc.ListenAddr = value
|
||||
}
|
||||
|
||||
if value, ok := os.LookupEnv("GPASTE_STORE_TYPE"); ok {
|
||||
sc.Store.Type = value
|
||||
}
|
||||
}
|
||||
|
84
config_test.go
Normal file
84
config_test.go
Normal file
@ -0,0 +1,84 @@
|
||||
package gpaste_test
|
||||
|
||||
import (
|
||||
"os"
|
||||
"strings"
|
||||
"testing"
|
||||
|
||||
"git.t-juice.club/torjus/gpaste"
|
||||
"github.com/google/go-cmp/cmp"
|
||||
)
|
||||
|
||||
func TestServerConfig(t *testing.T) {
|
||||
t.Run("FromReader", func(t *testing.T) {
|
||||
clearEnv()
|
||||
simpleConfig := `
|
||||
LogLevel = "INFO"
|
||||
URL = "http://paste.example.org"
|
||||
ListenAddr = ":8080"
|
||||
|
||||
[Store]
|
||||
Type = "memory"
|
||||
`
|
||||
expected := &gpaste.ServerConfig{
|
||||
LogLevel: "INFO",
|
||||
URL: "http://paste.example.org",
|
||||
ListenAddr: ":8080",
|
||||
Store: &gpaste.ServerStoreConfig{
|
||||
Type: "memory",
|
||||
},
|
||||
}
|
||||
sr := strings.NewReader(simpleConfig)
|
||||
|
||||
c, err := gpaste.ServerConfigFromReader(sr)
|
||||
if err != nil {
|
||||
t.Fatalf("Error parsing config: %s", err)
|
||||
}
|
||||
|
||||
if !cmp.Equal(c, expected) {
|
||||
t.Errorf("Result does not match: %s", cmp.Diff(c, expected))
|
||||
}
|
||||
})
|
||||
t.Run("FromEnv", func(t *testing.T) {
|
||||
clearEnv()
|
||||
|
||||
var envMap map[string]string = map[string]string{
|
||||
"GPASTE_LOGLEVEL": "DEBUG",
|
||||
"GPASTE_URL": "http://gpaste.example.org",
|
||||
"GPASTE_STORE_TYPE": "memory",
|
||||
"GPASTE_LISTENADDR": ":8000",
|
||||
}
|
||||
expected := &gpaste.ServerConfig{
|
||||
LogLevel: "DEBUG",
|
||||
URL: "http://gpaste.example.org",
|
||||
ListenAddr: ":8000",
|
||||
Store: &gpaste.ServerStoreConfig{
|
||||
Type: "memory",
|
||||
},
|
||||
}
|
||||
|
||||
for k, v := range envMap {
|
||||
os.Setenv(k, v)
|
||||
}
|
||||
|
||||
sr := strings.NewReader("")
|
||||
c, err := gpaste.ServerConfigFromReader(sr)
|
||||
if err != nil {
|
||||
t.Fatalf("Error parsing empty config")
|
||||
}
|
||||
|
||||
if !cmp.Equal(c, expected) {
|
||||
t.Errorf("Result does not match: %s", cmp.Diff(c, expected))
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
func clearEnv() {
|
||||
for _, env := range os.Environ() {
|
||||
result := strings.Split(env, "=")
|
||||
value := result[0]
|
||||
if strings.Contains(value, "GPASTE_") {
|
||||
os.Unsetenv(value)
|
||||
}
|
||||
}
|
||||
}
|
1
go.mod
1
go.mod
@ -7,6 +7,7 @@ require github.com/google/uuid v1.3.0
|
||||
require github.com/go-chi/chi/v5 v5.0.7
|
||||
|
||||
require (
|
||||
github.com/google/go-cmp v0.5.6
|
||||
github.com/pelletier/go-toml v1.9.4
|
||||
github.com/urfave/cli/v2 v2.3.0
|
||||
go.uber.org/zap v1.20.0
|
||||
|
4
go.sum
4
go.sum
@ -9,6 +9,8 @@ github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c
|
||||
github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
|
||||
github.com/go-chi/chi/v5 v5.0.7 h1:rDTPXLDHGATaeHvVlLcR4Qe0zftYethFucbjVQ1PxU8=
|
||||
github.com/go-chi/chi/v5 v5.0.7/go.mod h1:DslCQbL2OYiznFReuXYUmQ2hGd1aDpCnlMNITLSKoi8=
|
||||
github.com/google/go-cmp v0.5.6 h1:BKbKCqvP6I+rmFHt06ZmyQtvB8xAkWdhFyr0ZUNZcxQ=
|
||||
github.com/google/go-cmp v0.5.6/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
|
||||
github.com/google/uuid v1.3.0 h1:t6JiXgmwXMjEs8VusXIJk2BXHsn+wx8BZdTaoZ5fu7I=
|
||||
github.com/google/uuid v1.3.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
|
||||
github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo=
|
||||
@ -65,6 +67,8 @@ golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtn
|
||||
golang.org/x/tools v0.1.5/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk=
|
||||
golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
|
||||
golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
|
||||
golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
|
||||
golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1 h1:go1bK/D/BFZV2I8cIQd1NKEZ+0owSTG1fDTci4IqFcE=
|
||||
golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
|
||||
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
|
||||
gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
|
||||
|
Loading…
Reference in New Issue
Block a user