@@ -47,7 +47,11 @@ pub(crate) fn ok_or_panic<T>(result: ExternResult<T>) -> T {
47
47
match result {
48
48
ExternResult :: Ok ( t) => t,
49
49
ExternResult :: Err ( e) => unsafe {
50
- panic ! ( "Got engine error with type {:?}" , ( * e) . etype) ;
50
+ let error = recover_error ( e) ;
51
+ panic ! (
52
+ "Got engine error with type {:?} message: {}" ,
53
+ error. etype, error. message
54
+ ) ;
51
55
} ,
52
56
}
53
57
}
@@ -67,3 +71,62 @@ pub(crate) fn assert_extern_result_error_with_message<T>(
67
71
_ => panic ! ( "Expected error of type '{expected_etype:?}' and message '{expected_message}'" ) ,
68
72
}
69
73
}
74
+
75
+ #[ cfg( test) ]
76
+ mod tests {
77
+ use super :: * ;
78
+ use std:: panic;
79
+
80
+ #[ test]
81
+ fn test_ok_or_panic_with_error ( ) {
82
+ // Create a test error
83
+ let message = "Test error message" ;
84
+ let error_ptr = allocate_err (
85
+ KernelError :: GenericError ,
86
+ KernelStringSlice {
87
+ ptr : message. as_ptr ( ) as * const i8 ,
88
+ len : message. len ( ) ,
89
+ } ,
90
+ ) ;
91
+ let result = ExternResult :: < i32 > :: Err ( error_ptr) ;
92
+
93
+ // Test that ok_or_panic panics with the expected message
94
+ let panic_result = panic:: catch_unwind ( || {
95
+ ok_or_panic ( result) ;
96
+ } ) ;
97
+
98
+ assert ! ( panic_result. is_err( ) , "Expected ok_or_panic to panic" ) ;
99
+
100
+ // Check that the panic message contains the error type and message
101
+ let panic_message = panic_result. unwrap_err ( ) ;
102
+ let panic_str = if let Some ( s) = panic_message. downcast_ref :: < String > ( ) {
103
+ s. clone ( )
104
+ } else {
105
+ "Unknown panic type" . to_string ( )
106
+ } ;
107
+
108
+ assert ! (
109
+ panic_str. contains( "Got engine error with type" ) ,
110
+ "Panic message should contain 'Got engine error with type', got: {}" ,
111
+ panic_str
112
+ ) ;
113
+ assert ! (
114
+ panic_str. contains( "GenericError" ) ,
115
+ "Panic message should contain error type 'GenericError', got: {}" ,
116
+ panic_str
117
+ ) ;
118
+ assert ! (
119
+ panic_str. contains( message) ,
120
+ "Panic message should contain error message 'Test error message', got: {}" ,
121
+ panic_str
122
+ ) ;
123
+ }
124
+
125
+ #[ test]
126
+ fn test_ok_or_panic_with_ok ( ) {
127
+ // Test that ok_or_panic returns the value when the result is Ok
128
+ let result = ExternResult :: < i32 > :: Ok ( 42 ) ;
129
+ let value = ok_or_panic ( result) ;
130
+ assert_eq ! ( value, 42 ) ;
131
+ }
132
+ }
0 commit comments