From a58a79eda25086300091f5fe32380369a250aabc Mon Sep 17 00:00:00 2001 From: "Xavier G." Date: Sun, 12 Jan 2025 01:36:42 +0100 Subject: [PATCH] askpass: add tests. --- .../test_askpass_visual[test0].svg | 205 +++++++++++++++++ .../test_askpass_visual[test10].svg | 209 ++++++++++++++++++ .../test_askpass_visual[test1].svg | 205 +++++++++++++++++ .../test_askpass_visual[test2].svg | 205 +++++++++++++++++ .../test_askpass_visual[test3].svg | 205 +++++++++++++++++ .../test_askpass_visual[test4].svg | 205 +++++++++++++++++ .../test_askpass_visual[test5].svg | 205 +++++++++++++++++ .../test_askpass_visual[test6].svg | 205 +++++++++++++++++ .../test_askpass_visual[test7].svg | 205 +++++++++++++++++ .../test_askpass_visual[test8].svg | 206 +++++++++++++++++ .../test_askpass_visual[test9].svg | 209 ++++++++++++++++++ tests/common.py | 2 +- tests/test_askpass.py | 59 +++++ 13 files changed, 2324 insertions(+), 1 deletion(-) create mode 100644 tests/__snapshots__/test_askpass/test_askpass_visual[test0].svg create mode 100644 tests/__snapshots__/test_askpass/test_askpass_visual[test10].svg create mode 100644 tests/__snapshots__/test_askpass/test_askpass_visual[test1].svg create mode 100644 tests/__snapshots__/test_askpass/test_askpass_visual[test2].svg create mode 100644 tests/__snapshots__/test_askpass/test_askpass_visual[test3].svg create mode 100644 tests/__snapshots__/test_askpass/test_askpass_visual[test4].svg create mode 100644 tests/__snapshots__/test_askpass/test_askpass_visual[test5].svg create mode 100644 tests/__snapshots__/test_askpass/test_askpass_visual[test6].svg create mode 100644 tests/__snapshots__/test_askpass/test_askpass_visual[test7].svg create mode 100644 tests/__snapshots__/test_askpass/test_askpass_visual[test8].svg create mode 100644 tests/__snapshots__/test_askpass/test_askpass_visual[test9].svg create mode 100644 tests/test_askpass.py diff --git a/tests/__snapshots__/test_askpass/test_askpass_visual[test0].svg b/tests/__snapshots__/test_askpass/test_askpass_visual[test0].svg new file mode 100644 index 0000000..1f9b108 --- /dev/null +++ b/tests/__snapshots__/test_askpass/test_askpass_visual[test0].svg @@ -0,0 +1,205 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Moulti + + + + + + + + + +                                                              Moulti                                                              +▼ askpass + +▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔ +••••••••••• +▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/tests/__snapshots__/test_askpass/test_askpass_visual[test10].svg b/tests/__snapshots__/test_askpass/test_askpass_visual[test10].svg new file mode 100644 index 0000000..0e5fe31 --- /dev/null +++ b/tests/__snapshots__/test_askpass/test_askpass_visual[test10].svg @@ -0,0 +1,209 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Moulti + + + + + + + + + +                                                              Moulti                                                              +▼ askpass + + +▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔ + OK  Cancel  +▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + c  Copy  w  With question  l  Lock scroll  s  Save  z  Console  x  Expand all  o  Collapse all  d  Light  h  Help  q  Quit      + + + diff --git a/tests/__snapshots__/test_askpass/test_askpass_visual[test1].svg b/tests/__snapshots__/test_askpass/test_askpass_visual[test1].svg new file mode 100644 index 0000000..8eb7245 --- /dev/null +++ b/tests/__snapshots__/test_askpass/test_askpass_visual[test1].svg @@ -0,0 +1,205 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Moulti + + + + + + + + + +                                                              Moulti                                                              +▼ Env-based custom prompt? + +▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔ +••••••••••• +▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/tests/__snapshots__/test_askpass/test_askpass_visual[test2].svg b/tests/__snapshots__/test_askpass/test_askpass_visual[test2].svg new file mode 100644 index 0000000..aab45b2 --- /dev/null +++ b/tests/__snapshots__/test_askpass/test_askpass_visual[test2].svg @@ -0,0 +1,205 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Moulti + + + + + + + + + +                                                              Moulti                                                              +▼ Become password? + +▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔ +••••••••••• +▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/tests/__snapshots__/test_askpass/test_askpass_visual[test3].svg b/tests/__snapshots__/test_askpass/test_askpass_visual[test3].svg new file mode 100644 index 0000000..6619e7d --- /dev/null +++ b/tests/__snapshots__/test_askpass/test_askpass_visual[test3].svg @@ -0,0 +1,205 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Moulti + + + + + + + + + +                                                              Moulti                                                              +▼ Connection password? + +▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔ +••••••••••• +▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/tests/__snapshots__/test_askpass/test_askpass_visual[test4].svg b/tests/__snapshots__/test_askpass/test_askpass_visual[test4].svg new file mode 100644 index 0000000..b489dfb --- /dev/null +++ b/tests/__snapshots__/test_askpass/test_askpass_visual[test4].svg @@ -0,0 +1,205 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Moulti + + + + + + + + + +                                                              Moulti                                                              +▼ Vault client? + +▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔ +••••••••••• +▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/tests/__snapshots__/test_askpass/test_askpass_visual[test5].svg b/tests/__snapshots__/test_askpass/test_askpass_visual[test5].svg new file mode 100644 index 0000000..ffa9ade --- /dev/null +++ b/tests/__snapshots__/test_askpass/test_askpass_visual[test5].svg @@ -0,0 +1,205 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Moulti + + + + + + + + + +                                                              Moulti                                                              +▼ Command-line custom prompt? + +▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔ +••••••••••• +▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/tests/__snapshots__/test_askpass/test_askpass_visual[test6].svg b/tests/__snapshots__/test_askpass/test_askpass_visual[test6].svg new file mode 100644 index 0000000..4f53568 --- /dev/null +++ b/tests/__snapshots__/test_askpass/test_askpass_visual[test6].svg @@ -0,0 +1,205 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Moulti + + + + + + + + + +                                                              Moulti                                                              +▼ Password for vault SHINY_VAULT? + +▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔ +••••••••••• +▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/tests/__snapshots__/test_askpass/test_askpass_visual[test7].svg b/tests/__snapshots__/test_askpass/test_askpass_visual[test7].svg new file mode 100644 index 0000000..061287d --- /dev/null +++ b/tests/__snapshots__/test_askpass/test_askpass_visual[test7].svg @@ -0,0 +1,205 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Moulti + + + + + + + + + +                                                              Moulti                                                              +▼ The authenticity of host '[example.org]:22 ([12.34.56.78]:22)' can't be established. +ED25519 key fingerprint is SHA256:s2DYbBHs784Xe7/LvXCybJe6ncu+x2Dn9mxLwXQ+TfM. +Are you sure you want to continue connecting (yes/no/[fingerprint])? + +▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔ +yes +▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/tests/__snapshots__/test_askpass/test_askpass_visual[test8].svg b/tests/__snapshots__/test_askpass/test_askpass_visual[test8].svg new file mode 100644 index 0000000..cead8db --- /dev/null +++ b/tests/__snapshots__/test_askpass/test_askpass_visual[test8].svg @@ -0,0 +1,206 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Moulti + + + + + + + + + +                                                              Moulti                                                              +▼ askpass + + +▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔ + OK  +▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + c  Copy  w  With question  l  Lock scroll  s  Save  z  Console  x  Expand all  o  Collapse all  d  Light  h  Help  q  Quit      + + + diff --git a/tests/__snapshots__/test_askpass/test_askpass_visual[test9].svg b/tests/__snapshots__/test_askpass/test_askpass_visual[test9].svg new file mode 100644 index 0000000..84295d1 --- /dev/null +++ b/tests/__snapshots__/test_askpass/test_askpass_visual[test9].svg @@ -0,0 +1,209 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Moulti + + + + + + + + + +                                                              Moulti                                                              +▼ askpass + + +▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔ + OK  Cancel  +▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + c  Copy  w  With question  l  Lock scroll  s  Save  z  Console  x  Expand all  o  Collapse all  d  Light  h  Help  q  Quit      + + + diff --git a/tests/common.py b/tests/common.py index 544b6b4..b1a6d59 100644 --- a/tests/common.py +++ b/tests/common.py @@ -52,7 +52,7 @@ def compare( if suffix is not None: name += suffix if command: - if command[0] != 'moulti' and not command[0].startswith(COMMAND_PREFIX): + if not command[0].startswith('moulti') and not command[0].startswith(COMMAND_PREFIX): command[0] = COMMAND_PREFIX + command[0] if not run_before: run_before = wait_script diff --git a/tests/test_askpass.py b/tests/test_askpass.py new file mode 100644 index 0000000..e823579 --- /dev/null +++ b/tests/test_askpass.py @@ -0,0 +1,59 @@ +from _pytest.fixtures import FixtureRequest +from os import getpid, environ +from asyncio import create_subprocess_exec as async_exec +from asyncio.subprocess import PIPE +import pytest +from moulti.app import Moulti +from .common import moulti_test +assert moulti_test + +PASSWORD = 'The secret!' +INPUT_SECRET = ['ctrl+y', *PASSWORD] +INPUT_YES = ['ctrl+y', *'yes'] +HIT_1ST_BUTTON = ['ctrl+y'] +HIT_2ND_BUTTON = ['ctrl+y', 'tab'] +FINGERPRINT_PROMPT = """The authenticity of host '[example.org]:22 ([12.34.56.78]:22)' can't be established. +ED25519 key fingerprint is SHA256:s2DYbBHs784Xe7/LvXCybJe6ncu+x2Dn9mxLwXQ+TfM. +Are you sure you want to continue connecting (yes/no/[fingerprint])?""" + +TESTS = [ + {'cmd': ['moulti-askpass']}, + {'cmd': ['moulti-askpass'], 'env': {'MOULTI_ASKPASS_DEFAULT_PROMPT': 'Env-based custom prompt?'}}, + {'cmd': ['moulti-askpass-become-password']}, + {'cmd': ['moulti-askpass-connection-password']}, + {'cmd': ['moulti-askpass-vault-client']}, + {'cmd': ['moulti-askpass', 'Command-line custom prompt?']}, + {'cmd': ['moulti-askpass', '--vault-id', 'SHINY_VAULT']}, + {'cmd': ['moulti-askpass', FINGERPRINT_PROMPT], 'input': INPUT_YES, 'output': 'yes'}, + {'cmd': ['moulti-askpass'], 'env': {'SSH_ASKPASS_PROMPT': 'none'}, 'input': HIT_1ST_BUTTON, 'output': ''}, + {'cmd': ['moulti-askpass'], 'env': {'SSH_ASKPASS_PROMPT': 'confirm'}, 'input': HIT_1ST_BUTTON, 'output': ''}, + {'cmd': ['moulti-askpass'], 'env': {'SSH_ASKPASS_PROMPT': 'confirm'}, 'input': HIT_2ND_BUTTON, 'output': '', 'rc': 1}, +] +for index, test in enumerate(TESTS): + test['index'] = index + +@pytest.mark.parametrize('test', TESTS) +def test_askpass_visual(test, moulti_test, monkeypatch): + """Visual tests: ensure the askpass step looks like expected.""" + for name, value in test.get('env', {}).items(): + monkeypatch.setenv(name, value) + async def run_before(pilot): + await pilot.pause(.5) + await pilot.press(*test.get('input', INPUT_SECRET)) + assert moulti_test(command=test['cmd'], run_before=run_before) + +@pytest.mark.parametrize('test', TESTS) +async def test_askpass_password(test, moulti_test, monkeypatch, request: FixtureRequest): + """Functional tests: ensure moulti-askpass returns the right secret and return code.""" + instance_name = f'{getpid()}-askpass-{test["index"]}' + env = environ | test.get('env', {}) | {'MOULTI_INSTANCE': instance_name} + moulti_app = Moulti(instance_name=instance_name) + async with moulti_app.run_test() as pilot: + proc = await async_exec(*test['cmd'], env=env, stdout=PIPE) + await pilot.pause(.5) + await pilot.press(*test.get('input', INPUT_SECRET), 'enter') + password = await proc.stdout.readline() + await proc.wait() + assert proc.returncode == test.get('rc', 0) + assert password.decode('utf-8').rstrip() == test.get('output', PASSWORD) + await pilot.press('q')