@@ -26,6 +26,57 @@ import (
2626 "github.com/stretchr/testify/require"
2727)
2828
29+ func TestPackHandleKernel (t * testing.T ) {
30+ t .Run ("Local" , func (t * testing.T ) {
31+ p := Platform {
32+ Framework : "rumprun" ,
33+ Monitor : "qemu" ,
34+ }
35+ r := Rootfs {}
36+ k := Kernel {
37+ From : "local" ,
38+ Path : "kernel" ,
39+ }
40+ f := NewGeneric (p , r )
41+
42+ e , err := handleKernel (f , "context" , "mon" , k )
43+ require .NoError (t , err )
44+ require .NotNil (t , e )
45+ require .Equal (t , k .From , e .SourceRef )
46+ require .Equal (t , k .Path , e .FilePath )
47+ def , err := e .SourceState .Marshal (context .TODO ())
48+ require .NoError (t , err )
49+ _ , arr := parseDef (t , def .Def )
50+ require .Equal (t , 2 , len (arr ))
51+ s := arr [0 ].Op .(* pb.Op_Source ).Source
52+ require .Equal (t , "local://context" , s .Identifier )
53+ })
54+ t .Run ("Registry" , func (t * testing.T ) {
55+ p := Platform {
56+ Framework : "rumprun" ,
57+ Monitor : "qemu" ,
58+ }
59+ r := Rootfs {}
60+ k := Kernel {
61+ From : "harbor.nbfc.io/foo" ,
62+ Path : "kernel" ,
63+ }
64+ f := NewGeneric (p , r )
65+
66+ e , err := handleKernel (f , "context" , "mon" , k )
67+ require .NoError (t , err )
68+ require .NotNil (t , e )
69+ require .Equal (t , k .From , e .SourceRef )
70+ require .Equal (t , k .Path , e .FilePath )
71+ def , err := e .SourceState .Marshal (context .TODO ())
72+ require .NoError (t , err )
73+ _ , arr := parseDef (t , def .Def )
74+ require .Equal (t , 2 , len (arr ))
75+ s := arr [0 ].Op .(* pb.Op_Source ).Source
76+ require .Equal (t , "docker-image://harbor.nbfc.io/foo:latest" , s .Identifier )
77+ })
78+ }
79+
2980func TestPackToPack (t * testing.T ) {
3081 t .Run ("Kernel local rootfs none" , func (t * testing.T ) {
3182 hops := & Hops {
@@ -100,58 +151,6 @@ func TestPackToPack(t *testing.T) {
100151 s := arr [0 ].Op .(* pb.Op_Source ).Source
101152 require .Equal (t , "docker-image://harbor.nbfc.io/foo:latest" , s .Identifier )
102153 })
103- t .Run ("Kernel local rootfs local initrd type none" , func (t * testing.T ) {
104- hops := & Hops {
105- Platform : Platform {
106- Framework : "linux" ,
107- Monitor : "qemu" ,
108- },
109- Kernel : Kernel {
110- From : "local" ,
111- Path : "kernel" ,
112- },
113- Rootfs : Rootfs {
114- From : "local" ,
115- Path : "rootfs" ,
116- },
117- Cmd : "cmd" ,
118- }
119- i , err := ToPack (hops , "context" )
120- require .NoError (t , err )
121- require .NotNil (t , i )
122- require .Equal (t , "false" , i .Annots ["com.urunc.unikernel.mountRootfs" ])
123- require .Equal (t , hops .Platform .Framework , i .Annots ["com.urunc.unikernel.unikernelType" ])
124- require .Equal (t , hops .Platform .Monitor , i .Annots ["com.urunc.unikernel.hypervisor" ])
125- require .Equal (t , hops .Cmd , i .Annots ["com.urunc.unikernel.cmdline" ])
126- require .Equal (t , DefaultKernelPath , i .Annots ["com.urunc.unikernel.binary" ])
127- require .Empty (t , i .Annots ["com.urunc.unikernel.initrd" ])
128- require .Empty (t , i .Annots ["com.urunc.unikernel.unikernelVersion" ])
129- require .Empty (t , i .Annots ["com.urunc.unikernel.blkMntPoint" ])
130- require .Empty (t , i .Annots ["com.urunc.unikernel.block" ])
131- require .Equal (t , 2 , len (i .Copies ))
132- kc := i .Copies [0 ]
133- require .Equal (t , DefaultKernelPath , kc .DstPath )
134- require .Equal (t , hops .Kernel .Path , kc .SrcPath )
135- kcDef , err := kc .SrcState .Marshal (context .TODO ())
136- require .NoError (t , err )
137- _ , kcArr := parseDef (t , kcDef .Def )
138- require .Equal (t , 2 , len (kcArr ))
139- kcs := kcArr [0 ].Op .(* pb.Op_Source ).Source
140- require .Equal (t , "local://context" , kcs .Identifier )
141- rc := i .Copies [1 ]
142- require .Equal (t , DefaultRootfsPath , rc .DstPath )
143- require .Equal (t , hops .Rootfs .Path , rc .SrcPath )
144- rcDef , err := rc .SrcState .Marshal (context .TODO ())
145- require .NoError (t , err )
146- _ , rcArr := parseDef (t , rcDef .Def )
147- require .Equal (t , 2 , len (rcArr ))
148- rcs := rcArr [0 ].Op .(* pb.Op_Source ).Source
149- require .Equal (t , "local://context" , rcs .Identifier )
150- def , err := i .Base .Marshal (context .TODO ())
151- require .NoError (t , err )
152- _ , arr := parseDef (t , def .Def )
153- require .Equal (t , 0 , len (arr ))
154- })
155154 t .Run ("Kernel local rootfs local initrd type none implies initrd" , func (t * testing.T ) {
156155 hops := & Hops {
157156 Platform : Platform {
@@ -258,7 +257,7 @@ func TestPackToPack(t *testing.T) {
258257 _ , arr := parseDef (t , def .Def )
259258 require .Equal (t , 0 , len (arr ))
260259 })
261- t .Run ("Kernel local rootfs remote type initrd " , func (t * testing.T ) {
260+ t .Run ("Kernel local rootfs remote type initrd" , func (t * testing.T ) {
262261 hops := & Hops {
263262 Platform : Platform {
264263 Framework : "linux" ,
@@ -283,11 +282,11 @@ func TestPackToPack(t *testing.T) {
283282 require .Equal (t , hops .Platform .Monitor , i .Annots ["com.urunc.unikernel.hypervisor" ])
284283 require .Equal (t , hops .Cmd , i .Annots ["com.urunc.unikernel.cmdline" ])
285284 require .Equal (t , DefaultKernelPath , i .Annots ["com.urunc.unikernel.binary" ])
286- require .Equal (t , DefaultRootfsPath , i .Annots ["com.urunc.unikernel.initrd" ])
285+ require .Equal (t , hops . Rootfs . Path , i .Annots ["com.urunc.unikernel.initrd" ])
287286 require .Empty (t , i .Annots ["com.urunc.unikernel.unikernelVersion" ])
288287 require .Empty (t , i .Annots ["com.urunc.unikernel.blkMntPoint" ])
289288 require .Empty (t , i .Annots ["com.urunc.unikernel.block" ])
290- require .Equal (t , 2 , len (i .Copies ))
289+ require .Equal (t , 1 , len (i .Copies ))
291290 kc := i .Copies [0 ]
292291 require .Equal (t , DefaultKernelPath , kc .DstPath )
293292 require .Equal (t , hops .Kernel .Path , kc .SrcPath )
@@ -297,22 +296,15 @@ func TestPackToPack(t *testing.T) {
297296 require .Equal (t , 2 , len (kcArr ))
298297 kcs := kcArr [0 ].Op .(* pb.Op_Source ).Source
299298 require .Equal (t , "local://context" , kcs .Identifier )
300- rc := i .Copies [1 ]
301- require .Equal (t , DefaultRootfsPath , rc .DstPath )
302- require .Equal (t , hops .Rootfs .Path , rc .SrcPath )
303- rcDef , err := rc .SrcState .Marshal (context .TODO ())
304- require .NoError (t , err )
305- _ , rcArr := parseDef (t , rcDef .Def )
306- require .Equal (t , 2 , len (rcArr ))
307- rcs := rcArr [0 ].Op .(* pb.Op_Source ).Source
308- require .Equal (t , "docker-image://harbor.nbfc.io/foo:latest" , rcs .Identifier )
309299 def , err := i .Base .Marshal (context .TODO ())
310300 require .NoError (t , err )
311301 _ , arr := parseDef (t , def .Def )
312- require .Equal (t , 0 , len (arr ))
302+ require .Equal (t , 2 , len (arr ))
303+ sb := arr [0 ].Op .(* pb.Op_Source ).Source
304+ require .Equal (t , "docker-image://harbor.nbfc.io/foo:latest" , sb .Identifier )
313305 })
314306 // nolint: dupl
315- t .Run ("Kernel local rootfs remote type none implies raw " , func (t * testing.T ) {
307+ t .Run ("Kernel local rootfs remote type none implies raw" , func (t * testing.T ) {
316308 hops := & Hops {
317309 Platform : Platform {
318310 Framework : "linux" ,
@@ -384,7 +376,7 @@ func TestPackToPack(t *testing.T) {
384376 require .Empty (t , i .Annots ["com.urunc.unikernel.unikernelVersion" ])
385377 require .Empty (t , i .Annots ["com.urunc.unikernel.blkMntPoint" ])
386378 require .Empty (t , i .Annots ["com.urunc.unikernel.block" ])
387- require .Equal (t , 1 , len (i .Copies ))
379+ require .Equal (t , 2 , len (i .Copies ))
388380 kc := i .Copies [0 ]
389381 require .Equal (t , DefaultKernelPath , kc .DstPath )
390382 require .Equal (t , hops .Kernel .Path , kc .SrcPath )
@@ -394,17 +386,24 @@ func TestPackToPack(t *testing.T) {
394386 require .Equal (t , 2 , len (kcArr ))
395387 kcs := kcArr [0 ].Op .(* pb.Op_Source ).Source
396388 require .Equal (t , "local://context" , kcs .Identifier )
397- def , err := i .Base .Marshal (context .TODO ())
398- require .NoError (t , err )
399- m , arr := parseDef (t , def .Def )
389+ rc := i .Copies [1 ]
390+ require .Equal (t , DefaultRootfsPath , rc .DstPath )
391+ require .Equal (t , DefaultRootfsPath , rc .SrcPath )
392+ rcDef , err := rc .SrcState .Marshal (context .TODO ())
393+ require .NoError (t , err )
394+ rm , rcArr := parseDef (t , rcDef .Def )
400395 // It should the same as TestUnikraftCreateRootfs
401- require .Equal (t , 7 , len (arr ))
402- last := arr [len (arr )- 1 ]
396+ require .Equal (t , 7 , len (rcArr ))
397+ last := rcArr [len (rcArr )- 1 ]
403398 require .Equal (t , 1 , len (last .Inputs ))
404399 lastInputDgst := last .Inputs [0 ].Digest
405- require .Equal (t , m [lastInputDgst ], arr [5 ])
406- e := arr [5 ]
400+ require .Equal (t , rm [lastInputDgst ], rcArr [5 ])
401+ e := rcArr [5 ]
407402 require .Equal (t , 3 , len (e .Inputs ))
403+ def , err := i .Base .Marshal (context .TODO ())
404+ require .NoError (t , err )
405+ _ , arr := parseDef (t , def .Def )
406+ require .Equal (t , 0 , len (arr ))
408407 })
409408 t .Run ("Kernel local rootfs scratch type none implies raw with include" , func (t * testing.T ) {
410409 hops := & Hops {
@@ -457,7 +456,7 @@ func TestPackToPack(t *testing.T) {
457456 t .Run ("Kernel registry rootfs local initrd type none" , func (t * testing.T ) {
458457 hops := & Hops {
459458 Platform : Platform {
460- Framework : "linux " ,
459+ Framework : "unikraft " ,
461460 Monitor : "qemu" ,
462461 },
463462 Kernel : Kernel {
@@ -478,7 +477,7 @@ func TestPackToPack(t *testing.T) {
478477 require .Equal (t , hops .Platform .Monitor , i .Annots ["com.urunc.unikernel.hypervisor" ])
479478 require .Equal (t , hops .Cmd , i .Annots ["com.urunc.unikernel.cmdline" ])
480479 require .Equal (t , hops .Kernel .Path , i .Annots ["com.urunc.unikernel.binary" ])
481- require .Empty ( t , i .Annots ["com.urunc.unikernel.initrd" ])
480+ require .Equal ( t , DefaultRootfsPath , i .Annots ["com.urunc.unikernel.initrd" ])
482481 require .Empty (t , i .Annots ["com.urunc.unikernel.unikernelVersion" ])
483482 require .Empty (t , i .Annots ["com.urunc.unikernel.blkMntPoint" ])
484483 require .Empty (t , i .Annots ["com.urunc.unikernel.block" ])
@@ -499,7 +498,7 @@ func TestPackToPack(t *testing.T) {
499498 s := arr [0 ].Op .(* pb.Op_Source ).Source
500499 require .Equal (t , "docker-image://harbor.nbfc.io/foo:latest" , s .Identifier )
501500 })
502- t .Run ("Kernel remote rootfs remote type initrd " , func (t * testing.T ) {
501+ t .Run ("Kernel remote rootfs remote type initrd" , func (t * testing.T ) {
503502 hops := & Hops {
504503 Platform : Platform {
505504 Framework : "linux" ,
@@ -523,21 +522,21 @@ func TestPackToPack(t *testing.T) {
523522 require .Equal (t , hops .Platform .Framework , i .Annots ["com.urunc.unikernel.unikernelType" ])
524523 require .Equal (t , hops .Platform .Monitor , i .Annots ["com.urunc.unikernel.hypervisor" ])
525524 require .Equal (t , hops .Cmd , i .Annots ["com.urunc.unikernel.cmdline" ])
526- require .Equal (t , hops . Kernel . Path , i .Annots ["com.urunc.unikernel.binary" ])
527- require .Equal (t , DefaultRootfsPath , i .Annots ["com.urunc.unikernel.initrd" ])
525+ require .Equal (t , DefaultKernelPath , i .Annots ["com.urunc.unikernel.binary" ])
526+ require .Equal (t , hops . Rootfs . Path , i .Annots ["com.urunc.unikernel.initrd" ])
528527 require .Empty (t , i .Annots ["com.urunc.unikernel.unikernelVersion" ])
529528 require .Empty (t , i .Annots ["com.urunc.unikernel.blkMntPoint" ])
530529 require .Empty (t , i .Annots ["com.urunc.unikernel.block" ])
531530 require .Equal (t , 1 , len (i .Copies ))
532- rc := i .Copies [0 ]
533- require .Equal (t , DefaultRootfsPath , rc .DstPath )
534- require .Equal (t , hops .Rootfs .Path , rc .SrcPath )
535- rcDef , err := rc .SrcState .Marshal (context .TODO ())
531+ kc := i .Copies [0 ]
532+ require .Equal (t , DefaultKernelPath , kc .DstPath )
533+ require .Equal (t , hops .Kernel .Path , kc .SrcPath )
534+ kcDef , err := kc .SrcState .Marshal (context .TODO ())
536535 require .NoError (t , err )
537- _ , rcArr := parseDef (t , rcDef .Def )
538- require .Equal (t , 2 , len (rcArr ))
539- rcs := rcArr [0 ].Op .(* pb.Op_Source ).Source
540- require .Equal (t , "docker-image://harbor.nbfc.io/foo:latest" , rcs .Identifier )
536+ _ , kcArr := parseDef (t , kcDef .Def )
537+ require .Equal (t , 2 , len (kcArr ))
538+ kcs := kcArr [0 ].Op .(* pb.Op_Source ).Source
539+ require .Equal (t , "docker-image://harbor.nbfc.io/foo:latest" , kcs .Identifier )
541540 def , err := i .Base .Marshal (context .TODO ())
542541 require .NoError (t , err )
543542 _ , arr := parseDef (t , def .Def )
@@ -613,24 +612,18 @@ func TestPackToPack(t *testing.T) {
613612 require .Equal (t , hops .Platform .Framework , i .Annots ["com.urunc.unikernel.unikernelType" ])
614613 require .Equal (t , hops .Platform .Monitor , i .Annots ["com.urunc.unikernel.hypervisor" ])
615614 require .Equal (t , hops .Cmd , i .Annots ["com.urunc.unikernel.cmdline" ])
616- require .Equal (t , DefaultKernelPath , i .Annots ["com.urunc.unikernel.binary" ])
615+ require .Equal (t , hops . Kernel . Path , i .Annots ["com.urunc.unikernel.binary" ])
617616 require .Equal (t , DefaultRootfsPath , i .Annots ["com.urunc.unikernel.initrd" ])
618617 require .Empty (t , i .Annots ["com.urunc.unikernel.unikernelVersion" ])
619618 require .Empty (t , i .Annots ["com.urunc.unikernel.blkMntPoint" ])
620619 require .Empty (t , i .Annots ["com.urunc.unikernel.block" ])
621620 require .Equal (t , 1 , len (i .Copies ))
622- kc := i .Copies [0 ]
623- require .Equal (t , DefaultKernelPath , kc .DstPath )
624- require .Equal (t , hops .Kernel .Path , kc .SrcPath )
625- kcDef , err := kc .SrcState .Marshal (context .TODO ())
626- require .NoError (t , err )
627- _ , kcArr := parseDef (t , kcDef .Def )
628- require .Equal (t , 2 , len (kcArr ))
629- kcs := kcArr [0 ].Op .(* pb.Op_Source ).Source
630- require .Equal (t , "docker-image://harbor.nbfc.io/bar:latest" , kcs .Identifier )
631- def , err := i .Base .Marshal (context .TODO ())
621+ rc := i .Copies [0 ]
622+ require .Equal (t , DefaultRootfsPath , rc .DstPath )
623+ require .Equal (t , DefaultRootfsPath , rc .SrcPath )
624+ rcDef , err := rc .SrcState .Marshal (context .TODO ())
632625 require .NoError (t , err )
633- m , arr := parseDef (t , def .Def )
626+ m , arr := parseDef (t , rcDef .Def )
634627 // It should the same as TestUnikraftCreateRootfs
635628 require .Equal (t , 7 , len (arr ))
636629 last := arr [len (arr )- 1 ]
@@ -639,6 +632,11 @@ func TestPackToPack(t *testing.T) {
639632 require .Equal (t , m [lastInputDgst ], arr [5 ])
640633 e := arr [5 ]
641634 require .Equal (t , 3 , len (e .Inputs ))
635+ def , err := i .Base .Marshal (context .TODO ())
636+ _ , arr = parseDef (t , def .Def )
637+ require .Equal (t , 2 , len (arr ))
638+ s := arr [0 ].Op .(* pb.Op_Source ).Source
639+ require .Equal (t , "docker-image://harbor.nbfc.io/bar:latest" , s .Identifier )
642640 })
643641 t .Run ("Invalid rootfs type unsupported" , func (t * testing.T ) {
644642 hops := & Hops {
@@ -661,26 +659,6 @@ func TestPackToPack(t *testing.T) {
661659 require .ErrorContains (t , err , "Cannot build foo" )
662660 require .Nil (t , i )
663661 })
664- t .Run ("Invalid rootfs from scratch and path" , func (t * testing.T ) {
665- hops := & Hops {
666- Platform : Platform {
667- Framework : "rumprun" ,
668- Monitor : "qemu" ,
669- },
670- Kernel : Kernel {
671- From : "local" ,
672- Path : "kernel" ,
673- },
674- Rootfs : Rootfs {
675- From : "scratch" ,
676- Path : "kernel" ,
677- },
678- Cmd : "cmd" ,
679- }
680- i , err := ToPack (hops , "context" )
681- require .ErrorContains (t , err , "invalid combination of from" )
682- require .Nil (t , i )
683- })
684662 // TODO: Resume below test when a new framework that does not support
685663 // raw rootfs is introduced (e.g. Mewz, Rumprun)
686664 // t.Run("Invalid rootfs from registry implies unsupported raw rootfs type", func(t *testing.T) {
0 commit comments