Skip to content

Tier 3: ValidationException message strings diverge from DynamoDB #11

@hicksy

Description

@hicksy

Summary

Four request-validation error messages diverge from real DynamoDB strings. Surfaced by tier-3 exact-string assertions in the conformance suite.

Version: dynoxide 0.9.9

Cases

CreateTable: KeySchema list rendered as JSON, not Java toString

Test: tests/tier3/error-messages/createTable.test.ts "more than 2 KeySchema elements"

Expected:

Value '[KeySchemaElement(attributeName=pk, keyType=HASH), KeySchemaElement(attributeName=sk, keyType=RANGE), KeySchemaElement(attributeName=extra, keyType=RANGE)]' at 'keySchema' failed to satisfy constraint: Member must have length less than or equal to 2

Actual:

Value '[{"AttributeName":"pk","KeyType":"HASH"},{"AttributeName":"sk","KeyType":"RANGE"},{"AttributeName":"extra","KeyType":"RANGE"}]' at 'keySchema' failed to satisfy constraint: Member must have length less than or equal to 2

PutItem: empty TableName produces 2 errors with wrong length minimum

Test: tests/tier3/error-messages/putItem.test.ts "empty table name: minimum length 1 error"

Expected:

1 validation error detected: Value '' at 'tableName' failed to satisfy constraint: Member must have length greater than or equal to 1

Actual:

2 validation errors detected: Value '' at 'tableName' failed to satisfy constraint: Member must satisfy regular expression pattern: [a-zA-Z0-9_.-]+; Value '' at 'tableName' failed to satisfy constraint: Member must have length greater than or equal to 3

The 3 minimum belongs to CreateTable.TableName. Other operations require length >= 1.

Query: invalid Select enum listed alphabetically

Test: tests/tier3/error-messages/query.test.ts "invalid Select value"

Expected:

Member must satisfy enum value set: [SPECIFIC_ATTRIBUTES, COUNT, ALL_ATTRIBUTES, ALL_PROJECTED_ATTRIBUTES]

Actual:

Member must satisfy enum value set: [ALL_ATTRIBUTES, ALL_PROJECTED_ATTRIBUTES, COUNT, SPECIFIC_ATTRIBUTES]

Query: numeric range error includes rejected value

Test: tests/tier3/error-messages/query.test.ts "Limit of 0"

Expected:

Value at 'Limit' failed to satisfy constraint: Member must have value greater than or equal to 1

Actual:

Value '0' at 'Limit' failed to satisfy constraint: Member must have value greater than or equal to 1

Reproduction

git clone https://github.com/nubo-db/dynamodb-conformance.git
cd dynamodb-conformance && npm ci
npx dynoxide --port 8001 &
DYNAMODB_ENDPOINT=http://localhost:8001 \
  AWS_ACCESS_KEY_ID=fake AWS_SECRET_ACCESS_KEY=fake AWS_REGION=us-east-1 \
  npx vitest run tests/tier3/error-messages/createTable.test.ts \
                 tests/tier3/error-messages/putItem.test.ts \
                 tests/tier3/error-messages/query.test.ts

Conformance run: https://github.com/nubo-db/dynamodb-conformance/actions/runs/24932177778

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't workingv0.9.10

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions