@@ -190,6 +190,133 @@ func TestManifestSerialization(t *testing.T) {
190190 require .NoError (err , "dec.Validate" )
191191}
192192
193+ func TestDeploymentArtifactsSerialization (t * testing.T ) {
194+ require := require .New (t )
195+
196+ const manifestYaml = `
197+ name: my-container-app
198+ version: 0.1.0
199+ tee: tdx
200+ kind: container
201+ resources:
202+ memory: 512
203+ cpus: 1
204+ storage:
205+ kind: disk-persistent
206+ size: 512
207+ artifacts:
208+ firmware: global-firmware
209+ kernel: global-kernel
210+ stage2: global-stage2
211+ container:
212+ runtime: global-runtime
213+ compose: compose.yaml
214+ deployments:
215+ testnet:
216+ network: testnet
217+ paratime: sapphire
218+ artifacts:
219+ container:
220+ compose: compose.testnet.yaml
221+ `
222+
223+ var m Manifest
224+ err := yaml .Unmarshal ([]byte (manifestYaml ), & m )
225+ require .NoError (err , "yaml.Unmarshal" )
226+ require .NoError (m .Validate ())
227+ require .NotNil (m .Artifacts )
228+ require .Equal ("compose.yaml" , m .Artifacts .Container .Compose )
229+ require .NotNil (m .Deployments ["testnet" ].Artifacts )
230+ require .Equal ("compose.testnet.yaml" , m .Deployments ["testnet" ].Artifacts .Container .Compose )
231+
232+ enc , err := yaml .Marshal (m )
233+ require .NoError (err , "yaml.Marshal" )
234+
235+ var dec Manifest
236+ err = yaml .Unmarshal (enc , & dec )
237+ require .NoError (err , "yaml.Unmarshal(round-trip)" )
238+ require .EqualValues (m , dec , "serialization should round-trip" )
239+ require .NoError (dec .Validate ())
240+ }
241+
242+ func TestResolveArtifacts (t * testing.T ) {
243+ require := require .New (t )
244+
245+ const (
246+ defaultFirmware = "default-firmware"
247+ defaultStage2 = "default-stage2"
248+ defaultRuntime = "default-runtime"
249+ globalKernel = "global-kernel"
250+ globalCompose = "global-compose"
251+ deploymentStage2 = "deployment-stage2"
252+ deploymentCompose = "deployment-compose"
253+ )
254+
255+ defaults := ArtifactsConfig {
256+ Firmware : defaultFirmware ,
257+ Kernel : "default-kernel" ,
258+ Stage2 : defaultStage2 ,
259+ Container : ContainerArtifactsConfig {
260+ Runtime : defaultRuntime ,
261+ Compose : "default-compose" ,
262+ },
263+ }
264+ m := Manifest {
265+ Artifacts : & ArtifactsConfig {
266+ Kernel : globalKernel ,
267+ Container : ContainerArtifactsConfig {
268+ Compose : globalCompose ,
269+ },
270+ },
271+ Deployments : map [string ]* Deployment {
272+ "testnet" : {
273+ Network : "testnet" ,
274+ ParaTime : "sapphire" ,
275+ Artifacts : & ArtifactsConfig {
276+ Stage2 : deploymentStage2 ,
277+ Container : ContainerArtifactsConfig {
278+ Compose : deploymentCompose ,
279+ },
280+ },
281+ },
282+ "mainnet" : {
283+ Network : "mainnet" ,
284+ ParaTime : "sapphire" ,
285+ },
286+ },
287+ }
288+
289+ require .Equal (ArtifactsConfig {
290+ Firmware : defaultFirmware ,
291+ Kernel : globalKernel ,
292+ Stage2 : deploymentStage2 ,
293+ Container : ContainerArtifactsConfig {
294+ Runtime : defaultRuntime ,
295+ Compose : deploymentCompose ,
296+ },
297+ }, m .ResolveArtifacts ("testnet" , defaults ))
298+
299+ require .Equal (ArtifactsConfig {
300+ Firmware : defaultFirmware ,
301+ Kernel : globalKernel ,
302+ Stage2 : defaultStage2 ,
303+ Container : ContainerArtifactsConfig {
304+ Runtime : defaultRuntime ,
305+ Compose : globalCompose ,
306+ },
307+ }, m .ResolveArtifacts ("mainnet" , defaults ))
308+
309+ require .Equal (ArtifactsConfig {
310+ Firmware : defaultFirmware ,
311+ Kernel : globalKernel ,
312+ Stage2 : defaultStage2 ,
313+ Container : ContainerArtifactsConfig {
314+ Runtime : defaultRuntime ,
315+ Compose : globalCompose ,
316+ },
317+ }, m .ResolveArtifacts ("missing" , defaults ))
318+ }
319+
193320func TestLoadManifest (t * testing.T ) {
194321 require := require .New (t )
195322
@@ -264,6 +391,36 @@ func TestUpgradeArtifacts(t *testing.T) {
264391 require .False (changed )
265392}
266393
394+ func TestUpgradeExplicitArtifacts (t * testing.T ) {
395+ require := require .New (t )
396+
397+ existing := ArtifactsConfig {
398+ Kernel : "old-kernel" ,
399+ Container : ContainerArtifactsConfig {
400+ Compose : "compose.testnet.yaml" ,
401+ },
402+ }
403+ latest := ArtifactsConfig {
404+ Firmware : "latest-firmware" ,
405+ Kernel : "latest-kernel" ,
406+ Stage2 : "latest-stage2" ,
407+ Container : ContainerArtifactsConfig {
408+ Runtime : "latest-runtime" ,
409+ },
410+ }
411+
412+ changed := existing .UpgradeExplicitTo (& latest )
413+ require .True (changed )
414+ require .Equal ("" , existing .Firmware )
415+ require .Equal ("latest-kernel" , existing .Kernel )
416+ require .Equal ("" , existing .Stage2 )
417+ require .Equal ("" , existing .Container .Runtime )
418+ require .Equal ("compose.testnet.yaml" , existing .Container .Compose )
419+
420+ changed = existing .UpgradeExplicitTo (& latest )
421+ require .False (changed )
422+ }
423+
267424func TestUpgradePossible (t * testing.T ) {
268425 require := require .New (t )
269426
0 commit comments