import { deepFreezeValue } from '../private/canonicaljson.js'; import type { IObjectStorageMigrationPrepareRequest, IUnfencedObjectStorageBindingControlSnapshot, TActiveObjectStorageBinding, TStagedObjectStorageBinding, TUnfencedObjectStorageBindingControlSnapshotDigestPayload, } from './storagemigration.js'; export interface IStorageMigrationCanonicalDigestGoldenVector { input: TInput; canonicalJson: string; sha256: string; } const capabilities = { performanceTier: 'capacity', durability: 'persistent', topology: 'singleNode', hardQuota: true, snapshots: 'none', backup: true, encryptedInTransit: true, } as const; const delivery = { type: 'launcher-environment', keys: { endpoint: 'APP_S3_ENDPOINT', bucket: 'APP_S3_BUCKET', region: 'APP_S3_REGION', accessKeyId: 'APP_S3_ACCESS_KEY', secretAccessKey: 'APP_S3_SECRET_KEY', }, } as const; const credentialManagementScope = 'platform:object-storage-binding'; const sourceBinding: TActiveObjectStorageBinding = { schemaVersion: 2, id: 'binding-object', serviceId: 'service-app', requestId: 'object-data', requestDigest: '1111111111111111111111111111111111111111111111111111111111111111', kind: 'objectStorage', generation: 3, observedGeneration: 3, status: 'ready', policy: { classId: 'source-object', revision: '1', }, capabilities, resourceRef: 'source-resource', accessMode: 'readWrite', connection: { endpoint: 'https://source.example.test', bucket: 'source-bucket', region: 'local', }, credentialManagementScope, delivery, versioning: false, createdAt: 1_700_000_000_000, updatedAt: 1_700_000_000_001, }; const target = { policy: { classId: 'capacity-object', revision: '4', }, storageClass: { kind: 'objectStorage', purpose: 'backup', required: { performanceTier: 'capacity', durability: 'persistent', backup: true, }, }, request: { id: 'object-data', kind: 'objectStorage', storageClass: 'backupCapacity', capacity: { request: '500GiB', limit: '1TiB', }, reclaimPolicy: 'retain', accessMode: 'readWrite', delivery, }, credentialManagementScope, } as const; const preparationSnapshotPayload: TUnfencedObjectStorageBindingControlSnapshotDigestPayload = { schemaVersion: 2, binding: sourceBinding, recordRevision: 12, capturedAt: 1_700_000_000_010, }; const preparationSnapshot: IUnfencedObjectStorageBindingControlSnapshot = { ...preparationSnapshotPayload, snapshotDigest: 'ac8166a9888144d11dc7419f60be055eeb6f392ec41a254a9f9b2a7b3df1fba7', }; const prepareRequest: IObjectStorageMigrationPrepareRequest = { schemaVersion: 2, migrationId: 'migration-object-capacity', sourceControlSnapshot: preparationSnapshot, workloadGeneration: 8, target, }; const candidateBinding: TStagedObjectStorageBinding = { ...sourceBinding, requestDigest: '3f864862041002e25b790b3bc7afbe37c399a006f385e1def9f679a93d4fa173', generation: 4, observedGeneration: 3, status: 'provisioning', policy: target.policy, resourceRef: 'destination-resource', capacity: { requested: '500GiB', granted: '500GiB', limit: '1TiB', }, connection: { endpoint: 'https://destination.example.test', bucket: 'destination-bucket', region: 'local', }, updatedAt: 1_700_000_000_020, }; export const storageMigrationCanonicalDigestGoldenVectors = deepFreezeValue({ version: 2 as const, targetRequest: { input: target.request, canonicalJson: '{"accessMode":"readWrite","capacity":{"limit":"1TiB","request":"500GiB"},"delivery":{"keys":{"accessKeyId":"APP_S3_ACCESS_KEY","bucket":"APP_S3_BUCKET","endpoint":"APP_S3_ENDPOINT","region":"APP_S3_REGION","secretAccessKey":"APP_S3_SECRET_KEY"},"type":"launcher-environment"},"id":"object-data","kind":"objectStorage","reclaimPolicy":"retain","storageClass":"backupCapacity"}', sha256: '3f864862041002e25b790b3bc7afbe37c399a006f385e1def9f679a93d4fa173', }, preparationSnapshot: { input: preparationSnapshotPayload, canonicalJson: '{"binding":{"accessMode":"readWrite","capabilities":{"backup":true,"durability":"persistent","encryptedInTransit":true,"hardQuota":true,"performanceTier":"capacity","snapshots":"none","topology":"singleNode"},"connection":{"bucket":"source-bucket","endpoint":"https://source.example.test","region":"local"},"createdAt":1700000000000,"credentialManagementScope":"platform:object-storage-binding","delivery":{"keys":{"accessKeyId":"APP_S3_ACCESS_KEY","bucket":"APP_S3_BUCKET","endpoint":"APP_S3_ENDPOINT","region":"APP_S3_REGION","secretAccessKey":"APP_S3_SECRET_KEY"},"type":"launcher-environment"},"generation":3,"id":"binding-object","kind":"objectStorage","observedGeneration":3,"policy":{"classId":"source-object","revision":"1"},"requestDigest":"1111111111111111111111111111111111111111111111111111111111111111","requestId":"object-data","resourceRef":"source-resource","schemaVersion":2,"serviceId":"service-app","status":"ready","updatedAt":1700000000001,"versioning":false},"capturedAt":1700000000010,"recordRevision":12,"schemaVersion":2}', sha256: 'ac8166a9888144d11dc7419f60be055eeb6f392ec41a254a9f9b2a7b3df1fba7', }, prepareRequest: { input: prepareRequest, canonicalJson: '{"migrationId":"migration-object-capacity","schemaVersion":2,"sourceControlSnapshot":{"binding":{"accessMode":"readWrite","capabilities":{"backup":true,"durability":"persistent","encryptedInTransit":true,"hardQuota":true,"performanceTier":"capacity","snapshots":"none","topology":"singleNode"},"connection":{"bucket":"source-bucket","endpoint":"https://source.example.test","region":"local"},"createdAt":1700000000000,"credentialManagementScope":"platform:object-storage-binding","delivery":{"keys":{"accessKeyId":"APP_S3_ACCESS_KEY","bucket":"APP_S3_BUCKET","endpoint":"APP_S3_ENDPOINT","region":"APP_S3_REGION","secretAccessKey":"APP_S3_SECRET_KEY"},"type":"launcher-environment"},"generation":3,"id":"binding-object","kind":"objectStorage","observedGeneration":3,"policy":{"classId":"source-object","revision":"1"},"requestDigest":"1111111111111111111111111111111111111111111111111111111111111111","requestId":"object-data","resourceRef":"source-resource","schemaVersion":2,"serviceId":"service-app","status":"ready","updatedAt":1700000000001,"versioning":false},"capturedAt":1700000000010,"recordRevision":12,"schemaVersion":2,"snapshotDigest":"ac8166a9888144d11dc7419f60be055eeb6f392ec41a254a9f9b2a7b3df1fba7"},"target":{"credentialManagementScope":"platform:object-storage-binding","policy":{"classId":"capacity-object","revision":"4"},"request":{"accessMode":"readWrite","capacity":{"limit":"1TiB","request":"500GiB"},"delivery":{"keys":{"accessKeyId":"APP_S3_ACCESS_KEY","bucket":"APP_S3_BUCKET","endpoint":"APP_S3_ENDPOINT","region":"APP_S3_REGION","secretAccessKey":"APP_S3_SECRET_KEY"},"type":"launcher-environment"},"id":"object-data","kind":"objectStorage","reclaimPolicy":"retain","storageClass":"backupCapacity"},"storageClass":{"kind":"objectStorage","purpose":"backup","required":{"backup":true,"durability":"persistent","performanceTier":"capacity"}}},"workloadGeneration":8}', sha256: '7682ed6f8c8b64d4c677ea91c04e4261bfe5326a3fb905d5da093f51e4b2dbbe', }, candidateBinding: { input: candidateBinding, canonicalJson: '{"accessMode":"readWrite","capabilities":{"backup":true,"durability":"persistent","encryptedInTransit":true,"hardQuota":true,"performanceTier":"capacity","snapshots":"none","topology":"singleNode"},"capacity":{"granted":"500GiB","limit":"1TiB","requested":"500GiB"},"connection":{"bucket":"destination-bucket","endpoint":"https://destination.example.test","region":"local"},"createdAt":1700000000000,"credentialManagementScope":"platform:object-storage-binding","delivery":{"keys":{"accessKeyId":"APP_S3_ACCESS_KEY","bucket":"APP_S3_BUCKET","endpoint":"APP_S3_ENDPOINT","region":"APP_S3_REGION","secretAccessKey":"APP_S3_SECRET_KEY"},"type":"launcher-environment"},"generation":4,"id":"binding-object","kind":"objectStorage","observedGeneration":3,"policy":{"classId":"capacity-object","revision":"4"},"requestDigest":"3f864862041002e25b790b3bc7afbe37c399a006f385e1def9f679a93d4fa173","requestId":"object-data","resourceRef":"destination-resource","schemaVersion":2,"serviceId":"service-app","status":"provisioning","updatedAt":1700000000020,"versioning":false}', sha256: '6e5c954466b600f81d1f19dcdd7ef426be99dc12ae33103e4d0c238e0070de71', }, });