[chore] refactor test/cliparsing.sh into a go test below internal/config (#1036)
Also adds AddGlobalFlags and AddServerFlags as methods on ConfigState, very useful for testing.
This commit is contained in:
parent
52109776f6
commit
1f256e288b
9 changed files with 222 additions and 126 deletions
|
@ -37,7 +37,6 @@ steps:
|
|||
commands:
|
||||
- apk update --no-cache && apk add git
|
||||
- CGO_ENABLED=0 GTS_DB_TYPE="sqlite" GTS_DB_ADDRESS=":memory:" go test ./...
|
||||
- CGO_ENABLED=0 ./test/cliparsing.sh
|
||||
- CGO_ENABLED=0 ./test/envparsing.sh
|
||||
when:
|
||||
event:
|
||||
|
|
2
go.mod
2
go.mod
|
@ -55,6 +55,7 @@ require (
|
|||
golang.org/x/oauth2 v0.0.0-20221014153046-6fdb5e3db783
|
||||
golang.org/x/text v0.4.0
|
||||
gopkg.in/mcuadros/go-syslog.v2 v2.3.0
|
||||
gopkg.in/yaml.v3 v3.0.1
|
||||
modernc.org/sqlite v1.18.2
|
||||
mvdan.cc/xurls/v2 v2.4.0
|
||||
)
|
||||
|
@ -142,7 +143,6 @@ require (
|
|||
gopkg.in/ini.v1 v1.67.0 // indirect
|
||||
gopkg.in/square/go-jose.v2 v2.6.0 // indirect
|
||||
gopkg.in/yaml.v2 v2.4.0 // indirect
|
||||
gopkg.in/yaml.v3 v3.0.1 // indirect
|
||||
lukechampine.com/uint128 v1.2.0 // indirect
|
||||
modernc.org/cc/v3 v3.38.1 // indirect
|
||||
modernc.org/ccgo/v3 v3.16.9 // indirect
|
||||
|
|
206
internal/config/cliparsing_test.go
Normal file
206
internal/config/cliparsing_test.go
Normal file
|
@ -0,0 +1,206 @@
|
|||
/*
|
||||
GoToSocial
|
||||
Copyright (C) 2022 GoToSocial Authors admin@gotosocial.org
|
||||
|
||||
This program is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU Affero General Public License as published by
|
||||
the Free Software Foundation, either version 3 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU Affero General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU Affero General Public License
|
||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
package config_test
|
||||
|
||||
import (
|
||||
"os"
|
||||
"strings"
|
||||
"testing"
|
||||
|
||||
"github.com/spf13/cobra"
|
||||
"github.com/spf13/viper"
|
||||
"github.com/stretchr/testify/assert"
|
||||
"github.com/superseriousbusiness/gotosocial/internal/config"
|
||||
"gopkg.in/yaml.v3"
|
||||
)
|
||||
|
||||
func expectedKV(kvpairs ...string) map[string]interface{} {
|
||||
ret := make(map[string]interface{}, len(kvpairs)/2)
|
||||
|
||||
for i := 0; i < len(kvpairs)-1; i += 2 {
|
||||
ret[kvpairs[i]] = kvpairs[i+1]
|
||||
}
|
||||
|
||||
return ret
|
||||
}
|
||||
|
||||
func expectedFile(t *testing.T, file string) map[string]interface{} {
|
||||
expectedConfig, err := os.ReadFile(file)
|
||||
if err != nil {
|
||||
t.Errorf("error reading expected config from file %q: %v", file, err)
|
||||
}
|
||||
|
||||
var ret map[string]interface{}
|
||||
if err := yaml.Unmarshal(expectedConfig, &ret); err != nil {
|
||||
t.Errorf("error parsing expected config from file %q: %v", file, err)
|
||||
}
|
||||
|
||||
return ret
|
||||
}
|
||||
|
||||
func TestCLIParsing(t *testing.T) {
|
||||
type testcase struct {
|
||||
cli []string
|
||||
env []string
|
||||
expected map[string]interface{}
|
||||
}
|
||||
|
||||
defaults, _ := config.Defaults.MarshalMap()
|
||||
|
||||
testcases := map[string]testcase{
|
||||
"Make sure defaults are set correctly": {
|
||||
expected: defaults,
|
||||
},
|
||||
|
||||
"Override db-address from default using cli flag": {
|
||||
cli: []string{
|
||||
"--db-address", "some.db.address",
|
||||
},
|
||||
expected: expectedKV(
|
||||
"db-address", "some.db.address",
|
||||
),
|
||||
},
|
||||
|
||||
"Override db-address from default using env var": {
|
||||
env: []string{
|
||||
"GTS_DB_ADDRESS=some.db.address",
|
||||
},
|
||||
expected: expectedKV(
|
||||
"db-address", "some.db.address",
|
||||
),
|
||||
},
|
||||
|
||||
"Override db-address from default using both env var and cli flag. The cli flag should take priority": {
|
||||
cli: []string{
|
||||
"--db-address", "some.db.address",
|
||||
},
|
||||
env: []string{
|
||||
"GTS_DB_ADDRESS=some.other.db.address",
|
||||
},
|
||||
expected: expectedKV(
|
||||
"db-address", "some.db.address",
|
||||
),
|
||||
},
|
||||
|
||||
"Loading a config file via env var": {
|
||||
env: []string{
|
||||
"GTS_CONFIG_PATH=testdata/test.yaml",
|
||||
},
|
||||
expected: expectedFile(t, "testdata/test.yaml"),
|
||||
},
|
||||
|
||||
"Loading a config file via cli flag": {
|
||||
cli: []string{
|
||||
"--config-path", "testdata/test.yaml",
|
||||
},
|
||||
expected: expectedFile(t, "testdata/test.yaml"),
|
||||
},
|
||||
|
||||
"Loading a config file and overriding one of the variables with a cli flag": {
|
||||
cli: []string{
|
||||
"--config-path", "testdata/test.yaml",
|
||||
"--account-domain", "my.test.domain",
|
||||
},
|
||||
// only checking our overridden one and one non-default from the config file here instead of including all of test.yaml
|
||||
expected: expectedKV(
|
||||
"account-domain", "my.test.domain",
|
||||
"host", "gts.example.org",
|
||||
),
|
||||
},
|
||||
|
||||
"Loading a config file and overriding one of the variables with an env var": {
|
||||
cli: []string{
|
||||
"--config-path", "testdata/test.yaml",
|
||||
},
|
||||
env: []string{
|
||||
"GTS_ACCOUNT_DOMAIN=my.test.domain",
|
||||
},
|
||||
// only checking our overridden one and one non-default from the config file here instead of including all of test.yaml
|
||||
expected: expectedKV(
|
||||
"account-domain", "my.test.domain",
|
||||
"host", "gts.example.org",
|
||||
),
|
||||
},
|
||||
|
||||
"Loading a config file and overriding one of the variables with both an env var and a cli flag. The cli flag should have priority": {
|
||||
cli: []string{
|
||||
"--config-path", "testdata/test.yaml",
|
||||
"--account-domain", "my.test.domain",
|
||||
},
|
||||
env: []string{
|
||||
"GTS_ACCOUNT_DOMAIN=my.wrong.test.domain",
|
||||
},
|
||||
// only checking our overridden one and one non-default from the config file here instead of including all of test.yaml
|
||||
expected: expectedKV(
|
||||
"account-domain", "my.test.domain",
|
||||
"host", "gts.example.org",
|
||||
),
|
||||
},
|
||||
|
||||
"Loading a config file from json": {
|
||||
cli: []string{
|
||||
"--config-path", "testdata/test.json",
|
||||
},
|
||||
expected: expectedFile(t, "testdata/test.json"),
|
||||
},
|
||||
|
||||
"Loading a partial config file. Default values should be used apart from those set in the config file": {
|
||||
cli: []string{
|
||||
"--config-path", "testdata/test2.yaml",
|
||||
},
|
||||
expected: expectedKV(
|
||||
"log-level", "trace",
|
||||
"account-domain", "peepee.poopoo",
|
||||
"application-name", "gotosocial",
|
||||
),
|
||||
},
|
||||
}
|
||||
|
||||
for desc, data := range testcases {
|
||||
t.Run(desc, func(t *testing.T) {
|
||||
os.Clearenv()
|
||||
|
||||
if data.env != nil {
|
||||
for _, s := range data.env {
|
||||
kv := strings.SplitN(s, "=", 2)
|
||||
os.Setenv(kv[0], kv[1])
|
||||
}
|
||||
}
|
||||
|
||||
state := config.NewState()
|
||||
cmd := cobra.Command{}
|
||||
state.AddGlobalFlags(&cmd)
|
||||
state.AddServerFlags(&cmd)
|
||||
|
||||
if data.cli != nil {
|
||||
cmd.ParseFlags(data.cli)
|
||||
}
|
||||
|
||||
state.BindFlags(&cmd)
|
||||
|
||||
state.Reload()
|
||||
|
||||
state.Viper(func(v *viper.Viper) {
|
||||
for k, ev := range data.expected {
|
||||
assert.EqualValues(t, ev, v.Get(k))
|
||||
}
|
||||
})
|
||||
})
|
||||
}
|
||||
}
|
|
@ -26,7 +26,12 @@ import (
|
|||
|
||||
// AddGlobalFlags will attach global configuration flags to given cobra command, loading defaults from global config.
|
||||
func AddGlobalFlags(cmd *cobra.Command) {
|
||||
Config(func(cfg *Configuration) {
|
||||
global.AddGlobalFlags(cmd)
|
||||
}
|
||||
|
||||
// AddGlobalFlags will attach global configuration flags to given cobra command, loading defaults from State.
|
||||
func (s *ConfigState) AddGlobalFlags(cmd *cobra.Command) {
|
||||
s.Config(func(cfg *Configuration) {
|
||||
// General
|
||||
cmd.PersistentFlags().String(ApplicationNameFlag(), cfg.ApplicationName, fieldtag("ApplicationName", "usage"))
|
||||
cmd.PersistentFlags().String(LandingPageUserFlag(), cfg.LandingPageUser, fieldtag("LandingPageUser", "usage"))
|
||||
|
@ -51,7 +56,12 @@ func AddGlobalFlags(cmd *cobra.Command) {
|
|||
|
||||
// AddServerFlags will attach server configuration flags to given cobra command, loading defaults from global config.
|
||||
func AddServerFlags(cmd *cobra.Command) {
|
||||
Config(func(cfg *Configuration) {
|
||||
global.AddServerFlags(cmd)
|
||||
}
|
||||
|
||||
// AddServerFlags will attach server configuration flags to given cobra command, loading defaults from State.
|
||||
func (s *ConfigState) AddServerFlags(cmd *cobra.Command) {
|
||||
s.Config(func(cfg *Configuration) {
|
||||
// Router
|
||||
cmd.PersistentFlags().String(BindAddressFlag(), cfg.BindAddress, fieldtag("BindAddress", "usage"))
|
||||
cmd.PersistentFlags().Int(PortFlag(), cfg.Port, fieldtag("Port", "usage"))
|
||||
|
|
|
@ -5,7 +5,7 @@
|
|||
"accounts-registration-open": true,
|
||||
"application-name": "gotosocial",
|
||||
"bind-address": "0.0.0.0",
|
||||
"config-path": "./test/test.yaml",
|
||||
"config-path": "testdata/test.json",
|
||||
"db-address": "127.0.0.1",
|
||||
"db-database": "postgres",
|
||||
"db-password": "postgres",
|
||||
|
@ -14,7 +14,6 @@
|
|||
"db-tls-mode": "disable",
|
||||
"db-type": "postgres",
|
||||
"db-user": "postgres",
|
||||
"help": false,
|
||||
"host": "gts.example.org",
|
||||
"letsencrypt-cert-dir": "/gotosocial/storage/certs",
|
||||
"letsencrypt-email-address": "",
|
|
@ -1,118 +0,0 @@
|
|||
#!/bin/sh
|
||||
|
||||
set -e
|
||||
|
||||
echo "STARTING CLI TESTS"
|
||||
|
||||
echo "TEST_1 Make sure defaults are set correctly."
|
||||
TEST_1_EXPECTED='{"account-domain":"","accounts-allow-custom-css":false,"accounts-approval-required":true,"accounts-reason-required":true,"accounts-registration-open":true,"advanced-cookies-samesite":"lax","advanced-rate-limit-requests":1000,"application-name":"gotosocial","bind-address":"0.0.0.0","config-path":"","db-address":"","db-database":"gotosocial","db-password":"","db-port":5432,"db-tls-ca-cert":"","db-tls-mode":"disable","db-type":"postgres","db-user":"","email":"","host":"","instance-deliver-to-shared-inboxes":true,"instance-expose-peers":false,"instance-expose-public-timeline":false,"instance-expose-suspended":false,"landing-page-user":"","letsencrypt-cert-dir":"/gotosocial/storage/certs","letsencrypt-email-address":"","letsencrypt-enabled":false,"letsencrypt-port":80,"log-db-queries":false,"log-level":"info","media-description-max-chars":500,"media-description-min-chars":0,"media-emoji-local-max-size":51200,"media-emoji-remote-max-size":102400,"media-image-max-size":10485760,"media-remote-cache-days":30,"media-video-max-size":41943040,"oidc-client-id":"","oidc-client-secret":"","oidc-enabled":false,"oidc-idp-name":"","oidc-issuer":"","oidc-scopes":["openid","profile","email","groups"],"oidc-skip-verification":false,"password":"","path":"","port":8080,"protocol":"https","smtp-from":"GoToSocial","smtp-host":"","smtp-password":"","smtp-port":0,"smtp-username":"","software-version":"","statuses-cw-max-chars":100,"statuses-max-chars":5000,"statuses-media-max-files":6,"statuses-poll-max-options":6,"statuses-poll-option-max-chars":50,"storage-backend":"local","storage-local-base-path":"/gotosocial/storage","storage-s3-access-key":"","storage-s3-bucket":"","storage-s3-endpoint":"","storage-s3-proxy":false,"storage-s3-secret-key":"","storage-s3-use-ssl":true,"syslog-address":"localhost:514","syslog-enabled":false,"syslog-protocol":"udp","trusted-proxies":["127.0.0.1/32","::1"],"username":"","web-asset-base-dir":"./web/assets/","web-template-base-dir":"./web/template/"}'
|
||||
TEST_1="$(go run ./cmd/gotosocial/... debug config)"
|
||||
if [ "${TEST_1}" != "${TEST_1_EXPECTED}" ]; then
|
||||
echo "TEST_1 not equal TEST_1_EXPECTED"
|
||||
echo "${TEST_1}"
|
||||
exit 1
|
||||
else
|
||||
echo "TEST_1 OK"
|
||||
fi
|
||||
|
||||
echo "TEST_2 Override db-address from default using cli flag."
|
||||
TEST_2_EXPECTED='{"account-domain":"","accounts-allow-custom-css":false,"accounts-approval-required":true,"accounts-reason-required":true,"accounts-registration-open":true,"advanced-cookies-samesite":"lax","advanced-rate-limit-requests":1000,"application-name":"gotosocial","bind-address":"0.0.0.0","config-path":"","db-address":"some.db.address","db-database":"gotosocial","db-password":"","db-port":5432,"db-tls-ca-cert":"","db-tls-mode":"disable","db-type":"postgres","db-user":"","email":"","host":"","instance-deliver-to-shared-inboxes":true,"instance-expose-peers":false,"instance-expose-public-timeline":false,"instance-expose-suspended":false,"landing-page-user":"","letsencrypt-cert-dir":"/gotosocial/storage/certs","letsencrypt-email-address":"","letsencrypt-enabled":false,"letsencrypt-port":80,"log-db-queries":false,"log-level":"info","media-description-max-chars":500,"media-description-min-chars":0,"media-emoji-local-max-size":51200,"media-emoji-remote-max-size":102400,"media-image-max-size":10485760,"media-remote-cache-days":30,"media-video-max-size":41943040,"oidc-client-id":"","oidc-client-secret":"","oidc-enabled":false,"oidc-idp-name":"","oidc-issuer":"","oidc-scopes":["openid","profile","email","groups"],"oidc-skip-verification":false,"password":"","path":"","port":8080,"protocol":"https","smtp-from":"GoToSocial","smtp-host":"","smtp-password":"","smtp-port":0,"smtp-username":"","software-version":"","statuses-cw-max-chars":100,"statuses-max-chars":5000,"statuses-media-max-files":6,"statuses-poll-max-options":6,"statuses-poll-option-max-chars":50,"storage-backend":"local","storage-local-base-path":"/gotosocial/storage","storage-s3-access-key":"","storage-s3-bucket":"","storage-s3-endpoint":"","storage-s3-proxy":false,"storage-s3-secret-key":"","storage-s3-use-ssl":true,"syslog-address":"localhost:514","syslog-enabled":false,"syslog-protocol":"udp","trusted-proxies":["127.0.0.1/32","::1"],"username":"","web-asset-base-dir":"./web/assets/","web-template-base-dir":"./web/template/"}'
|
||||
TEST_2="$(go run ./cmd/gotosocial/... --db-address some.db.address debug config)"
|
||||
if [ "${TEST_2}" != "${TEST_2_EXPECTED}" ]; then
|
||||
echo "TEST_2 not equal TEST_2_EXPECTED"
|
||||
exit 1
|
||||
else
|
||||
echo "TEST_2 OK"
|
||||
fi
|
||||
|
||||
echo "TEST_3 Override db-address from default using env var."
|
||||
TEST_3_EXPECTED='{"account-domain":"","accounts-allow-custom-css":false,"accounts-approval-required":true,"accounts-reason-required":true,"accounts-registration-open":true,"advanced-cookies-samesite":"lax","advanced-rate-limit-requests":1000,"application-name":"gotosocial","bind-address":"0.0.0.0","config-path":"","db-address":"some.db.address","db-database":"gotosocial","db-password":"","db-port":5432,"db-tls-ca-cert":"","db-tls-mode":"disable","db-type":"postgres","db-user":"","email":"","host":"","instance-deliver-to-shared-inboxes":true,"instance-expose-peers":false,"instance-expose-public-timeline":false,"instance-expose-suspended":false,"landing-page-user":"","letsencrypt-cert-dir":"/gotosocial/storage/certs","letsencrypt-email-address":"","letsencrypt-enabled":false,"letsencrypt-port":80,"log-db-queries":false,"log-level":"info","media-description-max-chars":500,"media-description-min-chars":0,"media-emoji-local-max-size":51200,"media-emoji-remote-max-size":102400,"media-image-max-size":10485760,"media-remote-cache-days":30,"media-video-max-size":41943040,"oidc-client-id":"","oidc-client-secret":"","oidc-enabled":false,"oidc-idp-name":"","oidc-issuer":"","oidc-scopes":["openid","profile","email","groups"],"oidc-skip-verification":false,"password":"","path":"","port":8080,"protocol":"https","smtp-from":"GoToSocial","smtp-host":"","smtp-password":"","smtp-port":0,"smtp-username":"","software-version":"","statuses-cw-max-chars":100,"statuses-max-chars":5000,"statuses-media-max-files":6,"statuses-poll-max-options":6,"statuses-poll-option-max-chars":50,"storage-backend":"local","storage-local-base-path":"/gotosocial/storage","storage-s3-access-key":"","storage-s3-bucket":"","storage-s3-endpoint":"","storage-s3-proxy":false,"storage-s3-secret-key":"","storage-s3-use-ssl":true,"syslog-address":"localhost:514","syslog-enabled":false,"syslog-protocol":"udp","trusted-proxies":["127.0.0.1/32","::1"],"username":"","web-asset-base-dir":"./web/assets/","web-template-base-dir":"./web/template/"}'
|
||||
TEST_3="$(GTS_DB_ADDRESS=some.db.address go run ./cmd/gotosocial/... debug config)"
|
||||
if [ "${TEST_3}" != "${TEST_3_EXPECTED}" ]; then
|
||||
echo "TEST_3 not equal TEST_3_EXPECTED"
|
||||
exit 1
|
||||
else
|
||||
echo "TEST_3 OK"
|
||||
fi
|
||||
|
||||
echo "TEST_4 Override db-address from default using both env var and cli flag. The cli flag should take priority."
|
||||
TEST_4_EXPECTED='{"account-domain":"","accounts-allow-custom-css":false,"accounts-approval-required":true,"accounts-reason-required":true,"accounts-registration-open":true,"advanced-cookies-samesite":"lax","advanced-rate-limit-requests":1000,"application-name":"gotosocial","bind-address":"0.0.0.0","config-path":"","db-address":"some.other.db.address","db-database":"gotosocial","db-password":"","db-port":5432,"db-tls-ca-cert":"","db-tls-mode":"disable","db-type":"postgres","db-user":"","email":"","host":"","instance-deliver-to-shared-inboxes":true,"instance-expose-peers":false,"instance-expose-public-timeline":false,"instance-expose-suspended":false,"landing-page-user":"","letsencrypt-cert-dir":"/gotosocial/storage/certs","letsencrypt-email-address":"","letsencrypt-enabled":false,"letsencrypt-port":80,"log-db-queries":false,"log-level":"info","media-description-max-chars":500,"media-description-min-chars":0,"media-emoji-local-max-size":51200,"media-emoji-remote-max-size":102400,"media-image-max-size":10485760,"media-remote-cache-days":30,"media-video-max-size":41943040,"oidc-client-id":"","oidc-client-secret":"","oidc-enabled":false,"oidc-idp-name":"","oidc-issuer":"","oidc-scopes":["openid","profile","email","groups"],"oidc-skip-verification":false,"password":"","path":"","port":8080,"protocol":"https","smtp-from":"GoToSocial","smtp-host":"","smtp-password":"","smtp-port":0,"smtp-username":"","software-version":"","statuses-cw-max-chars":100,"statuses-max-chars":5000,"statuses-media-max-files":6,"statuses-poll-max-options":6,"statuses-poll-option-max-chars":50,"storage-backend":"local","storage-local-base-path":"/gotosocial/storage","storage-s3-access-key":"","storage-s3-bucket":"","storage-s3-endpoint":"","storage-s3-proxy":false,"storage-s3-secret-key":"","storage-s3-use-ssl":true,"syslog-address":"localhost:514","syslog-enabled":false,"syslog-protocol":"udp","trusted-proxies":["127.0.0.1/32","::1"],"username":"","web-asset-base-dir":"./web/assets/","web-template-base-dir":"./web/template/"}'
|
||||
TEST_4="$(GTS_DB_ADDRESS=some.db.address go run ./cmd/gotosocial/... --db-address some.other.db.address debug config)"
|
||||
if [ "${TEST_4}" != "${TEST_4_EXPECTED}" ]; then
|
||||
echo "TEST_4 not equal TEST_4_EXPECTED"
|
||||
exit 1
|
||||
else
|
||||
echo "TEST_4 OK"
|
||||
fi
|
||||
|
||||
echo "TEST_5 Test loading a config file by passing an env var."
|
||||
TEST_5_EXPECTED='{"account-domain":"example.org","accounts-allow-custom-css":false,"accounts-approval-required":true,"accounts-reason-required":true,"accounts-registration-open":true,"advanced-cookies-samesite":"lax","advanced-rate-limit-requests":1000,"application-name":"gotosocial","bind-address":"0.0.0.0","config-path":"./test/test.yaml","db-address":"127.0.0.1","db-database":"postgres","db-password":"postgres","db-port":5432,"db-tls-ca-cert":"","db-tls-mode":"disable","db-type":"postgres","db-user":"postgres","email":"","host":"gts.example.org","instance-deliver-to-shared-inboxes":true,"instance-expose-peers":false,"instance-expose-public-timeline":false,"instance-expose-suspended":false,"landing-page-user":"","letsencrypt-cert-dir":"/gotosocial/storage/certs","letsencrypt-email-address":"","letsencrypt-enabled":true,"letsencrypt-port":80,"log-db-queries":false,"log-level":"info","media-description-max-chars":500,"media-description-min-chars":0,"media-emoji-local-max-size":51200,"media-emoji-remote-max-size":102400,"media-image-max-size":10485760,"media-remote-cache-days":30,"media-video-max-size":41943040,"oidc-client-id":"","oidc-client-secret":"","oidc-enabled":false,"oidc-idp-name":"","oidc-issuer":"","oidc-scopes":["openid","email","profile","groups"],"oidc-skip-verification":false,"password":"","path":"","port":8080,"protocol":"https","smtp-from":"someone@example.org","smtp-host":"verycoolemailhost.mail","smtp-password":"smtp-password","smtp-port":8888,"smtp-username":"smtp-username","software-version":"","statuses-cw-max-chars":100,"statuses-max-chars":5000,"statuses-media-max-files":6,"statuses-poll-max-options":6,"statuses-poll-option-max-chars":50,"storage-backend":"local","storage-local-base-path":"/gotosocial/storage","storage-s3-access-key":"","storage-s3-bucket":"","storage-s3-endpoint":"","storage-s3-proxy":false,"storage-s3-secret-key":"","storage-s3-use-ssl":true,"syslog-address":"localhost:514","syslog-enabled":false,"syslog-protocol":"udp","trusted-proxies":["127.0.0.1/32","0.0.0.0/0"],"username":"","web-asset-base-dir":"./web/assets/","web-template-base-dir":"./web/template/"}'
|
||||
TEST_5="$(GTS_CONFIG_PATH=./test/test.yaml go run ./cmd/gotosocial/... debug config)"
|
||||
if [ "${TEST_5}" != "${TEST_5_EXPECTED}" ]; then
|
||||
echo "TEST_5 not equal TEST_5_EXPECTED"
|
||||
exit 1
|
||||
else
|
||||
echo "TEST_5 OK"
|
||||
fi
|
||||
|
||||
echo "TEST_6 Test loading a config file by passing cli flag."
|
||||
TEST_6_EXPECTED='{"account-domain":"example.org","accounts-allow-custom-css":false,"accounts-approval-required":true,"accounts-reason-required":true,"accounts-registration-open":true,"advanced-cookies-samesite":"lax","advanced-rate-limit-requests":1000,"application-name":"gotosocial","bind-address":"0.0.0.0","config-path":"./test/test.yaml","db-address":"127.0.0.1","db-database":"postgres","db-password":"postgres","db-port":5432,"db-tls-ca-cert":"","db-tls-mode":"disable","db-type":"postgres","db-user":"postgres","email":"","host":"gts.example.org","instance-deliver-to-shared-inboxes":true,"instance-expose-peers":false,"instance-expose-public-timeline":false,"instance-expose-suspended":false,"landing-page-user":"","letsencrypt-cert-dir":"/gotosocial/storage/certs","letsencrypt-email-address":"","letsencrypt-enabled":true,"letsencrypt-port":80,"log-db-queries":false,"log-level":"info","media-description-max-chars":500,"media-description-min-chars":0,"media-emoji-local-max-size":51200,"media-emoji-remote-max-size":102400,"media-image-max-size":10485760,"media-remote-cache-days":30,"media-video-max-size":41943040,"oidc-client-id":"","oidc-client-secret":"","oidc-enabled":false,"oidc-idp-name":"","oidc-issuer":"","oidc-scopes":["openid","email","profile","groups"],"oidc-skip-verification":false,"password":"","path":"","port":8080,"protocol":"https","smtp-from":"someone@example.org","smtp-host":"verycoolemailhost.mail","smtp-password":"smtp-password","smtp-port":8888,"smtp-username":"smtp-username","software-version":"","statuses-cw-max-chars":100,"statuses-max-chars":5000,"statuses-media-max-files":6,"statuses-poll-max-options":6,"statuses-poll-option-max-chars":50,"storage-backend":"local","storage-local-base-path":"/gotosocial/storage","storage-s3-access-key":"","storage-s3-bucket":"","storage-s3-endpoint":"","storage-s3-proxy":false,"storage-s3-secret-key":"","storage-s3-use-ssl":true,"syslog-address":"localhost:514","syslog-enabled":false,"syslog-protocol":"udp","trusted-proxies":["127.0.0.1/32","0.0.0.0/0"],"username":"","web-asset-base-dir":"./web/assets/","web-template-base-dir":"./web/template/"}'
|
||||
TEST_6="$(go run ./cmd/gotosocial/... --config-path ./test/test.yaml debug config)"
|
||||
if [ "${TEST_6}" != "${TEST_6_EXPECTED}" ]; then
|
||||
echo "TEST_6 not equal TEST_6_EXPECTED"
|
||||
exit 1
|
||||
else
|
||||
echo "TEST_6 OK"
|
||||
fi
|
||||
|
||||
echo "TEST_7 Test loading a config file and overriding one of the variables with a cli flag."
|
||||
TEST_7_EXPECTED='{"account-domain":"","accounts-allow-custom-css":false,"accounts-approval-required":true,"accounts-reason-required":true,"accounts-registration-open":true,"advanced-cookies-samesite":"lax","advanced-rate-limit-requests":1000,"application-name":"gotosocial","bind-address":"0.0.0.0","config-path":"./test/test.yaml","db-address":"127.0.0.1","db-database":"postgres","db-password":"postgres","db-port":5432,"db-tls-ca-cert":"","db-tls-mode":"disable","db-type":"postgres","db-user":"postgres","email":"","host":"gts.example.org","instance-deliver-to-shared-inboxes":true,"instance-expose-peers":false,"instance-expose-public-timeline":false,"instance-expose-suspended":false,"landing-page-user":"","letsencrypt-cert-dir":"/gotosocial/storage/certs","letsencrypt-email-address":"","letsencrypt-enabled":true,"letsencrypt-port":80,"log-db-queries":false,"log-level":"info","media-description-max-chars":500,"media-description-min-chars":0,"media-emoji-local-max-size":51200,"media-emoji-remote-max-size":102400,"media-image-max-size":10485760,"media-remote-cache-days":30,"media-video-max-size":41943040,"oidc-client-id":"","oidc-client-secret":"","oidc-enabled":false,"oidc-idp-name":"","oidc-issuer":"","oidc-scopes":["openid","email","profile","groups"],"oidc-skip-verification":false,"password":"","path":"","port":8080,"protocol":"https","smtp-from":"someone@example.org","smtp-host":"verycoolemailhost.mail","smtp-password":"smtp-password","smtp-port":8888,"smtp-username":"smtp-username","software-version":"","statuses-cw-max-chars":100,"statuses-max-chars":5000,"statuses-media-max-files":6,"statuses-poll-max-options":6,"statuses-poll-option-max-chars":50,"storage-backend":"local","storage-local-base-path":"/gotosocial/storage","storage-s3-access-key":"","storage-s3-bucket":"","storage-s3-endpoint":"","storage-s3-proxy":false,"storage-s3-secret-key":"","storage-s3-use-ssl":true,"syslog-address":"localhost:514","syslog-enabled":false,"syslog-protocol":"udp","trusted-proxies":["127.0.0.1/32","0.0.0.0/0"],"username":"","web-asset-base-dir":"./web/assets/","web-template-base-dir":"./web/template/"}'
|
||||
TEST_7="$(go run ./cmd/gotosocial/... --config-path ./test/test.yaml --account-domain '' debug config)"
|
||||
if [ "${TEST_7}" != "${TEST_7_EXPECTED}" ]; then
|
||||
echo "TEST_7 not equal TEST_7_EXPECTED"
|
||||
exit 1
|
||||
else
|
||||
echo "TEST_7 OK"
|
||||
fi
|
||||
|
||||
echo "TEST_8 Test loading a config file and overriding one of the variables with an env var."
|
||||
TEST_8_EXPECTED='{"account-domain":"peepee","accounts-allow-custom-css":false,"accounts-approval-required":true,"accounts-reason-required":true,"accounts-registration-open":true,"advanced-cookies-samesite":"lax","advanced-rate-limit-requests":1000,"application-name":"gotosocial","bind-address":"0.0.0.0","config-path":"./test/test.yaml","db-address":"127.0.0.1","db-database":"postgres","db-password":"postgres","db-port":5432,"db-tls-ca-cert":"","db-tls-mode":"disable","db-type":"postgres","db-user":"postgres","email":"","host":"gts.example.org","instance-deliver-to-shared-inboxes":true,"instance-expose-peers":false,"instance-expose-public-timeline":false,"instance-expose-suspended":false,"landing-page-user":"","letsencrypt-cert-dir":"/gotosocial/storage/certs","letsencrypt-email-address":"","letsencrypt-enabled":true,"letsencrypt-port":80,"log-db-queries":false,"log-level":"info","media-description-max-chars":500,"media-description-min-chars":0,"media-emoji-local-max-size":51200,"media-emoji-remote-max-size":102400,"media-image-max-size":10485760,"media-remote-cache-days":30,"media-video-max-size":41943040,"oidc-client-id":"","oidc-client-secret":"","oidc-enabled":false,"oidc-idp-name":"","oidc-issuer":"","oidc-scopes":["openid","email","profile","groups"],"oidc-skip-verification":false,"password":"","path":"","port":8080,"protocol":"https","smtp-from":"someone@example.org","smtp-host":"verycoolemailhost.mail","smtp-password":"smtp-password","smtp-port":8888,"smtp-username":"smtp-username","software-version":"","statuses-cw-max-chars":100,"statuses-max-chars":5000,"statuses-media-max-files":6,"statuses-poll-max-options":6,"statuses-poll-option-max-chars":50,"storage-backend":"local","storage-local-base-path":"/gotosocial/storage","storage-s3-access-key":"","storage-s3-bucket":"","storage-s3-endpoint":"","storage-s3-proxy":false,"storage-s3-secret-key":"","storage-s3-use-ssl":true,"syslog-address":"localhost:514","syslog-enabled":false,"syslog-protocol":"udp","trusted-proxies":["127.0.0.1/32","0.0.0.0/0"],"username":"","web-asset-base-dir":"./web/assets/","web-template-base-dir":"./web/template/"}'
|
||||
TEST_8="$(GTS_ACCOUNT_DOMAIN='peepee' go run ./cmd/gotosocial/... --config-path ./test/test.yaml debug config)"
|
||||
if [ "${TEST_8}" != "${TEST_8_EXPECTED}" ]; then
|
||||
echo "TEST_8 not equal TEST_8_EXPECTED"
|
||||
exit 1
|
||||
else
|
||||
echo "TEST_8 OK"
|
||||
fi
|
||||
|
||||
echo "TEST_9 Test loading a config file and overriding one of the variables with both an env var and a cli flag. The cli flag should have priority."
|
||||
TEST_9_EXPECTED='{"account-domain":"","accounts-allow-custom-css":false,"accounts-approval-required":true,"accounts-reason-required":true,"accounts-registration-open":true,"advanced-cookies-samesite":"lax","advanced-rate-limit-requests":1000,"application-name":"gotosocial","bind-address":"0.0.0.0","config-path":"./test/test.yaml","db-address":"127.0.0.1","db-database":"postgres","db-password":"postgres","db-port":5432,"db-tls-ca-cert":"","db-tls-mode":"disable","db-type":"postgres","db-user":"postgres","email":"","host":"gts.example.org","instance-deliver-to-shared-inboxes":true,"instance-expose-peers":false,"instance-expose-public-timeline":false,"instance-expose-suspended":false,"landing-page-user":"","letsencrypt-cert-dir":"/gotosocial/storage/certs","letsencrypt-email-address":"","letsencrypt-enabled":true,"letsencrypt-port":80,"log-db-queries":false,"log-level":"info","media-description-max-chars":500,"media-description-min-chars":0,"media-emoji-local-max-size":51200,"media-emoji-remote-max-size":102400,"media-image-max-size":10485760,"media-remote-cache-days":30,"media-video-max-size":41943040,"oidc-client-id":"","oidc-client-secret":"","oidc-enabled":false,"oidc-idp-name":"","oidc-issuer":"","oidc-scopes":["openid","email","profile","groups"],"oidc-skip-verification":false,"password":"","path":"","port":8080,"protocol":"https","smtp-from":"someone@example.org","smtp-host":"verycoolemailhost.mail","smtp-password":"smtp-password","smtp-port":8888,"smtp-username":"smtp-username","software-version":"","statuses-cw-max-chars":100,"statuses-max-chars":5000,"statuses-media-max-files":6,"statuses-poll-max-options":6,"statuses-poll-option-max-chars":50,"storage-backend":"local","storage-local-base-path":"/gotosocial/storage","storage-s3-access-key":"","storage-s3-bucket":"","storage-s3-endpoint":"","storage-s3-proxy":false,"storage-s3-secret-key":"","storage-s3-use-ssl":true,"syslog-address":"localhost:514","syslog-enabled":false,"syslog-protocol":"udp","trusted-proxies":["127.0.0.1/32","0.0.0.0/0"],"username":"","web-asset-base-dir":"./web/assets/","web-template-base-dir":"./web/template/"}'
|
||||
TEST_9="$(GTS_ACCOUNT_DOMAIN='peepee' go run ./cmd/gotosocial/... --config-path ./test/test.yaml --account-domain '' debug config)"
|
||||
if [ "${TEST_9}" != "${TEST_9_EXPECTED}" ]; then
|
||||
echo "TEST_9 not equal TEST_9_EXPECTED"
|
||||
exit 1
|
||||
else
|
||||
echo "TEST_9 OK"
|
||||
fi
|
||||
|
||||
echo "TEST_10 Test loading a config file from json."
|
||||
TEST_10_EXPECTED='{"account-domain":"example.org","accounts-allow-custom-css":false,"accounts-approval-required":true,"accounts-reason-required":true,"accounts-registration-open":true,"advanced-cookies-samesite":"lax","advanced-rate-limit-requests":1000,"application-name":"gotosocial","bind-address":"0.0.0.0","config-path":"./test/test.json","db-address":"127.0.0.1","db-database":"postgres","db-password":"postgres","db-port":5432,"db-tls-ca-cert":"","db-tls-mode":"disable","db-type":"postgres","db-user":"postgres","email":"","host":"gts.example.org","instance-deliver-to-shared-inboxes":true,"instance-expose-peers":false,"instance-expose-public-timeline":false,"instance-expose-suspended":false,"landing-page-user":"","letsencrypt-cert-dir":"/gotosocial/storage/certs","letsencrypt-email-address":"","letsencrypt-enabled":true,"letsencrypt-port":80,"log-db-queries":false,"log-level":"info","media-description-max-chars":500,"media-description-min-chars":0,"media-emoji-local-max-size":51200,"media-emoji-remote-max-size":102400,"media-image-max-size":10485760,"media-remote-cache-days":30,"media-video-max-size":41943040,"oidc-client-id":"","oidc-client-secret":"","oidc-enabled":false,"oidc-idp-name":"","oidc-issuer":"","oidc-scopes":["openid","email","profile","groups"],"oidc-skip-verification":false,"password":"","path":"","port":8080,"protocol":"https","smtp-from":"someone@example.org","smtp-host":"verycoolemailhost.mail","smtp-password":"smtp-password","smtp-port":8888,"smtp-username":"smtp-username","software-version":"","statuses-cw-max-chars":100,"statuses-max-chars":5000,"statuses-media-max-files":6,"statuses-poll-max-options":6,"statuses-poll-option-max-chars":50,"storage-backend":"local","storage-local-base-path":"/gotosocial/storage","storage-s3-access-key":"","storage-s3-bucket":"","storage-s3-endpoint":"","storage-s3-proxy":false,"storage-s3-secret-key":"","storage-s3-use-ssl":true,"syslog-address":"localhost:514","syslog-enabled":false,"syslog-protocol":"udp","trusted-proxies":["127.0.0.1/32","0.0.0.0/0"],"username":"","web-asset-base-dir":"./web/assets/","web-template-base-dir":"./web/template/"}'
|
||||
TEST_10="$(go run ./cmd/gotosocial/... --config-path ./test/test.json debug config)"
|
||||
if [ "${TEST_10}" != "${TEST_10_EXPECTED}" ]; then
|
||||
echo "TEST_10 not equal TEST_10_EXPECTED"
|
||||
exit 1
|
||||
else
|
||||
echo "TEST_10 OK"
|
||||
fi
|
||||
|
||||
echo "TEST_11 Test loading a partial config file. Default values should be used apart from those set in the config file."
|
||||
TEST_11_EXPECTED='{"account-domain":"peepee.poopoo","accounts-allow-custom-css":false,"accounts-approval-required":true,"accounts-reason-required":true,"accounts-registration-open":true,"advanced-cookies-samesite":"lax","advanced-rate-limit-requests":1000,"application-name":"gotosocial","bind-address":"0.0.0.0","config-path":"./test/test2.yaml","db-address":"","db-database":"gotosocial","db-password":"","db-port":5432,"db-tls-ca-cert":"","db-tls-mode":"disable","db-type":"postgres","db-user":"","email":"","host":"","instance-deliver-to-shared-inboxes":true,"instance-expose-peers":false,"instance-expose-public-timeline":false,"instance-expose-suspended":false,"landing-page-user":"","letsencrypt-cert-dir":"/gotosocial/storage/certs","letsencrypt-email-address":"","letsencrypt-enabled":false,"letsencrypt-port":80,"log-db-queries":false,"log-level":"trace","media-description-max-chars":500,"media-description-min-chars":0,"media-emoji-local-max-size":51200,"media-emoji-remote-max-size":102400,"media-image-max-size":10485760,"media-remote-cache-days":30,"media-video-max-size":41943040,"oidc-client-id":"","oidc-client-secret":"","oidc-enabled":false,"oidc-idp-name":"","oidc-issuer":"","oidc-scopes":["openid","profile","email","groups"],"oidc-skip-verification":false,"password":"","path":"","port":8080,"protocol":"https","smtp-from":"GoToSocial","smtp-host":"","smtp-password":"","smtp-port":0,"smtp-username":"","software-version":"","statuses-cw-max-chars":100,"statuses-max-chars":5000,"statuses-media-max-files":6,"statuses-poll-max-options":6,"statuses-poll-option-max-chars":50,"storage-backend":"local","storage-local-base-path":"/gotosocial/storage","storage-s3-access-key":"","storage-s3-bucket":"","storage-s3-endpoint":"","storage-s3-proxy":false,"storage-s3-secret-key":"","storage-s3-use-ssl":true,"syslog-address":"localhost:514","syslog-enabled":false,"syslog-protocol":"udp","trusted-proxies":["127.0.0.1/32","::1"],"username":"","web-asset-base-dir":"./web/assets/","web-template-base-dir":"./web/template/"}'
|
||||
TEST_11="$(go run ./cmd/gotosocial/... --config-path ./test/test2.yaml debug config)"
|
||||
if [ "${TEST_11}" != "${TEST_11_EXPECTED}" ]; then
|
||||
echo "TEST_11 not equal TEST_11_EXPECTED"
|
||||
exit 1
|
||||
else
|
||||
echo "TEST_11 OK"
|
||||
fi
|
||||
|
||||
echo "FINISHED CLI TESTS"
|
|
@ -2,7 +2,7 @@
|
|||
|
||||
set -eu
|
||||
|
||||
EXPECT='{"account-domain":"peepee","accounts-allow-custom-css":true,"accounts-approval-required":false,"accounts-reason-required":false,"accounts-registration-open":true,"advanced-cookies-samesite":"strict","advanced-rate-limit-requests":6969,"application-name":"gts","bind-address":"127.0.0.1","config-path":"./test/test.yaml","db-address":":memory:","db-database":"gotosocial_prod","db-password":"hunter2","db-port":6969,"db-tls-ca-cert":"","db-tls-mode":"disable","db-type":"sqlite","db-user":"sex-haver","email":"","host":"example.com","instance-deliver-to-shared-inboxes":false,"instance-expose-peers":true,"instance-expose-public-timeline":true,"instance-expose-suspended":true,"landing-page-user":"admin","letsencrypt-cert-dir":"/gotosocial/storage/certs","letsencrypt-email-address":"","letsencrypt-enabled":true,"letsencrypt-port":80,"log-db-queries":true,"log-level":"info","media-description-max-chars":5000,"media-description-min-chars":69,"media-emoji-local-max-size":420,"media-emoji-remote-max-size":420,"media-image-max-size":420,"media-remote-cache-days":30,"media-video-max-size":420,"oidc-client-id":"1234","oidc-client-secret":"shhhh its a secret","oidc-enabled":true,"oidc-idp-name":"sex-haver","oidc-issuer":"whoknows","oidc-scopes":["read","write"],"oidc-skip-verification":true,"password":"","path":"","port":6969,"protocol":"http","smtp-from":"queen.rip.in.piss@terfisland.org","smtp-host":"example.com","smtp-password":"hunter2","smtp-port":4269,"smtp-username":"sex-haver","software-version":"","statuses-cw-max-chars":420,"statuses-max-chars":69,"statuses-media-max-files":1,"statuses-poll-max-options":1,"statuses-poll-option-max-chars":50,"storage-backend":"local","storage-local-base-path":"/root/store","storage-s3-access-key":"minio","storage-s3-bucket":"gts","storage-s3-endpoint":"localhost:9000","storage-s3-proxy":true,"storage-s3-secret-key":"miniostorage","storage-s3-use-ssl":false,"syslog-address":"127.0.0.1:6969","syslog-enabled":true,"syslog-protocol":"udp","trusted-proxies":["127.0.0.1/32","docker.host.local"],"username":"","web-asset-base-dir":"/root","web-template-base-dir":"/root"}'
|
||||
EXPECT='{"account-domain":"peepee","accounts-allow-custom-css":true,"accounts-approval-required":false,"accounts-reason-required":false,"accounts-registration-open":true,"advanced-cookies-samesite":"strict","advanced-rate-limit-requests":6969,"application-name":"gts","bind-address":"127.0.0.1","config-path":"internal/config/testdata/test.yaml","db-address":":memory:","db-database":"gotosocial_prod","db-password":"hunter2","db-port":6969,"db-tls-ca-cert":"","db-tls-mode":"disable","db-type":"sqlite","db-user":"sex-haver","email":"","host":"example.com","instance-deliver-to-shared-inboxes":false,"instance-expose-peers":true,"instance-expose-public-timeline":true,"instance-expose-suspended":true,"landing-page-user":"admin","letsencrypt-cert-dir":"/gotosocial/storage/certs","letsencrypt-email-address":"","letsencrypt-enabled":true,"letsencrypt-port":80,"log-db-queries":true,"log-level":"info","media-description-max-chars":5000,"media-description-min-chars":69,"media-emoji-local-max-size":420,"media-emoji-remote-max-size":420,"media-image-max-size":420,"media-remote-cache-days":30,"media-video-max-size":420,"oidc-client-id":"1234","oidc-client-secret":"shhhh its a secret","oidc-enabled":true,"oidc-idp-name":"sex-haver","oidc-issuer":"whoknows","oidc-scopes":["read","write"],"oidc-skip-verification":true,"password":"","path":"","port":6969,"protocol":"http","smtp-from":"queen.rip.in.piss@terfisland.org","smtp-host":"example.com","smtp-password":"hunter2","smtp-port":4269,"smtp-username":"sex-haver","software-version":"","statuses-cw-max-chars":420,"statuses-max-chars":69,"statuses-media-max-files":1,"statuses-poll-max-options":1,"statuses-poll-option-max-chars":50,"storage-backend":"local","storage-local-base-path":"/root/store","storage-s3-access-key":"minio","storage-s3-bucket":"gts","storage-s3-endpoint":"localhost:9000","storage-s3-proxy":true,"storage-s3-secret-key":"miniostorage","storage-s3-use-ssl":false,"syslog-address":"127.0.0.1:6969","syslog-enabled":true,"syslog-protocol":"udp","trusted-proxies":["127.0.0.1/32","docker.host.local"],"username":"","web-asset-base-dir":"/root","web-template-base-dir":"/root"}'
|
||||
|
||||
# Set all the environment variables to
|
||||
# ensure that these are parsed without panic
|
||||
|
@ -75,7 +75,7 @@ GTS_SYSLOG_PROTOCOL='udp' \
|
|||
GTS_SYSLOG_ADDRESS='127.0.0.1:6969' \
|
||||
GTS_ADVANCED_COOKIES_SAMESITE='strict' \
|
||||
GTS_ADVANCED_RATE_LIMIT_REQUESTS=6969 \
|
||||
go run ./cmd/gotosocial/... --config-path $(dirname ${0})/test.yaml debug config)
|
||||
go run ./cmd/gotosocial/... --config-path internal/config/testdata/test.yaml debug config)
|
||||
|
||||
OUTPUT_OUT=$(mktemp)
|
||||
echo "$OUTPUT" > "$OUTPUT_OUT"
|
||||
|
|
Loading…
Reference in a new issue