コード例 #1
0
    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))
コード例 #2
0
    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))
コード例 #3
0
    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)
コード例 #4
0
    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))
コード例 #5
0
    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))
コード例 #6
0
    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))
コード例 #7
0
    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)
コード例 #8
0
    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")])
コード例 #9
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))
コード例 #10
0
    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)
コード例 #11
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()
コード例 #12
0
    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")])
コード例 #13
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))
コード例 #14
0
    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))
コード例 #15
0
    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))