@@ -559,6 +559,80 @@ func TestExtractObjMetadata(t *testing.T) {
559559 }
560560}
561561
562+ func TestAmzRestoreToStruct (t * testing.T ) {
563+ tests := []struct {
564+ name string
565+ input string
566+ wantOng bool
567+ wantExpiry bool
568+ expectedExpiry string
569+ wantErr bool
570+ }{
571+ {
572+ name : "ongoing true without expiry" ,
573+ input : `ongoing-request="true"` ,
574+ wantOng : true ,
575+ wantExpiry : false ,
576+ wantErr : false ,
577+ },
578+ {
579+ name : "ongoing false with expiry" ,
580+ input : `ongoing-request="false", expiry-date="Wed, 21 Oct 2015 07:28:00 GMT"` ,
581+ wantOng : false ,
582+ wantExpiry : true ,
583+ expectedExpiry : "Wed, 21 Oct 2015 07:28:00 GMT" ,
584+ wantErr : false ,
585+ },
586+ {
587+ name : "no space after comma" ,
588+ input : `ongoing-request="false",expiry-date="Wed, 21 Oct 2015 07:28:00 GMT"` ,
589+ wantOng : false ,
590+ wantExpiry : true ,
591+ expectedExpiry : "Wed, 21 Oct 2015 07:28:00 GMT" ,
592+ wantErr : false ,
593+ },
594+ {
595+ name : "invalid header" ,
596+ input : `invalid-format` ,
597+ wantErr : true ,
598+ },
599+ }
600+
601+ for _ , tt := range tests {
602+ t .Run (tt .name , func (t * testing.T ) {
603+ ong , expTime , err := amzRestoreToStruct (tt .input )
604+ if tt .wantErr {
605+ if err == nil {
606+ t .Fatalf ("expected error, got nil" )
607+ }
608+ return
609+ }
610+ if err != nil {
611+ t .Fatalf ("unexpected error: %v" , err )
612+ }
613+ if ong != tt .wantOng {
614+ t .Errorf ("ongoing: got %v, want %v" , ong , tt .wantOng )
615+ }
616+ if tt .wantExpiry {
617+ if expTime .IsZero () {
618+ t .Errorf ("expected expiry time, got zero" )
619+ } else {
620+ // verify parsed expiry matches expected RFC7231 time
621+ expected , perr := parseRFC7231Time (tt .expectedExpiry )
622+ if perr != nil {
623+ t .Fatalf ("failed to parse expected expiry: %v" , perr )
624+ }
625+ if ! expTime .Equal (expected ) {
626+ t .Errorf ("expiry time mismatch: got %v, want %v" , expTime , expected )
627+ }
628+ }
629+ } else if ! expTime .IsZero () {
630+ t .Errorf ("did not expect expiry time, got %v" , expTime )
631+ }
632+ })
633+ }
634+ }
635+
562636func TestToObjectInfoHeaders (t * testing.T ) {
563637 header := http.Header {
564638 "Etag" : []string {`"d41d8cd98f00b204e9800998ecf8427e"` },
0 commit comments