11//! Volume related tests
22
3+ use embedded_sdmmc:: VolumeOpenMode ;
4+
35mod utils;
46
57#[ test]
@@ -16,36 +18,36 @@ fn open_all_volumes() {
1618
1719 // Open Volume 0
1820 let fat16_volume = volume_mgr
19- . open_raw_volume ( embedded_sdmmc:: VolumeIdx ( 0 ) )
21+ . open_raw_volume ( embedded_sdmmc:: VolumeIdx ( 0 ) , VolumeOpenMode :: ReadWrite )
2022 . expect ( "open volume 0" ) ;
2123
2224 // Fail to Open Volume 0 again
2325 assert ! ( matches!(
24- volume_mgr. open_raw_volume( embedded_sdmmc:: VolumeIdx ( 0 ) ) ,
26+ volume_mgr. open_raw_volume( embedded_sdmmc:: VolumeIdx ( 0 ) , VolumeOpenMode :: ReadWrite ) ,
2527 Err ( embedded_sdmmc:: Error :: VolumeAlreadyOpen )
2628 ) ) ;
2729
2830 volume_mgr. close_volume ( fat16_volume) . expect ( "close fat16" ) ;
2931
3032 // Open Volume 1
3133 let fat32_volume = volume_mgr
32- . open_raw_volume ( embedded_sdmmc:: VolumeIdx ( 1 ) )
34+ . open_raw_volume ( embedded_sdmmc:: VolumeIdx ( 1 ) , VolumeOpenMode :: ReadWrite )
3335 . expect ( "open volume 1" ) ;
3436
3537 // Fail to Volume 1 again
3638 assert ! ( matches!(
37- volume_mgr. open_raw_volume( embedded_sdmmc:: VolumeIdx ( 1 ) ) ,
39+ volume_mgr. open_raw_volume( embedded_sdmmc:: VolumeIdx ( 1 ) , VolumeOpenMode :: ReadWrite ) ,
3840 Err ( embedded_sdmmc:: Error :: VolumeAlreadyOpen )
3941 ) ) ;
4042
4143 // Open Volume 0 again
4244 let fat16_volume = volume_mgr
43- . open_raw_volume ( embedded_sdmmc:: VolumeIdx ( 0 ) )
45+ . open_raw_volume ( embedded_sdmmc:: VolumeIdx ( 0 ) , VolumeOpenMode :: ReadWrite )
4446 . expect ( "open volume 0" ) ;
4547
4648 // Open any volume - too many volumes (0 and 1 are open)
4749 assert ! ( matches!(
48- volume_mgr. open_raw_volume( embedded_sdmmc:: VolumeIdx ( 0 ) ) ,
50+ volume_mgr. open_raw_volume( embedded_sdmmc:: VolumeIdx ( 0 ) , VolumeOpenMode :: ReadWrite ) ,
4951 Err ( embedded_sdmmc:: Error :: TooManyOpenVolumes )
5052 ) ) ;
5153
@@ -54,13 +56,13 @@ fn open_all_volumes() {
5456
5557 // This isn't a valid volume
5658 assert ! ( matches!(
57- volume_mgr. open_raw_volume( embedded_sdmmc:: VolumeIdx ( 2 ) ) ,
59+ volume_mgr. open_raw_volume( embedded_sdmmc:: VolumeIdx ( 2 ) , VolumeOpenMode :: ReadWrite ) ,
5860 Err ( embedded_sdmmc:: Error :: FormatError ( _e) )
5961 ) ) ;
6062
6163 // This isn't a valid volume
6264 assert ! ( matches!(
63- volume_mgr. open_raw_volume( embedded_sdmmc:: VolumeIdx ( 9 ) ) ,
65+ volume_mgr. open_raw_volume( embedded_sdmmc:: VolumeIdx ( 9 ) , VolumeOpenMode :: ReadWrite ) ,
6466 Err ( embedded_sdmmc:: Error :: NoSuchVolume )
6567 ) ) ;
6668
@@ -79,7 +81,7 @@ fn close_volume_too_early() {
7981 let mut volume_mgr = embedded_sdmmc:: VolumeManager :: new ( disk, time_source) ;
8082
8183 let volume = volume_mgr
82- . open_raw_volume ( embedded_sdmmc:: VolumeIdx ( 0 ) )
84+ . open_raw_volume ( embedded_sdmmc:: VolumeIdx ( 0 ) , VolumeOpenMode :: ReadWrite )
8385 . expect ( "open volume 0" ) ;
8486 let root_dir = volume_mgr. open_root_dir ( volume) . expect ( "open root dir" ) ;
8587
@@ -102,6 +104,40 @@ fn close_volume_too_early() {
102104 ) ) ;
103105}
104106
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+
105141// ****************************************************************************
106142//
107143// End Of File
0 commit comments