def test_good_address_disassociate(self):
        """ Tests that disassociate runs when clean. """

        ctx = self.mock_relationship_context('test_good_address_detach')
        current_ctx.set(ctx=ctx)
        address = self.get_address()
        instance_id = self.get_instance_id()

        ctx.target.instance.runtime_properties['aws_resource_id'] = \
            address.public_ip
        ctx.source.instance.runtime_properties['instance_id'] = instance_id
        ctx.source.instance.runtime_properties['ip'] = address.public_ip
        elasticip.disassociate(ctx=ctx)
    def test_existing_address_disassociate(self):
        """ Tests that when an address that is in the user's
            EC2 account is provided to the disassociate function
            no errors are raised
        """

        ctx = self.mock_relationship_context(
            'test_existing_address_disassociate')
        current_ctx.set(ctx=ctx)
        address = self.get_address()
        instance_id = self.get_instance_id()
        ctx.target.node.properties['use_external_resource'] = True
        ctx.target.node.properties['resource_id'] = address.public_ip
        ctx.target.instance.runtime_properties['aws_resource_id'] = \
            address.public_ip
        ctx.source.node.properties['use_external_resource'] = True
        ctx.source.node.properties['resource_id'] = instance_id
        ctx.source.instance.runtime_properties['aws_resource_id'] = \
            instance_id
        ctx.source.instance.runtime_properties['public_ip_address'] = \
            address.public_ip
        elasticip.disassociate(ctx=ctx)
        self.assertNotIn(
            'public_ip_address', ctx.source.instance.runtime_properties)