config_test.go

  1package config
  2
  3import (
  4	"os"
  5	"testing"
  6
  7	"github.com/matryer/is"
  8)
  9
 10func TestParseMultipleKeys(t *testing.T) {
 11	is := is.New(t)
 12	td := t.TempDir()
 13	is.NoErr(os.Setenv("SOFT_SERVE_INITIAL_ADMIN_KEYS", "testdata/k1.pub\nssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIFxIobhwtfdwN7m1TFt9wx3PsfvcAkISGPxmbmbauST8 a@b"))
 14	is.NoErr(os.Setenv("SOFT_SERVE_DATA_PATH", td))
 15	t.Cleanup(func() {
 16		is.NoErr(os.Unsetenv("SOFT_SERVE_INITIAL_ADMIN_KEYS"))
 17		is.NoErr(os.Unsetenv("SOFT_SERVE_DATA_PATH"))
 18	})
 19	cfg := DefaultConfig()
 20	is.NoErr(cfg.ParseEnv())
 21	is.Equal(cfg.InitialAdminKeys, []string{
 22		"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAINMwLvyV3ouVrTysUYGoJdl5Vgn5BACKov+n9PlzfPwH",
 23		"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIFxIobhwtfdwN7m1TFt9wx3PsfvcAkISGPxmbmbauST8",
 24	})
 25}
 26
 27func TestMergeInitAdminKeys(t *testing.T) {
 28	is := is.New(t)
 29	is.NoErr(os.Setenv("SOFT_SERVE_INITIAL_ADMIN_KEYS", "testdata/k1.pub"))
 30	t.Cleanup(func() { is.NoErr(os.Unsetenv("SOFT_SERVE_INITIAL_ADMIN_KEYS")) })
 31	cfg := &Config{
 32		DataPath:         t.TempDir(),
 33		InitialAdminKeys: []string{"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIFxIobhwtfdwN7m1TFt9wx3PsfvcAkISGPxmbmbauST8 a@b"},
 34	}
 35	is.NoErr(cfg.WriteConfig())
 36	is.NoErr(cfg.Parse())
 37	is.Equal(cfg.InitialAdminKeys, []string{
 38		"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAINMwLvyV3ouVrTysUYGoJdl5Vgn5BACKov+n9PlzfPwH",
 39		"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIFxIobhwtfdwN7m1TFt9wx3PsfvcAkISGPxmbmbauST8",
 40	})
 41}
 42
 43func TestValidateInitAdminKeys(t *testing.T) {
 44	is := is.New(t)
 45	cfg := &Config{
 46		DataPath: t.TempDir(),
 47		InitialAdminKeys: []string{
 48			"testdata/k1.pub",
 49			"abc",
 50			"",
 51		},
 52	}
 53	is.NoErr(cfg.WriteConfig())
 54	is.NoErr(cfg.Parse())
 55	is.Equal(cfg.InitialAdminKeys, []string{
 56		"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAINMwLvyV3ouVrTysUYGoJdl5Vgn5BACKov+n9PlzfPwH",
 57	})
 58}
 59
 60func TestCustomConfigLocation(t *testing.T) {
 61	is := is.New(t)
 62	td := t.TempDir()
 63	t.Cleanup(func() {
 64		is.NoErr(os.Unsetenv("SOFT_SERVE_CONFIG_LOCATION"))
 65	})
 66
 67	// Test that we get data from the custom file location, and not from the data dir.
 68	is.NoErr(os.Setenv("SOFT_SERVE_CONFIG_LOCATION", "testdata/config.yaml"))
 69	is.NoErr(os.Setenv("SOFT_SERVE_DATA_PATH", td))
 70	cfg := DefaultConfig()
 71	is.NoErr(cfg.Parse())
 72	is.Equal(cfg.Name, "Test server name")
 73	// If we unset the custom location, then use the default location.
 74	is.NoErr(os.Unsetenv("SOFT_SERVE_CONFIG_LOCATION"))
 75	cfg = DefaultConfig()
 76	is.Equal(cfg.Name, "Soft Serve")
 77	// Test that if the custom config location doesn't exist, default to datapath config.
 78	is.NoErr(os.Setenv("SOFT_SERVE_CONFIG_LOCATION", "testdata/config_nonexistent.yaml"))
 79	cfg = DefaultConfig()
 80	is.Equal(cfg.Name, "Soft Serve")
 81}
 82
 83func TestParseMultipleHeaders(t *testing.T) {
 84	is := is.New(t)
 85	is.NoErr(os.Setenv("SOFT_SERVE_HTTP_CORS_ALLOWED_HEADERS", "Accept,Accept-Language,User-Agent"))
 86	t.Cleanup(func() {
 87		is.NoErr(os.Unsetenv("SOFT_SERVE_HTTP_CORS_ALLOWED_HEADERS"))
 88	})
 89	cfg := DefaultConfig()
 90	is.NoErr(cfg.ParseEnv())
 91	is.Equal(cfg.HTTP.CORS.AllowedHeaders, []string{
 92		"Accept",
 93		"Accept-Language",
 94		"User-Agent",
 95	})
 96}
 97
 98func TestParseMultipleOrigins(t *testing.T) {
 99	is := is.New(t)
100	is.NoErr(os.Setenv("SOFT_SERVE_HTTP_CORS_ALLOWED_ORIGINS", "http://example.com,https://example.com"))
101	t.Cleanup(func() {
102		is.NoErr(os.Unsetenv("SOFT_SERVE_HTTP_CORS_ALLOWED_ORIGINS"))
103	})
104	cfg := DefaultConfig()
105	is.NoErr(cfg.ParseEnv())
106	is.Equal(cfg.HTTP.CORS.AllowedOrigins, []string{
107		"http://localhost:23232",
108		"http://example.com",
109		"https://example.com",
110	})
111}
112
113func TestParseMultipleMethods(t *testing.T) {
114	is := is.New(t)
115	is.NoErr(os.Setenv("SOFT_SERVE_HTTP_CORS_ALLOWED_METHODS", "GET,POST,PUT"))
116	t.Cleanup(func() {
117		is.NoErr(os.Unsetenv("SOFT_SERVE_HTTP_CORS_ALLOWED_METHODS"))
118	})
119	cfg := DefaultConfig()
120	is.NoErr(cfg.ParseEnv())
121	is.Equal(cfg.HTTP.CORS.AllowedMethods, []string{
122		"GET",
123		"POST",
124		"PUT",
125	})
126}