@@ -245,3 +245,55 @@ func TestUpgradeArtifacts(t *testing.T) {
245245 changed = existing .UpgradeTo (& latest )
246246 require .False (changed )
247247}
248+
249+ func TestUpgradePossible (t * testing.T ) {
250+ require := require .New (t )
251+
252+ existing := ArtifactsConfig {
253+ Builder : "a" ,
254+ Firmware : "b" ,
255+ Kernel : "c" ,
256+ Stage2 : "d" ,
257+ Container : ContainerArtifactsConfig {
258+ Runtime : "e" ,
259+ Compose : "f" ,
260+ },
261+ }
262+ latest := ArtifactsConfig {
263+ Firmware : "b2" ,
264+ Kernel : "c2" ,
265+ Stage2 : "d2" ,
266+ Container : ContainerArtifactsConfig {
267+ Runtime : "e2" ,
268+ },
269+ }
270+
271+ // Explicit overrides differing from latest -> upgradeable.
272+ require .True (existing .UpgradePossible (& latest ))
273+
274+ // After upgrading -> not upgradeable.
275+ existing .UpgradeTo (& latest )
276+ require .False (existing .UpgradePossible (& latest ))
277+
278+ // Empty config (uses defaults from code) -> not upgradeable.
279+ require .False ((& ArtifactsConfig {}).UpgradePossible (& latest ))
280+
281+ // Partial: explicit override differs -> upgradeable.
282+ require .True ((& ArtifactsConfig {Firmware : "old" }).UpgradePossible (& latest ))
283+
284+ // Partial: explicit override matches latest -> not upgradeable.
285+ require .False ((& ArtifactsConfig {Firmware : "b2" }).UpgradePossible (& latest ))
286+
287+ // Container field differs -> upgradeable.
288+ require .True ((& ArtifactsConfig {
289+ Container : ContainerArtifactsConfig {Runtime : "old" },
290+ }).UpgradePossible (& ArtifactsConfig {
291+ Container : ContainerArtifactsConfig {Runtime : "new" },
292+ }))
293+
294+ // ContainerArtifactsConfig directly.
295+ containerLatest := ContainerArtifactsConfig {Runtime : "new" }
296+ require .True ((& ContainerArtifactsConfig {Runtime : "old" }).UpgradePossible (& containerLatest ))
297+ require .False ((& ContainerArtifactsConfig {Runtime : "new" }).UpgradePossible (& containerLatest ))
298+ require .False ((& ContainerArtifactsConfig {}).UpgradePossible (& containerLatest ))
299+ }
0 commit comments