From f19fde48c6b3f65c164c931286e72a0d254c1fb3 Mon Sep 17 00:00:00 2001 From: Simeon Simeonov Date: Tue, 29 Mar 2022 20:44:03 +0200 Subject: Add the -P param and improve tests --- tests/test_main.py | 207 +++++++++++++++++++++++++++++++++++++++++++---------- 1 file changed, 170 insertions(+), 37 deletions(-) (limited to 'tests/test_main.py') diff --git a/tests/test_main.py b/tests/test_main.py index b48f625..a331274 100644 --- a/tests/test_main.py +++ b/tests/test_main.py @@ -1,7 +1,7 @@ # -*- coding: utf-8 -*- # SPDX-License-Identifier: BSD-2-Clause-FreeBSD # -# Copyright (c) 2020, Simeon Simeonov +# Copyright (c) 2020-2022, Simeon Simeonov # All rights reserved. # # Redistribution and use in source and binary forms, with or without @@ -25,6 +25,7 @@ # THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. """Tests for otp2289.__main__""" import os +import unittest.mock import pytest @@ -33,28 +34,34 @@ from otp2289.__main__ import main def test_main_generate_otp_response(capsys): """tests main""" - args = ['--generate-otp-response', - '-a', - 'sha1', - '-i', - '99', - '-s', - 'TesT', - '-p', - 'This is a test.'] + args = [ + '--generate-otp-response', + '-a', + 'sha1', + '-i', + '99', + '-s', + 'TesT', + '-p', + 'This is a test.', + ] with pytest.raises(SystemExit) as exit_info: main(args) captured = capsys.readouterr() - assert captured.out == (f'Seed: TesT, Step: 99, Hash: sha1{os.linesep}' - f'0x87fec7768b73ccf9{os.linesep}') + assert captured.out == ( + f'Seed: TesT, Step: 99, Hash: sha1{os.linesep}' + f'0x87fec7768b73ccf9{os.linesep}' + ) assert exit_info.type == SystemExit assert exit_info.value.code == 0 args.extend(['-f', 'token']) with pytest.raises(SystemExit) as exit_info: main(args) captured = capsys.readouterr() - assert captured.out == (f'Seed: TesT, Step: 99, Hash: sha1{os.linesep}' - f'GAFF WAIT SKID GIG SKY EYED{os.linesep}') + assert captured.out == ( + f'Seed: TesT, Step: 99, Hash: sha1{os.linesep}' + f'GAFF WAIT SKID GIG SKY EYED{os.linesep}' + ) assert exit_info.type == SystemExit assert exit_info.value.code == 0 args.append('-q') @@ -66,61 +73,187 @@ def test_main_generate_otp_response(capsys): assert exit_info.value.code == 0 +def test_main_generate_otp_response_env_passwd(capsys): + """tests main by fetching password from the env. var. 'OTP2289_PASSWORD'""" + args = [ + '--generate-otp-response', + '-a', + 'sha1', + '-i', + '99', + '-s', + 'TesT', + ] + with unittest.mock.patch.dict( + os.environ, {'OTP2289_PASSWORD': 'This is a test.'} + ): + with pytest.raises(SystemExit) as exit_info: + main(args) + captured = capsys.readouterr() + assert captured.out == ( + f'Seed: TesT, Step: 99, Hash: sha1{os.linesep}' + f'0x87fec7768b73ccf9{os.linesep}' + ) + assert exit_info.type == SystemExit + assert exit_info.value.code == 0 + args.extend(['-f', 'token']) + with pytest.raises(SystemExit) as exit_info: + main(args) + captured = capsys.readouterr() + assert captured.out == ( + f'Seed: TesT, Step: 99, Hash: sha1{os.linesep}' + f'GAFF WAIT SKID GIG SKY EYED{os.linesep}' + ) + assert exit_info.type == SystemExit + assert exit_info.value.code == 0 + args.append('-q') + with pytest.raises(SystemExit) as exit_info: + main(args) + captured = capsys.readouterr() + assert captured.out == f'GAFF WAIT SKID GIG SKY EYED{os.linesep}' + assert exit_info.type == SystemExit + assert exit_info.value.code == 0 + + def test_main_generate_otp_range(capsys): """tests main""" - args = ['--generate-otp-range', + args = [ + '--generate-otp-range', + '-i', + '2', + '-s', + 'TesT', + '-r', + '5', + '-p', + 'This is a test.', + ] + with pytest.raises(SystemExit) as exit_info: + main(args) + captured = capsys.readouterr() + assert captured.out == ( + f'Seed: TesT, Step: 2, Hash: md5, Range: 3' + f'{os.linesep}' + f'2: 0x4049f8b161669b7b{os.linesep}' + f'1: 0x7965e05436f5029f{os.linesep}' + f'0: 0x9e876134d90499dd{os.linesep}' + ) + assert exit_info.type == SystemExit + assert exit_info.value.code == 0 + args.append('-q') + with pytest.raises(SystemExit) as exit_info: + main(args) + captured = capsys.readouterr() + assert captured.out == ( + f'2: 0x4049f8b161669b7b{os.linesep}' + f'1: 0x7965e05436f5029f{os.linesep}' + f'0: 0x9e876134d90499dd{os.linesep}' + ) + assert exit_info.type == SystemExit + assert exit_info.value.code == 0 + args.extend(['-f', 'token']) + with pytest.raises(SystemExit) as exit_info: + main(args) + captured = capsys.readouterr() + assert captured.out == ( + f'2: THY AVON NO NECK COKE MOLL{os.linesep}' + f'1: EASE OIL FUM CURE AWRY AVIS{os.linesep}' + f'0: INCH SEA ANNE LONG AHEM TOUR{os.linesep}' + ) + assert exit_info.type == SystemExit + assert exit_info.value.code == 0 + + +@pytest.mark.parametrize( + 'args', + [ + [ + '--generate-otp-range', + '-i', + '2', + '-s', + 'TesT', + '-r', + '5', + ], + [ + '--generate-otp-range', '-i', '2', '-s', 'TesT', '-r', '5', - '-p', - 'This is a test.'] + '-P', + ], + ], +) +@unittest.mock.patch('getpass.getpass', lambda *args: 'This is a test.') +def test_main_generate_otp_range_passwd_prompt(capsys, args): + """tests main by prompting for password (with or without -P)""" + args = [ + '--generate-otp-range', + '-i', + '2', + '-s', + 'TesT', + '-r', + '5', + ] with pytest.raises(SystemExit) as exit_info: main(args) captured = capsys.readouterr() - assert captured.out == (f'Seed: TesT, Step: 2, Hash: md5, Range: 3' - f'{os.linesep}' - f'2: 0x4049f8b161669b7b{os.linesep}' - f'1: 0x7965e05436f5029f{os.linesep}' - f'0: 0x9e876134d90499dd{os.linesep}') + assert captured.out == ( + f'Seed: TesT, Step: 2, Hash: md5, Range: 3' + f'{os.linesep}' + f'2: 0x4049f8b161669b7b{os.linesep}' + f'1: 0x7965e05436f5029f{os.linesep}' + f'0: 0x9e876134d90499dd{os.linesep}' + ) assert exit_info.type == SystemExit assert exit_info.value.code == 0 args.append('-q') with pytest.raises(SystemExit) as exit_info: main(args) captured = capsys.readouterr() - assert captured.out == (f'2: 0x4049f8b161669b7b{os.linesep}' - f'1: 0x7965e05436f5029f{os.linesep}' - f'0: 0x9e876134d90499dd{os.linesep}') + assert captured.out == ( + f'2: 0x4049f8b161669b7b{os.linesep}' + f'1: 0x7965e05436f5029f{os.linesep}' + f'0: 0x9e876134d90499dd{os.linesep}' + ) assert exit_info.type == SystemExit assert exit_info.value.code == 0 args.extend(['-f', 'token']) with pytest.raises(SystemExit) as exit_info: main(args) captured = capsys.readouterr() - assert captured.out == (f'2: THY AVON NO NECK COKE MOLL{os.linesep}' - f'1: EASE OIL FUM CURE AWRY AVIS{os.linesep}' - f'0: INCH SEA ANNE LONG AHEM TOUR{os.linesep}') + assert captured.out == ( + f'2: THY AVON NO NECK COKE MOLL{os.linesep}' + f'1: EASE OIL FUM CURE AWRY AVIS{os.linesep}' + f'0: INCH SEA ANNE LONG AHEM TOUR{os.linesep}' + ) assert exit_info.type == SystemExit assert exit_info.value.code == 0 def test_main_initiate(capsys): """tests main""" - args = ['--initiate-new-sequence', - '-i', - '500', - '-s', - 'TesT', - '-p', - 'This is a test.'] + args = [ + '--initiate-new-sequence', + '-i', + '500', + '-s', + 'TesT', + '-p', + 'This is a test.', + ] with pytest.raises(SystemExit) as exit_info: main(args) captured = capsys.readouterr() - assert captured.out == (f'Seed: TesT, Step: 500, Hash: md5{os.linesep}' - f'0x2b8d82b6ac14346c{os.linesep}') + assert captured.out == ( + f'Seed: TesT, Step: 500, Hash: md5{os.linesep}' + f'0x2b8d82b6ac14346c{os.linesep}' + ) assert exit_info.type == SystemExit assert exit_info.value.code == 0 args.append('-q') -- cgit v1.3