@@ -81,6 +81,10 @@ func storeCtx() converter.StorageDriverStoreContext {
8181 return converter.StorageDriverStoreContext {Context : context .Background ()}
8282}
8383
84+ func storeCtxWithTarget (target converter.StorageDriverTargetInfo ) converter.StorageDriverStoreContext {
85+ return converter.StorageDriverStoreContext {Context : context .Background (), Target : target }
86+ }
87+
8488func retrieveCtx () converter.StorageDriverRetrieveContext {
8589 return converter.StorageDriverRetrieveContext {Context : context .Background ()}
8690}
@@ -459,8 +463,72 @@ func TestRetrieve_ClaimMissingHashValue(t *testing.T) {
459463
460464// --- Key generation tests ---
461465
462- func TestObjectKey (t * testing.T ) {
463- assert .Equal (t , "v0/d/sha256/abc123" , objectKey ("abc123" ))
466+ func TestObjectKey_NoTarget (t * testing.T ) {
467+ assert .Equal (t , "v0/d/sha256/abc123" , objectKey (nil , "abc123" ))
468+ }
469+
470+ func TestObjectKey_WorkflowInfo (t * testing.T ) {
471+ target := converter.StorageDriverWorkflowInfo {
472+ Namespace : "default" ,
473+ WorkflowType : "MyWorkflow" ,
474+ WorkflowID : "wf-123" ,
475+ RunID : "run-456" ,
476+ }
477+ assert .Equal (t ,
478+ "v0/ns/default/wt/MyWorkflow/wi/wf-123/ri/run-456/d/sha256/abc123" ,
479+ objectKey (target , "abc123" ),
480+ )
481+ }
482+
483+ func TestObjectKey_ActivityInfo (t * testing.T ) {
484+ target := converter.StorageDriverActivityInfo {
485+ Namespace : "default" ,
486+ ActivityType : "MyActivity" ,
487+ ActivityID : "act-789" ,
488+ RunID : "run-abc" ,
489+ }
490+ assert .Equal (t ,
491+ "v0/ns/default/at/MyActivity/ai/act-789/ri/run-abc/d/sha256/abc123" ,
492+ objectKey (target , "abc123" ),
493+ )
494+ }
495+
496+ func TestObjectKey_WorkflowInfo_EmptyFields (t * testing.T ) {
497+ // Empty strings should fall back to "null" in each segment.
498+ target := converter.StorageDriverWorkflowInfo {
499+ Namespace : "my-ns" ,
500+ // WorkflowType, WorkflowID, RunID intentionally empty
501+ }
502+ assert .Equal (t ,
503+ "v0/ns/my-ns/wt/null/wi/null/ri/null/d/sha256/abc123" ,
504+ objectKey (target , "abc123" ),
505+ )
506+ }
507+
508+ func TestObjectKey_ActivityInfo_EmptyFields (t * testing.T ) {
509+ target := converter.StorageDriverActivityInfo {
510+ Namespace : "my-ns" ,
511+ // ActivityType, ActivityID, RunID intentionally empty
512+ }
513+ assert .Equal (t ,
514+ "v0/ns/my-ns/at/null/ai/null/ri/null/d/sha256/abc123" ,
515+ objectKey (target , "abc123" ),
516+ )
517+ }
518+
519+ func TestObjectKey_WorkflowInfo_SpecialChars (t * testing.T ) {
520+ // Slashes, spaces, and other special characters must be percent-encoded.
521+ target := converter.StorageDriverWorkflowInfo {
522+ Namespace : "my namespace" ,
523+ WorkflowType : "my/workflow" ,
524+ WorkflowID : "wf id+1" ,
525+ RunID : "run=abc" ,
526+ }
527+ key := objectKey (target , "abc123" )
528+ assert .Equal (t ,
529+ "v0/ns/my%20namespace/wt/my%2Fworkflow/wi/wf%20id+1/ri/run=abc/d/sha256/abc123" ,
530+ key ,
531+ )
464532}
465533
466534func TestSha256Hex (t * testing.T ) {
@@ -469,3 +537,81 @@ func TestSha256Hex(t *testing.T) {
469537 expected := hex .EncodeToString (h [:])
470538 assert .Equal (t , expected , sha256Hex (data ))
471539}
540+
541+ // --- Store with target context tests ---
542+
543+ func TestStore_WithWorkflowTarget (t * testing.T ) {
544+ mc := newMemClient ()
545+ d := newDriver (t , mc )
546+ p := testPayload ("workflow payload" )
547+
548+ target := converter.StorageDriverWorkflowInfo {
549+ Namespace : "default" ,
550+ WorkflowType : "MyWorkflow" ,
551+ WorkflowID : "wf-123" ,
552+ RunID : "run-456" ,
553+ }
554+ claims , err := d .Store (storeCtxWithTarget (target ), []* commonpb.Payload {p })
555+ require .NoError (t , err )
556+ require .Len (t , claims , 1 )
557+
558+ key := claims [0 ].ClaimData ["key" ]
559+ assert .Contains (t , key , "v0/ns/default/wt/MyWorkflow/wi/wf-123/ri/run-456/d/sha256/" )
560+ }
561+
562+ func TestStore_WithActivityTarget (t * testing.T ) {
563+ mc := newMemClient ()
564+ d := newDriver (t , mc )
565+ p := testPayload ("activity payload" )
566+
567+ target := converter.StorageDriverActivityInfo {
568+ Namespace : "default" ,
569+ ActivityType : "MyActivity" ,
570+ ActivityID : "act-789" ,
571+ RunID : "run-abc" ,
572+ }
573+ claims , err := d .Store (storeCtxWithTarget (target ), []* commonpb.Payload {p })
574+ require .NoError (t , err )
575+ require .Len (t , claims , 1 )
576+
577+ key := claims [0 ].ClaimData ["key" ]
578+ assert .Contains (t , key , "v0/ns/default/at/MyActivity/ai/act-789/ri/run-abc/d/sha256/" )
579+ }
580+
581+ func TestStore_RoundTrip_WithWorkflowTarget (t * testing.T ) {
582+ mc := newMemClient ()
583+ d := newDriver (t , mc )
584+ original := testPayload ("round-trip with target" )
585+
586+ target := converter.StorageDriverWorkflowInfo {
587+ Namespace : "default" ,
588+ WorkflowType : "MyWorkflow" ,
589+ WorkflowID : "wf-123" ,
590+ RunID : "run-456" ,
591+ }
592+ claims , err := d .Store (storeCtxWithTarget (target ), []* commonpb.Payload {original })
593+ require .NoError (t , err )
594+
595+ restored , err := d .Retrieve (retrieveCtx (), claims )
596+ require .NoError (t , err )
597+ require .Len (t , restored , 1 )
598+ assert .True (t , proto .Equal (original , restored [0 ]))
599+ }
600+
601+ func TestStore_DifferentTargets_SamePayload_DifferentKeys (t * testing.T ) {
602+ // The same payload stored under different targets produces different keys.
603+ mc := newMemClient ()
604+ d := newDriver (t , mc )
605+ p := testPayload ("shared payload" )
606+
607+ wfTarget := converter.StorageDriverWorkflowInfo {Namespace : "ns" , WorkflowID : "wf-1" , RunID : "run-1" }
608+ actTarget := converter.StorageDriverActivityInfo {Namespace : "ns" , ActivityID : "act-1" , RunID : "run-1" }
609+
610+ wfClaims , err := d .Store (storeCtxWithTarget (wfTarget ), []* commonpb.Payload {p })
611+ require .NoError (t , err )
612+
613+ actClaims , err := d .Store (storeCtxWithTarget (actTarget ), []* commonpb.Payload {p })
614+ require .NoError (t , err )
615+
616+ assert .NotEqual (t , wfClaims [0 ].ClaimData ["key" ], actClaims [0 ].ClaimData ["key" ])
617+ }
0 commit comments