···682 with self.nested("waiting for {} to appear on tty {}".format(regexp, tty)):
683 retry(tty_matches)
684685- def send_chars(self, chars: List[str]) -> None:
686 with self.nested("sending keys ‘{}‘".format(chars)):
687 for char in chars:
688 self.send_key(char)
···682 with self.nested("waiting for {} to appear on tty {}".format(regexp, tty)):
683 retry(tty_matches)
684685+ def send_chars(self, chars: str) -> None:
686 with self.nested("sending keys ‘{}‘".format(chars)):
687 for char in chars:
688 self.send_key(char)
+5-5
nixos/tests/ecryptfs.nix
···1112 testScript = ''
13 def login_as_alice():
14- machine.wait_until_tty_matches(1, "login: ")
15 machine.send_chars("alice\n")
16- machine.wait_until_tty_matches(1, "Password: ")
17 machine.send_chars("foobar\n")
18- machine.wait_until_tty_matches(1, "alice\@machine")
192021 def logout():
22 machine.send_chars("logout\n")
23- machine.wait_until_tty_matches(1, "login: ")
242526 machine.wait_for_unit("default.target")
···36 with subtest("Log alice in (ecryptfs passwhrase is wrapped during first login)"):
37 login_as_alice()
38 machine.send_chars("logout\n")
39- machine.wait_until_tty_matches(1, "login: ")
4041 # Why do I need to do this??
42 machine.succeed("su alice -c ecryptfs-umount-private || true")
···1112 testScript = ''
13 def login_as_alice():
14+ machine.wait_until_tty_matches("1", "login: ")
15 machine.send_chars("alice\n")
16+ machine.wait_until_tty_matches("1", "Password: ")
17 machine.send_chars("foobar\n")
18+ machine.wait_until_tty_matches("1", "alice\@machine")
192021 def logout():
22 machine.send_chars("logout\n")
23+ machine.wait_until_tty_matches("1", "login: ")
242526 machine.wait_for_unit("default.target")
···36 with subtest("Log alice in (ecryptfs passwhrase is wrapped during first login)"):
37 login_as_alice()
38 machine.send_chars("logout\n")
39+ machine.wait_until_tty_matches("1", "login: ")
4041 # Why do I need to do this??
42 machine.succeed("su alice -c ecryptfs-umount-private || true")
+3-3
nixos/tests/login.nix
···29 machine.wait_until_succeeds("pgrep -f 'agetty.*tty2'")
3031 with subtest("Log in as alice on a virtual console"):
32- machine.wait_until_tty_matches(2, "login: ")
33 machine.send_chars("alice\n")
34- machine.wait_until_tty_matches(2, "login: alice")
35 machine.wait_until_succeeds("pgrep login")
36- machine.wait_until_tty_matches(2, "Password: ")
37 machine.send_chars("foobar\n")
38 machine.wait_until_succeeds("pgrep -u alice bash")
39 machine.send_chars("touch done\n")
···29 machine.wait_until_succeeds("pgrep -f 'agetty.*tty2'")
3031 with subtest("Log in as alice on a virtual console"):
32+ machine.wait_until_tty_matches("2", "login: ")
33 machine.send_chars("alice\n")
34+ machine.wait_until_tty_matches("2", "login: alice")
35 machine.wait_until_succeeds("pgrep login")
36+ machine.wait_until_tty_matches("2", "Password: ")
37 machine.send_chars("foobar\n")
38 machine.wait_until_succeeds("pgrep -u alice bash")
39 machine.send_chars("touch done\n")
+11-11
nixos/tests/pam/pam-oath-login.nix
···77 machine.screenshot("postboot")
7879 with subtest("Invalid password"):
80- switch_to_tty(2)
81- enter_user_alice(2)
8283 machine.send_chars("${oathSnakeOilPassword1}\n")
84- machine.wait_until_tty_matches(2, "Password: ")
85 machine.send_chars("blorg\n")
86- machine.wait_until_tty_matches(2, "Login incorrect")
8788 with subtest("Invalid oath token"):
89- switch_to_tty(3)
90- enter_user_alice(3)
9192 machine.send_chars("000000\n")
93- machine.wait_until_tty_matches(3, "Login incorrect")
94- machine.wait_until_tty_matches(3, "login:")
9596 with subtest("Happy path: Both passwords are mandatory to get us in"):
97- switch_to_tty(4)
98- enter_user_alice(4)
99100 machine.send_chars("${oathSnakeOilPassword2}\n")
101- machine.wait_until_tty_matches(4, "Password: ")
102 machine.send_chars("${alicePassword}\n")
103104 machine.wait_until_succeeds("pgrep -u alice bash")
···77 machine.screenshot("postboot")
7879 with subtest("Invalid password"):
80+ switch_to_tty("2")
81+ enter_user_alice("2")
8283 machine.send_chars("${oathSnakeOilPassword1}\n")
84+ machine.wait_until_tty_matches("2", "Password: ")
85 machine.send_chars("blorg\n")
86+ machine.wait_until_tty_matches("2", "Login incorrect")
8788 with subtest("Invalid oath token"):
89+ switch_to_tty("3")
90+ enter_user_alice("3")
9192 machine.send_chars("000000\n")
93+ machine.wait_until_tty_matches("3", "Login incorrect")
94+ machine.wait_until_tty_matches("3", "login:")
9596 with subtest("Happy path: Both passwords are mandatory to get us in"):
97+ switch_to_tty("4")
98+ enter_user_alice("4")
99100 machine.send_chars("${oathSnakeOilPassword2}\n")
101+ machine.wait_until_tty_matches("4", "Password: ")
102 machine.send_chars("${alicePassword}\n")
103104 machine.wait_until_succeeds("pgrep -u alice bash")