commit 1f256e288b876fcd58093068150e0542acc82b32
parent 52109776f63ac59b2fef5cd7417becd9f0007acb
Author: Mara Sophie Grosch <littlefox@lf-net.org>
Date: Tue, 15 Nov 2022 16:53:19 +0100
[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.
Diffstat:
10 files changed, 281 insertions(+), 185 deletions(-)
diff --git a/.drone.yml b/.drone.yml
@@ -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:
diff --git a/go.mod b/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
diff --git a/internal/config/cliparsing_test.go b/internal/config/cliparsing_test.go
@@ -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))
+ }
+ })
+ })
+ }
+}
diff --git a/internal/config/flags.go b/internal/config/flags.go
@@ -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"))
diff --git a/internal/config/testdata/test.json b/internal/config/testdata/test.json
@@ -0,0 +1,60 @@
+{
+ "account-domain": "example.org",
+ "accounts-approval-required": true,
+ "accounts-reason-required": true,
+ "accounts-registration-open": true,
+ "application-name": "gotosocial",
+ "bind-address": "0.0.0.0",
+ "config-path": "testdata/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",
+ "host": "gts.example.org",
+ "letsencrypt-cert-dir": "/gotosocial/storage/certs",
+ "letsencrypt-email-address": "",
+ "letsencrypt-enabled": true,
+ "letsencrypt-port": 80,
+ "log-level": "info",
+ "media-description-max-chars": 500,
+ "media-description-min-chars": 0,
+ "media-image-max-size": 10485760,
+ "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,
+ "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",
+ "trusted-proxies": [
+ "127.0.0.1/32",
+ "0.0.0.0/0"
+ ],
+ "web-asset-base-dir": "./web/assets/",
+ "web-template-base-dir": "./web/template/"
+}
diff --git a/test/test.yaml b/internal/config/testdata/test.yaml
diff --git a/test/test2.yaml b/internal/config/testdata/test2.yaml
diff --git a/test/cliparsing.sh b/test/cliparsing.sh
@@ -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"
diff --git a/test/envparsing.sh b/test/envparsing.sh
@@ -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"
diff --git a/test/test.json b/test/test.json
@@ -1,61 +0,0 @@
-{
- "account-domain": "example.org",
- "accounts-approval-required": true,
- "accounts-reason-required": true,
- "accounts-registration-open": true,
- "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",
- "help": false,
- "host": "gts.example.org",
- "letsencrypt-cert-dir": "/gotosocial/storage/certs",
- "letsencrypt-email-address": "",
- "letsencrypt-enabled": true,
- "letsencrypt-port": 80,
- "log-level": "info",
- "media-description-max-chars": 500,
- "media-description-min-chars": 0,
- "media-image-max-size": 10485760,
- "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,
- "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",
- "trusted-proxies": [
- "127.0.0.1/32",
- "0.0.0.0/0"
- ],
- "web-asset-base-dir": "./web/assets/",
- "web-template-base-dir": "./web/template/"
-}