From 42f5f7f647e102b3b3f9d211664ce7716cd4e83f Mon Sep 17 00:00:00 2001 From: Carlos Alexandro Becker Date: Tue, 23 May 2023 16:44:08 +0000 Subject: [PATCH] test: playing with testscript --- go.mod | 2 +- testscript/script_test.go | 63 ++++++++++++++++ testscript/testdata/admin1 | 7 ++ testscript/testdata/admin1.pub | 1 + testscript/testdata/admin2 | 7 ++ testscript/testdata/admin2.pub | 1 + .../testdata/script/user_management.txtar | 71 +++++++++++++++++++ testscript/testdata/user1 | 7 ++ testscript/testdata/user1.pub | 1 + testscript/testdata/user2 | 7 ++ testscript/testdata/user2.pub | 1 + 11 files changed, 167 insertions(+), 1 deletion(-) create mode 100644 testscript/script_test.go create mode 100644 testscript/testdata/admin1 create mode 100644 testscript/testdata/admin1.pub create mode 100644 testscript/testdata/admin2 create mode 100644 testscript/testdata/admin2.pub create mode 100644 testscript/testdata/script/user_management.txtar create mode 100644 testscript/testdata/user1 create mode 100644 testscript/testdata/user1.pub create mode 100644 testscript/testdata/user2 create mode 100644 testscript/testdata/user2.pub diff --git a/go.mod b/go.mod index 641587058abaf37463193762bb60084b0368cccd..61a79989cac5ff0886de286d8884847d6a9b8a86 100644 --- a/go.mod +++ b/go.mod @@ -31,6 +31,7 @@ require ( github.com/muesli/roff v0.1.0 github.com/prometheus/client_golang v1.15.1 github.com/robfig/cron/v3 v3.0.1 + github.com/rogpeppe/go-internal v1.10.0 github.com/spf13/cobra v1.7.0 go.uber.org/automaxprocs v1.5.2 goji.io v2.0.2+incompatible @@ -73,7 +74,6 @@ require ( github.com/prometheus/procfs v0.9.0 // indirect github.com/remyoudompheng/bigfft v0.0.0-20230129092748-24d4a6f8daec // indirect github.com/rivo/uniseg v0.2.0 // indirect - github.com/rogpeppe/go-internal v1.10.0 // indirect github.com/sahilm/fuzzy v0.1.0 // indirect github.com/spf13/pflag v1.0.5 // indirect github.com/yuin/goldmark v1.5.2 // indirect diff --git a/testscript/script_test.go b/testscript/script_test.go new file mode 100644 index 0000000000000000000000000000000000000000..b7b8a618aa0ba33eeb7110c31be2cd48bd6eae13 --- /dev/null +++ b/testscript/script_test.go @@ -0,0 +1,63 @@ +package testscript + +import ( + "context" + "path/filepath" + "testing" + + "github.com/charmbracelet/soft-serve/server" + "github.com/charmbracelet/soft-serve/server/config" + "github.com/rogpeppe/go-internal/testscript" +) + +func TestScript(t *testing.T) { + key, err := filepath.Abs("./testdata/admin1") + if err != nil { + t.Fatal(err) + } + + testscript.Run(t, testscript.Params{ + Dir: "testdata/script", + UpdateScripts: true, + Cmds: map[string]func(ts *testscript.TestScript, neg bool, args []string){ + "soft": func(ts *testscript.TestScript, _ bool, args []string) { + args = append([]string{ + "-F", "/dev/null", + "-o", "StrictHostKeyChecking=no", + "-o", "UserKnownHostsFile=/dev/null", + "-o", "IdentityAgent=none", + "-o", "IdentitiesOnly=yes", + "-i", key, + "-p", "23231", + "localhost", + "--", + }, args...) + ts.Check(ts.Exec("ssh", args...)) + }, + }, + Setup: func(e *testscript.Env) error { + cfg := config.DefaultConfig() + cfg.InitialAdminKeys = []string{ + "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIJI/1tawpdPmzuJcTGTJ+QReqB6cRUdKj4iQIdJUFdrl", + } + cfg.DataPath = t.TempDir() + e.T().Log("using", cfg.DataPath, "as data path") + ctx := config.WithContext(context.Background(), cfg) + srv, err := server.NewServer(ctx) + if err != nil { + return err + } + go func() { + if err := srv.Start(); err != nil { + e.T().Fatal(err) + } + }() + e.Defer(func() { + if err := srv.Shutdown(context.Background()); err != nil { + e.T().Fatal(err) + } + }) + return nil + }, + }) +} diff --git a/testscript/testdata/admin1 b/testscript/testdata/admin1 new file mode 100644 index 0000000000000000000000000000000000000000..1a93b5da725392f3418df8a70dfd28747e29852c --- /dev/null +++ b/testscript/testdata/admin1 @@ -0,0 +1,7 @@ +-----BEGIN OPENSSH PRIVATE KEY----- +b3BlbnNzaC1rZXktdjEAAAAABG5vbmUAAAAEbm9uZQAAAAAAAAABAAAAMwAAAAtzc2gtZW +QyNTUxOQAAACCSP9bWsKXT5s7iXExkyfkEXqgenEVHSo+IkCHSVBXa5QAAAJiqgq7EqoKu +xAAAAAtzc2gtZWQyNTUxOQAAACCSP9bWsKXT5s7iXExkyfkEXqgenEVHSo+IkCHSVBXa5Q +AAAEDzMZNK49XhgnQJruAFQr04Eijji5ZMZzN9dA/tmEP0m5I/1tawpdPmzuJcTGTJ+QRe +qB6cRUdKj4iQIdJUFdrlAAAAD2Nhcmxvc0BkYXJrc3RhcgECAwQFBg== +-----END OPENSSH PRIVATE KEY----- diff --git a/testscript/testdata/admin1.pub b/testscript/testdata/admin1.pub new file mode 100644 index 0000000000000000000000000000000000000000..5dac3f7b75eac6487fec007375b0eb1df2ce7e84 --- /dev/null +++ b/testscript/testdata/admin1.pub @@ -0,0 +1 @@ +ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIJI/1tawpdPmzuJcTGTJ+QReqB6cRUdKj4iQIdJUFdrl carlos@darkstar diff --git a/testscript/testdata/admin2 b/testscript/testdata/admin2 new file mode 100644 index 0000000000000000000000000000000000000000..df20ed90e8a9ee83609e89a8aa43a2bd11013046 --- /dev/null +++ b/testscript/testdata/admin2 @@ -0,0 +1,7 @@ +-----BEGIN OPENSSH PRIVATE KEY----- +b3BlbnNzaC1rZXktdjEAAAAABG5vbmUAAAAEbm9uZQAAAAAAAAABAAAAMwAAAAtzc2gtZW +QyNTUxOQAAACD41Hl4Qc49fP1mW6nA9WjyZQgC8wTDGcYaWlOOSoFaiwAAAJjWOn0F1jp9 +BQAAAAtzc2gtZWQyNTUxOQAAACD41Hl4Qc49fP1mW6nA9WjyZQgC8wTDGcYaWlOOSoFaiw +AAAEDC5WZCusu7Dwmj1M6tEqPietXnnklOhfnAzBqUtoNpl/jUeXhBzj18/WZbqcD1aPJl +CALzBMMZxhpaU45KgVqLAAAAD2Nhcmxvc0BkYXJrc3RhcgECAwQFBg== +-----END OPENSSH PRIVATE KEY----- diff --git a/testscript/testdata/admin2.pub b/testscript/testdata/admin2.pub new file mode 100644 index 0000000000000000000000000000000000000000..38c3c05306364f2ead4a124930becbde4c5ba814 --- /dev/null +++ b/testscript/testdata/admin2.pub @@ -0,0 +1 @@ +ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIPjUeXhBzj18/WZbqcD1aPJlCALzBMMZxhpaU45KgVqL carlos@darkstar diff --git a/testscript/testdata/script/user_management.txtar b/testscript/testdata/script/user_management.txtar new file mode 100644 index 0000000000000000000000000000000000000000..9ae73a4da3ebb9e5d355b1fbe810e203cf72fbd6 --- /dev/null +++ b/testscript/testdata/script/user_management.txtar @@ -0,0 +1,71 @@ +# add key to admin +soft user add-pubkey admin "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIPjUeXhBzj18/WZbqcD1aPJlCALzBMMZxhpaU45KgVqL" +soft user info admin +soft info +cmp stdout info.txt + + +# list users +soft user list +cmp stdout list1.txt + + +# create a new user +soft user create foo --key "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIAzXnhJ/6SrlHZI+DnTb1n/0KL6/VOQTea8qLovTiZix" +soft user list +cmp stdout list2.txt + + +# get new user info +soft user info foo +cmp stdout foo_info1.txt + + +# make user admin +soft user set-admin foo true +soft user info foo +cmp stdout foo_info2.txt + + +# remove admin +soft user set-admin foo false +soft user info foo +cmp stdout foo_info3.txt + + +# remove key from user +soft user remove-pubkey foo "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIAzXnhJ/6SrlHZI+DnTb1n/0KL6/VOQTea8qLovTiZix" +soft user info foo +cmp stdout foo_info4.txt + + +-- info.txt -- +Username: admin +Admin: true +Public keys: + ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIJI/1tawpdPmzuJcTGTJ+QReqB6cRUdKj4iQIdJUFdrl + ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIPjUeXhBzj18/WZbqcD1aPJlCALzBMMZxhpaU45KgVqL +-- list1.txt -- +admin +-- list2.txt -- +admin +foo +-- foo_info1.txt -- +Username: foo +Admin: false +Public keys: + ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIAzXnhJ/6SrlHZI+DnTb1n/0KL6/VOQTea8qLovTiZix +-- foo_info2.txt -- +Username: foo +Admin: true +Public keys: + ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIAzXnhJ/6SrlHZI+DnTb1n/0KL6/VOQTea8qLovTiZix +-- foo_info3.txt -- +Username: foo +Admin: false +Public keys: + ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIAzXnhJ/6SrlHZI+DnTb1n/0KL6/VOQTea8qLovTiZix +-- foo_info4.txt -- +Username: foo +Admin: false +Public keys: diff --git a/testscript/testdata/user1 b/testscript/testdata/user1 new file mode 100644 index 0000000000000000000000000000000000000000..9d1fcbe4e8d80d668ef080ff64708cf905f41457 --- /dev/null +++ b/testscript/testdata/user1 @@ -0,0 +1,7 @@ +-----BEGIN OPENSSH PRIVATE KEY----- +b3BlbnNzaC1rZXktdjEAAAAABG5vbmUAAAAEbm9uZQAAAAAAAAABAAAAMwAAAAtzc2gtZW +QyNTUxOQAAACAM154Sf+kq5R2SPg5029Z/9Ci+v1TkE3mvKi6L04mYsQAAAJgAOMy/ADjM +vwAAAAtzc2gtZWQyNTUxOQAAACAM154Sf+kq5R2SPg5029Z/9Ci+v1TkE3mvKi6L04mYsQ +AAAECH03vQo8gCmxbUqHWlcM2buCgIi4x6IR4WWkXlXqhzoAzXnhJ/6SrlHZI+DnTb1n/0 +KL6/VOQTea8qLovTiZixAAAAD2Nhcmxvc0BkYXJrc3RhcgECAwQFBg== +-----END OPENSSH PRIVATE KEY----- diff --git a/testscript/testdata/user1.pub b/testscript/testdata/user1.pub new file mode 100644 index 0000000000000000000000000000000000000000..2b69a608c9aaac6fe2fc667e909ea801f836e889 --- /dev/null +++ b/testscript/testdata/user1.pub @@ -0,0 +1 @@ +ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIAzXnhJ/6SrlHZI+DnTb1n/0KL6/VOQTea8qLovTiZix carlos@darkstar diff --git a/testscript/testdata/user2 b/testscript/testdata/user2 new file mode 100644 index 0000000000000000000000000000000000000000..4816035c29548b3b2a542a102f1bf3f4bfe49357 --- /dev/null +++ b/testscript/testdata/user2 @@ -0,0 +1,7 @@ +-----BEGIN OPENSSH PRIVATE KEY----- +b3BlbnNzaC1rZXktdjEAAAAABG5vbmUAAAAEbm9uZQAAAAAAAAABAAAAMwAAAAtzc2gtZW +QyNTUxOQAAACChLkp+T1IWDQ5I5BI5Q8YQrP7aKdQLVe7+Pn9/xEM5LwAAAJiupdpmrqXa +ZgAAAAtzc2gtZWQyNTUxOQAAACChLkp+T1IWDQ5I5BI5Q8YQrP7aKdQLVe7+Pn9/xEM5Lw +AAAECrufZjft7PHyL8FQLnR/D73VySS1A6UZdEQmL+W/+gJ6EuSn5PUhYNDkjkEjlDxhCs +/top1AtV7v4+f3/EQzkvAAAAD2Nhcmxvc0BkYXJrc3RhcgECAwQFBg== +-----END OPENSSH PRIVATE KEY----- diff --git a/testscript/testdata/user2.pub b/testscript/testdata/user2.pub new file mode 100644 index 0000000000000000000000000000000000000000..86d5f60a8711766992cb81631b7fd32bf396c0df --- /dev/null +++ b/testscript/testdata/user2.pub @@ -0,0 +1 @@ +ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIKEuSn5PUhYNDkjkEjlDxhCs/top1AtV7v4+f3/EQzkv carlos@darkstar