11use std:: fs;
22use std:: io:: { Read , Seek , SeekFrom , Write } ;
33use std:: os:: unix:: prelude:: FileExt ;
4- use std:: path:: PathBuf ;
5- use std:: process:: Command ;
64
7- use libc;
8-
9- use tempfile:: TempDir ;
10-
11- use kernel_module_testlib:: with_kernel_module;
12-
13- fn get_device_major_number ( ) -> libc:: dev_t {
14- let devices = fs:: read_to_string ( "/proc/devices" ) . unwrap ( ) ;
15- let dev_no_line = devices
16- . lines ( )
17- . find ( |l| l. ends_with ( "chrdev-tests" ) )
18- . unwrap ( ) ;
19- let elements = dev_no_line. rsplitn ( 2 , " " ) . collect :: < Vec < _ > > ( ) ;
20- assert_eq ! ( elements. len( ) , 2 ) ;
21- assert_eq ! ( elements[ 0 ] , "chrdev-tests" ) ;
22- return elements[ 1 ] . trim ( ) . parse ( ) . unwrap ( ) ;
23- }
24-
25- fn temporary_file_path ( ) -> PathBuf {
26- let mut p = TempDir :: new ( ) . unwrap ( ) . into_path ( ) ;
27- p. push ( "device" ) ;
28- return p;
29- }
30-
31- struct UnlinkOnDrop < ' a > {
32- path : & ' a PathBuf ,
33- }
34-
35- impl Drop for UnlinkOnDrop < ' _ > {
36- fn drop ( & mut self ) {
37- Command :: new ( "sudo" )
38- . arg ( "rm" )
39- . arg ( self . path . to_str ( ) . unwrap ( ) )
40- . status ( )
41- . unwrap ( ) ;
42- }
43- }
44-
45- fn mknod ( path : & PathBuf , major : libc:: dev_t , minor : libc:: dev_t ) -> UnlinkOnDrop {
46- Command :: new ( "sudo" )
47- . arg ( "mknod" )
48- . arg ( "--mode=a=rw" )
49- . arg ( path. to_str ( ) . unwrap ( ) )
50- . arg ( "c" )
51- . arg ( major. to_string ( ) )
52- . arg ( minor. to_string ( ) )
53- . status ( )
54- . unwrap ( ) ;
55- return UnlinkOnDrop { path } ;
56- }
5+ use kernel_module_testlib:: * ;
576
7+ const DEVICE_NAME : & ' static str = "chrdev-tests" ;
588const READ_FILE_MINOR : libc:: dev_t = 0 ;
599const SEEK_FILE_MINOR : libc:: dev_t = 1 ;
6010const WRITE_FILE_MINOR : libc:: dev_t = 2 ;
6111
6212#[ test]
6313fn test_mknod ( ) {
6414 with_kernel_module ( || {
65- let device_number = get_device_major_number ( ) ;
15+ let device_number = get_device_major_number ( DEVICE_NAME ) ;
6616 mknod ( & temporary_file_path ( ) , device_number, READ_FILE_MINOR ) ;
6717 } ) ;
6818}
6919
7020#[ test]
7121fn test_read ( ) {
7222 with_kernel_module ( || {
73- let device_number = get_device_major_number ( ) ;
23+ let device_number = get_device_major_number ( DEVICE_NAME ) ;
7424 let p = temporary_file_path ( ) ;
7525 let _u = mknod ( & p, device_number, READ_FILE_MINOR ) ;
7626
@@ -84,7 +34,7 @@ fn test_read() {
8434#[ test]
8535fn test_read_offset ( ) {
8636 with_kernel_module ( || {
87- let device_number = get_device_major_number ( ) ;
37+ let device_number = get_device_major_number ( DEVICE_NAME ) ;
8838 let p = temporary_file_path ( ) ;
8939 let _u = mknod ( & p, device_number, READ_FILE_MINOR ) ;
9040
@@ -100,7 +50,7 @@ fn test_read_offset() {
10050#[ test]
10151fn test_read_at ( ) {
10252 with_kernel_module ( || {
103- let device_number = get_device_major_number ( ) ;
53+ let device_number = get_device_major_number ( DEVICE_NAME ) ;
10454 let p = temporary_file_path ( ) ;
10555 let _u = mknod ( & p, device_number, READ_FILE_MINOR ) ;
10656
@@ -114,7 +64,7 @@ fn test_read_at() {
11464#[ test]
11565fn test_read_unimplemented ( ) {
11666 with_kernel_module ( || {
117- let device_number = get_device_major_number ( ) ;
67+ let device_number = get_device_major_number ( DEVICE_NAME ) ;
11868 let p = temporary_file_path ( ) ;
11969 let _u = mknod ( & p, device_number, SEEK_FILE_MINOR ) ;
12070
@@ -130,7 +80,7 @@ fn test_read_unimplemented() {
13080#[ test]
13181fn test_lseek_unimplemented ( ) {
13282 with_kernel_module ( || {
133- let device_number = get_device_major_number ( ) ;
83+ let device_number = get_device_major_number ( DEVICE_NAME ) ;
13484 let p = temporary_file_path ( ) ;
13585 let _u = mknod ( & p, device_number, READ_FILE_MINOR ) ;
13686
@@ -162,7 +112,7 @@ fn test_lseek_unimplemented() {
162112#[ test]
163113fn test_lseek ( ) {
164114 with_kernel_module ( || {
165- let device_number = get_device_major_number ( ) ;
115+ let device_number = get_device_major_number ( DEVICE_NAME ) ;
166116 let p = temporary_file_path ( ) ;
167117 let _u = mknod ( & p, device_number, SEEK_FILE_MINOR ) ;
168118
@@ -184,7 +134,7 @@ fn test_lseek() {
184134#[ test]
185135fn test_write_unimplemented ( ) {
186136 with_kernel_module ( || {
187- let device_number = get_device_major_number ( ) ;
137+ let device_number = get_device_major_number ( DEVICE_NAME ) ;
188138 let p = temporary_file_path ( ) ;
189139 let _u = mknod ( & p, device_number, READ_FILE_MINOR ) ;
190140
@@ -199,7 +149,7 @@ fn test_write_unimplemented() {
199149#[ test]
200150fn test_write ( ) {
201151 with_kernel_module ( || {
202- let device_number = get_device_major_number ( ) ;
152+ let device_number = get_device_major_number ( DEVICE_NAME ) ;
203153 let p = temporary_file_path ( ) ;
204154 let _u = mknod ( & p, device_number, WRITE_FILE_MINOR ) ;
205155
0 commit comments