def test_digits_and_lower_single_password(self): rules = PasswordRules() rules.learn('ab1') generator = PasswordGenerator(rules) self.assertEqual(1, generator.count_rules()) snapshots = [s for s in generator.iter_rules()] self.assertEqual(1, len(snapshots)) self.assertEqual([1, 2], snapshots[0].counts) passwords = [p for p in snapshots[0].iter_passwords()] expected = (permutations(10, 1) * permutations(26, 2)) * 3 self.assertEqual(expected, len(passwords))
def test_password_count(self): rules = PasswordRules() rules.learn('abbdABBD12') rules.learn('abbdABBD^2') generator = PasswordGenerator(rules) self.assertEqual(2, generator.count_rules()) snapshots = [s for s in generator.iter_rules()] self.assertEqual(2, len(snapshots)) self.assertEqual([4, 2, 4, 0], snapshots[0].counts) chs = (26 * 2) * (26 * 2 - 1) * (26 * 2 - 2) * (26 * 2 - 3) / (2 * 3 * 4) self.assertEqual(10 * chs * chs * (10 * 9 / 2), snapshots[0].count_passwords()) self.assertEqual([4, 1, 4, 1], snapshots[1].counts) self.assertEqual(10 * chs * chs * 10 * 29, snapshots[1].count_passwords())
def test_empty(self): rules = PasswordRules() generator = PasswordGenerator(rules) snapshots = [s for s in generator.iter_rules()] self.assertEqual(0, len(snapshots)) self.assertEqual(0, generator.count_rules())