1
1
//! Volume related tests
2
2
3
+ use embedded_sdmmc:: VolumeOpenMode ;
4
+
3
5
mod utils;
4
6
5
7
#[ test]
@@ -16,36 +18,36 @@ fn open_all_volumes() {
16
18
17
19
// Open Volume 0
18
20
let fat16_volume = volume_mgr
19
- . open_raw_volume ( embedded_sdmmc:: VolumeIdx ( 0 ) )
21
+ . open_raw_volume ( embedded_sdmmc:: VolumeIdx ( 0 ) , VolumeOpenMode :: ReadWrite )
20
22
. expect ( "open volume 0" ) ;
21
23
22
24
// Fail to Open Volume 0 again
23
25
assert ! ( matches!(
24
- volume_mgr. open_raw_volume( embedded_sdmmc:: VolumeIdx ( 0 ) ) ,
26
+ volume_mgr. open_raw_volume( embedded_sdmmc:: VolumeIdx ( 0 ) , VolumeOpenMode :: ReadWrite ) ,
25
27
Err ( embedded_sdmmc:: Error :: VolumeAlreadyOpen )
26
28
) ) ;
27
29
28
30
volume_mgr. close_volume ( fat16_volume) . expect ( "close fat16" ) ;
29
31
30
32
// Open Volume 1
31
33
let fat32_volume = volume_mgr
32
- . open_raw_volume ( embedded_sdmmc:: VolumeIdx ( 1 ) )
34
+ . open_raw_volume ( embedded_sdmmc:: VolumeIdx ( 1 ) , VolumeOpenMode :: ReadWrite )
33
35
. expect ( "open volume 1" ) ;
34
36
35
37
// Fail to Volume 1 again
36
38
assert ! ( matches!(
37
- volume_mgr. open_raw_volume( embedded_sdmmc:: VolumeIdx ( 1 ) ) ,
39
+ volume_mgr. open_raw_volume( embedded_sdmmc:: VolumeIdx ( 1 ) , VolumeOpenMode :: ReadWrite ) ,
38
40
Err ( embedded_sdmmc:: Error :: VolumeAlreadyOpen )
39
41
) ) ;
40
42
41
43
// Open Volume 0 again
42
44
let fat16_volume = volume_mgr
43
- . open_raw_volume ( embedded_sdmmc:: VolumeIdx ( 0 ) )
45
+ . open_raw_volume ( embedded_sdmmc:: VolumeIdx ( 0 ) , VolumeOpenMode :: ReadWrite )
44
46
. expect ( "open volume 0" ) ;
45
47
46
48
// Open any volume - too many volumes (0 and 1 are open)
47
49
assert ! ( matches!(
48
- volume_mgr. open_raw_volume( embedded_sdmmc:: VolumeIdx ( 0 ) ) ,
50
+ volume_mgr. open_raw_volume( embedded_sdmmc:: VolumeIdx ( 0 ) , VolumeOpenMode :: ReadWrite ) ,
49
51
Err ( embedded_sdmmc:: Error :: TooManyOpenVolumes )
50
52
) ) ;
51
53
@@ -54,13 +56,13 @@ fn open_all_volumes() {
54
56
55
57
// This isn't a valid volume
56
58
assert ! ( matches!(
57
- volume_mgr. open_raw_volume( embedded_sdmmc:: VolumeIdx ( 2 ) ) ,
59
+ volume_mgr. open_raw_volume( embedded_sdmmc:: VolumeIdx ( 2 ) , VolumeOpenMode :: ReadWrite ) ,
58
60
Err ( embedded_sdmmc:: Error :: FormatError ( _e) )
59
61
) ) ;
60
62
61
63
// This isn't a valid volume
62
64
assert ! ( matches!(
63
- volume_mgr. open_raw_volume( embedded_sdmmc:: VolumeIdx ( 9 ) ) ,
65
+ volume_mgr. open_raw_volume( embedded_sdmmc:: VolumeIdx ( 9 ) , VolumeOpenMode :: ReadWrite ) ,
64
66
Err ( embedded_sdmmc:: Error :: NoSuchVolume )
65
67
) ) ;
66
68
@@ -79,7 +81,7 @@ fn close_volume_too_early() {
79
81
let mut volume_mgr = embedded_sdmmc:: VolumeManager :: new ( disk, time_source) ;
80
82
81
83
let volume = volume_mgr
82
- . open_raw_volume ( embedded_sdmmc:: VolumeIdx ( 0 ) )
84
+ . open_raw_volume ( embedded_sdmmc:: VolumeIdx ( 0 ) , VolumeOpenMode :: ReadWrite )
83
85
. expect ( "open volume 0" ) ;
84
86
let root_dir = volume_mgr. open_root_dir ( volume) . expect ( "open root dir" ) ;
85
87
@@ -102,6 +104,40 @@ fn close_volume_too_early() {
102
104
) ) ;
103
105
}
104
106
107
+ #[ test]
108
+ fn volume_read_only_open_file_read_write ( ) {
109
+ let time_source = utils:: make_time_source ( ) ;
110
+ let disk = utils:: make_block_device ( utils:: DISK_SOURCE ) . unwrap ( ) ;
111
+ let mut volume_mgr = embedded_sdmmc:: VolumeManager :: new ( disk, time_source) ;
112
+
113
+ let volume = volume_mgr
114
+ . open_raw_volume ( embedded_sdmmc:: VolumeIdx ( 0 ) , VolumeOpenMode :: ReadOnly )
115
+ . expect ( "open volume 0" ) ;
116
+ let root_dir = volume_mgr. open_root_dir ( volume) . expect ( "open root dir" ) ;
117
+
118
+ // Dir open
119
+ assert ! ( matches!(
120
+ volume_mgr. open_file_in_dir( root_dir, "64MB.DAT" , embedded_sdmmc:: Mode :: ReadWriteAppend ) ,
121
+ Err ( embedded_sdmmc:: Error :: VolumeReadOnly )
122
+ ) ) ;
123
+ }
124
+
125
+ #[ test]
126
+ fn volume_read_only_open_file_read_only ( ) {
127
+ let time_source = utils:: make_time_source ( ) ;
128
+ let disk = utils:: make_block_device ( utils:: DISK_SOURCE ) . unwrap ( ) ;
129
+ let mut volume_mgr = embedded_sdmmc:: VolumeManager :: new ( disk, time_source) ;
130
+
131
+ let volume = volume_mgr
132
+ . open_raw_volume ( embedded_sdmmc:: VolumeIdx ( 0 ) , VolumeOpenMode :: ReadOnly )
133
+ . expect ( "open volume 0" ) ;
134
+ let root_dir = volume_mgr. open_root_dir ( volume) . expect ( "open root dir" ) ;
135
+
136
+ volume_mgr
137
+ . open_file_in_dir ( root_dir, "64MB.DAT" , embedded_sdmmc:: Mode :: ReadOnly )
138
+ . unwrap ( ) ;
139
+ }
140
+
105
141
// ****************************************************************************
106
142
//
107
143
// End Of File
0 commit comments