Beispiel #1
0
class LicenseServiceClientTests(TestCase):
    SOME_TIME = 1168602300
    EXPIRES = "2007-01-12T12:00:00Z"  # 15 minutes later

    def setUp(self):
        self._time_patcher = mock.patch('time.time')
        nowfunc = self._time_patcher.__enter__()
        nowfunc.return_value = self.SOME_TIME

        self._http_patcher = mock.patch(
            'lae_automation.aws.queryapi.make_http_request')
        self._make_http_request = self._http_patcher.__enter__()

        def fire_mocked_http_response(*a, **kw):
            d = Deferred()
            reactor.callLater(0, d.callback, SAMPLE_RESPONSE)
            return d

        self._make_http_request.side_effect = fire_mocked_http_response

        self._trimmed_fake_params = dict(FAKE_PARAMS)

        # Remove these params which are automatically added in _build_request_uri:
        del self._trimmed_fake_params['AWSAccessKeyId']
        del self._trimmed_fake_params['Expires']
        del self._trimmed_fake_params['SignatureVersion']
        del self._trimmed_fake_params['Version']

        self.lsc = LicenseServiceClient(creds=AWSCredentials(
            access_key=FAKE_AWS_ACCESS_KEY_ID, secret_key=FAKE_HMAC_KEY), )

    def tearDown(self):
        self._http_patcher.__exit__()
        self._time_patcher.__exit__()

    def test_activate_desktop_product(self):
        d = self.lsc.activate_desktop_product(FAKE_ACTIVATION_KEY,
                                              FAKE_PRODUCT_TOKEN)

        self._make_http_request.assert_called_with(
            EXPECTED_ACTIVATE_DESKTOP_PRODUCT_URL)

        def check_response(r):
            self.failUnless(isinstance(r, ActivateDesktopProductResponse))
            self.failUnlessEqual(
                (FAKE_ACCESS_KEY_ID, FAKE_SECRET_KEY, FAKE_USERTOKEN), r)

        d.addCallback(check_response)
        return d

    def test__send_request(self):
        d = self.lsc._send_request(**self._trimmed_fake_params)

        self._make_http_request.assert_called_with(EXPECTED_BUILT_URL)

        def check_response(actual):
            self.failUnlessEqual(SAMPLE_RESPONSE, actual)

        d.addCallback(check_response)
        return d

    def test__build_request_url(self):
        actual = self.lsc._build_request_url(self._trimmed_fake_params)

        self.failUnlessEqual(EXPECTED_BUILT_URL, actual)

    def test__calc_signature(self):
        actual = self.lsc._calc_signature(FAKE_PARAMS.items())

        self.failUnlessEqual(EXPECTED_BASE64_SIGNATURE, actual)

    def test__collapse_params(self):
        """
        Test vectors cut'n'pasted from documented examples:

        Reference: http://docs.amazonwebservices.com/AmazonDevPay/latest/DevPayDeveloperGuide/index.html?LSAPI_Auth_REST.html
        """
        actual = LicenseServiceClient._collapse_params(FAKE_PARAMS.items())

        self.failUnlessEqual(EXPECTED_COLLAPSED_PARAMS, actual)

    def test__collapse_params_does_not_url_encode(self):
        """
        From the reference: "Do not URL encode the parameter values."
        """
        name = 'foo'
        value = 'I have characters urlencoding escaped characters: +*&?\n\0'
        input = [(name, value)]
        expected = name + value
        actual = LicenseServiceClient._collapse_params(input)

        self.failUnlessEqual(expected, actual)

    def test_nondefault_endpoint(self):
        lsc = LicenseServiceClient(
            creds=AWSCredentials(access_key=FAKE_AWS_ACCESS_KEY_ID,
                                 secret_key=FAKE_HMAC_KEY),
            endpoint=AWSServiceEndpoint(
                uri=PRODUCTION_LICENSE_SERVICE_ENDPOINT),
        )

        self.failUnlessEqual(vars(lsc._endpoint), vars(self.lsc._endpoint))
class LicenseServiceClientTests (TestCase):
    SOME_TIME = 1168602300
    EXPIRES = "2007-01-12T12:00:00Z"  # 15 minutes later

    def setUp(self):
        self._time_patcher = mock.patch('time.time')
        nowfunc = self._time_patcher.__enter__()
        nowfunc.return_value = self.SOME_TIME

        self._http_patcher = mock.patch('lae_automation.aws.queryapi.make_http_request')
        self._make_http_request = self._http_patcher.__enter__()

        def fire_mocked_http_response(*a, **kw):
            d = Deferred()
            reactor.callLater(0, d.callback, SAMPLE_RESPONSE)
            return d

        self._make_http_request.side_effect = fire_mocked_http_response

        self._trimmed_fake_params = dict(FAKE_PARAMS)

        # Remove these params which are automatically added in _build_request_uri:
        del self._trimmed_fake_params['AWSAccessKeyId']
        del self._trimmed_fake_params['Expires']
        del self._trimmed_fake_params['SignatureVersion']
        del self._trimmed_fake_params['Version']

        self.lsc = LicenseServiceClient(
            creds=AWSCredentials(access_key=FAKE_AWS_ACCESS_KEY_ID, secret_key=FAKE_HMAC_KEY),
            )

    def tearDown(self):
        self._http_patcher.__exit__()
        self._time_patcher.__exit__()

    def test_activate_desktop_product(self):
        d = self.lsc.activate_desktop_product(FAKE_ACTIVATION_KEY, FAKE_PRODUCT_TOKEN)

        self._make_http_request.assert_called_with(EXPECTED_ACTIVATE_DESKTOP_PRODUCT_URL)

        def check_response(r):
            self.failUnless(isinstance(r, ActivateDesktopProductResponse))
            self.failUnlessEqual( (FAKE_ACCESS_KEY_ID, FAKE_SECRET_KEY, FAKE_USERTOKEN), r )

        d.addCallback(check_response)
        return d

    def test__send_request(self):
        d = self.lsc._send_request(**self._trimmed_fake_params)

        self._make_http_request.assert_called_with(EXPECTED_BUILT_URL)

        def check_response(actual):
            self.failUnlessEqual(SAMPLE_RESPONSE, actual)

        d.addCallback(check_response)
        return d

    def test__build_request_url(self):
        actual = self.lsc._build_request_url(self._trimmed_fake_params)

        self.failUnlessEqual(EXPECTED_BUILT_URL, actual)

    def test__calc_signature(self):
        actual = self.lsc._calc_signature(FAKE_PARAMS.items())

        self.failUnlessEqual(EXPECTED_BASE64_SIGNATURE, actual)

    def test__collapse_params(self):
        """
        Test vectors cut'n'pasted from documented examples:

        Reference: http://docs.amazonwebservices.com/AmazonDevPay/latest/DevPayDeveloperGuide/index.html?LSAPI_Auth_REST.html
        """
        actual = LicenseServiceClient._collapse_params(FAKE_PARAMS.items())

        self.failUnlessEqual(EXPECTED_COLLAPSED_PARAMS, actual)

    def test__collapse_params_does_not_url_encode(self):
        """
        From the reference: "Do not URL encode the parameter values."
        """
        name = 'foo'
        value = 'I have characters urlencoding escaped characters: +*&?\n\0'
        input = [ (name, value) ]
        expected = name + value
        actual = LicenseServiceClient._collapse_params(input)

        self.failUnlessEqual(expected, actual)

    def test_nondefault_endpoint(self):
        lsc = LicenseServiceClient(
            creds=AWSCredentials(access_key=FAKE_AWS_ACCESS_KEY_ID, secret_key=FAKE_HMAC_KEY),
            endpoint=AWSServiceEndpoint(uri=PRODUCTION_LICENSE_SERVICE_ENDPOINT),
            )

        self.failUnlessEqual(vars(lsc._endpoint), vars(self.lsc._endpoint))