aws-cloudformation / aws-cloudformation/cloudformation-cli-java-plugin

WriteOnlyProperty removed before calling a Delete handler - Contract tests failure due to language specific plugin

Ouverte
#318 0 commentaires 0 réactions 0 personnes assignées Voir sur GitHub
bug
Langage dominant
Java
Étoiles
30
Forks
48
Métriques de merge des PR
Aucune PR mergée en 30 j

Description

Hi,

[My resource](https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-cloudformation/tree/master/aws-cloudformation-resourceversion) has a property "SchemaHandlerPackage", which is both a **required** property and a **writeOnlyProperty**. I am running contract_create_delete on my resource. The create handler is invoked and returns success after creating the resource. I return all required properties and the primary ID in the resourceModel after creating the resource.

My create handler returns IN_PROGRESS two times because it takes sometime to create the resource. For these two calls, I see the "SchemaHandlerPackage" in the response(because I return it in the intermediate response as well), something like this(in rpdk.log):

```
[2020-10-19T19:46:46Z] DEBUG - Received response
{
'status': 'IN_PROGRESS',
'callbackContext': {removed the values here},
'callbackDelaySeconds': 5,
'resourceModel': {
'Arn': 'arn:aws:cloudformation:us-west-2:336098619110:type/resource/Organization-Service-Resource17/00000033',
'SchemaHandlerPackage': 's3: //cloudformationsampleresourcetype/organization-service-resource17.zip',
'TypeName': 'Organization::Service::Resource17'
}
}
```
But when the handler returns success, the "SchemaHandlerPackage" is disappeared from the response, even though I set it in the code:

```
[2020-10-19T19:47:32Z] DEBUG - Received response{
'status': 'SUCCESS',
'callbackDelaySeconds': 0,
'resourceModel': {
'Arn': 'arn:aws:cloudformation:us-west-2:336098619110:type/resource/Organization-Service-Resource17/00000033',
'Description': 'Anexampleresourceschemademonstratingsomebasicconstructsandvalidationrules.',
'IsDefaultVersion': False,
'LastUpdated': '2020-10-19T19: 46: 50.047Z',
'ProvisioningType': 'FULLY_MUTABLE',
'Schema': {},
'SourceUrl': 'https: //github.com/aws-cloudformation/aws-cloudformation-rpdk.git',
'TimeCreated': '2020-10-19T19: 46: 50.047Z',
'TypeName': 'Organization::Service::Resource17',
'VersionId': '00000033',
'Visibility': 'PRIVATE'
}
}
```

I later found out that the writeOnlyProperties are removed before framing the request to the delete handler. By doing this, the writeOnlyProperty, which is also a required property is getting removed, hence the delete handler fails due to a validation error, which results in that contract test failure.

```
[2020-10-19T19:48:07Z] DEBUG - Received response
{'status': 'FAILED', 'errorCode': 'InvalidRequest', 'message': 'Model validation failed (#: required key [SchemaHandlerPackage] not found)', 'callbackDelaySeconds': 0}
[2020-10-19T19:48:08Z] DEBUG - Caught exit recommendation
```

Solution: Is the "required property validation" necessary for a delete handler? Checking for a Primary Id should be enough for a delete handler as per https://docs.aws.amazon.com/cloudformation-cli/latest/userguide/resource-type-test-contract.html#resource-type-test-contract-delete Or you can remove a writeOnlyProperty only if it's not a required property.

Thanks,
Uma

Guide de contribution

Ouvrir le guide de contribution

Évaluation

Cette issue n'a pas encore été évaluée.

Recevez les nouvelles issues par e-mail

Un résumé court des issues GitHub adaptées aux débutants.