def test_scenario_1_simple_vote(self): with ConsoleLogDuration("### administrator_creates_election"): self.administrator_creates_election() with ConsoleLogDuration( "### administrator_regenerates_passwords_for_some_voters"): self.administrator_regenerates_passwords_for_some_voters() with ConsoleLogDuration( "### verify_election_consistency using `belenios_tool verify` (#0)" ): verify_election_consistency(self.election_id) with ConsoleLogDuration("### all_voters_vote_in_sequences"): self.all_voters_vote_in_sequences() with ConsoleLogDuration( "### verify_election_consistency using `belenios_tool verify` (#1)" ): verify_election_consistency(self.election_id) with ConsoleLogDuration("### create_election_data_snapshot (#0)"): snapshot_folder = create_election_data_snapshot(self.election_id) console_log("snapshot_folder: ", snapshot_folder) try: with ConsoleLogDuration("### some_voters_revote"): self.some_voters_revote() with ConsoleLogDuration( "### verify_election_consistency using `belenios_tool verify-diff` (#2)" ): verify_election_consistency(self.election_id, snapshot_folder) finally: with ConsoleLogDuration("### delete_election_data_snapshot"): delete_election_data_snapshot(snapshot_folder) with ConsoleLogDuration( "### verify_election_consistency using `belenios_tool verify` (#3)" ): verify_election_consistency(self.election_id) with ConsoleLogDuration("### administrator_does_tallying_of_election"): self.administrator_does_tallying_of_election() with ConsoleLogDuration( "### verify_election_consistency using `belenios_tool verify` (#4)" ): verify_election_consistency(self.election_id) with ConsoleLogDuration( "### one_voter_revotes_after_the_election_is_closed"): self.one_voter_revotes_after_the_election_is_closed()
def test_scenario_1_simple_vote(self): console_log("### Starting step: administrator_creates_election") self.administrator_creates_election(nh_question=True) console_log("### Step complete: administrator_creates_election") console_log("### Starting step: administrator_regenerates_passwords_for_some_voters") self.administrator_regenerates_passwords_for_some_voters() console_log("### Step complete: administrator_regenerates_passwords_for_some_voters") console_log("### Starting step: verify_election_consistency using `belenios_tool verify` (0)") verify_election_consistency(self.election_id) console_log("### Step complete: verify_election_consistency using `belenios_tool verify` (0)") console_log("### Starting step: all_voters_vote_in_sequences") self.all_voters_vote_in_sequences() console_log("### Step complete: all_voters_vote_in_sequences") console_log("### Starting step: verify_election_consistency using `belenios_tool verify` (1)") verify_election_consistency(self.election_id) console_log("### Step complete: verify_election_consistency using `belenios_tool verify` (1)") console_log("### Starting step: create_election_data_snapshot (0)") snapshot_folder = create_election_data_snapshot(self.election_id) console_log("### Step complete: create_election_data_snapshot (0)") try: console_log("### Starting step: some_voters_revote") self.some_voters_revote() console_log("### Step complete: some_voters_revote") console_log("### Starting step: verify_election_consistency using `belenios_tool verify-diff` (0)") verify_election_consistency(self.election_id, snapshot_folder) finally: delete_election_data_snapshot(snapshot_folder) console_log("### Step complete: verify_election_consistency using `belenios_tool verify-diff` (0)") console_log("### Starting step: verify_election_consistency using `belenios_tool verify` (2)") verify_election_consistency(self.election_id) console_log("### Step complete: verify_election_consistency using `belenios_tool verify` (2)") console_log("### Starting step: administrator_does_tallying_of_election") self.administrator_does_tallying_of_election() console_log("### Step complete: administrator_does_tallying_of_election") console_log("### Starting step: verify_election_consistency using `belenios_tool verify` (3)") verify_election_consistency(self.election_id) console_log("### Step complete: verify_election_consistency using `belenios_tool verify` (3)") console_log("### Starting step: voter votes after the election is closed") self.one_voter_revotes_after_the_election_is_closed() console_log("### Step complete: voter votes after the election is closed")
def test_scenario_1_simple_vote(self): console_log("### Starting step: administrator_creates_election") self.administrator_creates_election() console_log("### Step complete: administrator_creates_election") console_log("### Starting step: administrator_regenerates_passwords_for_some_voters") self.administrator_regenerates_passwords_for_some_voters() console_log("### Step complete: administrator_regenerates_passwords_for_some_voters") console_log("### Starting step: verify_election_consistency using `belenios_tool verify` (0)") verify_election_consistency(self.election_id) console_log("### Step complete: verify_election_consistency using `belenios_tool verify` (0)") console_log("### Starting step: all_voters_vote_in_sequences") self.all_voters_vote_in_sequences() console_log("### Step complete: all_voters_vote_in_sequences") console_log("### Starting step: verify_election_consistency using `belenios_tool verify` (1)") verify_election_consistency(self.election_id) console_log("### Step complete: verify_election_consistency using `belenios_tool verify` (1)") console_log("### Starting step: create_election_data_snapshot (0)") snapshot_folder = create_election_data_snapshot(self.election_id) console_log("### Step complete: create_election_data_snapshot (0)") try: console_log("### Starting step: some_voters_revote") self.some_voters_revote() console_log("### Step complete: some_voters_revote") console_log("### Starting step: verify_election_consistency using `belenios_tool verify-diff` (0)") verify_election_consistency(self.election_id, snapshot_folder) finally: delete_election_data_snapshot(snapshot_folder) console_log("### Step complete: verify_election_consistency using `belenios_tool verify-diff` (0)") console_log("### Starting step: verify_election_consistency using `belenios_tool verify` (2)") verify_election_consistency(self.election_id) console_log("### Step complete: verify_election_consistency using `belenios_tool verify` (2)") console_log("### Starting step: administrator_does_tallying_of_election") self.administrator_does_tallying_of_election() console_log("### Step complete: administrator_does_tallying_of_election") console_log("### Starting step: verify_election_consistency using `belenios_tool verify` (3)") verify_election_consistency(self.election_id) console_log("### Step complete: verify_election_consistency using `belenios_tool verify` (3)") console_log("### Starting step: voter votes after the election is closed") self.one_voter_revotes_after_the_election_is_closed() console_log("### Step complete: voter votes after the election is closed")
def some_voters_vote_in_sequences(self, voters=None, start_index=0, end_index=None, verify_every_x_votes=5): """ Iterates over `voters` from index `start_index` to `end_index`, cast their vote, and checks vote data consistency for every batch of `verify_every_x_votes` votes (using `belenios_tool verify-diff` and a snapshot of election data copied in previous batch). """ if start_index < 0: raise Exception("start_index cannot be below 0") current_start_index = start_index if end_index is None: end_index = settings.NUMBER_OF_VOTING_VOTERS elif end_index > settings.NUMBER_OF_VOTING_VOTERS: raise Exception("end_index cannot exceeed NUMBER_OF_VOTING_VOTERS") if voters is None: voters = self.voters_email_addresses voters_who_will_vote_now = voters[start_index:end_index] voters_who_will_vote_now_data = populate_credential_and_password_for_voters_from_sent_emails(self.fake_sent_emails_manager, voters_who_will_vote_now, settings.ELECTION_TITLE) voters_who_will_vote_now_data = populate_random_votes_for_voters(voters_who_will_vote_now_data) self.update_voters_data(voters_who_will_vote_now_data) snapshot_folder = None while current_start_index < end_index: increment = verify_every_x_votes # could be randomized current_end_index = current_start_index + increment if current_end_index > end_index: current_end_index = end_index if current_start_index > 0: console_log("#### Starting substep: create_election_data_snapshot") snapshot_folder = create_election_data_snapshot(self.election_id) console_log("#### Substep complete: create_election_data_snapshot") try: console_log("#### A batch of " + str(current_end_index - current_start_index) + " voters, indexed " + str(current_start_index) + " to " + str(current_end_index - 1) + " are now going to vote") self.some_voters_cast_their_vote(voters_who_will_vote_now_data[current_start_index:current_end_index]) console_log("#### A batch of " + str(current_end_index - current_start_index) + " voters, indexed " + str(current_start_index) + " to " + str(current_end_index - 1) + " have now voted") if current_start_index > 0: console_log("#### Starting substep: verify_election_consistency using `belenios_tool verify-diff` (for a batch of votes)") verify_election_consistency(self.election_id, snapshot_folder) console_log("#### Substep complete: verify_election_consistency using `belenios_tool verify-diff` (for a batch of votes)") finally: if current_start_index > 0: console_log("#### Starting substep: delete_election_data_snapshot") delete_election_data_snapshot(snapshot_folder) console_log("#### Substep complete: delete_election_data_snapshot") current_start_index += increment
def test_scenario_2_manual_vote(self): console_log( "### Running test method BeleniosTestElectionScenario2::test_scenario_2_manual_vote()" ) with ConsoleLogDuration( "### administrator_starts_creation_of_manual_election"): self.administrator_starts_creation_of_manual_election() with ConsoleLogDuration( "### credential_authority_sends_credentials_to_voters"): self.credential_authority_sends_credentials_to_voters() with ConsoleLogDuration("### administrator_invites_trustees"): self.administrator_invites_trustees() with ConsoleLogDuration("### trustees_generate_election_private_keys"): self.trustees_generate_election_private_keys() with ConsoleLogDuration( "### administrator_completes_creation_of_election"): self.administrator_completes_creation_of_election() with ConsoleLogDuration( "### verify_election_consistency using `belenios_tool verify` (#0)" ): verify_election_consistency(self.election_id) with ConsoleLogDuration("### all_voters_vote_in_sequences"): self.all_voters_vote_in_sequences() with ConsoleLogDuration( "### verify_election_consistency using `belenios_tool verify` (#1)" ): verify_election_consistency(self.election_id) with ConsoleLogDuration( "### Starting step: create_election_data_snapshot (#0)"): snapshot_folder = create_election_data_snapshot(self.election_id) console_log("snapshot_folder: ", snapshot_folder) try: with ConsoleLogDuration("### some_voters_revote"): self.some_voters_revote() with ConsoleLogDuration( "### verify_election_consistency using `belenios_tool verify-diff` (#2)" ): verify_election_consistency(self.election_id, snapshot_folder) finally: with ConsoleLogDuration("### delete_election_data_snapshot"): delete_election_data_snapshot(snapshot_folder) with ConsoleLogDuration( "### verify_election_consistency using `belenios_tool verify` (#3)" ): verify_election_consistency(self.election_id) with ConsoleLogDuration( "### administrator_starts_tallying_of_election"): self.administrator_starts_tallying_of_election() with ConsoleLogDuration("### trustees_do_partial_decryption"): self.trustees_do_partial_decryption() with ConsoleLogDuration( "### administrator_finishes_tallying_of_election"): self.administrator_finishes_tallying_of_election() with ConsoleLogDuration( "### verify_election_consistency using `belenios_tool verify` (#4)" ): verify_election_consistency(self.election_id)
def test_scenario_2_manual_vote(self): console_log("### Starting step: administrator_starts_creation_of_manual_election") self.administrator_starts_creation_of_manual_election() console_log("### Step complete: administrator_starts_creation_of_manual_election") console_log("### Starting step: credential_authority_sends_credentials_to_voters") self.credential_authority_sends_credentials_to_voters() console_log("### Step complete: credential_authority_sends_credentials_to_voters") console_log("### Starting step: administrator_invites_trustees") self.administrator_invites_trustees() console_log("### Step complete: administrator_invites_trustees") console_log("### Starting step: trustees_generate_election_private_keys") self.trustees_generate_election_private_keys() console_log("### Step complete: trustees_generate_election_private_keys") console_log("### Starting step: administrator_completes_creation_of_election") self.administrator_completes_creation_of_election() console_log("### Step complete: administrator_completes_creation_of_election") console_log("### Starting step: verify_election_consistency using `belenios_tool verify` (0)") verify_election_consistency(self.election_id) console_log("### Step complete: verify_election_consistency using `belenios_tool verify` (0)") console_log("### Starting step: all_voters_vote_in_sequences") self.all_voters_vote_in_sequences() console_log("### Step complete: all_voters_vote_in_sequences") console_log("### Starting step: verify_election_consistency using `belenios_tool verify` (1)") verify_election_consistency(self.election_id) console_log("### Step complete: verify_election_consistency using `belenios_tool verify` (1)") console_log("### Starting step: create_election_data_snapshot (0)") snapshot_folder = create_election_data_snapshot(self.election_id) console_log("### Step complete: create_election_data_snapshot (0)") try: console_log("### Starting step: some_voters_revote") self.some_voters_revote() console_log("### Step complete: some_voters_revote") console_log("### Starting step: verify_election_consistency using `belenios_tool verify-diff` (0)") verify_election_consistency(self.election_id, snapshot_folder) finally: delete_election_data_snapshot(snapshot_folder) console_log("### Step complete: verify_election_consistency using `belenios_tool verify-diff` (0)") console_log("### Starting step: verify_election_consistency using `belenios_tool verify` (2)") verify_election_consistency(self.election_id) console_log("### Step complete: verify_election_consistency using `belenios_tool verify` (2)") console_log("### Starting step: administrator_starts_tallying_of_election") self.administrator_starts_tallying_of_election() console_log("### Step complete: administrator_starts_tallying_of_election") console_log("### Starting step: trustees_do_partial_decryption") self.trustees_do_partial_decryption() console_log("### Step complete: trustees_do_partial_decryption") console_log("### Starting step: administrator_finishes_tallying_of_election") self.administrator_finishes_tallying_of_election() console_log("### Step complete: administrator_finishes_tallying_of_election") console_log("### Starting step: verify_election_consistency using `belenios_tool verify` (3)") verify_election_consistency(self.election_id) console_log("### Step complete: verify_election_consistency using `belenios_tool verify` (3)")
def some_voters_vote_in_sequences(self, voters=None, start_index=0, end_index=None, verify_every_x_votes=5): """ Iterates over `voters` from index `start_index` (included) to `end_index` (not included), cast their vote, and checks vote data consistency for every batch of `verify_every_x_votes` votes (using `belenios_tool verify-diff` and a snapshot of election data copied in previous batch). """ if start_index < 0: raise Exception("start_index cannot be below 0") current_start_index = start_index if end_index is None: end_index = settings.NUMBER_OF_VOTING_VOTERS elif end_index > settings.NUMBER_OF_VOTING_VOTERS: raise Exception("end_index cannot exceeed NUMBER_OF_VOTING_VOTERS") if voters is None: voters = self.voters_email_addresses voters_who_will_vote_now = voters[start_index:end_index] voters_who_will_vote_now_data = populate_credential_and_password_for_voters_from_sent_emails( self.fake_sent_emails_manager, voters_who_will_vote_now, settings.ELECTION_TITLE) voters_who_will_vote_now_data = populate_random_votes_for_voters( voters_who_will_vote_now_data) self.update_voters_data(voters_who_will_vote_now_data) snapshot_folder = None while current_start_index < end_index: increment = verify_every_x_votes # could be randomized current_end_index = current_start_index + increment if current_end_index > end_index: current_end_index = end_index if current_start_index > 0: console_log( "#### Starting substep: create_election_data_snapshot") snapshot_folder = create_election_data_snapshot( self.election_id) console_log( "#### Substep complete: create_election_data_snapshot") try: console_log("#### A batch of " + str(current_end_index - current_start_index) + " voters, indexed " + str(current_start_index) + " to " + str(current_end_index - 1) + " included are now going to vote") sublist_start_index = current_start_index - start_index sublist_end_index = current_end_index - start_index self.some_voters_cast_their_vote(voters_who_will_vote_now_data[ sublist_start_index:sublist_end_index]) console_log("#### A batch of " + str(current_end_index - current_start_index) + " voters, indexed " + str(current_start_index) + " to " + str(current_end_index - 1) + " included have now voted") if current_start_index > 0: console_log( "#### Starting substep: verify_election_consistency using `belenios_tool verify-diff` (for a batch of votes)" ) verify_election_consistency(self.election_id, snapshot_folder) console_log( "#### Substep complete: verify_election_consistency using `belenios_tool verify-diff` (for a batch of votes)" ) finally: if current_start_index > 0: console_log( "#### Starting substep: delete_election_data_snapshot") delete_election_data_snapshot(snapshot_folder) console_log( "#### Substep complete: delete_election_data_snapshot") current_start_index += increment
def test_scenario_4_manual_vote_with_threshold(self): console_log( "### Running test method BeleniosTestElectionScenario4::test_scenario_4_manual_vote_with_threshold()" ) console_log( "### Starting step: administrator_starts_creation_of_manual_election" ) self.administrator_starts_creation_of_manual_election() console_log( "### Step complete: administrator_starts_creation_of_manual_election" ) console_log( "### Starting step: credential_authority_sends_credentials_to_voters" ) self.credential_authority_sends_credentials_to_voters() console_log( "### Step complete: credential_authority_sends_credentials_to_voters" ) console_log( "### Starting step: administrator_invites_trustees_and_sets_threshold" ) self.administrator_invites_trustees_and_sets_threshold() console_log( "### Step complete: administrator_invites_trustees_and_sets_threshold" ) console_log( "### Starting step: trustees_do_initialization_step_1_of_3") self.trustees_do_initialization_step_1_of_3() console_log( "### Step complete: trustees_do_initialization_step_1_of_3") console_log( "### Starting step: trustees_do_initialization_step_2_of_3") self.trustees_do_initialization_step_2_of_3() console_log( "### Step complete: trustees_do_initialization_step_2_of_3") console_log( "### Starting step: trustees_do_initialization_step_3_of_3") self.trustees_do_initialization_step_3_of_3() console_log( "### Step complete: trustees_do_initialization_step_3_of_3") console_log( "### Starting step: administrator_completes_creation_of_election") self.administrator_completes_creation_of_election() console_log( "### Step complete: administrator_completes_creation_of_election") console_log( "### Starting step: verify_election_consistency using `belenios_tool verify` (0)" ) verify_election_consistency(self.election_id) console_log( "### Step complete: verify_election_consistency using `belenios_tool verify` (0)" ) console_log("### Starting step: all_voters_vote_in_sequences") self.all_voters_vote_in_sequences() console_log("### Step complete: all_voters_vote_in_sequences") console_log( "### Starting step: verify_election_consistency using `belenios_tool verify` (1)" ) verify_election_consistency(self.election_id) console_log( "### Step complete: verify_election_consistency using `belenios_tool verify` (1)" ) console_log("### Starting step: create_election_data_snapshot (0)") snapshot_folder = create_election_data_snapshot(self.election_id) console_log("### Step complete: create_election_data_snapshot (0)") try: console_log("### Starting step: some_voters_revote") self.some_voters_revote() console_log("### Step complete: some_voters_revote") console_log( "### Starting step: verify_election_consistency using `belenios_tool verify-diff` (0)" ) verify_election_consistency(self.election_id, snapshot_folder) finally: delete_election_data_snapshot(snapshot_folder) console_log( "### Step complete: verify_election_consistency using `belenios_tool verify-diff` (0)" ) console_log( "### Starting step: verify_election_consistency using `belenios_tool verify` (2)" ) verify_election_consistency(self.election_id) console_log( "### Step complete: verify_election_consistency using `belenios_tool verify` (2)" ) console_log( "### Starting step: administrator_starts_tallying_of_election") self.administrator_starts_tallying_of_election( settings.TRUSTEES_THRESHOLD_VALUE) console_log( "### Step complete: administrator_starts_tallying_of_election") console_log("### Starting step: trustees_do_partial_decryption") self.trustees_do_partial_decryption(settings.TRUSTEES_THRESHOLD_VALUE) console_log("### Step complete: trustees_do_partial_decryption") console_log( "### Starting step: administrator_finishes_tallying_of_election") self.administrator_finishes_tallying_of_election( settings.TRUSTEES_THRESHOLD_VALUE) console_log( "### Step complete: administrator_finishes_tallying_of_election") console_log( "### Starting step: verify_election_consistency using `belenios_tool verify` (3)" ) verify_election_consistency(self.election_id) console_log( "### Step complete: verify_election_consistency using `belenios_tool verify` (3)" )
def test_scenario_2_manual_vote(self): console_log( "### Starting step: administrator_starts_creation_of_manual_election" ) self.administrator_starts_creation_of_manual_election() console_log( "### Step complete: administrator_starts_creation_of_manual_election" ) console_log( "### Starting step: credential_authority_sends_credentials_to_voters" ) self.credential_authority_sends_credentials_to_voters() console_log( "### Step complete: credential_authority_sends_credentials_to_voters" ) console_log("### Starting step: administrator_invites_trustees") self.administrator_invites_trustees() console_log("### Step complete: administrator_invites_trustees") console_log( "### Starting step: trustees_generate_election_private_keys") self.trustees_generate_election_private_keys() console_log( "### Step complete: trustees_generate_election_private_keys") console_log( "### Starting step: administrator_completes_creation_of_election") self.administrator_completes_creation_of_election() console_log( "### Step complete: administrator_completes_creation_of_election") console_log( "### Starting step: verify_election_consistency using `belenios_tool verify` (0)" ) verify_election_consistency(self.election_id) console_log( "### Step complete: verify_election_consistency using `belenios_tool verify` (0)" ) console_log("### Starting step: all_voters_vote_in_sequences") self.all_voters_vote_in_sequences() console_log("### Step complete: all_voters_vote_in_sequences") console_log( "### Starting step: verify_election_consistency using `belenios_tool verify` (1)" ) verify_election_consistency(self.election_id) console_log( "### Step complete: verify_election_consistency using `belenios_tool verify` (1)" ) console_log("### Starting step: create_election_data_snapshot (0)") snapshot_folder = create_election_data_snapshot(self.election_id) console_log("### Step complete: create_election_data_snapshot (0)") try: console_log("### Starting step: some_voters_revote") self.some_voters_revote() console_log("### Step complete: some_voters_revote") console_log( "### Starting step: verify_election_consistency using `belenios_tool verify-diff` (0)" ) verify_election_consistency(self.election_id, snapshot_folder) finally: delete_election_data_snapshot(snapshot_folder) console_log( "### Step complete: verify_election_consistency using `belenios_tool verify-diff` (0)" ) console_log( "### Starting step: verify_election_consistency using `belenios_tool verify` (2)" ) verify_election_consistency(self.election_id) console_log( "### Step complete: verify_election_consistency using `belenios_tool verify` (2)" ) console_log( "### Starting step: administrator_starts_tallying_of_election") self.administrator_starts_tallying_of_election() console_log( "### Step complete: administrator_starts_tallying_of_election") console_log("### Starting step: trustees_do_partial_decryption") self.trustees_do_partial_decryption() console_log("### Step complete: trustees_do_partial_decryption") console_log( "### Starting step: administrator_finishes_tallying_of_election") self.administrator_finishes_tallying_of_election() console_log( "### Step complete: administrator_finishes_tallying_of_election") console_log( "### Starting step: verify_election_consistency using `belenios_tool verify` (3)" ) verify_election_consistency(self.election_id) console_log( "### Step complete: verify_election_consistency using `belenios_tool verify` (3)" )
def test_scenario_2_manual_vote_with_monkeys(self): console_log( "### Running test method BeleniosTestElectionScenario2WithMonkeys::test_scenario_2_manual_vote_with_monkeys()" ) with ConsoleLogDuration( "### administrator_starts_creation_of_manual_election"): self.administrator_starts_creation_of_manual_election() with ConsoleLogDuration( "### credential_authority_sends_credentials_to_voters"): self.credential_authority_sends_credentials_to_voters() with ConsoleLogDuration("### administrator_invites_trustees"): self.administrator_invites_trustees() with ConsoleLogDuration("### trustees_generate_election_private_keys"): self.trustees_generate_election_private_keys() with ConsoleLogDuration( "### administrator_completes_creation_of_election"): self.administrator_completes_creation_of_election() with ConsoleLogDuration( "### verify_election_consistency using `belenios_tool verify` (#0)" ): verify_election_consistency(self.election_id) self.voters_data = { } # We reset this (set by `BeleniosTestElectionWithCreationBase`) because we generate voters data in several parts voters_who_will_vote = random.sample(self.voters_email_addresses, settings.NUMBER_OF_VOTING_VOTERS) console_log("voters who will vote:", voters_who_will_vote) start_index_of_voters_who_vote_in_first_part = 0 end_index_of_voters_who_vote_in_first_part = settings.NUMBER_OF_VOTING_VOTERS_IN_FIRST_PART console_log( f"number of (normal) voters who will vote in first part: {end_index_of_voters_who_vote_in_first_part} (indexes {start_index_of_voters_who_vote_in_first_part} included to {end_index_of_voters_who_vote_in_first_part} excluded)" ) start_index_of_voters_who_vote_in_second_part = end_index_of_voters_who_vote_in_first_part end_index_of_voters_who_vote_in_second_part = end_index_of_voters_who_vote_in_first_part + settings.NUMBER_OF_MONKEY_VOTING_VOTERS console_log( f"number of (smart monkey) voters who will vote in second part: {end_index_of_voters_who_vote_in_second_part - start_index_of_voters_who_vote_in_second_part} (indexes {start_index_of_voters_who_vote_in_second_part} included to {end_index_of_voters_who_vote_in_second_part} excluded)" ) start_index_of_voters_who_vote_in_third_part = end_index_of_voters_who_vote_in_second_part end_index_of_voters_who_vote_in_third_part = settings.NUMBER_OF_VOTING_VOTERS console_log( f"number of (normal) voters who will vote in third part: {end_index_of_voters_who_vote_in_third_part - start_index_of_voters_who_vote_in_third_part} (indexes {start_index_of_voters_who_vote_in_third_part} included to {end_index_of_voters_who_vote_in_third_part} excluded)" ) verify_every_x_votes = 5 with ConsoleLogDuration( "### some_voters_vote_in_sequences (first part)"): self.some_voters_vote_in_sequences( voters_who_will_vote, start_index=start_index_of_voters_who_vote_in_first_part, end_index=end_index_of_voters_who_vote_in_first_part, verify_every_x_votes=verify_every_x_votes) with ConsoleLogDuration("### smart monkeys vote (second part)"): smart_monkey_voters_who_will_vote_now = voters_who_will_vote[ start_index_of_voters_who_vote_in_second_part: end_index_of_voters_who_vote_in_second_part] timeout = settings.EXPLICIT_WAIT_TIMEOUT voters_who_will_vote_now_data = populate_credential_and_password_for_voters_from_sent_emails( self.fake_sent_emails_manager, smart_monkey_voters_who_will_vote_now, settings.ELECTION_TITLE) voters_who_will_vote_now_data = populate_random_votes_for_voters( voters_who_will_vote_now_data) self.update_voters_data(voters_who_will_vote_now_data) for idx, voter in enumerate(voters_who_will_vote_now_data): console_log( f"#### Voting as smart monkey {idx+1} of {settings.NUMBER_OF_MONKEY_VOTING_VOTERS}" ) voter_email_address = voter["email_address"] voter_username = voter["username"] voter_password = voter["password"] voter_credential = voter["credential"] voter_decided_vote = voter["votes"] election_url = voter[ "election_page_url"] # this is the same as `election_id_to_election_home_page_url(self.election_id)` smart_ballot_tracker = smart_monkey_votes( self.browser, timeout, election_url, voter_username, voter_password, voter_credential, voter_decided_vote) if smart_ballot_tracker: voter["smart_ballot_tracker"] = smart_ballot_tracker else: raise Exception( "Monkey voter did not complete its vote properly") self.voters_email_addresses_who_have_voted[ voter_email_address] = True self.browser.quit() self.browser = initialize_browser_for_scenario_2() with ConsoleLogDuration( "### some_voters_vote_in_sequences (third part)"): self.some_voters_vote_in_sequences( voters_who_will_vote, start_index=start_index_of_voters_who_vote_in_third_part, end_index=end_index_of_voters_who_vote_in_third_part, verify_every_x_votes=verify_every_x_votes) with ConsoleLogDuration( "### verify_election_consistency using `belenios_tool verify` (#1)" ): verify_election_consistency(self.election_id) with ConsoleLogDuration( "### Starting step: create_election_data_snapshot (#0)"): snapshot_folder = create_election_data_snapshot(self.election_id) console_log("snapshot_folder: ", snapshot_folder) try: with ConsoleLogDuration("### some_voters_revote"): self.some_voters_revote() with ConsoleLogDuration( "### verify_election_consistency using `belenios_tool verify-diff` (#2)" ): verify_election_consistency(self.election_id, snapshot_folder) finally: with ConsoleLogDuration("### delete_election_data_snapshot"): delete_election_data_snapshot(snapshot_folder) with ConsoleLogDuration( "### verify_election_consistency using `belenios_tool verify` (#3)" ): verify_election_consistency(self.election_id) with ConsoleLogDuration( "### administrator_starts_tallying_of_election"): self.administrator_starts_tallying_of_election() with ConsoleLogDuration("### trustees_do_partial_decryption"): self.trustees_do_partial_decryption() with ConsoleLogDuration( "### administrator_finishes_tallying_of_election"): self.administrator_finishes_tallying_of_election() with ConsoleLogDuration( "### verify_election_consistency using `belenios_tool verify` (#4)" ): verify_election_consistency(self.election_id)