SDHI_driver patch (mbedOS 5.11.5)

Committer:
tvendov
Date:
Fri Mar 29 19:47:34 2019 +0200
Revision:
2:7c75ab32d7c9
Fix: Folder structure changed. All SD Auto tests pass with OK!

Who changed what in which revision?

UserRevisionLine numberNew contents of line
tvendov 2:7c75ab32d7c9 1 /* mbed Microcontroller Library
tvendov 2:7c75ab32d7c9 2 * Copyright (c) 2016 ARM Limited
tvendov 2:7c75ab32d7c9 3 *
tvendov 2:7c75ab32d7c9 4 * Licensed under the Apache License, Version 2.0 (the "License");
tvendov 2:7c75ab32d7c9 5 * you may not use this file except in compliance with the License.
tvendov 2:7c75ab32d7c9 6 * You may obtain a copy of the License at
tvendov 2:7c75ab32d7c9 7 *
tvendov 2:7c75ab32d7c9 8 * http://www.apache.org/licenses/LICENSE-2.0
tvendov 2:7c75ab32d7c9 9 *
tvendov 2:7c75ab32d7c9 10 * Unless required by applicable law or agreed to in writing, software
tvendov 2:7c75ab32d7c9 11 * distributed under the License is distributed on an "AS IS" BASIS,
tvendov 2:7c75ab32d7c9 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
tvendov 2:7c75ab32d7c9 13 * See the License for the specific language governing permissions and
tvendov 2:7c75ab32d7c9 14 * limitations under the License.
tvendov 2:7c75ab32d7c9 15 */
tvendov 2:7c75ab32d7c9 16
tvendov 2:7c75ab32d7c9 17 #include "mbed.h"
tvendov 2:7c75ab32d7c9 18 #include "greentea-client/test_env.h"
tvendov 2:7c75ab32d7c9 19 #include "unity.h"
tvendov 2:7c75ab32d7c9 20 #include "utest.h"
tvendov 2:7c75ab32d7c9 21 #include <stdlib.h>
tvendov 2:7c75ab32d7c9 22 #include <errno.h>
tvendov 2:7c75ab32d7c9 23
tvendov 2:7c75ab32d7c9 24 using namespace utest::v1;
tvendov 2:7c75ab32d7c9 25
tvendov 2:7c75ab32d7c9 26 // test configuration
tvendov 2:7c75ab32d7c9 27 #ifndef MBED_TEST_FILESYSTEM
tvendov 2:7c75ab32d7c9 28 #define MBED_TEST_FILESYSTEM FATFileSystem
tvendov 2:7c75ab32d7c9 29 #endif
tvendov 2:7c75ab32d7c9 30
tvendov 2:7c75ab32d7c9 31 #ifndef MBED_TEST_FILESYSTEM_DECL
tvendov 2:7c75ab32d7c9 32 #define MBED_TEST_FILESYSTEM_DECL MBED_TEST_FILESYSTEM fs("fs")
tvendov 2:7c75ab32d7c9 33 #endif
tvendov 2:7c75ab32d7c9 34
tvendov 2:7c75ab32d7c9 35 #ifndef MBED_TEST_BLOCKDEVICE
tvendov 2:7c75ab32d7c9 36 #define MBED_TEST_BLOCKDEVICE RZ_SDHIBlockDevice
tvendov 2:7c75ab32d7c9 37 #define MBED_TEST_BLOCKDEVICE_DECL SDHIBlockDevice bd(MBED_CONF_RZ_SDHI_CH);
tvendov 2:7c75ab32d7c9 38 #endif
tvendov 2:7c75ab32d7c9 39
tvendov 2:7c75ab32d7c9 40 #ifndef MBED_TEST_BLOCKDEVICE_DECL
tvendov 2:7c75ab32d7c9 41 #define MBED_TEST_BLOCKDEVICE_DECL MBED_TEST_BLOCKDEVICE bd
tvendov 2:7c75ab32d7c9 42 #endif
tvendov 2:7c75ab32d7c9 43
tvendov 2:7c75ab32d7c9 44 #ifndef MBED_TEST_FILES
tvendov 2:7c75ab32d7c9 45 #define MBED_TEST_FILES 4
tvendov 2:7c75ab32d7c9 46 #endif
tvendov 2:7c75ab32d7c9 47
tvendov 2:7c75ab32d7c9 48 #ifndef MBED_TEST_DIRS
tvendov 2:7c75ab32d7c9 49 #define MBED_TEST_DIRS 4
tvendov 2:7c75ab32d7c9 50 #endif
tvendov 2:7c75ab32d7c9 51
tvendov 2:7c75ab32d7c9 52 #ifndef MBED_TEST_TIMEOUT
tvendov 2:7c75ab32d7c9 53 #define MBED_TEST_TIMEOUT 120
tvendov 2:7c75ab32d7c9 54 #endif
tvendov 2:7c75ab32d7c9 55
tvendov 2:7c75ab32d7c9 56
tvendov 2:7c75ab32d7c9 57 // declarations
tvendov 2:7c75ab32d7c9 58 #define STRINGIZE(x) STRINGIZE2(x)
tvendov 2:7c75ab32d7c9 59 #define STRINGIZE2(x) #x
tvendov 2:7c75ab32d7c9 60 #define INCLUDE(x, ext) STRINGIZE(x.ext)
tvendov 2:7c75ab32d7c9 61
tvendov 2:7c75ab32d7c9 62 #include INCLUDE(MBED_TEST_FILESYSTEM, h)
tvendov 2:7c75ab32d7c9 63 #include INCLUDE(MBED_TEST_BLOCKDEVICE, hpp)
tvendov 2:7c75ab32d7c9 64
tvendov 2:7c75ab32d7c9 65 MBED_TEST_FILESYSTEM_DECL;
tvendov 2:7c75ab32d7c9 66 MBED_TEST_BLOCKDEVICE_DECL;
tvendov 2:7c75ab32d7c9 67
tvendov 2:7c75ab32d7c9 68 Dir dir[MBED_TEST_DIRS];
tvendov 2:7c75ab32d7c9 69 File file[MBED_TEST_FILES];
tvendov 2:7c75ab32d7c9 70 DIR *dd[MBED_TEST_DIRS];
tvendov 2:7c75ab32d7c9 71 FILE *fd[MBED_TEST_FILES];
tvendov 2:7c75ab32d7c9 72 struct dirent ent;
tvendov 2:7c75ab32d7c9 73 struct dirent *ed;
tvendov 2:7c75ab32d7c9 74 uint8_t buffer[MBED_CONF_RZ_SDHI_TEST_BUFFER];
tvendov 2:7c75ab32d7c9 75
tvendov 2:7c75ab32d7c9 76
tvendov 2:7c75ab32d7c9 77 // tests
tvendov 2:7c75ab32d7c9 78
tvendov 2:7c75ab32d7c9 79 void test_seek_tests()
tvendov 2:7c75ab32d7c9 80 {
tvendov 2:7c75ab32d7c9 81 int res = bd.init();
tvendov 2:7c75ab32d7c9 82 TEST_ASSERT_EQUAL(0, res);
tvendov 2:7c75ab32d7c9 83
tvendov 2:7c75ab32d7c9 84 {
tvendov 2:7c75ab32d7c9 85 size_t size;
tvendov 2:7c75ab32d7c9 86 res = MBED_TEST_FILESYSTEM::format(&bd);
tvendov 2:7c75ab32d7c9 87 TEST_ASSERT_EQUAL(0, res);
tvendov 2:7c75ab32d7c9 88 res = fs.mount(&bd);
tvendov 2:7c75ab32d7c9 89 TEST_ASSERT_EQUAL(0, res);
tvendov 2:7c75ab32d7c9 90 res = fs.mkdir("hello", 0777);
tvendov 2:7c75ab32d7c9 91 TEST_ASSERT_EQUAL(0, res);
tvendov 2:7c75ab32d7c9 92 for (int i = 0; i < 132; i++) {
tvendov 2:7c75ab32d7c9 93 sprintf((char *)buffer, "hello/kitty%d", i);
tvendov 2:7c75ab32d7c9 94 res = file[0].open(&fs, (char *)buffer,
tvendov 2:7c75ab32d7c9 95 O_WRONLY | O_CREAT | O_APPEND);
tvendov 2:7c75ab32d7c9 96 TEST_ASSERT_EQUAL(0, res);
tvendov 2:7c75ab32d7c9 97
tvendov 2:7c75ab32d7c9 98 size = strlen("kittycatcat");
tvendov 2:7c75ab32d7c9 99 memcpy(buffer, "kittycatcat", size);
tvendov 2:7c75ab32d7c9 100 for (int j = 0; j < 132; j++) {
tvendov 2:7c75ab32d7c9 101 file[0].write(buffer, size);
tvendov 2:7c75ab32d7c9 102 }
tvendov 2:7c75ab32d7c9 103 res = file[0].close();
tvendov 2:7c75ab32d7c9 104 TEST_ASSERT_EQUAL(0, res);
tvendov 2:7c75ab32d7c9 105 }
tvendov 2:7c75ab32d7c9 106 res = fs.unmount();
tvendov 2:7c75ab32d7c9 107 TEST_ASSERT_EQUAL(0, res);
tvendov 2:7c75ab32d7c9 108 }
tvendov 2:7c75ab32d7c9 109
tvendov 2:7c75ab32d7c9 110 res = bd.deinit();
tvendov 2:7c75ab32d7c9 111 TEST_ASSERT_EQUAL(0, res);
tvendov 2:7c75ab32d7c9 112 }
tvendov 2:7c75ab32d7c9 113
tvendov 2:7c75ab32d7c9 114 void test_simple_dir_seek()
tvendov 2:7c75ab32d7c9 115 {
tvendov 2:7c75ab32d7c9 116 int res = bd.init();
tvendov 2:7c75ab32d7c9 117 TEST_ASSERT_EQUAL(0, res);
tvendov 2:7c75ab32d7c9 118
tvendov 2:7c75ab32d7c9 119 {
tvendov 2:7c75ab32d7c9 120 res = fs.mount(&bd);
tvendov 2:7c75ab32d7c9 121 TEST_ASSERT_EQUAL(0, res);
tvendov 2:7c75ab32d7c9 122 res = dir[0].open(&fs, "hello");
tvendov 2:7c75ab32d7c9 123 TEST_ASSERT_EQUAL(0, res);
tvendov 2:7c75ab32d7c9 124 #if (MBED_TEST_FILESYSTEM != FATFileSystem)
tvendov 2:7c75ab32d7c9 125 res = dir[0].read(&ent);
tvendov 2:7c75ab32d7c9 126 TEST_ASSERT_EQUAL(1, res);
tvendov 2:7c75ab32d7c9 127 res = strcmp(ent.d_name, ".");
tvendov 2:7c75ab32d7c9 128 TEST_ASSERT_EQUAL(0, res);
tvendov 2:7c75ab32d7c9 129 res = dir[0].read(&ent);
tvendov 2:7c75ab32d7c9 130 TEST_ASSERT_EQUAL(1, res);
tvendov 2:7c75ab32d7c9 131 res = strcmp(ent.d_name, "..");
tvendov 2:7c75ab32d7c9 132 TEST_ASSERT_EQUAL(0, res);
tvendov 2:7c75ab32d7c9 133 #endif
tvendov 2:7c75ab32d7c9 134
tvendov 2:7c75ab32d7c9 135 off_t pos;
tvendov 2:7c75ab32d7c9 136 int i;
tvendov 2:7c75ab32d7c9 137 for (i = 0; i < 4; i++) {
tvendov 2:7c75ab32d7c9 138 sprintf((char *)buffer, "kitty%d", i);
tvendov 2:7c75ab32d7c9 139 res = dir[0].read(&ent);
tvendov 2:7c75ab32d7c9 140 TEST_ASSERT_EQUAL(1, res);
tvendov 2:7c75ab32d7c9 141 res = strcmp(ent.d_name, (char *)buffer);
tvendov 2:7c75ab32d7c9 142 TEST_ASSERT_EQUAL(0, res);
tvendov 2:7c75ab32d7c9 143 pos = dir[0].tell();
tvendov 2:7c75ab32d7c9 144 }
tvendov 2:7c75ab32d7c9 145 res = pos >= 0;
tvendov 2:7c75ab32d7c9 146 TEST_ASSERT_EQUAL(1, res);
tvendov 2:7c75ab32d7c9 147
tvendov 2:7c75ab32d7c9 148 dir[0].seek(pos);
tvendov 2:7c75ab32d7c9 149 sprintf((char *)buffer, "kitty%d", i);
tvendov 2:7c75ab32d7c9 150 res = dir[0].read(&ent);
tvendov 2:7c75ab32d7c9 151 TEST_ASSERT_EQUAL(1, res);
tvendov 2:7c75ab32d7c9 152 res = strcmp(ent.d_name, (char *)buffer);
tvendov 2:7c75ab32d7c9 153 TEST_ASSERT_EQUAL(0, res);
tvendov 2:7c75ab32d7c9 154
tvendov 2:7c75ab32d7c9 155 dir[0].rewind();
tvendov 2:7c75ab32d7c9 156 sprintf((char *)buffer, "kitty%d", 0);
tvendov 2:7c75ab32d7c9 157 #if (MBED_TEST_FILESYSTEM != FATFileSystem)
tvendov 2:7c75ab32d7c9 158 res = dir[0].read(&ent);
tvendov 2:7c75ab32d7c9 159 TEST_ASSERT_EQUAL(1, res);
tvendov 2:7c75ab32d7c9 160 res = strcmp(ent.d_name, ".");
tvendov 2:7c75ab32d7c9 161 TEST_ASSERT_EQUAL(0, res);
tvendov 2:7c75ab32d7c9 162 res = dir[0].read(&ent);
tvendov 2:7c75ab32d7c9 163 TEST_ASSERT_EQUAL(1, res);
tvendov 2:7c75ab32d7c9 164 res = strcmp(ent.d_name, "..");
tvendov 2:7c75ab32d7c9 165 TEST_ASSERT_EQUAL(0, res);
tvendov 2:7c75ab32d7c9 166 #endif
tvendov 2:7c75ab32d7c9 167 res = dir[0].read(&ent);
tvendov 2:7c75ab32d7c9 168 TEST_ASSERT_EQUAL(1, res);
tvendov 2:7c75ab32d7c9 169 res = strcmp(ent.d_name, (char *)buffer);
tvendov 2:7c75ab32d7c9 170 TEST_ASSERT_EQUAL(0, res);
tvendov 2:7c75ab32d7c9 171
tvendov 2:7c75ab32d7c9 172 dir[0].seek(pos);
tvendov 2:7c75ab32d7c9 173 sprintf((char *)buffer, "kitty%d", i);
tvendov 2:7c75ab32d7c9 174 res = dir[0].read(&ent);
tvendov 2:7c75ab32d7c9 175 TEST_ASSERT_EQUAL(1, res);
tvendov 2:7c75ab32d7c9 176 res = strcmp(ent.d_name, (char *)buffer);
tvendov 2:7c75ab32d7c9 177 TEST_ASSERT_EQUAL(0, res);
tvendov 2:7c75ab32d7c9 178 res = dir[0].close();
tvendov 2:7c75ab32d7c9 179 TEST_ASSERT_EQUAL(0, res);
tvendov 2:7c75ab32d7c9 180 res = fs.unmount();
tvendov 2:7c75ab32d7c9 181 TEST_ASSERT_EQUAL(0, res);
tvendov 2:7c75ab32d7c9 182 }
tvendov 2:7c75ab32d7c9 183
tvendov 2:7c75ab32d7c9 184 res = bd.deinit();
tvendov 2:7c75ab32d7c9 185 TEST_ASSERT_EQUAL(0, res);
tvendov 2:7c75ab32d7c9 186 }
tvendov 2:7c75ab32d7c9 187
tvendov 2:7c75ab32d7c9 188 void test_large_dir_seek()
tvendov 2:7c75ab32d7c9 189 {
tvendov 2:7c75ab32d7c9 190 int res = bd.init();
tvendov 2:7c75ab32d7c9 191 TEST_ASSERT_EQUAL(0, res);
tvendov 2:7c75ab32d7c9 192
tvendov 2:7c75ab32d7c9 193 {
tvendov 2:7c75ab32d7c9 194 res = fs.mount(&bd);
tvendov 2:7c75ab32d7c9 195 TEST_ASSERT_EQUAL(0, res);
tvendov 2:7c75ab32d7c9 196 res = dir[0].open(&fs, "hello");
tvendov 2:7c75ab32d7c9 197 TEST_ASSERT_EQUAL(0, res);
tvendov 2:7c75ab32d7c9 198 #if (MBED_TEST_FILESYSTEM != FATFileSystem)
tvendov 2:7c75ab32d7c9 199 res = dir[0].read(&ent);
tvendov 2:7c75ab32d7c9 200 TEST_ASSERT_EQUAL(1, res);
tvendov 2:7c75ab32d7c9 201 res = strcmp(ent.d_name, ".");
tvendov 2:7c75ab32d7c9 202 TEST_ASSERT_EQUAL(0, res);
tvendov 2:7c75ab32d7c9 203 res = dir[0].read(&ent);
tvendov 2:7c75ab32d7c9 204 TEST_ASSERT_EQUAL(1, res);
tvendov 2:7c75ab32d7c9 205 res = strcmp(ent.d_name, "..");
tvendov 2:7c75ab32d7c9 206 TEST_ASSERT_EQUAL(0, res);
tvendov 2:7c75ab32d7c9 207 #endif
tvendov 2:7c75ab32d7c9 208
tvendov 2:7c75ab32d7c9 209 off_t pos;
tvendov 2:7c75ab32d7c9 210 int i;
tvendov 2:7c75ab32d7c9 211 for (i = 0; i < 128; i++) {
tvendov 2:7c75ab32d7c9 212 sprintf((char *)buffer, "kitty%d", i);
tvendov 2:7c75ab32d7c9 213 res = dir[0].read(&ent);
tvendov 2:7c75ab32d7c9 214 TEST_ASSERT_EQUAL(1, res);
tvendov 2:7c75ab32d7c9 215 res = strcmp(ent.d_name, (char *)buffer);
tvendov 2:7c75ab32d7c9 216 TEST_ASSERT_EQUAL(0, res);
tvendov 2:7c75ab32d7c9 217 pos = dir[0].tell();
tvendov 2:7c75ab32d7c9 218 }
tvendov 2:7c75ab32d7c9 219 res = pos >= 0;
tvendov 2:7c75ab32d7c9 220 TEST_ASSERT_EQUAL(1, res);
tvendov 2:7c75ab32d7c9 221
tvendov 2:7c75ab32d7c9 222 dir[0].seek(pos);
tvendov 2:7c75ab32d7c9 223 sprintf((char *)buffer, "kitty%d", i);
tvendov 2:7c75ab32d7c9 224 res = dir[0].read(&ent);
tvendov 2:7c75ab32d7c9 225 TEST_ASSERT_EQUAL(1, res);
tvendov 2:7c75ab32d7c9 226 res = strcmp(ent.d_name, (char *)buffer);
tvendov 2:7c75ab32d7c9 227 TEST_ASSERT_EQUAL(0, res);
tvendov 2:7c75ab32d7c9 228
tvendov 2:7c75ab32d7c9 229 dir[0].rewind();
tvendov 2:7c75ab32d7c9 230 sprintf((char *)buffer, "kitty%d", 0);
tvendov 2:7c75ab32d7c9 231 #if (MBED_TEST_FILESYSTEM != FATFileSystem)
tvendov 2:7c75ab32d7c9 232 res = dir[0].read(&ent);
tvendov 2:7c75ab32d7c9 233 TEST_ASSERT_EQUAL(1, res);
tvendov 2:7c75ab32d7c9 234 res = strcmp(ent.d_name, ".");
tvendov 2:7c75ab32d7c9 235 TEST_ASSERT_EQUAL(0, res);
tvendov 2:7c75ab32d7c9 236 res = dir[0].read(&ent);
tvendov 2:7c75ab32d7c9 237 TEST_ASSERT_EQUAL(1, res);
tvendov 2:7c75ab32d7c9 238 res = strcmp(ent.d_name, "..");
tvendov 2:7c75ab32d7c9 239 TEST_ASSERT_EQUAL(0, res);
tvendov 2:7c75ab32d7c9 240 #endif
tvendov 2:7c75ab32d7c9 241 res = dir[0].read(&ent);
tvendov 2:7c75ab32d7c9 242 TEST_ASSERT_EQUAL(1, res);
tvendov 2:7c75ab32d7c9 243 res = strcmp(ent.d_name, (char *)buffer);
tvendov 2:7c75ab32d7c9 244 TEST_ASSERT_EQUAL(0, res);
tvendov 2:7c75ab32d7c9 245
tvendov 2:7c75ab32d7c9 246 dir[0].seek(pos);
tvendov 2:7c75ab32d7c9 247 sprintf((char *)buffer, "kitty%d", i);
tvendov 2:7c75ab32d7c9 248 res = dir[0].read(&ent);
tvendov 2:7c75ab32d7c9 249 TEST_ASSERT_EQUAL(1, res);
tvendov 2:7c75ab32d7c9 250 res = strcmp(ent.d_name, (char *)buffer);
tvendov 2:7c75ab32d7c9 251 TEST_ASSERT_EQUAL(0, res);
tvendov 2:7c75ab32d7c9 252 res = dir[0].close();
tvendov 2:7c75ab32d7c9 253 TEST_ASSERT_EQUAL(0, res);
tvendov 2:7c75ab32d7c9 254 res = fs.unmount();
tvendov 2:7c75ab32d7c9 255 TEST_ASSERT_EQUAL(0, res);
tvendov 2:7c75ab32d7c9 256 }
tvendov 2:7c75ab32d7c9 257
tvendov 2:7c75ab32d7c9 258 res = bd.deinit();
tvendov 2:7c75ab32d7c9 259 TEST_ASSERT_EQUAL(0, res);
tvendov 2:7c75ab32d7c9 260 }
tvendov 2:7c75ab32d7c9 261
tvendov 2:7c75ab32d7c9 262 void test_simple_file_seek()
tvendov 2:7c75ab32d7c9 263 {
tvendov 2:7c75ab32d7c9 264 int res = bd.init();
tvendov 2:7c75ab32d7c9 265 TEST_ASSERT_EQUAL(0, res);
tvendov 2:7c75ab32d7c9 266
tvendov 2:7c75ab32d7c9 267 {
tvendov 2:7c75ab32d7c9 268 size_t size;
tvendov 2:7c75ab32d7c9 269 res = fs.mount(&bd);
tvendov 2:7c75ab32d7c9 270 TEST_ASSERT_EQUAL(0, res);
tvendov 2:7c75ab32d7c9 271 res = file[0].open(&fs, "hello/kitty42", O_RDONLY);
tvendov 2:7c75ab32d7c9 272 TEST_ASSERT_EQUAL(0, res);
tvendov 2:7c75ab32d7c9 273
tvendov 2:7c75ab32d7c9 274 off_t pos;
tvendov 2:7c75ab32d7c9 275 size = strlen("kittycatcat");
tvendov 2:7c75ab32d7c9 276 for (int i = 0; i < 4; i++) {
tvendov 2:7c75ab32d7c9 277 res = file[0].read(buffer, size);
tvendov 2:7c75ab32d7c9 278 TEST_ASSERT_EQUAL(size, res);
tvendov 2:7c75ab32d7c9 279 res = memcmp(buffer, "kittycatcat", size);
tvendov 2:7c75ab32d7c9 280 TEST_ASSERT_EQUAL(0, res);
tvendov 2:7c75ab32d7c9 281 pos = file[0].tell();
tvendov 2:7c75ab32d7c9 282 }
tvendov 2:7c75ab32d7c9 283 res = pos >= 0;
tvendov 2:7c75ab32d7c9 284 TEST_ASSERT_EQUAL(1, res);
tvendov 2:7c75ab32d7c9 285 res = file[0].seek(pos, SEEK_SET);
tvendov 2:7c75ab32d7c9 286 TEST_ASSERT_EQUAL(pos, res);
tvendov 2:7c75ab32d7c9 287 res = file[0].read(buffer, size);
tvendov 2:7c75ab32d7c9 288 TEST_ASSERT_EQUAL(size, res);
tvendov 2:7c75ab32d7c9 289 res = memcmp(buffer, "kittycatcat", size);
tvendov 2:7c75ab32d7c9 290 TEST_ASSERT_EQUAL(0, res);
tvendov 2:7c75ab32d7c9 291
tvendov 2:7c75ab32d7c9 292 file[0].rewind();
tvendov 2:7c75ab32d7c9 293 res = file[0].read(buffer, size);
tvendov 2:7c75ab32d7c9 294 TEST_ASSERT_EQUAL(size, res);
tvendov 2:7c75ab32d7c9 295 res = memcmp(buffer, "kittycatcat", size);
tvendov 2:7c75ab32d7c9 296 TEST_ASSERT_EQUAL(0, res);
tvendov 2:7c75ab32d7c9 297 res = file[0].seek(pos, SEEK_SET);
tvendov 2:7c75ab32d7c9 298 TEST_ASSERT_EQUAL(pos, res);
tvendov 2:7c75ab32d7c9 299 res = file[0].read(buffer, size);
tvendov 2:7c75ab32d7c9 300 TEST_ASSERT_EQUAL(size, res);
tvendov 2:7c75ab32d7c9 301 res = memcmp(buffer, "kittycatcat", size);
tvendov 2:7c75ab32d7c9 302 TEST_ASSERT_EQUAL(0, res);
tvendov 2:7c75ab32d7c9 303 res = file[0].seek(-size, SEEK_CUR);
tvendov 2:7c75ab32d7c9 304 TEST_ASSERT_EQUAL(pos, res);
tvendov 2:7c75ab32d7c9 305 res = file[0].read(buffer, size);
tvendov 2:7c75ab32d7c9 306 TEST_ASSERT_EQUAL(size, res);
tvendov 2:7c75ab32d7c9 307 res = memcmp(buffer, "kittycatcat", size);
tvendov 2:7c75ab32d7c9 308 TEST_ASSERT_EQUAL(0, res);
tvendov 2:7c75ab32d7c9 309 res = file[0].seek(-size, SEEK_END) >= 0;
tvendov 2:7c75ab32d7c9 310 TEST_ASSERT_EQUAL(1, res);
tvendov 2:7c75ab32d7c9 311 res = file[0].read(buffer, size);
tvendov 2:7c75ab32d7c9 312 TEST_ASSERT_EQUAL(size, res);
tvendov 2:7c75ab32d7c9 313 res = memcmp(buffer, "kittycatcat", size);
tvendov 2:7c75ab32d7c9 314 TEST_ASSERT_EQUAL(0, res);
tvendov 2:7c75ab32d7c9 315
tvendov 2:7c75ab32d7c9 316 size = file[0].size();
tvendov 2:7c75ab32d7c9 317 res = file[0].seek(0, SEEK_CUR);
tvendov 2:7c75ab32d7c9 318 TEST_ASSERT_EQUAL(size, res);
tvendov 2:7c75ab32d7c9 319 res = file[0].close();
tvendov 2:7c75ab32d7c9 320 TEST_ASSERT_EQUAL(0, res);
tvendov 2:7c75ab32d7c9 321 res = fs.unmount();
tvendov 2:7c75ab32d7c9 322 TEST_ASSERT_EQUAL(0, res);
tvendov 2:7c75ab32d7c9 323 }
tvendov 2:7c75ab32d7c9 324
tvendov 2:7c75ab32d7c9 325 res = bd.deinit();
tvendov 2:7c75ab32d7c9 326 TEST_ASSERT_EQUAL(0, res);
tvendov 2:7c75ab32d7c9 327 }
tvendov 2:7c75ab32d7c9 328
tvendov 2:7c75ab32d7c9 329 void test_large_file_seek()
tvendov 2:7c75ab32d7c9 330 {
tvendov 2:7c75ab32d7c9 331 int res = bd.init();
tvendov 2:7c75ab32d7c9 332 TEST_ASSERT_EQUAL(0, res);
tvendov 2:7c75ab32d7c9 333
tvendov 2:7c75ab32d7c9 334 {
tvendov 2:7c75ab32d7c9 335 size_t size;
tvendov 2:7c75ab32d7c9 336 res = fs.mount(&bd);
tvendov 2:7c75ab32d7c9 337 TEST_ASSERT_EQUAL(0, res);
tvendov 2:7c75ab32d7c9 338 res = file[0].open(&fs, "hello/kitty42", O_RDONLY);
tvendov 2:7c75ab32d7c9 339 TEST_ASSERT_EQUAL(0, res);
tvendov 2:7c75ab32d7c9 340
tvendov 2:7c75ab32d7c9 341 off_t pos;
tvendov 2:7c75ab32d7c9 342 size = strlen("kittycatcat");
tvendov 2:7c75ab32d7c9 343 for (int i = 0; i < 128; i++) {
tvendov 2:7c75ab32d7c9 344 res = file[0].read(buffer, size);
tvendov 2:7c75ab32d7c9 345 TEST_ASSERT_EQUAL(size, res);
tvendov 2:7c75ab32d7c9 346 res = memcmp(buffer, "kittycatcat", size);
tvendov 2:7c75ab32d7c9 347 TEST_ASSERT_EQUAL(0, res);
tvendov 2:7c75ab32d7c9 348 pos = file[0].tell();
tvendov 2:7c75ab32d7c9 349 }
tvendov 2:7c75ab32d7c9 350 res = pos >= 0;
tvendov 2:7c75ab32d7c9 351 TEST_ASSERT_EQUAL(1, res);
tvendov 2:7c75ab32d7c9 352 res = file[0].seek(pos, SEEK_SET);
tvendov 2:7c75ab32d7c9 353 TEST_ASSERT_EQUAL(pos, res);
tvendov 2:7c75ab32d7c9 354 res = file[0].read(buffer, size);
tvendov 2:7c75ab32d7c9 355 TEST_ASSERT_EQUAL(size, res);
tvendov 2:7c75ab32d7c9 356 res = memcmp(buffer, "kittycatcat", size);
tvendov 2:7c75ab32d7c9 357 TEST_ASSERT_EQUAL(0, res);
tvendov 2:7c75ab32d7c9 358
tvendov 2:7c75ab32d7c9 359 file[0].rewind();
tvendov 2:7c75ab32d7c9 360 res = file[0].read(buffer, size);
tvendov 2:7c75ab32d7c9 361 TEST_ASSERT_EQUAL(size, res);
tvendov 2:7c75ab32d7c9 362 res = memcmp(buffer, "kittycatcat", size);
tvendov 2:7c75ab32d7c9 363 TEST_ASSERT_EQUAL(0, res);
tvendov 2:7c75ab32d7c9 364 res = file[0].seek(pos, SEEK_SET);
tvendov 2:7c75ab32d7c9 365 TEST_ASSERT_EQUAL(pos, res);
tvendov 2:7c75ab32d7c9 366 res = file[0].read(buffer, size);
tvendov 2:7c75ab32d7c9 367 TEST_ASSERT_EQUAL(size, res);
tvendov 2:7c75ab32d7c9 368 res = memcmp(buffer, "kittycatcat", size);
tvendov 2:7c75ab32d7c9 369 TEST_ASSERT_EQUAL(0, res);
tvendov 2:7c75ab32d7c9 370 res = file[0].seek(-size, SEEK_CUR);
tvendov 2:7c75ab32d7c9 371 TEST_ASSERT_EQUAL(pos, res);
tvendov 2:7c75ab32d7c9 372 res = file[0].read(buffer, size);
tvendov 2:7c75ab32d7c9 373 TEST_ASSERT_EQUAL(size, res);
tvendov 2:7c75ab32d7c9 374 res = memcmp(buffer, "kittycatcat", size);
tvendov 2:7c75ab32d7c9 375 TEST_ASSERT_EQUAL(0, res);
tvendov 2:7c75ab32d7c9 376 res = file[0].seek(-size, SEEK_END) >= 0;
tvendov 2:7c75ab32d7c9 377 TEST_ASSERT_EQUAL(1, res);
tvendov 2:7c75ab32d7c9 378 res = file[0].read(buffer, size);
tvendov 2:7c75ab32d7c9 379 TEST_ASSERT_EQUAL(size, res);
tvendov 2:7c75ab32d7c9 380 res = memcmp(buffer, "kittycatcat", size);
tvendov 2:7c75ab32d7c9 381 TEST_ASSERT_EQUAL(0, res);
tvendov 2:7c75ab32d7c9 382
tvendov 2:7c75ab32d7c9 383 size = file[0].size();
tvendov 2:7c75ab32d7c9 384 res = file[0].seek(0, SEEK_CUR);
tvendov 2:7c75ab32d7c9 385 TEST_ASSERT_EQUAL(size, res);
tvendov 2:7c75ab32d7c9 386 res = file[0].close();
tvendov 2:7c75ab32d7c9 387 TEST_ASSERT_EQUAL(0, res);
tvendov 2:7c75ab32d7c9 388 res = fs.unmount();
tvendov 2:7c75ab32d7c9 389 TEST_ASSERT_EQUAL(0, res);
tvendov 2:7c75ab32d7c9 390 }
tvendov 2:7c75ab32d7c9 391
tvendov 2:7c75ab32d7c9 392 res = bd.deinit();
tvendov 2:7c75ab32d7c9 393 TEST_ASSERT_EQUAL(0, res);
tvendov 2:7c75ab32d7c9 394 }
tvendov 2:7c75ab32d7c9 395
tvendov 2:7c75ab32d7c9 396 void test_simple_file_seek_and_write()
tvendov 2:7c75ab32d7c9 397 {
tvendov 2:7c75ab32d7c9 398 int res = bd.init();
tvendov 2:7c75ab32d7c9 399 TEST_ASSERT_EQUAL(0, res);
tvendov 2:7c75ab32d7c9 400
tvendov 2:7c75ab32d7c9 401 {
tvendov 2:7c75ab32d7c9 402 size_t size;
tvendov 2:7c75ab32d7c9 403 res = fs.mount(&bd);
tvendov 2:7c75ab32d7c9 404 TEST_ASSERT_EQUAL(0, res);
tvendov 2:7c75ab32d7c9 405 res = file[0].open(&fs, "hello/kitty42", O_RDWR);
tvendov 2:7c75ab32d7c9 406 TEST_ASSERT_EQUAL(0, res);
tvendov 2:7c75ab32d7c9 407
tvendov 2:7c75ab32d7c9 408 off_t pos;
tvendov 2:7c75ab32d7c9 409 size = strlen("kittycatcat");
tvendov 2:7c75ab32d7c9 410 for (int i = 0; i < 4; i++) {
tvendov 2:7c75ab32d7c9 411 res = file[0].read(buffer, size);
tvendov 2:7c75ab32d7c9 412 TEST_ASSERT_EQUAL(size, res);
tvendov 2:7c75ab32d7c9 413 res = memcmp(buffer, "kittycatcat", size);
tvendov 2:7c75ab32d7c9 414 TEST_ASSERT_EQUAL(0, res);
tvendov 2:7c75ab32d7c9 415 pos = file[0].tell();
tvendov 2:7c75ab32d7c9 416 }
tvendov 2:7c75ab32d7c9 417 res = pos >= 0;
tvendov 2:7c75ab32d7c9 418 TEST_ASSERT_EQUAL(1, res);
tvendov 2:7c75ab32d7c9 419
tvendov 2:7c75ab32d7c9 420 memcpy(buffer, "doggodogdog", size);
tvendov 2:7c75ab32d7c9 421 res = file[0].seek(pos, SEEK_SET);
tvendov 2:7c75ab32d7c9 422 TEST_ASSERT_EQUAL(pos, res);
tvendov 2:7c75ab32d7c9 423 res = file[0].write(buffer, size);
tvendov 2:7c75ab32d7c9 424 TEST_ASSERT_EQUAL(size, res);
tvendov 2:7c75ab32d7c9 425 res = file[0].seek(pos, SEEK_SET);
tvendov 2:7c75ab32d7c9 426 TEST_ASSERT_EQUAL(pos, res);
tvendov 2:7c75ab32d7c9 427 res = file[0].read(buffer, size);
tvendov 2:7c75ab32d7c9 428 TEST_ASSERT_EQUAL(size, res);
tvendov 2:7c75ab32d7c9 429 res = memcmp(buffer, "doggodogdog", size);
tvendov 2:7c75ab32d7c9 430 TEST_ASSERT_EQUAL(0, res);
tvendov 2:7c75ab32d7c9 431
tvendov 2:7c75ab32d7c9 432 file[0].rewind();
tvendov 2:7c75ab32d7c9 433 res = file[0].read(buffer, size);
tvendov 2:7c75ab32d7c9 434 TEST_ASSERT_EQUAL(size, res);
tvendov 2:7c75ab32d7c9 435 res = memcmp(buffer, "kittycatcat", size);
tvendov 2:7c75ab32d7c9 436 TEST_ASSERT_EQUAL(0, res);
tvendov 2:7c75ab32d7c9 437 res = file[0].seek(pos, SEEK_SET);
tvendov 2:7c75ab32d7c9 438 TEST_ASSERT_EQUAL(pos, res);
tvendov 2:7c75ab32d7c9 439 res = file[0].read(buffer, size);
tvendov 2:7c75ab32d7c9 440 TEST_ASSERT_EQUAL(size, res);
tvendov 2:7c75ab32d7c9 441 res = memcmp(buffer, "doggodogdog", size);
tvendov 2:7c75ab32d7c9 442 TEST_ASSERT_EQUAL(0, res);
tvendov 2:7c75ab32d7c9 443 res = file[0].seek(-size, SEEK_END) >= 0;
tvendov 2:7c75ab32d7c9 444 TEST_ASSERT_EQUAL(1, res);
tvendov 2:7c75ab32d7c9 445 res = file[0].read(buffer, size);
tvendov 2:7c75ab32d7c9 446 TEST_ASSERT_EQUAL(size, res);
tvendov 2:7c75ab32d7c9 447 res = memcmp(buffer, "kittycatcat", size);
tvendov 2:7c75ab32d7c9 448 TEST_ASSERT_EQUAL(0, res);
tvendov 2:7c75ab32d7c9 449
tvendov 2:7c75ab32d7c9 450 size = file[0].size();
tvendov 2:7c75ab32d7c9 451 res = file[0].seek(0, SEEK_CUR);
tvendov 2:7c75ab32d7c9 452 TEST_ASSERT_EQUAL(size, res);
tvendov 2:7c75ab32d7c9 453 res = file[0].close();
tvendov 2:7c75ab32d7c9 454 TEST_ASSERT_EQUAL(0, res);
tvendov 2:7c75ab32d7c9 455 res = fs.unmount();
tvendov 2:7c75ab32d7c9 456 TEST_ASSERT_EQUAL(0, res);
tvendov 2:7c75ab32d7c9 457 }
tvendov 2:7c75ab32d7c9 458
tvendov 2:7c75ab32d7c9 459 res = bd.deinit();
tvendov 2:7c75ab32d7c9 460 TEST_ASSERT_EQUAL(0, res);
tvendov 2:7c75ab32d7c9 461 }
tvendov 2:7c75ab32d7c9 462
tvendov 2:7c75ab32d7c9 463 void test_large_file_seek_and_write()
tvendov 2:7c75ab32d7c9 464 {
tvendov 2:7c75ab32d7c9 465 int res = bd.init();
tvendov 2:7c75ab32d7c9 466 TEST_ASSERT_EQUAL(0, res);
tvendov 2:7c75ab32d7c9 467
tvendov 2:7c75ab32d7c9 468 {
tvendov 2:7c75ab32d7c9 469 size_t size;
tvendov 2:7c75ab32d7c9 470 res = fs.mount(&bd);
tvendov 2:7c75ab32d7c9 471 TEST_ASSERT_EQUAL(0, res);
tvendov 2:7c75ab32d7c9 472 res = file[0].open(&fs, "hello/kitty42", O_RDWR);
tvendov 2:7c75ab32d7c9 473 TEST_ASSERT_EQUAL(0, res);
tvendov 2:7c75ab32d7c9 474
tvendov 2:7c75ab32d7c9 475 off_t pos;
tvendov 2:7c75ab32d7c9 476 size = strlen("kittycatcat");
tvendov 2:7c75ab32d7c9 477 for (int i = 0; i < 128; i++) {
tvendov 2:7c75ab32d7c9 478 res = file[0].read(buffer, size);
tvendov 2:7c75ab32d7c9 479 TEST_ASSERT_EQUAL(size, res);
tvendov 2:7c75ab32d7c9 480 if (i != 4) {
tvendov 2:7c75ab32d7c9 481 res = memcmp(buffer, "kittycatcat", size);
tvendov 2:7c75ab32d7c9 482 TEST_ASSERT_EQUAL(0, res);
tvendov 2:7c75ab32d7c9 483 }
tvendov 2:7c75ab32d7c9 484 pos = file[0].tell();
tvendov 2:7c75ab32d7c9 485 }
tvendov 2:7c75ab32d7c9 486 res = pos >= 0;
tvendov 2:7c75ab32d7c9 487 TEST_ASSERT_EQUAL(1, res);
tvendov 2:7c75ab32d7c9 488
tvendov 2:7c75ab32d7c9 489 memcpy(buffer, "doggodogdog", size);
tvendov 2:7c75ab32d7c9 490 res = file[0].seek(pos, SEEK_SET);
tvendov 2:7c75ab32d7c9 491 TEST_ASSERT_EQUAL(pos, res);
tvendov 2:7c75ab32d7c9 492 res = file[0].write(buffer, size);
tvendov 2:7c75ab32d7c9 493 TEST_ASSERT_EQUAL(size, res);
tvendov 2:7c75ab32d7c9 494 res = file[0].seek(pos, SEEK_SET);
tvendov 2:7c75ab32d7c9 495 TEST_ASSERT_EQUAL(pos, res);
tvendov 2:7c75ab32d7c9 496 res = file[0].read(buffer, size);
tvendov 2:7c75ab32d7c9 497 TEST_ASSERT_EQUAL(size, res);
tvendov 2:7c75ab32d7c9 498 res = memcmp(buffer, "doggodogdog", size);
tvendov 2:7c75ab32d7c9 499 TEST_ASSERT_EQUAL(0, res);
tvendov 2:7c75ab32d7c9 500
tvendov 2:7c75ab32d7c9 501 file[0].rewind();
tvendov 2:7c75ab32d7c9 502 res = file[0].read(buffer, size);
tvendov 2:7c75ab32d7c9 503 TEST_ASSERT_EQUAL(size, res);
tvendov 2:7c75ab32d7c9 504 res = memcmp(buffer, "kittycatcat", size);
tvendov 2:7c75ab32d7c9 505 TEST_ASSERT_EQUAL(0, res);
tvendov 2:7c75ab32d7c9 506 res = file[0].seek(pos, SEEK_SET);
tvendov 2:7c75ab32d7c9 507 TEST_ASSERT_EQUAL(pos, res);
tvendov 2:7c75ab32d7c9 508 res = file[0].read(buffer, size);
tvendov 2:7c75ab32d7c9 509 TEST_ASSERT_EQUAL(size, res);
tvendov 2:7c75ab32d7c9 510 res = memcmp(buffer, "doggodogdog", size);
tvendov 2:7c75ab32d7c9 511 TEST_ASSERT_EQUAL(0, res);
tvendov 2:7c75ab32d7c9 512 res = file[0].seek(-size, SEEK_END) >= 0;
tvendov 2:7c75ab32d7c9 513 TEST_ASSERT_EQUAL(1, res);
tvendov 2:7c75ab32d7c9 514 res = file[0].read(buffer, size);
tvendov 2:7c75ab32d7c9 515 TEST_ASSERT_EQUAL(size, res);
tvendov 2:7c75ab32d7c9 516 res = memcmp(buffer, "kittycatcat", size);
tvendov 2:7c75ab32d7c9 517 TEST_ASSERT_EQUAL(0, res);
tvendov 2:7c75ab32d7c9 518
tvendov 2:7c75ab32d7c9 519 size = file[0].size();
tvendov 2:7c75ab32d7c9 520 res = file[0].seek(0, SEEK_CUR);
tvendov 2:7c75ab32d7c9 521 TEST_ASSERT_EQUAL(size, res);
tvendov 2:7c75ab32d7c9 522 res = file[0].close();
tvendov 2:7c75ab32d7c9 523 TEST_ASSERT_EQUAL(0, res);
tvendov 2:7c75ab32d7c9 524 res = fs.unmount();
tvendov 2:7c75ab32d7c9 525 TEST_ASSERT_EQUAL(0, res);
tvendov 2:7c75ab32d7c9 526 }
tvendov 2:7c75ab32d7c9 527
tvendov 2:7c75ab32d7c9 528 res = bd.deinit();
tvendov 2:7c75ab32d7c9 529 TEST_ASSERT_EQUAL(0, res);
tvendov 2:7c75ab32d7c9 530 }
tvendov 2:7c75ab32d7c9 531
tvendov 2:7c75ab32d7c9 532 void test_boundary_seek_and_write()
tvendov 2:7c75ab32d7c9 533 {
tvendov 2:7c75ab32d7c9 534 int res = bd.init();
tvendov 2:7c75ab32d7c9 535 TEST_ASSERT_EQUAL(0, res);
tvendov 2:7c75ab32d7c9 536
tvendov 2:7c75ab32d7c9 537 {
tvendov 2:7c75ab32d7c9 538 size_t size;
tvendov 2:7c75ab32d7c9 539 res = fs.mount(&bd);
tvendov 2:7c75ab32d7c9 540 TEST_ASSERT_EQUAL(0, res);
tvendov 2:7c75ab32d7c9 541 res = file[0].open(&fs, "hello/kitty42", O_RDWR);
tvendov 2:7c75ab32d7c9 542 TEST_ASSERT_EQUAL(0, res);
tvendov 2:7c75ab32d7c9 543
tvendov 2:7c75ab32d7c9 544 size = strlen("hedgehoghog");
tvendov 2:7c75ab32d7c9 545 const off_t offsets[] = {512, 1020, 513, 1021, 511, 1019};
tvendov 2:7c75ab32d7c9 546
tvendov 2:7c75ab32d7c9 547 for (int i = 0; i < sizeof(offsets) / sizeof(offsets[0]); i++) {
tvendov 2:7c75ab32d7c9 548 off_t off = offsets[i];
tvendov 2:7c75ab32d7c9 549 memcpy(buffer, "hedgehoghog", size);
tvendov 2:7c75ab32d7c9 550 res = file[0].seek(off, SEEK_SET);
tvendov 2:7c75ab32d7c9 551 TEST_ASSERT_EQUAL(off, res);
tvendov 2:7c75ab32d7c9 552 res = file[0].write(buffer, size);
tvendov 2:7c75ab32d7c9 553 TEST_ASSERT_EQUAL(size, res);
tvendov 2:7c75ab32d7c9 554 res = file[0].seek(off, SEEK_SET);
tvendov 2:7c75ab32d7c9 555 TEST_ASSERT_EQUAL(off, res);
tvendov 2:7c75ab32d7c9 556 res = file[0].read(buffer, size);
tvendov 2:7c75ab32d7c9 557 TEST_ASSERT_EQUAL(size, res);
tvendov 2:7c75ab32d7c9 558 res = memcmp(buffer, "hedgehoghog", size);
tvendov 2:7c75ab32d7c9 559 TEST_ASSERT_EQUAL(0, res);
tvendov 2:7c75ab32d7c9 560 res = file[0].seek(0, SEEK_SET);
tvendov 2:7c75ab32d7c9 561 TEST_ASSERT_EQUAL(0, res);
tvendov 2:7c75ab32d7c9 562 res = file[0].read(buffer, size);
tvendov 2:7c75ab32d7c9 563 TEST_ASSERT_EQUAL(size, res);
tvendov 2:7c75ab32d7c9 564 res = memcmp(buffer, "kittycatcat", size);
tvendov 2:7c75ab32d7c9 565 TEST_ASSERT_EQUAL(0, res);
tvendov 2:7c75ab32d7c9 566 res = file[0].sync();
tvendov 2:7c75ab32d7c9 567 TEST_ASSERT_EQUAL(0, res);
tvendov 2:7c75ab32d7c9 568 }
tvendov 2:7c75ab32d7c9 569 res = file[0].close();
tvendov 2:7c75ab32d7c9 570 TEST_ASSERT_EQUAL(0, res);
tvendov 2:7c75ab32d7c9 571 res = fs.unmount();
tvendov 2:7c75ab32d7c9 572 TEST_ASSERT_EQUAL(0, res);
tvendov 2:7c75ab32d7c9 573 }
tvendov 2:7c75ab32d7c9 574
tvendov 2:7c75ab32d7c9 575 res = bd.deinit();
tvendov 2:7c75ab32d7c9 576 TEST_ASSERT_EQUAL(0, res);
tvendov 2:7c75ab32d7c9 577 }
tvendov 2:7c75ab32d7c9 578
tvendov 2:7c75ab32d7c9 579 void test_out_of_bounds_seek()
tvendov 2:7c75ab32d7c9 580 {
tvendov 2:7c75ab32d7c9 581 int res = bd.init();
tvendov 2:7c75ab32d7c9 582 TEST_ASSERT_EQUAL(0, res);
tvendov 2:7c75ab32d7c9 583
tvendov 2:7c75ab32d7c9 584 {
tvendov 2:7c75ab32d7c9 585 size_t size;
tvendov 2:7c75ab32d7c9 586 res = fs.mount(&bd);
tvendov 2:7c75ab32d7c9 587 TEST_ASSERT_EQUAL(0, res);
tvendov 2:7c75ab32d7c9 588 res = file[0].open(&fs, "hello/kitty42", O_RDWR);
tvendov 2:7c75ab32d7c9 589 TEST_ASSERT_EQUAL(0, res);
tvendov 2:7c75ab32d7c9 590
tvendov 2:7c75ab32d7c9 591 size = strlen("kittycatcat");
tvendov 2:7c75ab32d7c9 592 res = file[0].size();
tvendov 2:7c75ab32d7c9 593 TEST_ASSERT_EQUAL(132 * size, res);
tvendov 2:7c75ab32d7c9 594 res = file[0].seek((132 + 4) * size,
tvendov 2:7c75ab32d7c9 595 SEEK_SET);
tvendov 2:7c75ab32d7c9 596 TEST_ASSERT_EQUAL((132 + 4)*size, res);
tvendov 2:7c75ab32d7c9 597 res = file[0].read(buffer, size);
tvendov 2:7c75ab32d7c9 598 TEST_ASSERT_EQUAL(0, res);
tvendov 2:7c75ab32d7c9 599
tvendov 2:7c75ab32d7c9 600 memcpy(buffer, "porcupineee", size);
tvendov 2:7c75ab32d7c9 601 res = file[0].write(buffer, size);
tvendov 2:7c75ab32d7c9 602 TEST_ASSERT_EQUAL(size, res);
tvendov 2:7c75ab32d7c9 603 res = file[0].seek((132 + 4) * size,
tvendov 2:7c75ab32d7c9 604 SEEK_SET);
tvendov 2:7c75ab32d7c9 605 TEST_ASSERT_EQUAL((132 + 4)*size, res);
tvendov 2:7c75ab32d7c9 606 res = file[0].read(buffer, size);
tvendov 2:7c75ab32d7c9 607 TEST_ASSERT_EQUAL(size, res);
tvendov 2:7c75ab32d7c9 608 res = memcmp(buffer, "porcupineee", size);
tvendov 2:7c75ab32d7c9 609 TEST_ASSERT_EQUAL(0, res);
tvendov 2:7c75ab32d7c9 610 res = file[0].seek(132 * size,
tvendov 2:7c75ab32d7c9 611 SEEK_SET);
tvendov 2:7c75ab32d7c9 612 TEST_ASSERT_EQUAL(132 * size, res);
tvendov 2:7c75ab32d7c9 613 res = file[0].read(buffer, size);
tvendov 2:7c75ab32d7c9 614 TEST_ASSERT_EQUAL(size, res);
tvendov 2:7c75ab32d7c9 615 #if (MBED_TEST_FILESYSTEM != FATFileSystem)
tvendov 2:7c75ab32d7c9 616 // FatFs does not guarantee empty expanded buffer
tvendov 2:7c75ab32d7c9 617 res = memcmp(buffer, "\0\0\0\0\0\0\0\0\0\0\0", size);
tvendov 2:7c75ab32d7c9 618 TEST_ASSERT_EQUAL(0, res);
tvendov 2:7c75ab32d7c9 619 #endif
tvendov 2:7c75ab32d7c9 620 res = file[0].close();
tvendov 2:7c75ab32d7c9 621 TEST_ASSERT_EQUAL(0, res);
tvendov 2:7c75ab32d7c9 622 res = fs.unmount();
tvendov 2:7c75ab32d7c9 623 TEST_ASSERT_EQUAL(0, res);
tvendov 2:7c75ab32d7c9 624 }
tvendov 2:7c75ab32d7c9 625
tvendov 2:7c75ab32d7c9 626 res = bd.deinit();
tvendov 2:7c75ab32d7c9 627 TEST_ASSERT_EQUAL(0, res);
tvendov 2:7c75ab32d7c9 628 }
tvendov 2:7c75ab32d7c9 629
tvendov 2:7c75ab32d7c9 630
tvendov 2:7c75ab32d7c9 631
tvendov 2:7c75ab32d7c9 632 // test setup
tvendov 2:7c75ab32d7c9 633 utest::v1::status_t test_setup(const size_t number_of_cases)
tvendov 2:7c75ab32d7c9 634 {
tvendov 2:7c75ab32d7c9 635 GREENTEA_SETUP(MBED_TEST_TIMEOUT, "default_auto");
tvendov 2:7c75ab32d7c9 636 return verbose_test_setup_handler(number_of_cases);
tvendov 2:7c75ab32d7c9 637 }
tvendov 2:7c75ab32d7c9 638
tvendov 2:7c75ab32d7c9 639 Case cases[] = {
tvendov 2:7c75ab32d7c9 640 Case("Seek tests", test_seek_tests),
tvendov 2:7c75ab32d7c9 641 Case("Simple dir seek", test_simple_dir_seek),
tvendov 2:7c75ab32d7c9 642 Case("Large dir seek", test_large_dir_seek),
tvendov 2:7c75ab32d7c9 643 Case("Simple file seek", test_simple_file_seek),
tvendov 2:7c75ab32d7c9 644 Case("Large file seek", test_large_file_seek),
tvendov 2:7c75ab32d7c9 645 Case("Simple file seek and write", test_simple_file_seek_and_write),
tvendov 2:7c75ab32d7c9 646 Case("Large file seek and write", test_large_file_seek_and_write),
tvendov 2:7c75ab32d7c9 647 Case("Boundary seek and write", test_boundary_seek_and_write),
tvendov 2:7c75ab32d7c9 648 Case("Out-of-bounds seek", test_out_of_bounds_seek),
tvendov 2:7c75ab32d7c9 649 };
tvendov 2:7c75ab32d7c9 650
tvendov 2:7c75ab32d7c9 651 Specification specification(test_setup, cases);
tvendov 2:7c75ab32d7c9 652
tvendov 2:7c75ab32d7c9 653 int main()
tvendov 2:7c75ab32d7c9 654 {
tvendov 2:7c75ab32d7c9 655 return !Harness::run(specification);
tvendov 2:7c75ab32d7c9 656 }