1
1
use std:: fs;
2
2
use std:: io:: { Read , Seek , SeekFrom , Write } ;
3
3
use std:: os:: unix:: prelude:: FileExt ;
4
- use std:: path:: PathBuf ;
5
- use std:: process:: Command ;
6
4
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:: * ;
57
6
7
+ const DEVICE_NAME : & ' static str = "chrdev-tests" ;
58
8
const READ_FILE_MINOR : libc:: dev_t = 0 ;
59
9
const SEEK_FILE_MINOR : libc:: dev_t = 1 ;
60
10
const WRITE_FILE_MINOR : libc:: dev_t = 2 ;
61
11
62
12
#[ test]
63
13
fn test_mknod ( ) {
64
14
with_kernel_module ( || {
65
- let device_number = get_device_major_number ( ) ;
15
+ let device_number = get_device_major_number ( DEVICE_NAME ) ;
66
16
mknod ( & temporary_file_path ( ) , device_number, READ_FILE_MINOR ) ;
67
17
} ) ;
68
18
}
69
19
70
20
#[ test]
71
21
fn test_read ( ) {
72
22
with_kernel_module ( || {
73
- let device_number = get_device_major_number ( ) ;
23
+ let device_number = get_device_major_number ( DEVICE_NAME ) ;
74
24
let p = temporary_file_path ( ) ;
75
25
let _u = mknod ( & p, device_number, READ_FILE_MINOR ) ;
76
26
@@ -84,7 +34,7 @@ fn test_read() {
84
34
#[ test]
85
35
fn test_read_offset ( ) {
86
36
with_kernel_module ( || {
87
- let device_number = get_device_major_number ( ) ;
37
+ let device_number = get_device_major_number ( DEVICE_NAME ) ;
88
38
let p = temporary_file_path ( ) ;
89
39
let _u = mknod ( & p, device_number, READ_FILE_MINOR ) ;
90
40
@@ -100,7 +50,7 @@ fn test_read_offset() {
100
50
#[ test]
101
51
fn test_read_at ( ) {
102
52
with_kernel_module ( || {
103
- let device_number = get_device_major_number ( ) ;
53
+ let device_number = get_device_major_number ( DEVICE_NAME ) ;
104
54
let p = temporary_file_path ( ) ;
105
55
let _u = mknod ( & p, device_number, READ_FILE_MINOR ) ;
106
56
@@ -114,7 +64,7 @@ fn test_read_at() {
114
64
#[ test]
115
65
fn test_read_unimplemented ( ) {
116
66
with_kernel_module ( || {
117
- let device_number = get_device_major_number ( ) ;
67
+ let device_number = get_device_major_number ( DEVICE_NAME ) ;
118
68
let p = temporary_file_path ( ) ;
119
69
let _u = mknod ( & p, device_number, SEEK_FILE_MINOR ) ;
120
70
@@ -130,7 +80,7 @@ fn test_read_unimplemented() {
130
80
#[ test]
131
81
fn test_lseek_unimplemented ( ) {
132
82
with_kernel_module ( || {
133
- let device_number = get_device_major_number ( ) ;
83
+ let device_number = get_device_major_number ( DEVICE_NAME ) ;
134
84
let p = temporary_file_path ( ) ;
135
85
let _u = mknod ( & p, device_number, READ_FILE_MINOR ) ;
136
86
@@ -162,7 +112,7 @@ fn test_lseek_unimplemented() {
162
112
#[ test]
163
113
fn test_lseek ( ) {
164
114
with_kernel_module ( || {
165
- let device_number = get_device_major_number ( ) ;
115
+ let device_number = get_device_major_number ( DEVICE_NAME ) ;
166
116
let p = temporary_file_path ( ) ;
167
117
let _u = mknod ( & p, device_number, SEEK_FILE_MINOR ) ;
168
118
@@ -184,7 +134,7 @@ fn test_lseek() {
184
134
#[ test]
185
135
fn test_write_unimplemented ( ) {
186
136
with_kernel_module ( || {
187
- let device_number = get_device_major_number ( ) ;
137
+ let device_number = get_device_major_number ( DEVICE_NAME ) ;
188
138
let p = temporary_file_path ( ) ;
189
139
let _u = mknod ( & p, device_number, READ_FILE_MINOR ) ;
190
140
@@ -199,7 +149,7 @@ fn test_write_unimplemented() {
199
149
#[ test]
200
150
fn test_write ( ) {
201
151
with_kernel_module ( || {
202
- let device_number = get_device_major_number ( ) ;
152
+ let device_number = get_device_major_number ( DEVICE_NAME ) ;
203
153
let p = temporary_file_path ( ) ;
204
154
let _u = mknod ( & p, device_number, WRITE_FILE_MINOR ) ;
205
155
0 commit comments