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

Contract test failure - WriteOnlyProperty removed before calling a Delete handler #605

Closed
ugudip opened this issue Oct 21, 2020 · 1 comment
Labels
bug Something isn't working contract tests I'll make you an offer you can't refuse

Comments

@ugudip
Copy link
Contributor

ugudip commented Oct 21, 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 bug Something isn't working contract tests I'll make you an offer you can't refuse labels Oct 21, 2020
@ugudip ugudip closed this as completed Oct 22, 2020
@ugudip
Copy link
Contributor Author

ugudip commented Oct 22, 2020

Moved this issue to aws-cloudformation/cloudformation-cli-java-plugin#318, since it's a language specific plugin issue.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
bug Something isn't working contract tests I'll make you an offer you can't refuse
Projects
None yet
Development

No branches or pull requests

1 participant