1package config
 2
 3import (
 4	"os"
 5	"path/filepath"
 6	"testing"
 7
 8	"github.com/matryer/is"
 9	"gopkg.in/yaml.v3"
10)
11
12func TestParseMultipleKeys(t *testing.T) {
13	is := is.New(t)
14	td := t.TempDir()
15	is.NoErr(os.Setenv("SOFT_SERVE_INITIAL_ADMIN_KEYS", "testdata/k1.pub\nssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIFxIobhwtfdwN7m1TFt9wx3PsfvcAkISGPxmbmbauST8 a@b"))
16	is.NoErr(os.Setenv("SOFT_SERVE_DATA_PATH", td))
17	t.Cleanup(func() {
18		is.NoErr(os.Unsetenv("SOFT_SERVE_INITIAL_ADMIN_KEYS"))
19		is.NoErr(os.Unsetenv("SOFT_SERVE_DATA_PATH"))
20	})
21	cfg := DefaultConfig()
22	is.Equal(cfg.InitialAdminKeys, []string{
23		"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAINMwLvyV3ouVrTysUYGoJdl5Vgn5BACKov+n9PlzfPwH",
24		"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIFxIobhwtfdwN7m1TFt9wx3PsfvcAkISGPxmbmbauST8",
25	})
26}
27
28func TestMergeInitAdminKeys(t *testing.T) {
29	is := is.New(t)
30	is.NoErr(os.Setenv("SOFT_SERVE_INITIAL_ADMIN_KEYS", "testdata/k1.pub"))
31	t.Cleanup(func() { is.NoErr(os.Unsetenv("SOFT_SERVE_INITIAL_ADMIN_KEYS")) })
32	bts, err := yaml.Marshal(&Config{
33		InitialAdminKeys: []string{"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIFxIobhwtfdwN7m1TFt9wx3PsfvcAkISGPxmbmbauST8 a@b"},
34	})
35	is.NoErr(err)
36	fp := filepath.Join(t.TempDir(), "config.yaml")
37	err = os.WriteFile(fp, bts, 0644)
38	is.NoErr(err)
39	cfg, err := ParseConfig(fp)
40	is.NoErr(err)
41	is.Equal(cfg.InitialAdminKeys, []string{
42		"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAINMwLvyV3ouVrTysUYGoJdl5Vgn5BACKov+n9PlzfPwH",
43		"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIFxIobhwtfdwN7m1TFt9wx3PsfvcAkISGPxmbmbauST8",
44	})
45}
46
47func TestValidateInitAdminKeys(t *testing.T) {
48	is := is.New(t)
49	bts, err := yaml.Marshal(&Config{
50		InitialAdminKeys: []string{
51			"testdata/k1.pub",
52			"abc",
53			"",
54		},
55	})
56	is.NoErr(err)
57	fp := filepath.Join(t.TempDir(), "config.yaml")
58	err = os.WriteFile(fp, bts, 0644)
59	is.NoErr(err)
60	cfg, err := ParseConfig(fp)
61	is.NoErr(err)
62	is.Equal(cfg.InitialAdminKeys, []string{
63		"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAINMwLvyV3ouVrTysUYGoJdl5Vgn5BACKov+n9PlzfPwH",
64	})
65}