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))