Dependencies:   MMA7660 LM75B

Committer:
MACRUM
Date:
Sat Jun 30 01:40:30 2018 +0000
Revision:
0:119624335925
Initial commit

Who changed what in which revision?

UserRevisionLine numberNew contents of line
MACRUM 0:119624335925 1 #include "mbed.h"
MACRUM 0:119624335925 2 #include "greentea-client/test_env.h"
MACRUM 0:119624335925 3 #include "unity.h"
MACRUM 0:119624335925 4 #include "utest.h"
MACRUM 0:119624335925 5 #include <stdlib.h>
MACRUM 0:119624335925 6 #include <errno.h>
MACRUM 0:119624335925 7
MACRUM 0:119624335925 8 using namespace utest::v1;
MACRUM 0:119624335925 9
MACRUM 0:119624335925 10 // test configuration
MACRUM 0:119624335925 11 #ifndef MBED_TEST_FILESYSTEM
MACRUM 0:119624335925 12 #define MBED_TEST_FILESYSTEM FATFileSystem
MACRUM 0:119624335925 13 #endif
MACRUM 0:119624335925 14
MACRUM 0:119624335925 15 #ifndef MBED_TEST_FILESYSTEM_DECL
MACRUM 0:119624335925 16 #define MBED_TEST_FILESYSTEM_DECL MBED_TEST_FILESYSTEM fs("fs")
MACRUM 0:119624335925 17 #endif
MACRUM 0:119624335925 18
MACRUM 0:119624335925 19 #ifndef MBED_TEST_BLOCKDEVICE
MACRUM 0:119624335925 20 #define MBED_TEST_BLOCKDEVICE SDBlockDevice
MACRUM 0:119624335925 21 #define MBED_TEST_BLOCKDEVICE_DECL SDBlockDevice bd(MBED_CONF_SD_SPI_MOSI, MBED_CONF_SD_SPI_MISO, MBED_CONF_SD_SPI_CLK, MBED_CONF_SD_SPI_CS);
MACRUM 0:119624335925 22 #endif
MACRUM 0:119624335925 23
MACRUM 0:119624335925 24 #ifndef MBED_TEST_BLOCKDEVICE_DECL
MACRUM 0:119624335925 25 #define MBED_TEST_BLOCKDEVICE_DECL MBED_TEST_BLOCKDEVICE bd
MACRUM 0:119624335925 26 #endif
MACRUM 0:119624335925 27
MACRUM 0:119624335925 28 #ifndef MBED_TEST_FILES
MACRUM 0:119624335925 29 #define MBED_TEST_FILES 4
MACRUM 0:119624335925 30 #endif
MACRUM 0:119624335925 31
MACRUM 0:119624335925 32 #ifndef MBED_TEST_DIRS
MACRUM 0:119624335925 33 #define MBED_TEST_DIRS 4
MACRUM 0:119624335925 34 #endif
MACRUM 0:119624335925 35
MACRUM 0:119624335925 36 #ifndef MBED_TEST_BUFFER
MACRUM 0:119624335925 37 #define MBED_TEST_BUFFER 8192
MACRUM 0:119624335925 38 #endif
MACRUM 0:119624335925 39
MACRUM 0:119624335925 40 #ifndef MBED_TEST_TIMEOUT
MACRUM 0:119624335925 41 #define MBED_TEST_TIMEOUT 120
MACRUM 0:119624335925 42 #endif
MACRUM 0:119624335925 43
MACRUM 0:119624335925 44
MACRUM 0:119624335925 45 // declarations
MACRUM 0:119624335925 46 #define STRINGIZE(x) STRINGIZE2(x)
MACRUM 0:119624335925 47 #define STRINGIZE2(x) #x
MACRUM 0:119624335925 48 #define INCLUDE(x) STRINGIZE(x.h)
MACRUM 0:119624335925 49
MACRUM 0:119624335925 50 #include INCLUDE(MBED_TEST_FILESYSTEM)
MACRUM 0:119624335925 51 #include INCLUDE(MBED_TEST_BLOCKDEVICE)
MACRUM 0:119624335925 52
MACRUM 0:119624335925 53 MBED_TEST_FILESYSTEM_DECL;
MACRUM 0:119624335925 54 MBED_TEST_BLOCKDEVICE_DECL;
MACRUM 0:119624335925 55
MACRUM 0:119624335925 56 Dir dir[MBED_TEST_DIRS];
MACRUM 0:119624335925 57 File file[MBED_TEST_FILES];
MACRUM 0:119624335925 58 DIR *dd[MBED_TEST_DIRS];
MACRUM 0:119624335925 59 FILE *fd[MBED_TEST_FILES];
MACRUM 0:119624335925 60 struct dirent ent;
MACRUM 0:119624335925 61 struct dirent *ed;
MACRUM 0:119624335925 62 size_t size;
MACRUM 0:119624335925 63 uint8_t buffer[MBED_TEST_BUFFER];
MACRUM 0:119624335925 64 uint8_t rbuffer[MBED_TEST_BUFFER];
MACRUM 0:119624335925 65 uint8_t wbuffer[MBED_TEST_BUFFER];
MACRUM 0:119624335925 66
MACRUM 0:119624335925 67 static char file_counter = 0;
MACRUM 0:119624335925 68 const char *filenames[] = {"smallavacado", "mediumavacado", "largeavacado",
MACRUM 0:119624335925 69 "blockfile", "bigblockfile", "hello", ".", ".."};
MACRUM 0:119624335925 70
MACRUM 0:119624335925 71 // tests
MACRUM 0:119624335925 72
MACRUM 0:119624335925 73 void test_file_tests() {
MACRUM 0:119624335925 74 int res = bd.init();
MACRUM 0:119624335925 75 TEST_ASSERT_EQUAL(0, res);
MACRUM 0:119624335925 76
MACRUM 0:119624335925 77 {
MACRUM 0:119624335925 78 res = MBED_TEST_FILESYSTEM::format(&bd);
MACRUM 0:119624335925 79 TEST_ASSERT_EQUAL(0, res);
MACRUM 0:119624335925 80 }
MACRUM 0:119624335925 81
MACRUM 0:119624335925 82 res = bd.deinit();
MACRUM 0:119624335925 83 TEST_ASSERT_EQUAL(0, res);
MACRUM 0:119624335925 84 }
MACRUM 0:119624335925 85
MACRUM 0:119624335925 86 void test_simple_file_test() {
MACRUM 0:119624335925 87 int res = bd.init();
MACRUM 0:119624335925 88 TEST_ASSERT_EQUAL(0, res);
MACRUM 0:119624335925 89
MACRUM 0:119624335925 90 {
MACRUM 0:119624335925 91 res = fs.mount(&bd);
MACRUM 0:119624335925 92 TEST_ASSERT_EQUAL(0, res);
MACRUM 0:119624335925 93 res = file[0].open(&fs, "hello", O_WRONLY | O_CREAT);
MACRUM 0:119624335925 94 TEST_ASSERT_EQUAL(0, res);
MACRUM 0:119624335925 95 size = strlen("Hello World!\n");
MACRUM 0:119624335925 96 memcpy(wbuffer, "Hello World!\n", size);
MACRUM 0:119624335925 97 res = file[0].write(wbuffer, size);
MACRUM 0:119624335925 98 TEST_ASSERT_EQUAL(size, res);
MACRUM 0:119624335925 99 res = file[0].close();
MACRUM 0:119624335925 100 TEST_ASSERT_EQUAL(0, res);
MACRUM 0:119624335925 101 res = file[0].open(&fs, "hello", O_RDONLY);
MACRUM 0:119624335925 102 TEST_ASSERT_EQUAL(0, res);
MACRUM 0:119624335925 103 size = strlen("Hello World!\n");
MACRUM 0:119624335925 104 res = file[0].read(rbuffer, size);
MACRUM 0:119624335925 105 TEST_ASSERT_EQUAL(size, res);
MACRUM 0:119624335925 106 res = memcmp(rbuffer, wbuffer, size);
MACRUM 0:119624335925 107 TEST_ASSERT_EQUAL(0, res);
MACRUM 0:119624335925 108 res = file[0].close();
MACRUM 0:119624335925 109 TEST_ASSERT_EQUAL(0, res);
MACRUM 0:119624335925 110 res = fs.unmount();
MACRUM 0:119624335925 111 TEST_ASSERT_EQUAL(0, res);
MACRUM 0:119624335925 112 }
MACRUM 0:119624335925 113
MACRUM 0:119624335925 114 res = bd.deinit();
MACRUM 0:119624335925 115 TEST_ASSERT_EQUAL(0, res);
MACRUM 0:119624335925 116 }
MACRUM 0:119624335925 117
MACRUM 0:119624335925 118 template <int file_size, int write_size, int read_size>
MACRUM 0:119624335925 119 void test_write_file_test() {
MACRUM 0:119624335925 120 int res = bd.init();
MACRUM 0:119624335925 121 TEST_ASSERT_EQUAL(0, res);
MACRUM 0:119624335925 122
MACRUM 0:119624335925 123 {
MACRUM 0:119624335925 124 size_t size = file_size;
MACRUM 0:119624335925 125 size_t chunk = write_size;
MACRUM 0:119624335925 126 srand(0);
MACRUM 0:119624335925 127 res = fs.mount(&bd);
MACRUM 0:119624335925 128 TEST_ASSERT_EQUAL(0, res);
MACRUM 0:119624335925 129 res = file[0].open(&fs, filenames[file_counter], O_WRONLY | O_CREAT);
MACRUM 0:119624335925 130 TEST_ASSERT_EQUAL(0, res);
MACRUM 0:119624335925 131 for (size_t i = 0; i < size; i += chunk) {
MACRUM 0:119624335925 132 chunk = (chunk < size - i) ? chunk : size - i;
MACRUM 0:119624335925 133 for (size_t b = 0; b < chunk; b++) {
MACRUM 0:119624335925 134 buffer[b] = rand() & 0xff;
MACRUM 0:119624335925 135 }
MACRUM 0:119624335925 136 res = file[0].write(buffer, chunk);
MACRUM 0:119624335925 137 TEST_ASSERT_EQUAL(chunk, res);
MACRUM 0:119624335925 138 }
MACRUM 0:119624335925 139 res = file[0].close();
MACRUM 0:119624335925 140 TEST_ASSERT_EQUAL(0, res);
MACRUM 0:119624335925 141 res = fs.unmount();
MACRUM 0:119624335925 142 TEST_ASSERT_EQUAL(0, res);
MACRUM 0:119624335925 143 }
MACRUM 0:119624335925 144
MACRUM 0:119624335925 145 {
MACRUM 0:119624335925 146 size_t size = file_size;
MACRUM 0:119624335925 147 size_t chunk = read_size;
MACRUM 0:119624335925 148 srand(0);
MACRUM 0:119624335925 149 res = fs.mount(&bd);
MACRUM 0:119624335925 150 TEST_ASSERT_EQUAL(0, res);
MACRUM 0:119624335925 151 res = file[0].open(&fs, filenames[file_counter], O_RDONLY);
MACRUM 0:119624335925 152 TEST_ASSERT_EQUAL(0, res);
MACRUM 0:119624335925 153 for (size_t i = 0; i < size; i += chunk) {
MACRUM 0:119624335925 154 chunk = (chunk < size - i) ? chunk : size - i;
MACRUM 0:119624335925 155 res = file[0].read(buffer, chunk);
MACRUM 0:119624335925 156 TEST_ASSERT_EQUAL(chunk, res);
MACRUM 0:119624335925 157 for (size_t b = 0; b < chunk && i+b < size; b++) {
MACRUM 0:119624335925 158 res = buffer[b];
MACRUM 0:119624335925 159 TEST_ASSERT_EQUAL(rand() & 0xff, res);
MACRUM 0:119624335925 160 }
MACRUM 0:119624335925 161 }
MACRUM 0:119624335925 162 res = file[0].close();
MACRUM 0:119624335925 163 TEST_ASSERT_EQUAL(0, res);
MACRUM 0:119624335925 164 res = fs.unmount();
MACRUM 0:119624335925 165 TEST_ASSERT_EQUAL(0, res);
MACRUM 0:119624335925 166 }
MACRUM 0:119624335925 167
MACRUM 0:119624335925 168 file_counter++;
MACRUM 0:119624335925 169 res = bd.deinit();
MACRUM 0:119624335925 170 TEST_ASSERT_EQUAL(0, res);
MACRUM 0:119624335925 171 }
MACRUM 0:119624335925 172
MACRUM 0:119624335925 173 void test_non_overlap_check() {
MACRUM 0:119624335925 174 int res = bd.init();
MACRUM 0:119624335925 175 TEST_ASSERT_EQUAL(0, res);
MACRUM 0:119624335925 176
MACRUM 0:119624335925 177 {
MACRUM 0:119624335925 178 size_t size = 32;
MACRUM 0:119624335925 179 size_t chunk = 29;
MACRUM 0:119624335925 180 srand(0);
MACRUM 0:119624335925 181 res = fs.mount(&bd);
MACRUM 0:119624335925 182 TEST_ASSERT_EQUAL(0, res);
MACRUM 0:119624335925 183 res = file[0].open(&fs, "smallavacado", O_RDONLY);
MACRUM 0:119624335925 184 TEST_ASSERT_EQUAL(0, res);
MACRUM 0:119624335925 185 for (size_t i = 0; i < size; i += chunk) {
MACRUM 0:119624335925 186 chunk = (chunk < size - i) ? chunk : size - i;
MACRUM 0:119624335925 187 res = file[0].read(buffer, chunk);
MACRUM 0:119624335925 188 TEST_ASSERT_EQUAL(chunk, res);
MACRUM 0:119624335925 189 for (size_t b = 0; b < chunk && i+b < size; b++) {
MACRUM 0:119624335925 190 res = buffer[b];
MACRUM 0:119624335925 191 TEST_ASSERT_EQUAL(rand() & 0xff, res);
MACRUM 0:119624335925 192 }
MACRUM 0:119624335925 193 }
MACRUM 0:119624335925 194 res = file[0].close();
MACRUM 0:119624335925 195 TEST_ASSERT_EQUAL(0, res);
MACRUM 0:119624335925 196 res = fs.unmount();
MACRUM 0:119624335925 197 TEST_ASSERT_EQUAL(0, res);
MACRUM 0:119624335925 198 }
MACRUM 0:119624335925 199
MACRUM 0:119624335925 200 {
MACRUM 0:119624335925 201 size_t size = 8192;
MACRUM 0:119624335925 202 size_t chunk = 29;
MACRUM 0:119624335925 203 srand(0);
MACRUM 0:119624335925 204 res = fs.mount(&bd);
MACRUM 0:119624335925 205 TEST_ASSERT_EQUAL(0, res);
MACRUM 0:119624335925 206 res = file[0].open(&fs, "mediumavacado", O_RDONLY);
MACRUM 0:119624335925 207 TEST_ASSERT_EQUAL(0, res);
MACRUM 0:119624335925 208 for (size_t i = 0; i < size; i += chunk) {
MACRUM 0:119624335925 209 chunk = (chunk < size - i) ? chunk : size - i;
MACRUM 0:119624335925 210 res = file[0].read(buffer, chunk);
MACRUM 0:119624335925 211 TEST_ASSERT_EQUAL(chunk, res);
MACRUM 0:119624335925 212 for (size_t b = 0; b < chunk && i+b < size; b++) {
MACRUM 0:119624335925 213 res = buffer[b];
MACRUM 0:119624335925 214 TEST_ASSERT_EQUAL(rand() & 0xff, res);
MACRUM 0:119624335925 215 }
MACRUM 0:119624335925 216 }
MACRUM 0:119624335925 217 res = file[0].close();
MACRUM 0:119624335925 218 TEST_ASSERT_EQUAL(0, res);
MACRUM 0:119624335925 219 res = fs.unmount();
MACRUM 0:119624335925 220 TEST_ASSERT_EQUAL(0, res);
MACRUM 0:119624335925 221 }
MACRUM 0:119624335925 222
MACRUM 0:119624335925 223 {
MACRUM 0:119624335925 224 size_t size = 262144;
MACRUM 0:119624335925 225 size_t chunk = 29;
MACRUM 0:119624335925 226 srand(0);
MACRUM 0:119624335925 227 res = fs.mount(&bd);
MACRUM 0:119624335925 228 TEST_ASSERT_EQUAL(0, res);
MACRUM 0:119624335925 229 res = file[0].open(&fs, "largeavacado", O_RDONLY);
MACRUM 0:119624335925 230 TEST_ASSERT_EQUAL(0, res);
MACRUM 0:119624335925 231 for (size_t i = 0; i < size; i += chunk) {
MACRUM 0:119624335925 232 chunk = (chunk < size - i) ? chunk : size - i;
MACRUM 0:119624335925 233 res = file[0].read(buffer, chunk);
MACRUM 0:119624335925 234 TEST_ASSERT_EQUAL(chunk, res);
MACRUM 0:119624335925 235 for (size_t b = 0; b < chunk && i+b < size; b++) {
MACRUM 0:119624335925 236 res = buffer[b];
MACRUM 0:119624335925 237 TEST_ASSERT_EQUAL(rand() & 0xff, res);
MACRUM 0:119624335925 238 }
MACRUM 0:119624335925 239 }
MACRUM 0:119624335925 240 res = file[0].close();
MACRUM 0:119624335925 241 TEST_ASSERT_EQUAL(0, res);
MACRUM 0:119624335925 242 res = fs.unmount();
MACRUM 0:119624335925 243 TEST_ASSERT_EQUAL(0, res);
MACRUM 0:119624335925 244 }
MACRUM 0:119624335925 245
MACRUM 0:119624335925 246 res = bd.deinit();
MACRUM 0:119624335925 247 TEST_ASSERT_EQUAL(0, res);
MACRUM 0:119624335925 248 }
MACRUM 0:119624335925 249
MACRUM 0:119624335925 250 void test_dir_check() {
MACRUM 0:119624335925 251
MACRUM 0:119624335925 252 int res = bd.init();
MACRUM 0:119624335925 253 TEST_ASSERT_EQUAL(0, res);
MACRUM 0:119624335925 254
MACRUM 0:119624335925 255 {
MACRUM 0:119624335925 256 res = fs.mount(&bd);
MACRUM 0:119624335925 257 TEST_ASSERT_EQUAL(0, res);
MACRUM 0:119624335925 258 res = dir[0].open(&fs, "/");
MACRUM 0:119624335925 259 TEST_ASSERT_EQUAL(0, res);
MACRUM 0:119624335925 260 int numFiles = sizeof(filenames)/sizeof(filenames[0]);
MACRUM 0:119624335925 261 // Check the filenames in directory
MACRUM 0:119624335925 262 while(1) {
MACRUM 0:119624335925 263 res = dir[0].read(&ent);
MACRUM 0:119624335925 264 if (0 == res) {
MACRUM 0:119624335925 265 break;
MACRUM 0:119624335925 266 }
MACRUM 0:119624335925 267 for (int i=0; i < numFiles ; i++) {
MACRUM 0:119624335925 268 res = strcmp(ent.d_name, filenames[i]);
MACRUM 0:119624335925 269 if (0 == res) {
MACRUM 0:119624335925 270 res = ent.d_type;
MACRUM 0:119624335925 271 if ((DT_REG != res) && (DT_DIR != res)) {
MACRUM 0:119624335925 272 TEST_ASSERT(1);
MACRUM 0:119624335925 273 }
MACRUM 0:119624335925 274 break;
MACRUM 0:119624335925 275 }
MACRUM 0:119624335925 276 else if( i == numFiles) {
MACRUM 0:119624335925 277 TEST_ASSERT_EQUAL(0, res);
MACRUM 0:119624335925 278 }
MACRUM 0:119624335925 279 }
MACRUM 0:119624335925 280 }
MACRUM 0:119624335925 281 res = dir[0].close();
MACRUM 0:119624335925 282 TEST_ASSERT_EQUAL(0, res);
MACRUM 0:119624335925 283 res = fs.unmount();
MACRUM 0:119624335925 284 TEST_ASSERT_EQUAL(0, res);
MACRUM 0:119624335925 285 }
MACRUM 0:119624335925 286
MACRUM 0:119624335925 287 res = bd.deinit();
MACRUM 0:119624335925 288 TEST_ASSERT_EQUAL(0, res);
MACRUM 0:119624335925 289 }
MACRUM 0:119624335925 290
MACRUM 0:119624335925 291
MACRUM 0:119624335925 292 // test setup
MACRUM 0:119624335925 293 utest::v1::status_t test_setup(const size_t number_of_cases) {
MACRUM 0:119624335925 294 GREENTEA_SETUP(MBED_TEST_TIMEOUT, "default_auto");
MACRUM 0:119624335925 295 return verbose_test_setup_handler(number_of_cases);
MACRUM 0:119624335925 296 }
MACRUM 0:119624335925 297
MACRUM 0:119624335925 298 Case cases[] = {
MACRUM 0:119624335925 299 Case("File tests", test_file_tests),
MACRUM 0:119624335925 300 Case("Simple file test", test_simple_file_test),
MACRUM 0:119624335925 301 Case("Small file test", test_write_file_test<32, 31, 29>),
MACRUM 0:119624335925 302 Case("Medium file test", test_write_file_test<8192, 31, 29>),
MACRUM 0:119624335925 303 Case("Large file test", test_write_file_test<262144, 31, 29>),
MACRUM 0:119624335925 304 Case("Block Size file test", test_write_file_test<9000, 512, 512>),
MACRUM 0:119624335925 305 Case("Multiple block size file test", test_write_file_test<26215, MBED_TEST_BUFFER, MBED_TEST_BUFFER>),
MACRUM 0:119624335925 306 Case("Non-overlap check", test_non_overlap_check),
MACRUM 0:119624335925 307 Case("Dir check", test_dir_check),
MACRUM 0:119624335925 308 };
MACRUM 0:119624335925 309
MACRUM 0:119624335925 310 Specification specification(test_setup, cases);
MACRUM 0:119624335925 311
MACRUM 0:119624335925 312 int main() {
MACRUM 0:119624335925 313 return !Harness::run(specification);
MACRUM 0:119624335925 314 }