Skip to content

AWS Kinesis destination doesn't merge partial config updates #524

@leggetter

Description

@leggetter

Description

When updating an AWS Kinesis destination with a partial config (e.g., only streamName), the backend doesn't merge the update with existing config values. Instead, it returns the original values unchanged.

1 test is currently skipped in the SDK test suite due to this bug.

Current Behavior

When sending a PATCH request with partial config:

PATCH /api/v1/{tenant_id}/destinations/{id}
{
  "type": "aws_kinesis",
  "config": {
    "streamName": "updated-stream"
    // Missing region field
  }
}

Expected: Backend merges with existing config, returns updated streamName
Actual: Backend returns original streamName value unchanged

Evidence

Test Implementation: spec-sdk-tests/tests/destinations/aws-kinesis.test.ts lines 336-349

// TODO: Re-enable this test once backend properly handles partial config updates for AWS Kinesis
it.skip('should update destination config', async () => {
  const updated = await client.updateDestination(destinationId, {
    type: 'aws_kinesis',
    config: {
      streamName: 'updated-stream', // Only updating streamName
    },
  });

  expect(updated.config.streamName).to.equal('updated-stream'); // FAILS
});

Test Error:

AssertionError: expected 'my-stream' to equal 'updated-stream'
+ expected - actual

-my-stream
+updated-stream

Comparison with Other Destination Types

AWS S3 - WORKS CORRECTLY (aws-s3.test.ts lines 332-346):

it('should update destination config', async () => {
  const updated = await client.updateDestination(destinationId, {
    type: 'aws_s3',
    config: {
      bucket: 'updated-bucket', // Only updating bucket
    },
  });

  expect(updated.config.bucket).to.equal('updated-bucket'); // PASSES ✅
});

AWS SQS - WORKS CORRECTLY (aws-sqs.test.ts lines 248-262):

it('should update destination config', async () => {
  const updated = await client.updateDestination(destinationId, {
    type: 'aws_sqs',
    config: {
      queueUrl: 'https://sqs.us-west-2.amazonaws.com/123456789012/updated-queue',
    },
  });

  expect(updated.config.queueUrl).to.equal(
    'https://sqs.us-west-2.amazonaws.com/123456789012/updated-queue'
  ); // PASSES ✅
});

Impact

  • Skipped Test: spec-sdk-tests/tests/destinations/aws-kinesis.test.ts line 336
  • Users cannot update individual Kinesis config fields without providing all fields
  • Inconsistent behavior compared to other AWS destination types

Steps to Reproduce

  1. Create AWS Kinesis destination with streamName: 'my-stream' and region: 'us-east-1'
  2. Update destination with partial config: { streamName: 'updated-stream' }
  3. Observe that returned config still has streamName: 'my-stream'

Expected Behavior

Partial config updates should merge with existing config:

  • Provided fields should be updated
  • Omitted fields should retain their existing values
  • Behavior should match AWS S3 and AWS SQS destinations

Additional Context

See detailed analysis in spec-sdk-tests/TEST_STATUS.md and spec-sdk-tests/GITHUB_ISSUES.md

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    Projects

    Status

    Backlog

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions