@@ -9,9 +9,15 @@ use crate::process::message::{Message, MountMsg};
99
1010#[ derive( Debug , thiserror:: Error ) ]
1111pub enum ChannelError {
12- #[ error( "received unexpected message: {received:?}, expected: {expected:?}" ) ]
12+ #[ error(
13+ "received unexpected message: {received:?}{expected_suffix}" ,
14+ expected_suffix = . expected
15+ . as_ref( )
16+ . map( |msg| format!( ", expected: {msg:?}" ) )
17+ . unwrap_or_default( )
18+ ) ]
1319 UnexpectedMessage {
14- expected : Box < Message > ,
20+ expected : Option < Box < Message > > ,
1521 received : Box < Message > ,
1622 } ,
1723 #[ error( "failed to receive. {msg:?}. {source:?}" ) ]
@@ -141,7 +147,7 @@ impl MainReceiver {
141147 Message :: ExecFailed ( err) => Err ( ChannelError :: ExecError ( err) ) ,
142148 Message :: OtherError ( err) => Err ( ChannelError :: OtherError ( err) ) ,
143149 msg => Err ( ChannelError :: UnexpectedMessage {
144- expected : Box :: new ( Message :: IntermediateReady ( 0 ) ) ,
150+ expected : Some ( Box :: new ( Message :: IntermediateReady ( 0 ) ) ) ,
145151 received : Box :: new ( msg) ,
146152 } ) ,
147153 }
@@ -158,7 +164,7 @@ impl MainReceiver {
158164 match msg {
159165 Message :: WriteMapping => Ok ( ( ) ) ,
160166 msg => Err ( ChannelError :: UnexpectedMessage {
161- expected : Box :: new ( Message :: WriteMapping ) ,
167+ expected : Some ( Box :: new ( Message :: WriteMapping ) ) ,
162168 received : Box :: new ( msg) ,
163169 } ) ,
164170 }
@@ -176,11 +182,7 @@ impl MainReceiver {
176182 match msg {
177183 Message :: MountFdPlease ( req) => Ok ( req) ,
178184 msg => Err ( ChannelError :: UnexpectedMessage {
179- expected : Box :: new ( Message :: MountFdPlease ( MountMsg {
180- source : String :: new ( ) ,
181- idmap : None ,
182- recursive : false ,
183- } ) ) ,
185+ expected : None ,
184186 received : Box :: new ( msg) ,
185187 } ) ,
186188 }
@@ -218,7 +220,7 @@ impl MainReceiver {
218220 Ok ( fd)
219221 }
220222 msg => Err ( ChannelError :: UnexpectedMessage {
221- expected : Box :: new ( Message :: SeccompNotify ) ,
223+ expected : Some ( Box :: new ( Message :: SeccompNotify ) ) ,
222224 received : Box :: new ( msg) ,
223225 } ) ,
224226 }
@@ -235,7 +237,7 @@ impl MainReceiver {
235237 match msg {
236238 Message :: SetupNetworkDeviceReady => Ok ( ( ) ) ,
237239 msg => Err ( ChannelError :: UnexpectedMessage {
238- expected : Box :: new ( Message :: SetupNetworkDeviceReady ) ,
240+ expected : Some ( Box :: new ( Message :: SetupNetworkDeviceReady ) ) ,
239241 received : Box :: new ( msg) ,
240242 } ) ,
241243 }
@@ -258,7 +260,7 @@ impl MainReceiver {
258260 "error in executing process : {err}"
259261 ) ) ) ,
260262 msg => Err ( ChannelError :: UnexpectedMessage {
261- expected : Box :: new ( Message :: InitReady ) ,
263+ expected : Some ( Box :: new ( Message :: InitReady ) ) ,
262264 received : Box :: new ( msg) ,
263265 } ) ,
264266 }
@@ -275,7 +277,7 @@ impl MainReceiver {
275277 match msg {
276278 Message :: HookRequest => Ok ( ( ) ) ,
277279 msg => Err ( ChannelError :: UnexpectedMessage {
278- expected : Box :: new ( Message :: HookRequest ) ,
280+ expected : Some ( Box :: new ( Message :: HookRequest ) ) ,
279281 received : Box :: new ( msg) ,
280282 } ) ,
281283 }
@@ -333,7 +335,7 @@ impl IntermediateReceiver {
333335 match msg {
334336 Message :: MappingWritten => Ok ( ( ) ) ,
335337 msg => Err ( ChannelError :: UnexpectedMessage {
336- expected : Box :: new ( Message :: MappingWritten ) ,
338+ expected : Some ( Box :: new ( Message :: MappingWritten ) ) ,
337339 received : Box :: new ( msg) ,
338340 } ) ,
339341 }
@@ -411,7 +413,7 @@ impl InitReceiver {
411413 match msg {
412414 Message :: SeccompNotifyDone => Ok ( ( ) ) ,
413415 msg => Err ( ChannelError :: UnexpectedMessage {
414- expected : Box :: new ( Message :: SeccompNotifyDone ) ,
416+ expected : Some ( Box :: new ( Message :: SeccompNotifyDone ) ) ,
415417 received : Box :: new ( msg) ,
416418 } ) ,
417419 }
@@ -430,7 +432,7 @@ impl InitReceiver {
430432 match msg {
431433 Message :: MoveNetworkDevice ( addr) => Ok ( addr) ,
432434 msg => Err ( ChannelError :: UnexpectedMessage {
433- expected : Box :: new ( Message :: WriteMapping ) ,
435+ expected : Some ( Box :: new ( Message :: WriteMapping ) ) ,
434436 received : Box :: new ( msg) ,
435437 } ) ,
436438 }
@@ -447,7 +449,7 @@ impl InitReceiver {
447449 match msg {
448450 Message :: HookDone => Ok ( ( ) ) ,
449451 msg => Err ( ChannelError :: UnexpectedMessage {
450- expected : Box :: new ( Message :: HookDone ) ,
452+ expected : Some ( Box :: new ( Message :: HookDone ) ) ,
451453 received : Box :: new ( msg) ,
452454 } ) ,
453455 }
@@ -477,7 +479,7 @@ impl InitReceiver {
477479 }
478480 Message :: MountFdError ( err) => Err ( ChannelError :: MountFdError ( err) ) ,
479481 msg => Err ( ChannelError :: UnexpectedMessage {
480- expected : Box :: new ( Message :: MountFdReply ) ,
482+ expected : Some ( Box :: new ( Message :: MountFdReply ) ) ,
481483 received : Box :: new ( msg) ,
482484 } ) ,
483485 }
@@ -616,6 +618,34 @@ mod tests {
616618 Ok ( ( ) )
617619 }
618620
621+ #[ test]
622+ #[ serial]
623+ fn test_channel_mount_fd_request ( ) -> Result < ( ) > {
624+ let ( sender, receiver) = & mut main_channel ( ) ?;
625+ let request = MountMsg {
626+ source : "/proc/self/ns/user" . to_string ( ) ,
627+ idmap : Some ( crate :: process:: message:: MountIdMap {
628+ uid_mappings : vec ! [ ] ,
629+ gid_mappings : vec ! [ ] ,
630+ recursive : true ,
631+ } ) ,
632+ } ;
633+
634+ sender. request_mount_fd ( request. clone ( ) ) ?;
635+ let received = receiver. wait_for_mount_fd_request ( ) ?;
636+
637+ assert_eq ! ( received. source, request. source) ;
638+ let received_idmap = received. idmap . context ( "missing idmap in mount request" ) ?;
639+ let request_idmap = request. idmap . context ( "missing idmap in mount request" ) ?;
640+ assert_eq ! ( received_idmap. recursive, request_idmap. recursive) ;
641+ assert_eq ! ( received_idmap. uid_mappings, request_idmap. uid_mappings) ;
642+ assert_eq ! ( received_idmap. gid_mappings, request_idmap. gid_mappings) ;
643+
644+ sender. close ( ) ?;
645+ receiver. close ( ) ?;
646+ Ok ( ( ) )
647+ }
648+
619649 #[ test]
620650 #[ serial]
621651 fn test_channel_init_ready ( ) -> Result < ( ) > {
0 commit comments