Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

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

Open
ugudip opened this issue Oct 22, 2020 · 0 comments
Labels
bug Something isn't working

Comments

@ugudip
Copy link

ugudip commented Oct 22, 2020

Hi,

My resource 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

@ugudip ugudip added the bug Something isn't working label Oct 22, 2020
johnttompkins pushed a commit to johnttompkins/cloudformation-cli-java-plugin that referenced this issue Nov 11, 2020
johnttompkins pushed a commit to johnttompkins/cloudformation-cli-java-plugin that referenced this issue Nov 11, 2020
anshikg pushed a commit to johnttompkins/cloudformation-cli-java-plugin that referenced this issue Mar 2, 2021
anshikg added a commit that referenced this issue Mar 2, 2021
* Skip validation on delete requests #318

* Replace Set of to Immutable Set

Co-authored-by: Anshika Garg <[email protected]>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
bug Something isn't working
Projects
None yet
Development

No branches or pull requests

1 participant