@@ -3,6 +3,7 @@ package domain
33import (
44 "encoding/json"
55 "errors"
6+ "fmt"
67 "os"
78 "path/filepath"
89 "sort"
@@ -1020,10 +1021,6 @@ func Test_Artifacts_SaveAndLoadOperationsReport(t *testing.T) {
10201021func Test_Artifacts_SaveAndLoadMultipleProposals (t * testing.T ) {
10211022 t .Parallel ()
10221023
1023- fixture := setupTestDomainsFS (t )
1024- migrationKey := "0001_initial"
1025- artsDir := fixture .artifactsDir
1026-
10271024 validUntilUnixTime := uint32 (time .Now ().Add (time .Hour ).Unix ()) //nolint:gosec // This won't overflow until 7 Feb 2106, and would also cause MCMS to fail anyway
10281025
10291026 proposals := []mcmsv2.Proposal {
@@ -1071,38 +1068,103 @@ func Test_Artifacts_SaveAndLoadMultipleProposals(t *testing.T) {
10711068 },
10721069 }
10731070
1074- // Save multiple proposals
1075- require .NoError (t , artsDir .CreateMigrationDir (migrationKey ))
1076- for i , proposal := range proposals {
1077- err := artsDir .saveProposalArtifact (migrationKey , ArtifactMCMSProposal , i , proposal )
1078- require .NoError (t , err )
1079- err = artsDir .saveDecodedProposalArtifact (migrationKey , ArtifactMCMSProposal , i , "some decoded proposal" )
1080- require .NoError (t , err )
1071+ tests := []struct {
1072+ name string
1073+ migrationKey string
1074+ setupFunc func (t * testing.T , artsDir * ArtifactsDir )
1075+ expectedFilePrefix string
1076+ isDurablePipelines bool
1077+ }{
1078+ {
1079+ name : "regular migration proposals" ,
1080+ migrationKey : "0001_initial" ,
1081+ expectedFilePrefix : "" ,
1082+ isDurablePipelines : false ,
1083+ },
1084+ {
1085+ name : "durable pipelines proposals with timestamp prefix" ,
1086+ migrationKey : "0001_initial" ,
1087+ setupFunc : func (t * testing.T , artsDir * ArtifactsDir ) {
1088+ t .Helper ()
1089+ err := artsDir .SetDurablePipelines ("1234567890123456789" )
1090+ require .NoError (t , err )
1091+ },
1092+ expectedFilePrefix : "1234567890123456789-" ,
1093+ isDurablePipelines : true ,
1094+ },
10811095 }
10821096
1083- // Verify proposal files were created with correct indexes
1084- files , err := os .ReadDir (artsDir .ProposalsDirPath ())
1085- sort .Slice (files , func (i , j int ) bool { return files [i ].Name () < files [j ].Name () })
1086- require .NoError (t , err )
1087- assert .Len (t , files , len (proposals ))
1097+ for _ , tt := range tests {
1098+ t .Run (tt .name , func (t * testing.T ) {
1099+ t .Parallel ()
10881100
1089- for i , file := range files {
1090- assert .Contains (t , file .Name (), migrationKey )
1091- assert .Contains (t , file .Name (), ArtifactMCMSProposal )
1092- assert .Contains (t , file .Name (), "_" + strconv .Itoa (i ))
1093- }
1101+ fixture := setupTestDomainsFS (t )
1102+ artsDir := fixture .artifactsDir
10941103
1095- // Load proposals and verify
1096- exists , err := artsDir .MigrationDirExists (migrationKey )
1097- require .NoError (t , err )
1098- require .True (t , exists )
1099- loadedProposals , err := artsDir .LoadChangesetOutput (migrationKey )
1100- require .NoError (t , err )
1101- assert .Len (t , loadedProposals .MCMSProposals , len (proposals ))
1104+ if tt .setupFunc != nil {
1105+ tt .setupFunc (t , artsDir )
1106+ }
1107+
1108+ // Save multiple proposals
1109+ require .NoError (t , artsDir .CreateMigrationDir (tt .migrationKey ))
1110+ for i , proposal := range proposals {
1111+ err := artsDir .saveProposalArtifact (tt .migrationKey , ArtifactMCMSProposal , i , proposal )
1112+ require .NoError (t , err )
1113+ err = artsDir .saveDecodedProposalArtifact (tt .migrationKey , ArtifactMCMSProposal , i , "some decoded proposal" )
1114+ require .NoError (t , err )
1115+ }
1116+
1117+ // Verify proposal files were created with correct indexes and timestamp prefix
1118+ proposalFiles , err := os .ReadDir (artsDir .ProposalsDirPath ())
1119+ require .NoError (t , err )
1120+ sort .Slice (proposalFiles , func (i , j int ) bool { return proposalFiles [i ].Name () < proposalFiles [j ].Name () })
1121+ assert .Len (t , proposalFiles , len (proposals ))
1122+
1123+ // Verify decoded proposal files were created
1124+ decodedFiles , err := os .ReadDir (artsDir .DecodedProposalsDirPath ())
1125+ require .NoError (t , err )
1126+ sort .Slice (decodedFiles , func (i , j int ) bool { return decodedFiles [i ].Name () < decodedFiles [j ].Name () })
1127+ assert .Len (t , decodedFiles , len (proposals ))
1128+
1129+ // Check proposal file naming conventions
1130+ for i , file := range proposalFiles {
1131+ expectedFileName := fmt .Sprintf ("%s%s-%s-%s_%s_%d.%s" ,
1132+ tt .expectedFilePrefix ,
1133+ artsDir .DomainKey (),
1134+ artsDir .EnvKey (),
1135+ tt .migrationKey ,
1136+ ArtifactMCMSProposal ,
1137+ i ,
1138+ JSONExt )
1139+ assert .Equal (t , expectedFileName , file .Name ())
1140+ }
1141+
1142+ // Check decoded proposal file naming conventions
1143+ for i , file := range decodedFiles {
1144+ expectedFileName := fmt .Sprintf ("%s%s-%s-%s_%s_%d_decoded.%s" ,
1145+ tt .expectedFilePrefix ,
1146+ artsDir .DomainKey (),
1147+ artsDir .EnvKey (),
1148+ tt .migrationKey ,
1149+ ArtifactMCMSProposal ,
1150+ i ,
1151+ TxtExt )
1152+ assert .Equal (t , expectedFileName , file .Name ())
1153+ }
11021154
1103- for i , proposal := range loadedProposals .MCMSProposals {
1104- assert .Equal (t , proposals [i ].Version , proposal .Version )
1105- assert .Equal (t , proposals [i ].ValidUntil , proposal .ValidUntil )
1155+ // Load proposals and verify
1156+ exists , err := artsDir .MigrationDirExists (tt .migrationKey )
1157+ require .NoError (t , err )
1158+ require .True (t , exists )
1159+ loadedProposals , err := artsDir .LoadChangesetOutput (tt .migrationKey )
1160+ require .NoError (t , err )
1161+ assert .Len (t , loadedProposals .MCMSProposals , len (proposals ))
1162+
1163+ for i , proposal := range loadedProposals .MCMSProposals {
1164+ assert .Equal (t , proposals [i ].Version , proposal .Version )
1165+ assert .Equal (t , proposals [i ].ValidUntil , proposal .ValidUntil )
1166+ }
1167+ })
11061168 }
11071169}
11081170
0 commit comments