|
- import unittest
-
- from lesspass.password import generate_password
- from lesspass import password
-
-
- class TestPassword(unittest.TestCase):
- def test_generate_password(self):
- profile = {
- "site": "example.org",
- "login": "contact@example.org",
- "lowercase": True,
- "uppercase": True,
- "digits": True,
- "symbols": True,
- "length": 16,
- "counter": 1,
- }
- master_password = "password"
- self.assertEqual(
- generate_password(profile, master_password), "WHLpUL)e00[iHR+w"
- )
-
- def test_generate_password_2(self):
- profile = {
- "site": "example.org",
- "login": "contact@example.org",
- "lowercase": True,
- "uppercase": True,
- "digits": True,
- "symbols": False,
- "length": 14,
- "counter": 2,
- }
- master_password = "password"
- self.assertEqual(generate_password(profile, master_password), "MBAsB7b1Prt8Sl")
-
- def test_generate_password_3(self):
- profile = {
- "site": "example.org",
- "login": "contact@example.org",
- "lowercase": False,
- "uppercase": False,
- "digits": True,
- "symbols": False,
- "length": 16,
- "counter": 1,
- }
- master_password = "password"
- self.assertEqual(
- generate_password(profile, master_password), "8742368585200667"
- )
-
- def test_generate_password_4(self):
- profile = {
- "site": "example.org",
- "login": "contact@example.org",
- "lowercase": True,
- "uppercase": True,
- "digits": False,
- "symbols": True,
- "length": 16,
- "counter": 1,
- }
- master_password = "password"
- self.assertEqual(
- generate_password(profile, master_password), "s>{F}RwkN/-fmM.X"
- )
-
- def test_generate_password_nrt_328(self):
- profile = {
- "site": "site",
- "login": "login",
- "lowercase": True,
- "uppercase": True,
- "digits": True,
- "symbols": True,
- "length": 16,
- "counter": 10,
- }
- master_password = "test"
- self.assertEqual(
- generate_password(profile, master_password), "XFt0F*,r619:+}[."
- )
-
- def test_generate_password_unicode(self):
- profile = {
- "site": "♥ LessPass ♥",
- "login": "test@example.org",
- "lowercase": True,
- "uppercase": True,
- "digits": True,
- "symbols": True,
- "length": 16,
- "counter": 1,
- }
- master_password = "password"
- self.assertEqual(
- generate_password(profile, master_password), "BH$>U5Lj7v9A1wB/"
- )
-
- def test_calc_entropy(self):
- password_profile = {
- "site": "example.org",
- "login": "contact@example.org",
- "counter": 1,
- }
- master_password = "password"
-
- self.assertEqual(
- password._calc_entropy(password_profile, master_password),
- 99600400399777174105034830393873797761817714609490038944205586760025858632478,
- )
-
- def test_get_configured_rules_empty_when_no_rules_in_profile(self):
- password_profile = {}
-
- self.assertListEqual(password._get_configured_rules(password_profile), [])
-
- def test_get_configured_rules_ignore_disable_rules(self):
- password_profile = {
- "lowercase": False,
- "uppercase": True,
- "digits": False,
- "symbols": True,
- }
-
- self.assertListEqual(
- password._get_configured_rules(password_profile), ["uppercase", "symbols"]
- )
-
- def test_get_set_of_characters_without_rule(self):
- self.assertEqual(
- password._get_set_of_characters(),
- "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789!\"#$%&'()*+,-./:;<=>?@[\\]^_`{|}~",
- )
-
- def test_get_set_of_characters_with_single_rule(self):
- self.assertEqual(
- password._get_set_of_characters(["lowercase"]), "abcdefghijklmnopqrstuvwxyz"
- )
- self.assertEqual(
- password._get_set_of_characters(["uppercase"]), "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
- )
- self.assertEqual(password._get_set_of_characters(["digits"]), "0123456789")
- self.assertEqual(
- password._get_set_of_characters(["symbols"]),
- "!\"#$%&'()*+,-./:;<=>?@[\\]^_`{|}~",
- )
-
- def test_get_set_of_characters_with_several_rules(self):
- self.assertEqual(
- password._get_set_of_characters(["lowercase", "digits"]),
- "abcdefghijklmnopqrstuvwxyz0123456789",
- )
-
- def test_get_set_of_characters_with_several_rules_and_exclude(self):
- self.assertEqual(
- password._get_set_of_characters(["lowercase", "digits"], 'iy4!'),
- "abcdefghjklmnopqrstuvwxz012356789",
- )
-
- def test_consume_entropy(self):
- entropy = b"dc33d431bce2b01182c613382483ccdb0e2f66482cbba5e9d07dab34acc7eb1e"
-
- password_value, password_entropy = password._consume_entropy(
- generated_password="",
- quotient=int(entropy, 16),
- set_of_characters="abcdefghijklmnopqrstuvwxyz0123456789",
- max_length=12,
- )
-
- self.assertEqual(password_value, "gsrwvjl3d0sn")
- self.assertEqual(
- password_entropy,
- 21019920789038193790619410818194537836313158091882651458040,
- )
-
- def test_get_one_char_per_rule_without_rules(self):
- self.assertListEqual(
- password._get_one_char_per_rule(
- entropy=21019920789038193790619410818194537836313158091882651458040,
- rules=[],
- ),
- ["", 21019920789038193790619410818194537836313158091882651458040],
- )
-
- def test_get_one_char_per_rule_with_several_rules(self):
- self.assertListEqual(
- password._get_one_char_per_rule(
- entropy=21019920789038193790619410818194537836313158091882651458040,
- rules=["lowercase", "digits"],
- ),
- ["a0", 80845849188608437656228503146902068601204454199548659454],
- )
-
- def test_insert_string_pseudo_randomly(self):
- self.assertEqual(
- password._insert_string_pseudo_randomly(
- generated_password="gsrwvjl3d0sn",
- entropy=80845849188608437656228503146902068601204454199548659454,
- string="a0",
- ),
- "gsrwvjl03d0asn",
- )
-
- def test_render_password(self):
- password_profile = {
- "site": "example.org",
- "login": "contact@example.org",
- "digits": True,
- "lowercase": True,
- "length": 14,
- "counter": 1,
- }
- master_password = "password"
- entropy = password._calc_entropy(password_profile, master_password)
-
- self.assertEqual(
- password._render_password(entropy, password_profile), "gsrwvjl03d0asn"
- )
|