Skip to content

Commit 95881e4

Browse files
authored
Change entry point to prod from test for contract test (#533)
* Change entry point to prod from test for contrcat test * Update Model for Prod entry point
1 parent 0823067 commit 95881e4

File tree

6 files changed

+98
-59
lines changed

6 files changed

+98
-59
lines changed

src/rpdk/core/contract/resource_client.py

Lines changed: 42 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -317,22 +317,32 @@ def assert_failed(status, response):
317317
return error_code
318318

319319
@staticmethod
320+
# pylint: disable=R0913
320321
def make_request(
321322
desired_resource_state,
322323
previous_resource_state,
323324
region,
324325
account,
325326
partition,
327+
action,
328+
creds,
329+
token,
330+
callback_context=None,
326331
**kwargs
327332
):
328333
return {
329-
"desiredResourceState": desired_resource_state,
330-
"previousResourceState": previous_resource_state,
331-
"logicalResourceIdentifier": "test",
332-
**kwargs,
334+
"requestData": {
335+
"callerCredentials": creds,
336+
"resourceProperties": desired_resource_state,
337+
"previousResourceProperties": previous_resource_state,
338+
"logicalResourceIdentifier": token,
339+
},
333340
"region": region,
334341
"awsPartition": partition,
335342
"awsAccountId": account,
343+
"action": action,
344+
"callbackContext": callback_context,
345+
**kwargs,
336346
}
337347

338348
@staticmethod
@@ -368,17 +378,30 @@ def is_primary_identifier_equal(
368378
for primary_identifier in primary_identifier_path
369379
)
370380

371-
def _make_payload(self, action, request, callback_context=None):
372-
return {
373-
"credentials": self._creds.copy(),
374-
"action": action,
375-
"request": {"clientRequestToken": self.generate_token(), **request},
376-
"callbackContext": callback_context,
377-
}
381+
def _make_payload(self, action, current_model, previous_model=None, **kwargs):
382+
return self.make_request(
383+
current_model,
384+
previous_model,
385+
self.region,
386+
self.account,
387+
self.partition,
388+
action,
389+
self._creds.copy(),
390+
self.generate_token(),
391+
**kwargs
392+
)
378393

379394
def _call(self, payload):
380395
payload_to_log = {
381-
key: payload[key] for key in ["callbackContext", "action", "request"]
396+
key: payload[key]
397+
for key in [
398+
"callbackContext",
399+
"action",
400+
"requestData",
401+
"region",
402+
"awsPartition",
403+
"awsAccountId",
404+
]
382405
}
383406
LOG.debug(
384407
"Sending request\n%s",
@@ -397,27 +420,19 @@ def call_and_assert(
397420
):
398421
if assert_status not in [OperationStatus.SUCCESS, OperationStatus.FAILED]:
399422
raise ValueError("Assert status {} not supported.".format(assert_status))
400-
request = self.make_request(
401-
current_model,
402-
previous_model,
403-
self.region,
404-
self.account,
405-
self.partition,
406-
**kwargs
407-
)
408423

409-
status, response = self.call(action, request)
424+
status, response = self.call(action, current_model, previous_model, **kwargs)
410425
if assert_status == OperationStatus.SUCCESS:
411426
self.assert_success(status, response)
412427
error_code = None
413428
else:
414429
error_code = self.assert_failed(status, response)
415430
return status, response, error_code
416431

417-
def call(self, action, request):
418-
payload = self._make_payload(action, request)
432+
def call(self, action, current_model, previous_model=None, **kwargs):
433+
request = self._make_payload(action, current_model, previous_model, **kwargs)
419434
start_time = time.time()
420-
response = self._call(payload)
435+
response = self._call(request)
421436
self.assert_time(start_time, time.time(), action)
422437

423438
# this throws a KeyError if status isn't present, or if it isn't a valid status
@@ -434,11 +449,10 @@ def call(self, action, request):
434449
)
435450
sleep(callback_delay_seconds)
436451

437-
request["desiredResourceState"] = response.get("resourceModel")
438-
payload["callbackContext"] = response.get("callbackContext")
439-
payload["request"] = request
452+
request["requestData"]["resourceProperties"] = response.get("resourceModel")
453+
request["callbackContext"] = response.get("callbackContext")
440454

441-
response = self._call(payload)
455+
response = self._call(request)
442456
status = OperationStatus[response["status"]]
443457

444458
# ensure writeOnlyProperties are not returned on final responses

src/rpdk/core/contract/suite/handler_delete.py

Lines changed: 1 addition & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -38,14 +38,7 @@ def deleted_resource(resource_client):
3838
assert "resourceModel" not in response
3939
yield model, request
4040
finally:
41-
request = resource_client.make_request(
42-
model,
43-
None,
44-
resource_client.region,
45-
resource_client.account,
46-
resource_client.partition,
47-
)
48-
status, response = resource_client.call(Action.DELETE, request)
41+
status, response = resource_client.call(Action.DELETE, model)
4942

5043
# a failed status is allowed if the error code is NotFound
5144
if status == OperationStatus.FAILED:

src/rpdk/core/test.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@
2828
LOG = logging.getLogger(__name__)
2929

3030
DEFAULT_ENDPOINT = "http://127.0.0.1:3001"
31-
DEFAULT_FUNCTION = "TestEntrypoint"
31+
DEFAULT_FUNCTION = "TypeFunction"
3232
DEFAULT_REGION = "us-east-1"
3333
DEFAULT_TIMEOUT = "30"
3434
INPUTS = "inputs"

tests/contract/test_resource_client.py

Lines changed: 25 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -228,19 +228,25 @@ def test_make_request():
228228
request = ResourceClient.make_request(
229229
desired_resource_state,
230230
previous_resource_state,
231-
"us-west-2",
232-
"11111111",
231+
"us-east-1",
232+
ACCOUNT,
233233
"aws",
234-
clientRequestToken=token,
234+
"CREATE",
235+
{},
236+
token,
235237
)
236238
assert request == {
237-
"desiredResourceState": desired_resource_state,
238-
"previousResourceState": previous_resource_state,
239-
"logicalResourceIdentifier": "test",
240-
"clientRequestToken": token,
241-
"region": "us-west-2",
239+
"requestData": {
240+
"callerCredentials": {},
241+
"resourceProperties": desired_resource_state,
242+
"previousResourceProperties": previous_resource_state,
243+
"logicalResourceIdentifier": token,
244+
},
245+
"region": DEFAULT_REGION,
242246
"awsPartition": "aws",
243-
"awsAccountId": "11111111",
247+
"awsAccountId": ACCOUNT,
248+
"action": "CREATE",
249+
"callbackContext": None,
244250
}
245251

246252

@@ -495,17 +501,24 @@ def test_has_writable_identifier_compound_is_writeable(resource_client):
495501
assert resource_client.has_writable_identifier()
496502

497503

498-
def test__make_payload(resource_client):
504+
def test_make_payload(resource_client):
499505
resource_client._creds = {}
500506

501507
token = "ecba020e-b2e6-4742-a7d0-8a06ae7c4b2f"
502508
with patch.object(resource_client, "generate_token", return_value=token):
503509
payload = resource_client._make_payload("CREATE", {"foo": "bar"})
504510

505511
assert payload == {
506-
"credentials": {},
512+
"requestData": {
513+
"callerCredentials": {},
514+
"resourceProperties": {"foo": "bar"},
515+
"previousResourceProperties": None,
516+
"logicalResourceIdentifier": token,
517+
},
518+
"region": DEFAULT_REGION,
519+
"awsPartition": "aws",
520+
"awsAccountId": ACCOUNT,
507521
"action": "CREATE",
508-
"request": {"clientRequestToken": token, "foo": "bar"},
509522
"callbackContext": None,
510523
}
511524

tests/test_invoke.py

Lines changed: 25 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212
from rpdk.core.project import Project
1313

1414
ACTIONS = list(Action.__members__)
15+
ACCOUNT = "11111111"
1516

1617

1718
@pytest.fixture
@@ -20,9 +21,16 @@ def payload_path(tmp_path):
2021
with path.open("w", encoding="utf-8") as f:
2122
json.dump(
2223
{
23-
"desiredResourceState": None,
24-
"previousResourceState": None,
25-
"logicalResourceIdentifier": None,
24+
"requestData": {
25+
"resourceProperties": {},
26+
"previousResourceProperties": None,
27+
"logicalResourceIdentifier": None,
28+
"providerLogGroupName": "test_resource_contract_test",
29+
},
30+
"region": "us-west-2",
31+
"awsPartition": "aws",
32+
"awsAccountId": "11111111",
33+
"resourceType": "test",
2634
},
2735
f,
2836
)
@@ -163,14 +171,22 @@ def _invoke_and_expect(status, payload_path, command, *args):
163171
autospec=True,
164172
return_value={},
165173
)
174+
patch_account = patch(
175+
"rpdk.core.contract.resource_client.get_account",
176+
autospec=True,
177+
return_value=ACCOUNT,
178+
)
166179

167180
with patch_project, patch_session as mock_session, patch_creds as mock_creds:
168-
mock_client = mock_session.return_value.client.return_value
169-
mock_client.invoke.side_effect = lambda **_kwargs: {
170-
"Payload": StringIO(json.dumps({"status": status}))
171-
}
172-
main(args_in=["invoke", command, str(payload_path), *args])
173-
181+
with patch_account as mock_account:
182+
mock_client = mock_session.return_value.client.return_value
183+
mock_client.invoke.side_effect = lambda **_kwargs: {
184+
"Payload": StringIO(json.dumps({"status": status}))
185+
}
186+
mock_account.return_value = ACCOUNT
187+
main(args_in=["invoke", command, str(payload_path), *args])
188+
189+
# mock_account.assert_called_once_with(mock_client)
174190
mock_creds.assert_called_once()
175191

176192
return mock_project, mock_client.invoke

tests/test_project.py

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,7 @@
4242
ENDPOINT = "cloudformation.beta.com"
4343
RUNTIME = random.choice(list(LAMBDA_RUNTIMES))
4444
BLANK_CLIENT_ERROR = {"Error": {"Code": "", "Message": ""}}
45-
45+
LOG = logging.getLogger(__name__)
4646
REGISTRATION_TOKEN = "foo"
4747
TYPE_ARN = "arn:aws:cloudformation:us-east-1:123456789012:type/resource/Foo-Bar-Foo"
4848
TYPE_VERSION_ARN = (
@@ -277,6 +277,9 @@ def test_generate_docs_with_multityped_property(project, tmp_path_factory):
277277
read_me_stripped = readme_contents.strip().replace(" ", "")
278278
read_me_target_stripped = readme_contents_target.read().strip().replace(" ", "")
279279

280+
LOG.debug("read_me_stripped %s", read_me_stripped)
281+
LOG.debug("read_me_target_stripped %s", read_me_target_stripped)
282+
280283
assert project.type_name in readme_contents
281284
assert read_me_stripped == read_me_target_stripped
282285

0 commit comments

Comments
 (0)