def test_name1_all(self, mock_chall_path): dom = "0" combos = acme_util.gen_combos(acme_util.CHALLENGES) self.handler.add_chall_msg( dom, messages.Challenge(session_id=dom, nonce="nonce0", challenges=acme_util.CHALLENGES, combinations=combos), "dummy_key") path = gen_path([acme_util.SIMPLE_HTTPS, acme_util.RECOVERY_TOKEN], acme_util.CHALLENGES) mock_chall_path.return_value = path self.handler._satisfy_challenges() # pylint: disable=protected-access self.assertEqual(len(self.handler.responses), 1) self.assertEqual(len(self.handler.responses[dom]), len(acme_util.CHALLENGES)) self.assertEqual(len(self.handler.dv_c), 1) self.assertEqual(len(self.handler.cont_c), 1) self.assertEqual(len(self.handler.dv_c[dom]), 1) self.assertEqual(len(self.handler.cont_c[dom]), 1) self.assertEqual( self.handler.responses[dom], self._get_exp_response(dom, path, acme_util.CHALLENGES)) self.assertTrue( isinstance(self.handler.dv_c[dom][0].achall, achallenges.SimpleHTTPS)) self.assertTrue( isinstance(self.handler.cont_c[dom][0].achall, achallenges.RecoveryToken))
def test_name5_dvsni5(self): for i in xrange(5): self.handler.add_chall_msg( str(i), messages.Challenge(session_id=str(i), nonce="nonce%d" % i, challenges=[acme_util.DVSNI], combinations=[]), "dummy_key") self.handler._satisfy_challenges() # pylint: disable=protected-access self.assertEqual(len(self.handler.responses), 5) self.assertEqual(len(self.handler.dv_c), 5) self.assertEqual(len(self.handler.cont_c), 5) # Each message contains 1 auth, 0 client # Test proper call count for methods self.assertEqual(self.mock_cont_auth.perform.call_count, 0) self.assertEqual(self.mock_dv_auth.perform.call_count, 1) for i in xrange(5): dom = str(i) self.assertEqual(len(self.handler.responses[dom]), 1) self.assertEqual(self.handler.responses[dom][0], "DVSNI%d" % i) self.assertEqual(len(self.handler.dv_c[dom]), 1) self.assertEqual(len(self.handler.cont_c[dom]), 0) self.assertTrue( isinstance(self.handler.dv_c[dom][0].achall, achallenges.DVSNI))
def test_name1_rectok1(self): dom = "0" challenge = [acme_util.CHALLENGES["recoveryToken"]] msg = messages.Challenge(session_id=dom, nonce="nonce0", challenges=challenge, combinations=[]) self.handler.add_chall_msg(dom, msg, "dummy_key") self.handler._satisfy_challenges() # pylint: disable=protected-access self.assertEqual(len(self.handler.responses), 1) self.assertEqual(len(self.handler.responses[dom]), 1) # Test if statement for dv_auth perform self.assertEqual(self.mock_client_auth.perform.call_count, 1) self.assertEqual(self.mock_dv_auth.perform.call_count, 0) self.assertEqual("RecTokenChall0", self.handler.responses[dom][0]) # Assert 1 domain self.assertEqual(len(self.handler.dv_c), 1) self.assertEqual(len(self.handler.client_c), 1) # Assert 1 auth challenge, 0 dv self.assertEqual(len(self.handler.dv_c[dom]), 0) self.assertEqual(len(self.handler.client_c[dom]), 1)
def test_name1_auth(self, mock_chall_path): dom = "0" self.handler.add_chall_msg( dom, messages.Challenge(session_id="0", nonce="nonce0", challenges=acme_util.DV_CHALLENGES, combinations=acme_util.gen_combos( acme_util.DV_CHALLENGES)), "dummy_key") path = gen_path([acme_util.SIMPLE_HTTPS], acme_util.DV_CHALLENGES) mock_chall_path.return_value = path self.handler._satisfy_challenges() # pylint: disable=protected-access self.assertEqual(len(self.handler.responses), 1) self.assertEqual(len(self.handler.responses[dom]), len(acme_util.DV_CHALLENGES)) self.assertEqual(len(self.handler.dv_c), 1) self.assertEqual(len(self.handler.cont_c), 1) # Test if statement for cont_auth perform self.assertEqual(self.mock_cont_auth.perform.call_count, 0) self.assertEqual(self.mock_dv_auth.perform.call_count, 1) self.assertEqual( self.handler.responses[dom], self._get_exp_response(dom, path, acme_util.DV_CHALLENGES)) self.assertEqual(len(self.handler.dv_c[dom]), 1) self.assertEqual(len(self.handler.cont_c[dom]), 0) self.assertTrue( isinstance(self.handler.dv_c[dom][0].achall, achallenges.SimpleHTTPS))
def test_name1_all(self, mock_chall_path): dom = "0" challenges = acme_util.get_challenges() combos = acme_util.gen_combos(challenges) self.handler.add_chall_msg( dom, messages.Challenge(session_id=dom, nonce="nonce0", challenges=challenges, combinations=combos), "dummy_key") path = gen_path(["simpleHttps", "recoveryToken"], challenges) mock_chall_path.return_value = path self.handler._satisfy_challenges() # pylint: disable=protected-access self.assertEqual(len(self.handler.responses), 1) self.assertEqual(len(self.handler.responses[dom]), len(challenges)) self.assertEqual(len(self.handler.dv_c), 1) self.assertEqual(len(self.handler.client_c), 1) self.assertEqual(len(self.handler.dv_c[dom]), 1) self.assertEqual(len(self.handler.client_c[dom]), 1) self.assertEqual(self.handler.responses[dom], self._get_exp_response(dom, path, challenges)) self.assertTrue( isinstance(self.handler.dv_c[dom][0].chall, challenge_util.SimpleHttpsChall)) self.assertTrue( isinstance(self.handler.client_c[dom][0].chall, challenge_util.RecTokenChall))
def test_name5_mix(self, mock_chall_path): paths = [] chosen_chall = [[acme_util.DNS], [acme_util.DVSNI], [acme_util.SIMPLE_HTTPS, acme_util.POP], [acme_util.SIMPLE_HTTPS], [acme_util.DNS, acme_util.RECOVERY_TOKEN]] challenge_list = [ acme_util.DV_CHALLENGES, [acme_util.DVSNI], acme_util.CHALLENGES, acme_util.DV_CHALLENGES, acme_util.CHALLENGES ] # Combos doesn't matter since I am overriding the gen_path function for i in xrange(5): dom = str(i) paths.append(gen_path(chosen_chall[i], challenge_list[i])) self.handler.add_chall_msg( dom, messages.Challenge(session_id=dom, nonce="nonce%d" % i, challenges=challenge_list[i], combinations=[]), "dummy_key") mock_chall_path.side_effect = paths self.handler._satisfy_challenges() # pylint: disable=protected-access self.assertEqual(len(self.handler.responses), 5) self.assertEqual(len(self.handler.dv_c), 5) self.assertEqual(len(self.handler.cont_c), 5) for i in xrange(5): dom = str(i) resp = self._get_exp_response(i, paths[i], challenge_list[i]) self.assertEqual(self.handler.responses[dom], resp) self.assertEqual(len(self.handler.dv_c[dom]), 1) self.assertEqual(len(self.handler.cont_c[dom]), len(chosen_chall[i]) - 1) self.assertTrue( isinstance(self.handler.dv_c["0"][0].achall, achallenges.DNS)) self.assertTrue( isinstance(self.handler.dv_c["1"][0].achall, achallenges.DVSNI)) self.assertTrue( isinstance(self.handler.dv_c["2"][0].achall, achallenges.SimpleHTTPS)) self.assertTrue( isinstance(self.handler.dv_c["3"][0].achall, achallenges.SimpleHTTPS)) self.assertTrue( isinstance(self.handler.dv_c["4"][0].achall, achallenges.DNS)) self.assertTrue( isinstance(self.handler.cont_c["2"][0].achall, achallenges.ProofOfPossession)) self.assertTrue( isinstance(self.handler.cont_c["4"][0].achall, achallenges.RecoveryToken))
def test_progress_failure(self): self.handler.add_chall_msg( "0", messages.Challenge(session_id="0", nonce="nonce0", challenges=acme_util.CHALLENGES, combinations=[]), "dummy_key") # Don't do anything to satisfy challenges self.mock_sat_chall.side_effect = self._sat_failure self.assertRaises(errors.LetsEncryptAuthHandlerError, self.handler.get_authorizations) # Check to make sure program didn't loop self.assertEqual(self.mock_sat_chall.call_count, 1)
def test_incremental_progress(self): for dom, challs in [("0", acme_util.CHALLENGES), ("1", acme_util.DV_CHALLENGES)]: self.handler.add_chall_msg( dom, messages.Challenge(session_id=dom, nonce="nonce", combinations=[], challenges=challs), "dummy_key") self.mock_sat_chall.side_effect = self._sat_incremental self.handler.get_authorizations() self._test_finished() self.assertEqual(self.mock_acme_auth.call_args_list, [mock.call("1"), mock.call("0")])
def test_perform_exception_cleanup(self, mock_chall_path): """3 Challenge messages... fail perform... clean up.""" # pylint: disable=protected-access self.mock_dv_auth.perform.side_effect = errors.LetsEncryptDvsniError challenges = acme_util.get_challenges() combos = acme_util.gen_combos(challenges) for i in xrange(3): self.handler.add_chall_msg( str(i), messages.Challenge(session_id=str(i), nonce="nonce%d" % i, challenges=challenges, combinations=combos), "dummy_key") mock_chall_path.side_effect = [ gen_path(["dvsni", "proofOfPossession"], challenges), gen_path(["proofOfPossession"], challenges), gen_path(["dvsni"], challenges), ] # This may change in the future... but for now catch the error self.assertRaises(errors.LetsEncryptAuthHandlerError, self.handler._satisfy_challenges) # Verify cleanup is actually run correctly self.assertEqual(self.mock_dv_auth.cleanup.call_count, 2) self.assertEqual(self.mock_client_auth.cleanup.call_count, 2) dv_cleanup_args = self.mock_dv_auth.cleanup.call_args_list client_cleanup_args = self.mock_client_auth.cleanup.call_args_list # Check DV cleanup for i in xrange(2): dv_chall_list = dv_cleanup_args[i][0][0] self.assertEqual(len(dv_chall_list), 1) self.assertTrue( isinstance(dv_chall_list[0], challenge_util.DvsniChall)) # Check Auth cleanup for i in xrange(2): client_chall_list = client_cleanup_args[i][0][0] self.assertEqual(len(client_chall_list), 1) self.assertTrue( isinstance(client_chall_list[0], challenge_util.PopChall))
def test_name1_dvsni1(self): dom = "0" msg = messages.Challenge(session_id=dom, nonce="nonce0", combinations=[], challenges=[acme_util.DVSNI]) self.handler.add_chall_msg(dom, msg, "dummy_key") self.handler._satisfy_challenges() # pylint: disable=protected-access self.assertEqual(len(self.handler.responses), 1) self.assertEqual(len(self.handler.responses[dom]), 1) self.assertEqual("DVSNI0", self.handler.responses[dom][0]) self.assertEqual(len(self.handler.dv_c), 1) self.assertEqual(len(self.handler.cont_c), 1) self.assertEqual(len(self.handler.dv_c[dom]), 1) self.assertEqual(len(self.handler.cont_c[dom]), 0)
def test_solved3_at_once(self): # Set 3 DVSNI challenges for i in xrange(3): self.handler.add_chall_msg( str(i), messages.Challenge(session_id=str(i), nonce="nonce%d" % i, challenges=[acme_util.DVSNI], combinations=[]), "dummy_key") self.mock_sat_chall.side_effect = self._sat_solved_at_once self.handler.get_authorizations() self.assertEqual(self.mock_sat_chall.call_count, 1) self.assertEqual(self.mock_acme_auth.call_count, 3) exp_call_list = [mock.call("0"), mock.call("1"), mock.call("2")] self.assertEqual(self.mock_acme_auth.call_args_list, exp_call_list) self._test_finished()
def test_incremental_progress(self): challs = [] challs.append(acme_util.get_challenges()) challs.append(acme_util.get_dv_challenges()) for i in xrange(2): dom = str(i) self.handler.add_chall_msg( dom, messages.Challenge(session_id=dom, nonce="nonce%d" % i, challenges=challs[i], combinations=[]), "dummy_key") self.mock_sat_chall.side_effect = self._sat_incremental self.handler.get_authorizations() self._test_finished() self.assertEqual(self.mock_acme_auth.call_args_list, [mock.call("1"), mock.call("0")])
def test_name5_all(self, mock_chall_path): combos = acme_util.gen_combos(acme_util.CHALLENGES) for i in xrange(5): self.handler.add_chall_msg( str(i), messages.Challenge(session_id=str(i), nonce="nonce%d" % i, challenges=acme_util.CHALLENGES, combinations=combos), "dummy_key") path = gen_path([acme_util.DVSNI, acme_util.RECOVERY_CONTACT], acme_util.CHALLENGES) mock_chall_path.return_value = path self.handler._satisfy_challenges() # pylint: disable=protected-access self.assertEqual(len(self.handler.responses), 5) for i in xrange(5): self.assertEqual(len(self.handler.responses[str(i)]), len(acme_util.CHALLENGES)) self.assertEqual(len(self.handler.dv_c), 5) self.assertEqual(len(self.handler.cont_c), 5) for i in xrange(5): dom = str(i) self.assertEqual( self.handler.responses[dom], self._get_exp_response(dom, path, acme_util.CHALLENGES)) self.assertEqual(len(self.handler.dv_c[dom]), 1) self.assertEqual(len(self.handler.cont_c[dom]), 1) self.assertTrue( isinstance(self.handler.dv_c[dom][0].achall, achallenges.DVSNI)) self.assertTrue( isinstance(self.handler.cont_c[dom][0].achall, achallenges.RecoveryContact))
def test_name5_all(self, mock_chall_path): challenges = acme_util.get_challenges() combos = acme_util.gen_combos(challenges) for i in xrange(5): self.handler.add_chall_msg( str(i), messages.Challenge(session_id=str(i), nonce="nonce%d" % i, challenges=challenges, combinations=combos), "dummy_key") path = gen_path(["dvsni", "recoveryContact"], challenges) mock_chall_path.return_value = path self.handler._satisfy_challenges() # pylint: disable=protected-access self.assertEqual(len(self.handler.responses), 5) for i in xrange(5): self.assertEqual(len(self.handler.responses[str(i)]), len(challenges)) self.assertEqual(len(self.handler.dv_c), 5) self.assertEqual(len(self.handler.client_c), 5) for i in xrange(5): dom = str(i) self.assertEqual(self.handler.responses[dom], self._get_exp_response(dom, path, challenges)) self.assertEqual(len(self.handler.dv_c[dom]), 1) self.assertEqual(len(self.handler.client_c[dom]), 1) self.assertTrue( isinstance(self.handler.dv_c[dom][0].chall, challenge_util.DvsniChall)) self.assertTrue( isinstance(self.handler.client_c[dom][0].chall, challenge_util.RecContactChall))
def test_name5_mix(self, mock_chall_path): paths = [] chosen_chall = [["dns"], ["dvsni"], ["simpleHttps", "proofOfPossession"], ["simpleHttps"], ["dns", "recoveryToken"]] challenge_list = [ acme_util.get_dv_challenges(), [acme_util.CHALLENGES["dvsni"]], acme_util.get_challenges(), acme_util.get_dv_challenges(), acme_util.get_challenges() ] # Combos doesn't matter since I am overriding the gen_path function for i in xrange(5): dom = str(i) paths.append(gen_path(chosen_chall[i], challenge_list[i])) self.handler.add_chall_msg( dom, messages.Challenge(session_id=dom, nonce="nonce%d" % i, challenges=challenge_list[i], combinations=[]), "dummy_key") mock_chall_path.side_effect = paths self.handler._satisfy_challenges() # pylint: disable=protected-access self.assertEqual(len(self.handler.responses), 5) self.assertEqual(len(self.handler.dv_c), 5) self.assertEqual(len(self.handler.client_c), 5) for i in xrange(5): dom = str(i) resp = self._get_exp_response(i, paths[i], challenge_list[i]) self.assertEqual(self.handler.responses[dom], resp) self.assertEqual(len(self.handler.dv_c[dom]), 1) self.assertEqual(len(self.handler.client_c[dom]), len(chosen_chall[i]) - 1) self.assertTrue( isinstance(self.handler.dv_c["0"][0].chall, challenge_util.DnsChall)) self.assertTrue( isinstance(self.handler.dv_c["1"][0].chall, challenge_util.DvsniChall)) self.assertTrue( isinstance(self.handler.dv_c["2"][0].chall, challenge_util.SimpleHttpsChall)) self.assertTrue( isinstance(self.handler.dv_c["3"][0].chall, challenge_util.SimpleHttpsChall)) self.assertTrue( isinstance(self.handler.dv_c["4"][0].chall, challenge_util.DnsChall)) self.assertTrue( isinstance(self.handler.client_c["2"][0].chall, challenge_util.PopChall)) self.assertTrue( isinstance(self.handler.client_c["4"][0].chall, challenge_util.RecTokenChall))