mirror of https://github.com/ARMmbed/mbed-os.git
2137 lines
59 KiB
C++
2137 lines
59 KiB
C++
/* Copyright (c) 2017 ARM Limited
|
|
*
|
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
* you may not use this file except in compliance with the License.
|
|
* You may obtain a copy of the License at
|
|
*
|
|
* http://www.apache.org/licenses/LICENSE-2.0
|
|
*
|
|
* Unless required by applicable law or agreed to in writing, software
|
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
* See the License for the specific language governing permissions and
|
|
* limitations under the License.
|
|
*/
|
|
|
|
#include "greentea-client/test_env.h"
|
|
#include "unity/unity.h"
|
|
#include "utest/utest.h"
|
|
#include "BlockDevice.h"
|
|
#include "FileSystem.h"
|
|
|
|
#include <stdlib.h>
|
|
#include "LittleFileSystem.h"
|
|
|
|
#if COMPONENT_SPIF
|
|
#include "SPIFBlockDevice.h"
|
|
#elif COMPONENT_QSPIF
|
|
#include "QSPIFBlockDevice.h"
|
|
#elif COMPONENT_OSPIF
|
|
#include "OSPIFBlockDevice.h"
|
|
#elif COMPONENT_SD
|
|
#include "SDBlockDevice.h"
|
|
#else
|
|
#error [NOT_SUPPORTED] storage test not supported on this platform
|
|
#endif
|
|
|
|
using namespace utest::v1;
|
|
using namespace mbed;
|
|
|
|
static const size_t small_buf_size = 10;
|
|
static const size_t medium_buf_size = 250;
|
|
static const size_t large_buf_size = 1200;
|
|
static const size_t test_files = 2;
|
|
|
|
FILE *fd[test_files];
|
|
|
|
BlockDevice *bd = BlockDevice::get_default_instance();
|
|
FileSystem *fs = FileSystem::get_default_instance();
|
|
const char *bd_type;
|
|
|
|
/*----------------help functions------------------*/
|
|
|
|
static void init()
|
|
{
|
|
int res = bd->init();
|
|
TEST_ASSERT_EQUAL(0, res);
|
|
|
|
res = fs->reformat(bd);
|
|
TEST_ASSERT_EQUAL(0, res);
|
|
}
|
|
|
|
static void deinit()
|
|
{
|
|
int res = bd->deinit();
|
|
TEST_ASSERT_EQUAL(0, res);
|
|
|
|
res = fs->reformat(bd);
|
|
TEST_ASSERT_EQUAL(0, res);
|
|
|
|
res = fs->unmount();
|
|
TEST_ASSERT_EQUAL(0, res);
|
|
}
|
|
|
|
/*----------------fopen()------------------*/
|
|
|
|
//init the blockdevice and reformat the filesystem
|
|
static void bd_init_fs_reformat()
|
|
{
|
|
bd_type = bd->get_type();
|
|
init();
|
|
}
|
|
|
|
//fopen path without fs prefix
|
|
static void FS_fopen_path_not_valid()
|
|
{
|
|
int res = !((fd[0] = fopen("filename", "wb")) != NULL);
|
|
TEST_ASSERT_EQUAL(1, res);
|
|
|
|
}
|
|
|
|
//fopen empty file name with r mode
|
|
static void FS_fopen_empty_path_r_mode()
|
|
{
|
|
int res = !((fd[0] = fopen("/default/" "", "rb")) != NULL);
|
|
TEST_ASSERT_EQUAL(1, res);
|
|
}
|
|
|
|
//fopen empty file name with w mode
|
|
static void FS_fopen_empty_path_w_mode()
|
|
{
|
|
int res = !((fd[0] = fopen("/default/" "", "wb")) != NULL);
|
|
TEST_ASSERT_EQUAL(1, res);
|
|
}
|
|
|
|
//fopen empty mode
|
|
static void FS_fopen_invalid_mode()
|
|
{
|
|
int res = !((fd[0] = fopen("/default/" "Invalid_mode", "")) != NULL);
|
|
TEST_ASSERT_EQUAL(1, res);
|
|
}
|
|
|
|
//fopen with valid flowSystemStorage
|
|
static void FS_fopen_supported_wb_mode()
|
|
{
|
|
int res = !((fd[0] = fopen("/default/" "filename", "wb")) != NULL);
|
|
TEST_ASSERT_EQUAL(0, res);
|
|
|
|
res = fclose(fd[0]);
|
|
TEST_ASSERT_EQUAL(0, res);
|
|
|
|
res = remove("/default/" "filename");
|
|
TEST_ASSERT_EQUAL(0, res);
|
|
}
|
|
|
|
//fopen with append mode
|
|
static void FS_fopen_supported_a_mode()
|
|
{
|
|
int res = !((fd[0] = fopen("/default/" "filename", "a")) != NULL);
|
|
TEST_ASSERT_EQUAL(0, res);
|
|
|
|
res = fclose(fd[0]);
|
|
TEST_ASSERT_EQUAL(0, res);
|
|
|
|
res = remove("/default/" "filename");
|
|
TEST_ASSERT_EQUAL(0, res);
|
|
}
|
|
|
|
//fopen with read mode
|
|
static void FS_fopen_supported_r_mode()
|
|
{
|
|
int res = !((fd[0] = fopen("/default/" "filename", "r")) != NULL);
|
|
TEST_ASSERT_EQUAL(1, res);
|
|
}
|
|
|
|
//fopen with append update mode
|
|
static void FS_fopen_supported_a_update_mode()
|
|
{
|
|
int res = !((fd[0] = fopen("/default/" "filename", "a+")) != NULL);
|
|
TEST_ASSERT_EQUAL(0, res);
|
|
|
|
res = fclose(fd[0]);
|
|
TEST_ASSERT_EQUAL(0, res);
|
|
|
|
res = remove("/default/" "filename");
|
|
TEST_ASSERT_EQUAL(0, res);
|
|
}
|
|
|
|
//fopen with read update mode
|
|
static void FS_fopen_supported_r_update_mode()
|
|
{
|
|
int res = !((fd[0] = fopen("/default/" "filename", "r+")) != NULL);
|
|
TEST_ASSERT_EQUAL(1, res);
|
|
}
|
|
|
|
//fopen with write update mode
|
|
static void FS_fopen_supported_w_update_mode()
|
|
{
|
|
int res = !((fd[0] = fopen("/default/" "filename", "w+")) != NULL);
|
|
TEST_ASSERT_EQUAL(0, res);
|
|
|
|
res = fclose(fd[0]);
|
|
TEST_ASSERT_EQUAL(0, res);
|
|
|
|
res = remove("/default/" "filename");
|
|
TEST_ASSERT_EQUAL(0, res);
|
|
}
|
|
|
|
//fopen with read update create, check contents exist
|
|
static void FS_fopen_read_update_create()
|
|
{
|
|
char write_buf[small_buf_size] = "123456789";
|
|
char read_buf[small_buf_size] = "";
|
|
|
|
int res = !((fd[0] = fopen("/default/" "filename", "w")) != NULL);
|
|
TEST_ASSERT_EQUAL(0, res);
|
|
|
|
int write_sz = fwrite(write_buf, sizeof(char), small_buf_size, fd[0]);
|
|
TEST_ASSERT_EQUAL(small_buf_size, write_sz);
|
|
|
|
res = fclose(fd[0]);
|
|
TEST_ASSERT_EQUAL(0, res);
|
|
|
|
res = !((fd[0] = fopen("/default/" "filename", "r+")) != NULL);
|
|
TEST_ASSERT_EQUAL(0, res);
|
|
|
|
int read_sz = fread(read_buf, sizeof(char), small_buf_size, fd[0]);
|
|
TEST_ASSERT_EQUAL(small_buf_size, read_sz);
|
|
TEST_ASSERT_EQUAL_STRING_LEN(write_buf, read_buf, small_buf_size);
|
|
|
|
res = fclose(fd[0]);
|
|
TEST_ASSERT_EQUAL(0, res);
|
|
|
|
res = remove("/default/" "filename");
|
|
TEST_ASSERT_EQUAL(0, res);
|
|
}
|
|
|
|
//fopen with write update create, check contents doesnt exist
|
|
static void FS_fopen_write_update_create()
|
|
{
|
|
char write_buf[small_buf_size] = "123456789";
|
|
char read_buf[small_buf_size] = "";
|
|
|
|
int res = !((fd[0] = fopen("/default/" "filename", "w")) != NULL);
|
|
TEST_ASSERT_EQUAL(0, res);
|
|
|
|
int write_sz = fwrite(write_buf, sizeof(char), small_buf_size, fd[0]);
|
|
TEST_ASSERT_EQUAL(small_buf_size, write_sz);
|
|
|
|
res = fclose(fd[0]);
|
|
TEST_ASSERT_EQUAL(0, res);
|
|
|
|
res = !((fd[0] = fopen("/default/" "filename", "w+")) != NULL);
|
|
TEST_ASSERT_EQUAL(0, res);
|
|
|
|
int read_sz = fread(read_buf, sizeof(char), small_buf_size, fd[0]);
|
|
TEST_ASSERT_EQUAL(0, read_sz);
|
|
|
|
res = fclose(fd[0]);
|
|
TEST_ASSERT_EQUAL(0, res);
|
|
|
|
res = remove("/default/" "filename");
|
|
TEST_ASSERT_EQUAL(0, res);
|
|
}
|
|
/*----------------fclose()------------------*/
|
|
|
|
//fclose valid flow
|
|
static void FS_fclose_valid_flow()
|
|
{
|
|
int res = !((fd[0] = fopen("/default/" "filename", "wb")) != NULL);
|
|
TEST_ASSERT_EQUAL(0, res);
|
|
|
|
res = fclose(fd[0]);
|
|
TEST_ASSERT_EQUAL(0, res);
|
|
|
|
res = remove("/default/" "filename");
|
|
TEST_ASSERT_EQUAL(0, res);
|
|
}
|
|
|
|
/*----------------fwrite()------------------*/
|
|
|
|
//fwrite with nmemb zero
|
|
static void FS_fwrite_nmemb_zero()
|
|
{
|
|
char buffer[small_buf_size] = "good_day";
|
|
|
|
int res = !((fd[0] = fopen("/default/" "filename", "wb")) != NULL);
|
|
TEST_ASSERT_EQUAL(0, res);
|
|
|
|
int write_sz = fwrite(buffer, sizeof(char), 0, fd[0]);
|
|
TEST_ASSERT_EQUAL(0, write_sz);
|
|
|
|
res = fclose(fd[0]);
|
|
TEST_ASSERT_EQUAL(0, res);
|
|
|
|
res = remove("/default/" "filename");
|
|
TEST_ASSERT_EQUAL(0, res);
|
|
}
|
|
|
|
//fwrite valid flow
|
|
static void FS_fwrite_valid_flow()
|
|
{
|
|
char write_buf[small_buf_size] = "good_day";
|
|
char read_buf[small_buf_size] = {};
|
|
|
|
int res = !((fd[0] = fopen("/default/" "filename", "wb")) != NULL);
|
|
TEST_ASSERT_EQUAL(0, res);
|
|
|
|
int write_sz = fwrite(write_buf, sizeof(char), small_buf_size, fd[0]);
|
|
TEST_ASSERT_EQUAL(small_buf_size, write_sz);
|
|
|
|
res = fclose(fd[0]);
|
|
TEST_ASSERT_EQUAL(0, res);
|
|
|
|
res = !((fd[0] = fopen("/default/" "filename", "rb")) != NULL);
|
|
TEST_ASSERT_EQUAL(0, res);
|
|
|
|
int read_sz = fread(read_buf, sizeof(char), small_buf_size, fd[0]);
|
|
TEST_ASSERT_EQUAL(small_buf_size, read_sz);
|
|
TEST_ASSERT_EQUAL_STRING(write_buf, read_buf);
|
|
|
|
res = fclose(fd[0]);
|
|
TEST_ASSERT_EQUAL(0, res);
|
|
|
|
res = remove("/default/" "filename");
|
|
TEST_ASSERT_EQUAL(0, res);
|
|
}
|
|
|
|
//fwrite to fopen mode r
|
|
static void FS_fwrite_with_fopen_r_mode()
|
|
{
|
|
char buffer[small_buf_size] = "good_day";
|
|
|
|
int res = !((fd[0] = fopen("/default/" "filename", "wb")) != NULL);
|
|
TEST_ASSERT_EQUAL(0, res);
|
|
|
|
res = fclose(fd[0]);
|
|
TEST_ASSERT_EQUAL(0, res);
|
|
|
|
res = !((fd[0] = fopen("/default/" "filename", "rb")) != NULL);
|
|
TEST_ASSERT_EQUAL(0, res);
|
|
|
|
int write_sz = fwrite(buffer, sizeof(char), small_buf_size, fd[0]);
|
|
TEST_ASSERT_EQUAL(0, write_sz);
|
|
|
|
res = fclose(fd[0]);
|
|
TEST_ASSERT_EQUAL(0, res);
|
|
|
|
res = remove("/default/" "filename");
|
|
TEST_ASSERT_EQUAL(0, res);
|
|
}
|
|
|
|
/*----------------fread()------------------*/
|
|
#if !defined(__MICROLIB)
|
|
//fread with size zero
|
|
static void FS_fread_size_zero()
|
|
{
|
|
char buffer[small_buf_size] = "good_day";
|
|
|
|
int res = !((fd[0] = fopen("/default/" "filename", "wb")) != NULL);
|
|
TEST_ASSERT_EQUAL(0, res);
|
|
|
|
int write_sz = fwrite(buffer, sizeof(char), small_buf_size, fd[0]);
|
|
TEST_ASSERT_EQUAL(small_buf_size, write_sz);
|
|
|
|
res = fclose(fd[0]);
|
|
TEST_ASSERT_EQUAL(0, res);
|
|
|
|
res = !((fd[0] = fopen("/default/" "filename", "rb")) != NULL);
|
|
TEST_ASSERT_EQUAL(0, res);
|
|
|
|
int read_sz = fread(buffer, 0, small_buf_size, fd[0]);
|
|
TEST_ASSERT_EQUAL(0, read_sz);
|
|
|
|
res = fclose(fd[0]);
|
|
TEST_ASSERT_EQUAL(0, res);
|
|
|
|
res = remove("/default/" "filename");
|
|
TEST_ASSERT_EQUAL(0, res);
|
|
}
|
|
#endif
|
|
|
|
//fread with nmemb zero
|
|
static void FS_fread_nmemb_zero()
|
|
{
|
|
char buffer[small_buf_size] = "good_day";
|
|
|
|
int res = !((fd[0] = fopen("/default/" "filename", "wb")) != NULL);
|
|
TEST_ASSERT_EQUAL(0, res);
|
|
|
|
int write_sz = fwrite(buffer, sizeof(char), small_buf_size, fd[0]);
|
|
TEST_ASSERT_EQUAL(small_buf_size, write_sz);
|
|
|
|
res = fclose(fd[0]);
|
|
TEST_ASSERT_EQUAL(0, res);
|
|
|
|
res = !((fd[0] = fopen("/default/" "filename", "rb")) != NULL);
|
|
TEST_ASSERT_EQUAL(0, res);
|
|
|
|
int read_sz = fread(buffer, sizeof(char), 0, fd[0]);
|
|
TEST_ASSERT_EQUAL(0, read_sz);
|
|
|
|
res = fclose(fd[0]);
|
|
TEST_ASSERT_EQUAL(0, res);
|
|
|
|
res = remove("/default/" "filename");
|
|
TEST_ASSERT_EQUAL(0, res);
|
|
}
|
|
|
|
//fread to fopen mode w
|
|
static void FS_fread_with_fopen_w_mode()
|
|
{
|
|
char buffer[small_buf_size] = {};
|
|
|
|
int res = !((fd[0] = fopen("/default/" "filename", "wb")) != NULL);
|
|
TEST_ASSERT_EQUAL(0, res);
|
|
|
|
res = fclose(fd[0]);
|
|
TEST_ASSERT_EQUAL(0, res);
|
|
|
|
res = !((fd[0] = fopen("/default/" "filename", "wb")) != NULL);
|
|
TEST_ASSERT_EQUAL(0, res);
|
|
|
|
int read_sz = fread(buffer, sizeof(char), small_buf_size, fd[0]);
|
|
TEST_ASSERT_EQUAL(0, read_sz);
|
|
|
|
res = fclose(fd[0]);
|
|
TEST_ASSERT_EQUAL(0, res);
|
|
|
|
res = remove("/default/" "filename");
|
|
TEST_ASSERT_EQUAL(0, res);
|
|
}
|
|
|
|
//fread to fwrite file
|
|
static void FS_fread_to_fwrite_file()
|
|
{
|
|
char read_buf[small_buf_size] = {};
|
|
char write_buf[small_buf_size] = "123456789";
|
|
|
|
int res = !((fd[0] = fopen("/default/" "filename", "wb")) != NULL);
|
|
TEST_ASSERT_EQUAL(0, res);
|
|
|
|
int write_sz = fwrite(write_buf, sizeof(char), small_buf_size, fd[0]);
|
|
TEST_ASSERT_EQUAL(small_buf_size, write_sz);
|
|
|
|
int read_sz = fread(read_buf, sizeof(char), small_buf_size, fd[0]);
|
|
TEST_ASSERT_EQUAL(0, read_sz);
|
|
|
|
res = fclose(fd[0]);
|
|
TEST_ASSERT_EQUAL(0, res);
|
|
|
|
res = remove("/default/" "filename");
|
|
TEST_ASSERT_EQUAL(0, res);
|
|
}
|
|
|
|
//fread empty file
|
|
static void FS_fread_empty_file()
|
|
{
|
|
char read_buf[small_buf_size] = {};
|
|
|
|
int res = !((fd[0] = fopen("/default/" "filename", "wb")) != NULL);
|
|
TEST_ASSERT_EQUAL(0, res);
|
|
|
|
res = fclose(fd[0]);
|
|
TEST_ASSERT_EQUAL(0, res);
|
|
|
|
res = !((fd[0] = fopen("/default/" "filename", "rb")) != NULL);
|
|
TEST_ASSERT_EQUAL(0, res);
|
|
|
|
int read_sz = fread(read_buf, sizeof(char), small_buf_size, fd[0]);
|
|
TEST_ASSERT_EQUAL(0, read_sz);
|
|
|
|
res = fclose(fd[0]);
|
|
TEST_ASSERT_EQUAL(0, res);
|
|
|
|
res = remove("/default/" "filename");
|
|
TEST_ASSERT_EQUAL(0, res);
|
|
}
|
|
|
|
//fread valid flow small file
|
|
static void FS_fread_valid_flow_small_file()
|
|
{
|
|
char write_buf[small_buf_size] = "good_day";
|
|
char read_buf[small_buf_size] = {};
|
|
|
|
int res = !((fd[0] = fopen("/default/" "filename", "wb")) != NULL);
|
|
TEST_ASSERT_EQUAL(0, res);
|
|
|
|
int write_sz = fwrite(write_buf, sizeof(char), sizeof(write_buf), fd[0]);
|
|
TEST_ASSERT_EQUAL(sizeof(write_buf), write_sz);
|
|
|
|
res = fclose(fd[0]);
|
|
TEST_ASSERT_EQUAL(0, res);
|
|
|
|
res = !((fd[0] = fopen("/default/" "filename", "rb")) != NULL);
|
|
TEST_ASSERT_EQUAL(0, res);
|
|
|
|
int read_sz = fread(read_buf, sizeof(char), sizeof(read_buf), fd[0]);
|
|
TEST_ASSERT_EQUAL(sizeof(write_buf), read_sz);
|
|
TEST_ASSERT_EQUAL_STRING(write_buf, read_buf);
|
|
|
|
res = fclose(fd[0]);
|
|
TEST_ASSERT_EQUAL(0, res);
|
|
|
|
res = remove("/default/" "filename");
|
|
TEST_ASSERT_EQUAL(0, res);
|
|
}
|
|
|
|
|
|
//fread valid flow medium file
|
|
static void FS_fread_valid_flow_medium_file()
|
|
{
|
|
char write_buf[medium_buf_size] = { 1 };
|
|
char read_buf[medium_buf_size] = {};
|
|
|
|
int res = !((fd[0] = fopen("/default/" "filename", "wb")) != NULL);
|
|
TEST_ASSERT_EQUAL(0, res);
|
|
|
|
int write_sz = fwrite(write_buf, sizeof(char), sizeof(write_buf), fd[0]);
|
|
TEST_ASSERT_EQUAL(sizeof(write_buf), write_sz);
|
|
|
|
res = fclose(fd[0]);
|
|
TEST_ASSERT_EQUAL(0, res);
|
|
|
|
res = !((fd[0] = fopen("/default/" "filename", "rb")) != NULL);
|
|
TEST_ASSERT_EQUAL(0, res);
|
|
|
|
int read_sz = fread(read_buf, sizeof(char), sizeof(read_buf), fd[0]);
|
|
TEST_ASSERT_EQUAL(sizeof(write_buf), read_sz);
|
|
TEST_ASSERT_EQUAL_STRING(write_buf, read_buf);
|
|
|
|
res = fclose(fd[0]);
|
|
TEST_ASSERT_EQUAL(0, res);
|
|
|
|
res = remove("/default/" "filename");
|
|
TEST_ASSERT_EQUAL(0, res);
|
|
}
|
|
|
|
//fread valid flow large file
|
|
static void FS_fread_valid_flow_large_file()
|
|
{
|
|
char write_buf[large_buf_size] = { 1 };
|
|
char read_buf[large_buf_size] = {};
|
|
|
|
int res = !((fd[0] = fopen("/default/" "filename", "wb")) != NULL);
|
|
TEST_ASSERT_EQUAL(0, res);
|
|
|
|
int write_sz = fwrite(write_buf, sizeof(char), sizeof(write_buf), fd[0]);
|
|
TEST_ASSERT_EQUAL(sizeof(write_buf), write_sz);
|
|
|
|
res = fclose(fd[0]);
|
|
TEST_ASSERT_EQUAL(0, res);
|
|
|
|
res = !((fd[0] = fopen("/default/" "filename", "rb")) != NULL);
|
|
TEST_ASSERT_EQUAL(0, res);
|
|
|
|
int read_sz = fread(read_buf, sizeof(char), sizeof(read_buf), fd[0]);
|
|
TEST_ASSERT_EQUAL(sizeof(write_buf), read_sz);
|
|
TEST_ASSERT_EQUAL_STRING(write_buf, read_buf);
|
|
|
|
res = fclose(fd[0]);
|
|
TEST_ASSERT_EQUAL(0, res);
|
|
|
|
res = remove("/default/" "filename");
|
|
TEST_ASSERT_EQUAL(0, res);
|
|
}
|
|
|
|
//fread valid flow small file read more than write
|
|
static void FS_fread_valid_flow_small_file_read_more_than_write()
|
|
{
|
|
char write_buf[small_buf_size] = "good_day";
|
|
char read_buf[small_buf_size + 10] = {};
|
|
|
|
int res = !((fd[0] = fopen("/default/" "filename", "wb")) != NULL);
|
|
TEST_ASSERT_EQUAL(0, res);
|
|
|
|
int write_sz = fwrite(write_buf, sizeof(char), sizeof(write_buf), fd[0]);
|
|
TEST_ASSERT_EQUAL(sizeof(write_buf), write_sz);
|
|
|
|
res = fclose(fd[0]);
|
|
TEST_ASSERT_EQUAL(0, res);
|
|
|
|
res = !((fd[0] = fopen("/default/" "filename", "rb")) != NULL);
|
|
TEST_ASSERT_EQUAL(0, res);
|
|
|
|
int read_sz = fread(read_buf, sizeof(char), sizeof(read_buf), fd[0]);
|
|
TEST_ASSERT_EQUAL(sizeof(write_buf), read_sz);
|
|
TEST_ASSERT_EQUAL_STRING(write_buf, read_buf);
|
|
|
|
res = fclose(fd[0]);
|
|
TEST_ASSERT_EQUAL(0, res);
|
|
|
|
res = remove("/default/" "filename");
|
|
TEST_ASSERT_EQUAL(0, res);
|
|
}
|
|
|
|
/*----------------fgetc()------------------*/
|
|
|
|
//fgetc to an empty file
|
|
static void FS_fgetc_empty_file()
|
|
{
|
|
int res = !((fd[0] = fopen("/default/" "filename", "wb")) != NULL);
|
|
TEST_ASSERT_EQUAL(0, res);
|
|
|
|
res = fclose(fd[0]);
|
|
TEST_ASSERT_EQUAL(0, res);
|
|
|
|
res = !((fd[0] = fopen("/default/" "filename", "rb")) != NULL);
|
|
TEST_ASSERT_EQUAL(0, res);
|
|
|
|
res = fgetc(fd[0]);
|
|
TEST_ASSERT_EQUAL(EOF, res);
|
|
|
|
res = fclose(fd[0]);
|
|
TEST_ASSERT_EQUAL(0, res);
|
|
|
|
res = remove("/default/" "filename");
|
|
TEST_ASSERT_EQUAL(0, res);
|
|
}
|
|
|
|
//fgetc valid flow
|
|
static void FS_fgetc_valid_flow()
|
|
{
|
|
char write_buf[small_buf_size] = "good_day";
|
|
char read_buf[small_buf_size] = {};
|
|
int ch = 0;
|
|
unsigned int i = 0;
|
|
|
|
int res = !((fd[0] = fopen("/default/" "filename", "wb")) != NULL);
|
|
TEST_ASSERT_EQUAL(0, res);
|
|
|
|
int write_sz = fwrite(write_buf, sizeof(char), sizeof(write_buf), fd[0]);
|
|
TEST_ASSERT_EQUAL(sizeof(write_buf), write_sz);
|
|
|
|
res = fclose(fd[0]);
|
|
TEST_ASSERT_EQUAL(0, res);
|
|
|
|
res = !((fd[0] = fopen("/default/" "filename", "rb")) != NULL);
|
|
TEST_ASSERT_EQUAL(0, res);
|
|
|
|
for (i = 0; (i < (sizeof(read_buf) - 1) && ((ch = fgetc(fd[0])) != EOF) && (ch != '\n')); i++) {
|
|
read_buf[i] = ch;
|
|
}
|
|
|
|
read_buf[i] = '\0';
|
|
TEST_ASSERT_EQUAL_STRING(write_buf, read_buf);
|
|
|
|
res = fclose(fd[0]);
|
|
TEST_ASSERT_EQUAL(0, res);
|
|
|
|
res = remove("/default/" "filename");
|
|
TEST_ASSERT_EQUAL(0, res);
|
|
}
|
|
|
|
//fgetc to fopen mode w
|
|
static void FS_fgetc_with_fopen_w_mode()
|
|
{
|
|
int res = !((fd[0] = fopen("/default/" "filename", "wb")) != NULL);
|
|
TEST_ASSERT_EQUAL(0, res);
|
|
|
|
res = fclose(fd[0]);
|
|
TEST_ASSERT_EQUAL(0, res);
|
|
|
|
res = !((fd[0] = fopen("/default/" "filename", "wb")) != NULL);
|
|
TEST_ASSERT_EQUAL(0, res);
|
|
|
|
res = fgetc(fd[0]);
|
|
TEST_ASSERT_EQUAL(EOF, res);
|
|
|
|
res = fclose(fd[0]);
|
|
TEST_ASSERT_EQUAL(0, res);
|
|
|
|
res = remove("/default/" "filename");
|
|
TEST_ASSERT_EQUAL(0, res);
|
|
}
|
|
|
|
/*----------------fgets()------------------*/
|
|
|
|
//fgets to an empty file
|
|
static void FS_fgets_empty_file()
|
|
{
|
|
char buffer[small_buf_size] = {};
|
|
|
|
int res = !((fd[0] = fopen("/default/" "filename", "wb")) != NULL);
|
|
TEST_ASSERT_EQUAL(0, res);
|
|
|
|
res = fclose(fd[0]);
|
|
TEST_ASSERT_EQUAL(0, res);
|
|
|
|
res = !((fd[0] = fopen("/default/" "filename", "rb")) != NULL);
|
|
TEST_ASSERT_EQUAL(0, res);
|
|
|
|
TEST_ASSERT_NULL(fgets(buffer, sizeof(buffer), fd[0]));
|
|
|
|
res = fclose(fd[0]);
|
|
TEST_ASSERT_EQUAL(0, res);
|
|
|
|
res = remove("/default/" "filename");
|
|
TEST_ASSERT_EQUAL(0, res);
|
|
}
|
|
|
|
//fgets with buffer null with zero len of buffer string
|
|
static void FS_fgets_null_buffer_zero_len()
|
|
{
|
|
int res = !((fd[0] = fopen("/default/" "filename", "wb")) != NULL);
|
|
TEST_ASSERT_EQUAL(0, res);
|
|
|
|
res = fclose(fd[0]);
|
|
TEST_ASSERT_EQUAL(0, res);
|
|
|
|
res = !((fd[0] = fopen("/default/" "filename", "rb")) != NULL);
|
|
TEST_ASSERT_EQUAL(0, res);
|
|
|
|
TEST_ASSERT_NULL(fgets(NULL, 0, fd[0]));
|
|
|
|
res = fclose(fd[0]);
|
|
TEST_ASSERT_EQUAL(0, res);
|
|
|
|
res = remove("/default/" "filename");
|
|
TEST_ASSERT_EQUAL(0, res);
|
|
}
|
|
|
|
//fgets with buffer null
|
|
static void FS_fgets_null_buffer()
|
|
{
|
|
int res = !((fd[0] = fopen("/default/" "filename", "wb")) != NULL);
|
|
TEST_ASSERT_EQUAL(0, res);
|
|
|
|
res = fclose(fd[0]);
|
|
TEST_ASSERT_EQUAL(0, res);
|
|
|
|
res = !((fd[0] = fopen("/default/" "filename", "rb")) != NULL);
|
|
TEST_ASSERT_EQUAL(0, res);
|
|
|
|
TEST_ASSERT_NULL(fgets(NULL, small_buf_size, fd[0]));
|
|
|
|
res = fclose(fd[0]);
|
|
TEST_ASSERT_EQUAL(0, res);
|
|
|
|
res = remove("/default/" "filename");
|
|
TEST_ASSERT_EQUAL(0, res);
|
|
}
|
|
|
|
//fgets valid flow
|
|
static void FS_fgets_valid_flow()
|
|
{
|
|
char write_buf[small_buf_size] = "good_day";
|
|
char read_buf[small_buf_size] = {};
|
|
|
|
int res = !((fd[0] = fopen("/default/" "filename", "wb")) != NULL);
|
|
TEST_ASSERT_EQUAL(0, res);
|
|
|
|
int write_sz = fwrite(write_buf, sizeof(char), sizeof(write_buf), fd[0]);
|
|
TEST_ASSERT_EQUAL(sizeof(write_buf), write_sz);
|
|
|
|
res = fclose(fd[0]);
|
|
TEST_ASSERT_EQUAL(0, res);
|
|
|
|
res = !((fd[0] = fopen("/default/" "filename", "rb")) != NULL);
|
|
TEST_ASSERT_EQUAL(0, res);
|
|
|
|
TEST_ASSERT_NOT_NULL(fgets(read_buf, sizeof(read_buf), fd[0]));
|
|
TEST_ASSERT_EQUAL_STRING(write_buf, read_buf);
|
|
|
|
res = fclose(fd[0]);
|
|
TEST_ASSERT_EQUAL(0, res);
|
|
|
|
res = remove("/default/" "filename");
|
|
TEST_ASSERT_EQUAL(0, res);
|
|
}
|
|
|
|
//fgets up to new line character
|
|
static void FS_fgets_new_line()
|
|
{
|
|
char write_buf[small_buf_size] = "good_day";
|
|
char read_buf[small_buf_size] = {};
|
|
|
|
write_buf[4] = '\n';
|
|
|
|
int res = !((fd[0] = fopen("/default/" "filename", "wb")) != NULL);
|
|
TEST_ASSERT_EQUAL(0, res);
|
|
|
|
int write_sz = fwrite(write_buf, sizeof(char), sizeof(write_buf), fd[0]);
|
|
TEST_ASSERT_EQUAL(sizeof(write_buf), write_sz);
|
|
|
|
res = fclose(fd[0]);
|
|
TEST_ASSERT_EQUAL(0, res);
|
|
|
|
res = !((fd[0] = fopen("/default/" "filename", "rb")) != NULL);
|
|
TEST_ASSERT_EQUAL(0, res);
|
|
|
|
TEST_ASSERT_NOT_NULL(fgets(read_buf, sizeof(read_buf), fd[0]));
|
|
TEST_ASSERT_EQUAL_STRING("good\n", read_buf);
|
|
|
|
res = fclose(fd[0]);
|
|
TEST_ASSERT_EQUAL(0, res);
|
|
|
|
res = remove("/default/" "filename");
|
|
TEST_ASSERT_EQUAL(0, res);
|
|
}
|
|
|
|
//fgets to fopen mode w
|
|
static void FS_fgets_with_fopen_w_mode()
|
|
{
|
|
char buffer[small_buf_size] = {};
|
|
|
|
int res = !((fd[0] = fopen("/default/" "filename", "wb")) != NULL);
|
|
TEST_ASSERT_EQUAL(0, res);
|
|
|
|
res = fclose(fd[0]);
|
|
TEST_ASSERT_EQUAL(0, res);
|
|
|
|
res = !((fd[0] = fopen("/default/" "filename", "wb")) != NULL);
|
|
TEST_ASSERT_EQUAL(0, res);
|
|
|
|
TEST_ASSERT_NULL(fgets(buffer, sizeof(buffer), fd[0]));
|
|
|
|
res = fclose(fd[0]);
|
|
TEST_ASSERT_EQUAL(0, res);
|
|
|
|
res = remove("/default/" "filename");
|
|
TEST_ASSERT_EQUAL(0, res);
|
|
}
|
|
|
|
/*----------------fflush()------------------*/
|
|
|
|
#if !defined(__MICROLIB)
|
|
//fflush with null
|
|
static void FS_fflush_null_stream()
|
|
{
|
|
int res = fflush(NULL);
|
|
TEST_ASSERT_EQUAL(0, res);
|
|
}
|
|
#endif
|
|
|
|
//fflush valid flow
|
|
static void FS_fflush_valid_flow()
|
|
{
|
|
char buffer[small_buf_size] = "good_day";
|
|
|
|
int res = !((fd[0] = fopen("/default/" "filename", "wb")) != NULL);
|
|
TEST_ASSERT_EQUAL(0, res);
|
|
|
|
int write_sz = fwrite(buffer, sizeof(char), small_buf_size, fd[0]);
|
|
TEST_ASSERT_EQUAL(small_buf_size, write_sz);
|
|
|
|
res = fflush(fd[0]);
|
|
TEST_ASSERT_EQUAL(0, res);
|
|
|
|
res = fclose(fd[0]);
|
|
TEST_ASSERT_EQUAL(0, res);
|
|
|
|
res = remove("/default/" "filename");
|
|
TEST_ASSERT_EQUAL(0, res);
|
|
}
|
|
|
|
|
|
//fflush twice
|
|
static void FS_fflush_twice()
|
|
{
|
|
char buffer[small_buf_size] = "good_day";
|
|
|
|
int res = !((fd[0] = fopen("/default/" "filename", "wb")) != NULL);
|
|
TEST_ASSERT_EQUAL(0, res);
|
|
|
|
int write_sz = fwrite(buffer, sizeof(char), small_buf_size, fd[0]);
|
|
TEST_ASSERT_EQUAL(small_buf_size, write_sz);
|
|
|
|
res = fflush(fd[0]);
|
|
TEST_ASSERT_EQUAL(0, res);
|
|
|
|
res = fflush(fd[0]);
|
|
TEST_ASSERT_EQUAL(0, res);
|
|
|
|
res = fclose(fd[0]);
|
|
TEST_ASSERT_EQUAL(0, res);
|
|
|
|
res = remove("/default/" "filename");
|
|
TEST_ASSERT_EQUAL(0, res);
|
|
}
|
|
|
|
/*----------------fputc()------------------*/
|
|
|
|
//fputc valid flow
|
|
static void FS_fputc_valid_flow()
|
|
{
|
|
int write_ch = 10, read_ch = 0;
|
|
|
|
int res = !((fd[0] = fopen("/default/" "filename", "wb")) != NULL);
|
|
TEST_ASSERT_EQUAL(0, res);
|
|
|
|
res = fputc(write_ch, fd[0]);
|
|
TEST_ASSERT_EQUAL(write_ch, res);
|
|
|
|
res = fclose(fd[0]);
|
|
TEST_ASSERT_EQUAL(0, res);
|
|
|
|
res = !((fd[0] = fopen("/default/" "filename", "rb")) != NULL);
|
|
TEST_ASSERT_EQUAL(0, res);
|
|
|
|
read_ch = fgetc(fd[0]);
|
|
TEST_ASSERT_EQUAL(write_ch, read_ch);
|
|
|
|
res = fclose(fd[0]);
|
|
TEST_ASSERT_EQUAL(0, res);
|
|
|
|
res = remove("/default/" "filename");
|
|
TEST_ASSERT_EQUAL(0, res);
|
|
}
|
|
|
|
//fputc with file open for read mode
|
|
static void FS_fputc_in_read_mode()
|
|
{
|
|
int write_ch = 10;
|
|
|
|
int res = !((fd[0] = fopen("/default/" "filename", "wb")) != NULL);
|
|
TEST_ASSERT_EQUAL(0, res);
|
|
|
|
res = fclose(fd[0]);
|
|
TEST_ASSERT_EQUAL(0, res);
|
|
|
|
res = !((fd[0] = fopen("/default/" "filename", "rb")) != NULL);
|
|
TEST_ASSERT_EQUAL(0, res);
|
|
|
|
res = fputc(write_ch, fd[0]);
|
|
TEST_ASSERT_EQUAL(EOF, res);
|
|
|
|
res = fclose(fd[0]);
|
|
TEST_ASSERT_EQUAL(0, res);
|
|
|
|
res = remove("/default/" "filename");
|
|
TEST_ASSERT_EQUAL(0, res);
|
|
}
|
|
|
|
/*----------------fputs()------------------*/
|
|
|
|
//fputs valid flow
|
|
static void FS_fputs_valid_flow()
|
|
{
|
|
char write_buf[small_buf_size] = "123456789";
|
|
char read_buf[small_buf_size] = {};
|
|
|
|
int res = !((fd[0] = fopen("/default/" "filename", "wb")) != NULL);
|
|
TEST_ASSERT_EQUAL(0, res);
|
|
|
|
res = fputs(write_buf, fd[0]);
|
|
TEST_ASSERT_NOT_EQUAL(EOF, res);
|
|
|
|
res = fclose(fd[0]);
|
|
TEST_ASSERT_EQUAL(0, res);
|
|
|
|
res = !((fd[0] = fopen("/default/" "filename", "rb")) != NULL);
|
|
TEST_ASSERT_EQUAL(0, res);
|
|
|
|
int read_sz = fread(read_buf, sizeof(char), sizeof(write_buf), fd[0]);
|
|
TEST_ASSERT_EQUAL(sizeof(write_buf) - 1, read_sz);
|
|
TEST_ASSERT_EQUAL_STRING(write_buf, read_buf);
|
|
|
|
res = fclose(fd[0]);
|
|
TEST_ASSERT_EQUAL(0, res);
|
|
|
|
res = remove("/default/" "filename");
|
|
TEST_ASSERT_EQUAL(0, res);
|
|
}
|
|
|
|
//fputs with file open for read mode
|
|
static void FS_fputs_in_read_mode()
|
|
{
|
|
char buffer[small_buf_size] = "good_day";
|
|
|
|
int res = !((fd[0] = fopen("/default/" "filename", "wb")) != NULL);
|
|
TEST_ASSERT_EQUAL(0, res);
|
|
|
|
res = fclose(fd[0]);
|
|
TEST_ASSERT_EQUAL(0, res);
|
|
|
|
res = !((fd[0] = fopen("/default/" "filename", "rb")) != NULL);
|
|
TEST_ASSERT_EQUAL(0, res);
|
|
|
|
res = fputs(buffer, fd[0]);
|
|
TEST_ASSERT_EQUAL(EOF, res);
|
|
|
|
res = fclose(fd[0]);
|
|
TEST_ASSERT_EQUAL(0, res);
|
|
|
|
res = remove("/default/" "filename");
|
|
TEST_ASSERT_EQUAL(0, res);
|
|
}
|
|
|
|
/*----------------fseek()------------------*/
|
|
|
|
//fseek empty file, SEEK_SET, offset 0
|
|
static void FS_fseek_empty_file_seek_set()
|
|
{
|
|
int res = !((fd[0] = fopen("/default/" "filename", "wb")) != NULL);
|
|
TEST_ASSERT_EQUAL(0, res);
|
|
|
|
res = fclose(fd[0]);
|
|
TEST_ASSERT_EQUAL(0, res);
|
|
|
|
res = !((fd[0] = fopen("/default/" "filename", "rb")) != NULL);
|
|
TEST_ASSERT_EQUAL(0, res);
|
|
|
|
res = fseek(fd[0], 0, SEEK_SET);
|
|
TEST_ASSERT_EQUAL(0, res);
|
|
|
|
int pos = ftell(fd[0]);
|
|
TEST_ASSERT_EQUAL(0, pos);
|
|
|
|
res = fclose(fd[0]);
|
|
TEST_ASSERT_EQUAL(0, res);
|
|
|
|
res = remove("/default/" "filename");
|
|
TEST_ASSERT_EQUAL(0, res);
|
|
}
|
|
|
|
//fseek non empty file, SEEK_SET, offset 0
|
|
static void FS_fseek_non_empty_file_seek_set()
|
|
{
|
|
char write_buf[small_buf_size] = "123456789";
|
|
|
|
int res = !((fd[0] = fopen("/default/" "filename", "wb")) != NULL);
|
|
TEST_ASSERT_EQUAL(0, res);
|
|
|
|
int write_sz = fwrite(write_buf, sizeof(char), sizeof(write_buf), fd[0]);
|
|
TEST_ASSERT_EQUAL(sizeof(write_buf), write_sz);
|
|
|
|
res = fclose(fd[0]);
|
|
TEST_ASSERT_EQUAL(0, res);
|
|
|
|
res = !((fd[0] = fopen("/default/" "filename", "rb")) != NULL);
|
|
TEST_ASSERT_EQUAL(0, res);
|
|
|
|
res = fseek(fd[0], 0, SEEK_SET);
|
|
TEST_ASSERT_EQUAL(0, res);
|
|
|
|
int pos = ftell(fd[0]);
|
|
TEST_ASSERT_EQUAL(0, pos);
|
|
|
|
res = fclose(fd[0]);
|
|
TEST_ASSERT_EQUAL(0, res);
|
|
|
|
res = remove("/default/" "filename");
|
|
TEST_ASSERT_EQUAL(0, res);
|
|
}
|
|
|
|
//fseek empty file, SEEK_SET, offset 1 - beyond end of file
|
|
static void FS_fseek_beyond_empty_file_seek_set()
|
|
{
|
|
char read_buf[small_buf_size] = "";
|
|
|
|
int res = !((fd[0] = fopen("/default/" "filename", "wb")) != NULL);
|
|
TEST_ASSERT_EQUAL(0, res);
|
|
|
|
res = fclose(fd[0]);
|
|
TEST_ASSERT_EQUAL(0, res);
|
|
|
|
res = !((fd[0] = fopen("/default/" "filename", "rb+")) != NULL);
|
|
TEST_ASSERT_EQUAL(0, res);
|
|
|
|
res = fseek(fd[0], 10, SEEK_SET);
|
|
TEST_ASSERT_EQUAL(0, res);
|
|
|
|
int read_sz = fread(read_buf, sizeof(char), sizeof(read_buf), fd[0]);
|
|
TEST_ASSERT_EQUAL(0, read_sz);
|
|
#if !defined(__MICROLIB)
|
|
// feof() always returns 0 because the EOF indicator is not supported by Microlib
|
|
res = feof(fd[0]);
|
|
TEST_ASSERT_NOT_EQUAL(0, res);
|
|
#endif
|
|
|
|
res = fclose(fd[0]);
|
|
TEST_ASSERT_EQUAL(0, res);
|
|
|
|
res = remove("/default/" "filename");
|
|
TEST_ASSERT_EQUAL(0, res);
|
|
}
|
|
|
|
//fseek non empty file, SEEK_SET, offset data_size + 1 - beyond end of file
|
|
static void FS_fseek_beyond_non_empty_file_seek_set()
|
|
{
|
|
char write_buf[small_buf_size] = "123456789";
|
|
char read_buf[small_buf_size] = "";
|
|
|
|
int res = !((fd[0] = fopen("/default/" "filename", "wb")) != NULL);
|
|
TEST_ASSERT_EQUAL(0, res);
|
|
|
|
int write_sz = fwrite(write_buf, sizeof(char), sizeof(write_buf), fd[0]);
|
|
TEST_ASSERT_EQUAL(sizeof(write_buf), write_sz);
|
|
|
|
res = fclose(fd[0]);
|
|
TEST_ASSERT_EQUAL(0, res);
|
|
|
|
res = !((fd[0] = fopen("/default/" "filename", "rb+")) != NULL);
|
|
TEST_ASSERT_EQUAL(0, res);
|
|
|
|
res = fseek(fd[0], sizeof(write_buf) + 1, SEEK_SET);
|
|
TEST_ASSERT_EQUAL(0, res);
|
|
|
|
int read_sz = fread(read_buf, sizeof(char), sizeof(read_buf), fd[0]);
|
|
TEST_ASSERT_EQUAL(0, read_sz);
|
|
|
|
#if !defined(__MICROLIB)
|
|
// feof() always returns 0 because the EOF indicator is not supported by Microlib
|
|
res = feof(fd[0]);
|
|
TEST_ASSERT_NOT_EQUAL(0, res);
|
|
#endif
|
|
|
|
res = fclose(fd[0]);
|
|
TEST_ASSERT_EQUAL(0, res);
|
|
|
|
res = remove("/default/" "filename");
|
|
TEST_ASSERT_EQUAL(0, res);
|
|
}
|
|
|
|
//fseek empty file, SEEK_CUR, offset 0
|
|
static void FS_fseek_empty_file_seek_cur()
|
|
{
|
|
int res = !((fd[0] = fopen("/default/" "filename", "wb")) != NULL);
|
|
TEST_ASSERT_EQUAL(0, res);
|
|
|
|
res = fclose(fd[0]);
|
|
TEST_ASSERT_EQUAL(0, res);
|
|
|
|
res = !((fd[0] = fopen("/default/" "filename", "rb+")) != NULL);
|
|
TEST_ASSERT_EQUAL(0, res);
|
|
|
|
res = fseek(fd[0], 0, SEEK_CUR);
|
|
TEST_ASSERT_EQUAL(0, res);
|
|
|
|
int pos = ftell(fd[0]);
|
|
TEST_ASSERT_EQUAL(0, pos);
|
|
|
|
res = fclose(fd[0]);
|
|
TEST_ASSERT_EQUAL(0, res);
|
|
|
|
res = remove("/default/" "filename");
|
|
TEST_ASSERT_EQUAL(0, res);
|
|
}
|
|
|
|
//fseek non empty file, SEEK_CUR, offset 0
|
|
static void FS_fseek_non_empty_file_seek_cur()
|
|
{
|
|
char write_buf[small_buf_size] = "123456789";
|
|
|
|
int res = !((fd[0] = fopen("/default/" "filename", "wb")) != NULL);
|
|
TEST_ASSERT_EQUAL(0, res);
|
|
|
|
int write_sz = fwrite(write_buf, sizeof(char), sizeof(write_buf), fd[0]);
|
|
TEST_ASSERT_EQUAL(sizeof(write_buf), write_sz);
|
|
|
|
res = fclose(fd[0]);
|
|
TEST_ASSERT_EQUAL(0, res);
|
|
|
|
res = !((fd[0] = fopen("/default/" "filename", "rb+")) != NULL);
|
|
TEST_ASSERT_EQUAL(0, res);
|
|
|
|
res = fseek(fd[0], 0, SEEK_CUR);
|
|
TEST_ASSERT_EQUAL(0, res);
|
|
|
|
int pos = ftell(fd[0]);
|
|
TEST_ASSERT_EQUAL(0, pos);
|
|
|
|
res = fclose(fd[0]);
|
|
TEST_ASSERT_EQUAL(0, res);
|
|
|
|
res = remove("/default/" "filename");
|
|
TEST_ASSERT_EQUAL(0, res);
|
|
}
|
|
|
|
//fseek empty file, SEEK_CUR, offset 1 - beyond end of file
|
|
static void FS_fseek_beyond_empty_file_seek_cur()
|
|
{
|
|
char read_buf[small_buf_size] = {};
|
|
|
|
int res = !((fd[0] = fopen("/default/" "filename", "wb")) != NULL);
|
|
TEST_ASSERT_EQUAL(0, res);
|
|
|
|
res = fclose(fd[0]);
|
|
TEST_ASSERT_EQUAL(0, res);
|
|
|
|
res = !((fd[0] = fopen("/default/" "filename", "rb+")) != NULL);
|
|
TEST_ASSERT_EQUAL(0, res);
|
|
|
|
res = fseek(fd[0], 1, SEEK_CUR);
|
|
TEST_ASSERT_EQUAL(0, res);
|
|
|
|
int read_sz = fread(read_buf, sizeof(char), sizeof(read_buf), fd[0]);
|
|
TEST_ASSERT_EQUAL(0, read_sz);
|
|
|
|
#if !defined(__MICROLIB)
|
|
// feof() always returns 0 because the EOF indicator is not supported by Microlib
|
|
res = feof(fd[0]);
|
|
TEST_ASSERT_NOT_EQUAL(0, res);
|
|
#endif
|
|
|
|
res = fclose(fd[0]);
|
|
TEST_ASSERT_EQUAL(0, res);
|
|
|
|
res = remove("/default/" "filename");
|
|
TEST_ASSERT_EQUAL(0, res);
|
|
}
|
|
|
|
//fseek non empty file, SEEK_CUR, offset data_size + 1 - beyond end of file
|
|
static void FS_fseek_beyond_non_empty_file_seek_cur()
|
|
{
|
|
char read_buf[small_buf_size] = {};
|
|
char write_buf[small_buf_size] = "123456789";
|
|
|
|
int res = !((fd[0] = fopen("/default/" "filename", "wb")) != NULL);
|
|
TEST_ASSERT_EQUAL(0, res);
|
|
|
|
int write_sz = fwrite(write_buf, sizeof(char), sizeof(write_buf), fd[0]);
|
|
TEST_ASSERT_EQUAL(sizeof(write_buf), write_sz);
|
|
|
|
res = fclose(fd[0]);
|
|
TEST_ASSERT_EQUAL(0, res);
|
|
|
|
res = !((fd[0] = fopen("/default/" "filename", "rb+")) != NULL);
|
|
TEST_ASSERT_EQUAL(0, res);
|
|
|
|
res = fseek(fd[0], sizeof(write_buf) + 1, SEEK_CUR);
|
|
TEST_ASSERT_EQUAL(0, res);
|
|
|
|
int read_sz = fread(read_buf, sizeof(char), sizeof(read_buf), fd[0]);
|
|
TEST_ASSERT_EQUAL(0, read_sz);
|
|
|
|
#if !defined(__MICROLIB)
|
|
// feof() always returns 0 because the EOF indicator is not supported by Microlib
|
|
res = feof(fd[0]);
|
|
TEST_ASSERT_NOT_EQUAL(0, res);
|
|
#endif
|
|
|
|
res = fclose(fd[0]);
|
|
TEST_ASSERT_EQUAL(0, res);
|
|
|
|
res = remove("/default/" "filename");
|
|
TEST_ASSERT_EQUAL(0, res);
|
|
}
|
|
|
|
//fseek empty file, SEEK_END, offset 0
|
|
static void FS_fseek_empty_file_seek_end()
|
|
{
|
|
int res = !((fd[0] = fopen("/default/" "filename", "wb")) != NULL);
|
|
TEST_ASSERT_EQUAL(0, res);
|
|
|
|
res = fclose(fd[0]);
|
|
TEST_ASSERT_EQUAL(0, res);
|
|
|
|
res = !((fd[0] = fopen("/default/" "filename", "rb+")) != NULL);
|
|
TEST_ASSERT_EQUAL(0, res);
|
|
|
|
res = fseek(fd[0], 0, SEEK_END);
|
|
TEST_ASSERT_EQUAL(0, res);
|
|
|
|
int pos = ftell(fd[0]);
|
|
TEST_ASSERT_EQUAL(0, pos);
|
|
|
|
res = fclose(fd[0]);
|
|
TEST_ASSERT_EQUAL(0, res);
|
|
|
|
res = remove("/default/" "filename");
|
|
TEST_ASSERT_EQUAL(0, res);
|
|
}
|
|
|
|
//fseek non empty file, SEEK_END, offset 0
|
|
static void FS_fseek_non_empty_file_seek_end()
|
|
{
|
|
char write_buf[small_buf_size] = "123456789";
|
|
|
|
int res = !((fd[0] = fopen("/default/" "filename", "wb")) != NULL);
|
|
TEST_ASSERT_EQUAL(0, res);
|
|
|
|
int write_sz = fwrite(write_buf, sizeof(char), sizeof(write_buf), fd[0]);
|
|
TEST_ASSERT_EQUAL(sizeof(write_buf), write_sz);
|
|
|
|
res = fclose(fd[0]);
|
|
TEST_ASSERT_EQUAL(0, res);
|
|
|
|
res = !((fd[0] = fopen("/default/" "filename", "rb+")) != NULL);
|
|
TEST_ASSERT_EQUAL(0, res);
|
|
|
|
res = fseek(fd[0], 0, SEEK_END);
|
|
TEST_ASSERT_EQUAL(0, res);
|
|
|
|
int pos = ftell(fd[0]);
|
|
TEST_ASSERT_EQUAL(write_sz, pos);
|
|
|
|
res = fclose(fd[0]);
|
|
TEST_ASSERT_EQUAL(0, res);
|
|
|
|
res = remove("/default/" "filename");
|
|
TEST_ASSERT_EQUAL(0, res);
|
|
}
|
|
|
|
//fseek empty file, SEEK_END, offset 1 - beyond end of file
|
|
static void FS_fseek_beyond_empty_file_seek_end()
|
|
{
|
|
char read_buf[small_buf_size] = {};
|
|
|
|
int res = !((fd[0] = fopen("/default/" "filename", "wb")) != NULL);
|
|
TEST_ASSERT_EQUAL(0, res);
|
|
|
|
res = fclose(fd[0]);
|
|
TEST_ASSERT_EQUAL(0, res);
|
|
|
|
res = !((fd[0] = fopen("/default/" "filename", "rb+")) != NULL);
|
|
TEST_ASSERT_EQUAL(0, res);
|
|
|
|
res = fseek(fd[0], 1, SEEK_END);
|
|
TEST_ASSERT_EQUAL(0, res);
|
|
|
|
int read_sz = fread(read_buf, sizeof(char), sizeof(read_buf), fd[0]);
|
|
TEST_ASSERT_EQUAL(0, read_sz);
|
|
|
|
#if !defined(__MICROLIB)
|
|
// feof() always returns 0 because the EOF indicator is not supported by Microlib
|
|
res = feof(fd[0]);
|
|
TEST_ASSERT_NOT_EQUAL(0, res);
|
|
#endif
|
|
|
|
res = fclose(fd[0]);
|
|
TEST_ASSERT_EQUAL(0, res);
|
|
|
|
res = remove("/default/" "filename");
|
|
TEST_ASSERT_EQUAL(0, res);
|
|
}
|
|
|
|
//fseek non empty file, SEEK_END, offset data_size + 1 - beyond end of file
|
|
static void FS_fseek_beyond_non_empty_file_seek_end()
|
|
{
|
|
char read_buf[small_buf_size] = {};
|
|
char write_buf[small_buf_size] = "123456789";
|
|
|
|
int res = !((fd[0] = fopen("/default/" "filename", "wb")) != NULL);
|
|
TEST_ASSERT_EQUAL(0, res);
|
|
|
|
int write_sz = fwrite(write_buf, sizeof(char), sizeof(write_buf), fd[0]);
|
|
TEST_ASSERT_EQUAL(sizeof(write_buf), write_sz);
|
|
|
|
res = fclose(fd[0]);
|
|
TEST_ASSERT_EQUAL(0, res);
|
|
|
|
res = !((fd[0] = fopen("/default/" "filename", "rb+")) != NULL);
|
|
TEST_ASSERT_EQUAL(0, res);
|
|
|
|
res = fseek(fd[0], sizeof(write_buf) + 1, SEEK_END);
|
|
TEST_ASSERT_EQUAL(0, res);
|
|
|
|
int read_sz = fread(read_buf, sizeof(char), sizeof(read_buf), fd[0]);
|
|
TEST_ASSERT_EQUAL(0, read_sz);
|
|
|
|
#if !defined(__MICROLIB)
|
|
// feof() always returns 0 because the EOF indicator is not supported by Microlib
|
|
res = feof(fd[0]);
|
|
TEST_ASSERT_NOT_EQUAL(0, res);
|
|
#endif
|
|
|
|
res = fclose(fd[0]);
|
|
TEST_ASSERT_EQUAL(0, res);
|
|
|
|
res = remove("/default/" "filename");
|
|
TEST_ASSERT_EQUAL(0, res);
|
|
}
|
|
|
|
//fseek non empty file, SEEK_END, offset negative
|
|
static void FS_fseek_negative_non_empty_file_seek_end()
|
|
{
|
|
char write_buf[small_buf_size] = "123456789";
|
|
|
|
int res = !((fd[0] = fopen("/default/" "filename", "wb")) != NULL);
|
|
TEST_ASSERT_EQUAL(0, res);
|
|
|
|
int write_sz = fwrite(write_buf, sizeof(char), sizeof(write_buf), fd[0]);
|
|
TEST_ASSERT_EQUAL(sizeof(write_buf), write_sz);
|
|
|
|
res = fclose(fd[0]);
|
|
TEST_ASSERT_EQUAL(0, res);
|
|
|
|
res = !((fd[0] = fopen("/default/" "filename", "rb+")) != NULL);
|
|
TEST_ASSERT_EQUAL(0, res);
|
|
|
|
res = fseek(fd[0], -(sizeof(write_buf)), SEEK_END);
|
|
TEST_ASSERT_EQUAL(0, res);
|
|
|
|
int pos = ftell(fd[0]);
|
|
TEST_ASSERT_EQUAL(0, pos);
|
|
|
|
res = fclose(fd[0]);
|
|
TEST_ASSERT_EQUAL(0, res);
|
|
|
|
res = remove("/default/" "filename");
|
|
TEST_ASSERT_EQUAL(0, res);
|
|
}
|
|
|
|
/*----------------fgetpos()------------------*/
|
|
|
|
//fgetpos rewrite file and check data
|
|
static void FS_fgetpos_rewrite_check_data()
|
|
{
|
|
char write_buf[small_buf_size] = "123456789";
|
|
char rewrite_buf[small_buf_size] = "987654321";
|
|
char read_buf[small_buf_size] = {};
|
|
fpos_t pos;
|
|
|
|
int res = !((fd[0] = fopen("/default/" "filename", "wb")) != NULL);
|
|
TEST_ASSERT_EQUAL(0, res);
|
|
|
|
res = fgetpos(fd[0], &pos);
|
|
TEST_ASSERT_EQUAL(0, res);
|
|
|
|
int write_sz = fwrite(write_buf, sizeof(char), sizeof(write_buf), fd[0]);
|
|
TEST_ASSERT_EQUAL(sizeof(write_buf), write_sz);
|
|
|
|
res = fsetpos(fd[0], &pos);
|
|
TEST_ASSERT_EQUAL(0, res);
|
|
|
|
write_sz = fwrite(rewrite_buf, sizeof(char), sizeof(rewrite_buf), fd[0]);
|
|
TEST_ASSERT_EQUAL(sizeof(rewrite_buf), write_sz);
|
|
|
|
res = fclose(fd[0]);
|
|
TEST_ASSERT_EQUAL(0, res);
|
|
|
|
res = !((fd[0] = fopen("/default/" "filename", "rb")) != NULL);
|
|
TEST_ASSERT_EQUAL(0, res);
|
|
|
|
int read_sz = fread(read_buf, sizeof(char), sizeof(read_buf), fd[0]);
|
|
TEST_ASSERT_EQUAL(sizeof(rewrite_buf), read_sz);
|
|
TEST_ASSERT_EQUAL_STRING(rewrite_buf, read_buf);
|
|
|
|
res = fclose(fd[0]);
|
|
TEST_ASSERT_EQUAL(0, res);
|
|
|
|
res = remove("/default/" "filename");
|
|
TEST_ASSERT_EQUAL(0, res);
|
|
}
|
|
|
|
/*----------------fscanf()------------------*/
|
|
|
|
//fscanf valid flow
|
|
static void FS_fscanf_valid_flow()
|
|
{
|
|
char write_buf[small_buf_size] = "123456789";
|
|
char read_buf[small_buf_size] = {};
|
|
int num = 0;
|
|
|
|
int res = !((fd[0] = fopen("/default/" "filename", "wb")) != NULL);
|
|
TEST_ASSERT_EQUAL(0, res);
|
|
|
|
res = fprintf(fd[0], "%d %s", 123, write_buf);
|
|
TEST_ASSERT_EQUAL(3 + sizeof(write_buf), res);
|
|
|
|
res = fclose(fd[0]);
|
|
TEST_ASSERT_EQUAL(0, res);
|
|
|
|
res = !((fd[0] = fopen("/default/" "filename", "rb")) != NULL);
|
|
TEST_ASSERT_EQUAL(0, res);
|
|
|
|
res = fscanf(fd[0], "%d", &num);
|
|
TEST_ASSERT_EQUAL(1, res);
|
|
TEST_ASSERT_EQUAL_INT(123, num);
|
|
|
|
res = fscanf(fd[0], "%s", read_buf);
|
|
TEST_ASSERT_EQUAL(1, res);
|
|
TEST_ASSERT_EQUAL_STRING(write_buf, read_buf);
|
|
|
|
res = fclose(fd[0]);
|
|
TEST_ASSERT_EQUAL(0, res);
|
|
|
|
res = remove("/default/" "filename");
|
|
TEST_ASSERT_EQUAL(0, res);
|
|
}
|
|
|
|
//fscanf empty file
|
|
static void FS_fscanf_empty_file()
|
|
{
|
|
int num = 0;
|
|
|
|
int res = !((fd[0] = fopen("/default/" "filename", "wb")) != NULL);
|
|
TEST_ASSERT_EQUAL(0, res);
|
|
|
|
res = fscanf(fd[0], "%d", &num);
|
|
TEST_ASSERT_EQUAL(EOF, res);
|
|
|
|
res = fclose(fd[0]);
|
|
TEST_ASSERT_EQUAL(0, res);
|
|
|
|
res = remove("/default/" "filename");
|
|
TEST_ASSERT_EQUAL(0, res);
|
|
}
|
|
|
|
//fscanf more fields than exist
|
|
static void FS_fscanf_more_fields_than_exist()
|
|
{
|
|
char write_buf[small_buf_size] = "123456789";
|
|
char read_buf[small_buf_size] = {};
|
|
int num = 0;
|
|
|
|
int res = !((fd[0] = fopen("/default/" "filename", "wb")) != NULL);
|
|
TEST_ASSERT_EQUAL(0, res);
|
|
|
|
res = fprintf(fd[0], "%d %s", 123, write_buf);
|
|
TEST_ASSERT_EQUAL(3 + sizeof(write_buf), res);
|
|
|
|
res = fclose(fd[0]);
|
|
TEST_ASSERT_EQUAL(0, res);
|
|
|
|
res = !((fd[0] = fopen("/default/" "filename", "rb")) != NULL);
|
|
TEST_ASSERT_EQUAL(0, res);
|
|
|
|
res = fscanf(fd[0], "%d", &num);
|
|
TEST_ASSERT_EQUAL(1, res);
|
|
TEST_ASSERT_EQUAL_INT(123, num);
|
|
|
|
res = fscanf(fd[0], "%s", read_buf);
|
|
TEST_ASSERT_EQUAL(1, res);
|
|
TEST_ASSERT_EQUAL_STRING(write_buf, read_buf);
|
|
|
|
res = fscanf(fd[0], "%d", &num);
|
|
TEST_ASSERT_EQUAL(EOF, res);
|
|
|
|
res = fclose(fd[0]);
|
|
TEST_ASSERT_EQUAL(0, res);
|
|
|
|
res = remove("/default/" "filename");
|
|
TEST_ASSERT_EQUAL(0, res);
|
|
}
|
|
|
|
/*----------------fprintf()------------------*/
|
|
|
|
//fprintf in mode r
|
|
static void FS_fprintf_read_mode()
|
|
{
|
|
int res = !((fd[0] = fopen("/default/" "filename", "wb")) != NULL);
|
|
TEST_ASSERT_EQUAL(0, res);
|
|
|
|
res = fclose(fd[0]);
|
|
TEST_ASSERT_EQUAL(0, res);
|
|
|
|
res = !((fd[0] = fopen("/default/" "filename", "rb")) != NULL);
|
|
TEST_ASSERT_EQUAL(0, res);
|
|
|
|
res = fprintf(fd[0], "%d", 123);
|
|
TEST_ASSERT_NOT_EQUAL(1, res);
|
|
|
|
res = fclose(fd[0]);
|
|
TEST_ASSERT_EQUAL(0, res);
|
|
|
|
res = remove("/default/" "filename");
|
|
TEST_ASSERT_EQUAL(0, res);
|
|
}
|
|
|
|
/*----------------freopen()------------------*/
|
|
|
|
//freopen point to the same file with two file handler
|
|
static void FS_freopen_point_to_same_file()
|
|
{
|
|
int res = !((fd[0] = fopen("/default/" "filename", "wb")) != NULL);
|
|
TEST_ASSERT_EQUAL(0, res);
|
|
|
|
res = !((fd[1] = freopen("/default/" "new_file_name", "wb", fd[0])) != NULL);
|
|
TEST_ASSERT_EQUAL(0, res);
|
|
|
|
TEST_ASSERT_EQUAL(fd[0], fd[1]);
|
|
|
|
res = fclose(fd[0]);
|
|
TEST_ASSERT_EQUAL(0, res);
|
|
|
|
res = remove("/default/" "filename");
|
|
TEST_ASSERT_EQUAL(0, res);
|
|
}
|
|
|
|
//freopen valid flow
|
|
static void FS_freopen_valid_flow()
|
|
{
|
|
char write_buf[small_buf_size] = "123456789";
|
|
char read_buf[small_buf_size] = {};
|
|
|
|
int res = !((fd[0] = fopen("/default/" "filename", "wb")) != NULL);
|
|
TEST_ASSERT_EQUAL(0, res);
|
|
|
|
int write_sz = fwrite(write_buf, sizeof(char), sizeof(write_buf), fd[0]);
|
|
TEST_ASSERT_EQUAL(sizeof(write_buf), write_sz);
|
|
|
|
res = !((fd[1] = freopen("/default/" "filename", "rb", fd[0])) != NULL);
|
|
TEST_ASSERT_EQUAL(0, res);
|
|
|
|
int read_sz = fread(read_buf, sizeof(char), sizeof(read_buf), fd[0]);
|
|
TEST_ASSERT_EQUAL(sizeof(write_buf), read_sz);
|
|
TEST_ASSERT_EQUAL_STRING(write_buf, read_buf);
|
|
|
|
res = fclose(fd[0]);
|
|
TEST_ASSERT_EQUAL(0, res);
|
|
|
|
res = remove("/default/" "filename");
|
|
TEST_ASSERT_EQUAL(0, res);
|
|
}
|
|
|
|
/*----------------general------------------*/
|
|
|
|
//create a 1 byte file
|
|
static void FS_fopen_write_one_byte_file()
|
|
{
|
|
char write_buf = 1;
|
|
char read_buf[1] = {};
|
|
|
|
int res = !((fd[0] = fopen("/default/" "filename", "w")) != NULL);
|
|
TEST_ASSERT_EQUAL(0, res);
|
|
|
|
int write_sz = fwrite(&write_buf, sizeof(char), 1, fd[0]);
|
|
TEST_ASSERT_EQUAL(sizeof(write_buf), write_sz);
|
|
|
|
res = fclose(fd[0]);
|
|
TEST_ASSERT_EQUAL(0, res);
|
|
|
|
res = !((fd[0] = fopen("/default/" "filename", "rb")) != NULL);
|
|
TEST_ASSERT_EQUAL(0, res);
|
|
|
|
int read_sz = fread(read_buf, sizeof(char), sizeof(read_buf), fd[0]);
|
|
TEST_ASSERT_EQUAL(sizeof(write_buf), read_sz);
|
|
TEST_ASSERT_EQUAL(write_buf, read_buf[0]);
|
|
|
|
res = fclose(fd[0]);
|
|
TEST_ASSERT_EQUAL(0, res);
|
|
|
|
res = remove("/default/" "filename");
|
|
TEST_ASSERT_EQUAL(0, res);
|
|
}
|
|
|
|
//create a 2 bytes file
|
|
static void FS_fopen_write_two_byte_file()
|
|
{
|
|
char write_buf[2] = "1";
|
|
char read_buf[2] = {};
|
|
|
|
int res = !((fd[0] = fopen("/default/" "filename", "w")) != NULL);
|
|
TEST_ASSERT_EQUAL(0, res);
|
|
|
|
int write_sz = fwrite(write_buf, sizeof(char), sizeof(write_buf), fd[0]);
|
|
TEST_ASSERT_EQUAL(sizeof(write_buf), write_sz);
|
|
|
|
res = fclose(fd[0]);
|
|
TEST_ASSERT_EQUAL(0, res);
|
|
|
|
res = !((fd[0] = fopen("/default/" "filename", "rb")) != NULL);
|
|
TEST_ASSERT_EQUAL(0, res);
|
|
|
|
int read_sz = fread(read_buf, sizeof(char), sizeof(read_buf), fd[0]);
|
|
TEST_ASSERT_EQUAL(sizeof(write_buf), read_sz);
|
|
TEST_ASSERT_EQUAL_STRING(write_buf, read_buf);
|
|
|
|
res = fclose(fd[0]);
|
|
TEST_ASSERT_EQUAL(0, res);
|
|
|
|
res = remove("/default/" "filename");
|
|
TEST_ASSERT_EQUAL(0, res);
|
|
}
|
|
|
|
//create a 5 bytes file
|
|
static void FS_fopen_write_five_byte_file()
|
|
{
|
|
char write_buf[5] = "1234";
|
|
char read_buf[5] = {};
|
|
|
|
int res = !((fd[0] = fopen("/default/" "filename", "w")) != NULL);
|
|
TEST_ASSERT_EQUAL(0, res);
|
|
|
|
int write_sz = fwrite(write_buf, sizeof(char), sizeof(write_buf), fd[0]);
|
|
TEST_ASSERT_EQUAL(sizeof(write_buf), write_sz);
|
|
|
|
res = fclose(fd[0]);
|
|
TEST_ASSERT_EQUAL(0, res);
|
|
|
|
res = !((fd[0] = fopen("/default/" "filename", "rb")) != NULL);
|
|
TEST_ASSERT_EQUAL(0, res);
|
|
|
|
int read_sz = fread(read_buf, sizeof(char), sizeof(read_buf), fd[0]);
|
|
TEST_ASSERT_EQUAL(sizeof(write_buf), read_sz);
|
|
TEST_ASSERT_EQUAL_STRING(write_buf, read_buf);
|
|
|
|
res = fclose(fd[0]);
|
|
TEST_ASSERT_EQUAL(0, res);
|
|
|
|
res = remove("/default/" "filename");
|
|
TEST_ASSERT_EQUAL(0, res);
|
|
}
|
|
|
|
//create a 15 bytes file
|
|
static void FS_fopen_write_fifteen_byte_file()
|
|
{
|
|
char write_buf[15] = "12345678901234";
|
|
char read_buf[15] = {};
|
|
|
|
int res = !((fd[0] = fopen("/default/" "filename", "w")) != NULL);
|
|
TEST_ASSERT_EQUAL(0, res);
|
|
|
|
int write_sz = fwrite(write_buf, sizeof(char), sizeof(write_buf), fd[0]);
|
|
TEST_ASSERT_EQUAL(sizeof(write_buf), write_sz);
|
|
|
|
res = fclose(fd[0]);
|
|
TEST_ASSERT_EQUAL(0, res);
|
|
|
|
res = !((fd[0] = fopen("/default/" "filename", "rb")) != NULL);
|
|
TEST_ASSERT_EQUAL(0, res);
|
|
|
|
int read_sz = fread(read_buf, sizeof(char), sizeof(read_buf), fd[0]);
|
|
TEST_ASSERT_EQUAL(sizeof(write_buf), read_sz);
|
|
TEST_ASSERT_EQUAL_STRING(write_buf, read_buf);
|
|
|
|
res = fclose(fd[0]);
|
|
TEST_ASSERT_EQUAL(0, res);
|
|
|
|
res = remove("/default/" "filename");
|
|
TEST_ASSERT_EQUAL(0, res);
|
|
}
|
|
|
|
//create a 5000 bytes file
|
|
static void FS_fopen_write_five_Kbyte_file()
|
|
{
|
|
int buf_sz = 5000;
|
|
char *write_buf = (char *)malloc(buf_sz);
|
|
char read_buf[10] = {};
|
|
char check_buf[10] = "123456789";
|
|
|
|
int res = !((fd[0] = fopen("/default/" "filename", "w")) != NULL);
|
|
TEST_ASSERT_EQUAL(0, res);
|
|
|
|
memcpy(write_buf, check_buf, sizeof(check_buf) - 1);
|
|
int write_sz = fwrite(write_buf, sizeof(char), buf_sz, fd[0]);
|
|
TEST_ASSERT_EQUAL(buf_sz, write_sz);
|
|
|
|
res = fclose(fd[0]);
|
|
TEST_ASSERT_EQUAL(0, res);
|
|
|
|
res = !((fd[0] = fopen("/default/" "filename", "rb+")) != NULL);
|
|
TEST_ASSERT_EQUAL(0, res);
|
|
|
|
int read_sz = fread(read_buf, sizeof(char), sizeof(read_buf) - 1, fd[0]);
|
|
TEST_ASSERT_EQUAL(sizeof(check_buf) - 1, read_sz);
|
|
TEST_ASSERT_EQUAL_STRING(check_buf, read_buf);
|
|
|
|
res = fclose(fd[0]);
|
|
TEST_ASSERT_EQUAL(0, res);
|
|
|
|
res = remove("/default/" "filename");
|
|
TEST_ASSERT_EQUAL(0, res);
|
|
}
|
|
|
|
//rewrite file begining
|
|
static void FS_fseek_rewrite_non_empty_file_begining()
|
|
{
|
|
char write_buf[15] = "12345678901234";
|
|
char rewrite_buf[6] = "abcde";
|
|
char check_buf[15] = "abcde678901234";
|
|
char read_buf[15] = {};
|
|
|
|
int res = !((fd[0] = fopen("/default/" "filename", "w")) != NULL);
|
|
TEST_ASSERT_EQUAL(0, res);
|
|
|
|
int write_sz = fwrite(write_buf, sizeof(char), sizeof(write_buf), fd[0]);
|
|
TEST_ASSERT_EQUAL(sizeof(write_buf), write_sz);
|
|
|
|
res = fclose(fd[0]);
|
|
TEST_ASSERT_EQUAL(0, res);
|
|
|
|
res = !((fd[0] = fopen("/default/" "filename", "r+")) != NULL);
|
|
TEST_ASSERT_EQUAL(0, res);
|
|
|
|
res = fseek(fd[0], 0, SEEK_SET);
|
|
TEST_ASSERT_EQUAL(0, res);
|
|
|
|
write_sz = fwrite(rewrite_buf, sizeof(char), sizeof(rewrite_buf) - 1, fd[0]);
|
|
TEST_ASSERT_EQUAL(sizeof(rewrite_buf) - 1, write_sz);
|
|
|
|
res = fclose(fd[0]);
|
|
TEST_ASSERT_EQUAL(0, res);
|
|
|
|
res = !((fd[0] = fopen("/default/" "filename", "r")) != NULL);
|
|
TEST_ASSERT_EQUAL(0, res);
|
|
|
|
res = fseek(fd[0], 0, SEEK_SET);
|
|
TEST_ASSERT_EQUAL(0, res);
|
|
|
|
int read_sz = fread(read_buf, sizeof(char), sizeof(read_buf), fd[0]);
|
|
TEST_ASSERT_EQUAL(sizeof(read_buf), read_sz);
|
|
TEST_ASSERT_EQUAL_STRING(check_buf, read_buf);
|
|
|
|
res = fclose(fd[0]);
|
|
TEST_ASSERT_EQUAL(0, res);
|
|
|
|
res = remove("/default/" "filename");
|
|
TEST_ASSERT_EQUAL(0, res);
|
|
}
|
|
|
|
//rewrite file middle
|
|
static void FS_fseek_rewrite_non_empty_file_middle()
|
|
{
|
|
char write_buf[15] = "12345678901234";
|
|
char rewrite_buf[6] = "abcde";
|
|
char check_buf[15] = "12345abcde1234";
|
|
char read_buf[15] = {};
|
|
|
|
int res = !((fd[0] = fopen("/default/" "filename", "w")) != NULL);
|
|
TEST_ASSERT_EQUAL(0, res);
|
|
|
|
int write_sz = fwrite(write_buf, sizeof(char), sizeof(write_buf), fd[0]);
|
|
TEST_ASSERT_EQUAL(sizeof(write_buf), write_sz);
|
|
|
|
res = fclose(fd[0]);
|
|
TEST_ASSERT_EQUAL(0, res);
|
|
|
|
res = !((fd[0] = fopen("/default/" "filename", "r+")) != NULL);
|
|
TEST_ASSERT_EQUAL(0, res);
|
|
|
|
res = fseek(fd[0], 5, SEEK_SET);
|
|
TEST_ASSERT_EQUAL(0, res);
|
|
|
|
write_sz = fwrite(rewrite_buf, sizeof(char), sizeof(rewrite_buf) - 1, fd[0]);
|
|
TEST_ASSERT_EQUAL(sizeof(rewrite_buf) - 1, write_sz);
|
|
|
|
res = fclose(fd[0]);
|
|
TEST_ASSERT_EQUAL(0, res);
|
|
|
|
res = !((fd[0] = fopen("/default/" "filename", "r")) != NULL);
|
|
TEST_ASSERT_EQUAL(0, res);
|
|
|
|
res = fseek(fd[0], 0, SEEK_SET);
|
|
TEST_ASSERT_EQUAL(0, res);
|
|
|
|
int read_sz = fread(read_buf, sizeof(char), sizeof(read_buf), fd[0]);
|
|
TEST_ASSERT_EQUAL(sizeof(write_buf), read_sz);
|
|
TEST_ASSERT_EQUAL_STRING(check_buf, read_buf);
|
|
|
|
res = fclose(fd[0]);
|
|
TEST_ASSERT_EQUAL(0, res);
|
|
|
|
res = remove("/default/" "filename");
|
|
TEST_ASSERT_EQUAL(0, res);
|
|
}
|
|
|
|
//rewrite file end
|
|
static void FS_fseek_rewrite_non_empty_file_end()
|
|
{
|
|
char write_buf[15] = "12345678901234";
|
|
char rewrite_buf[6] = "abcde";
|
|
char check_buf[15] = "123456789abcde";
|
|
char read_buf[15] = {};
|
|
|
|
int res = !((fd[0] = fopen("/default/" "filename", "w")) != NULL);
|
|
TEST_ASSERT_EQUAL(0, res);
|
|
|
|
int write_sz = fwrite(write_buf, sizeof(char), sizeof(write_buf), fd[0]);
|
|
TEST_ASSERT_EQUAL(sizeof(write_buf), write_sz);
|
|
|
|
res = fclose(fd[0]);
|
|
TEST_ASSERT_EQUAL(0, res);
|
|
|
|
res = !((fd[0] = fopen("/default/" "filename", "r+")) != NULL);
|
|
TEST_ASSERT_EQUAL(0, res);
|
|
|
|
res = fseek(fd[0], 9, SEEK_SET);
|
|
TEST_ASSERT_EQUAL(0, res);
|
|
|
|
write_sz = fwrite(rewrite_buf, sizeof(char), sizeof(rewrite_buf) - 1, fd[0]);
|
|
TEST_ASSERT_EQUAL(sizeof(rewrite_buf) - 1, write_sz);
|
|
|
|
res = fclose(fd[0]);
|
|
TEST_ASSERT_EQUAL(0, res);
|
|
|
|
res = !((fd[0] = fopen("/default/" "filename", "r")) != NULL);
|
|
TEST_ASSERT_EQUAL(0, res);
|
|
|
|
res = fseek(fd[0], 0, SEEK_SET);
|
|
TEST_ASSERT_EQUAL(0, res);
|
|
|
|
int read_sz = fread(read_buf, sizeof(char), sizeof(read_buf), fd[0]);
|
|
TEST_ASSERT_EQUAL(sizeof(write_buf), read_sz);
|
|
TEST_ASSERT_EQUAL_STRING(check_buf, read_buf);
|
|
|
|
res = fclose(fd[0]);
|
|
TEST_ASSERT_EQUAL(0, res);
|
|
|
|
res = remove("/default/" "filename");
|
|
TEST_ASSERT_EQUAL(0, res);
|
|
}
|
|
|
|
//append buffer to empty file
|
|
static void FS_append_empty_file()
|
|
{
|
|
char write_buf[17] = "1234567890123456";
|
|
char read_buf[17] = {};
|
|
|
|
int res = !((fd[0] = fopen("/default/" "filename", "a")) != NULL);
|
|
TEST_ASSERT_EQUAL(0, res);
|
|
|
|
int write_sz = fwrite(write_buf, sizeof(char), sizeof(write_buf), fd[0]);
|
|
TEST_ASSERT_EQUAL(sizeof(write_buf), write_sz);
|
|
|
|
res = fclose(fd[0]);
|
|
TEST_ASSERT_EQUAL(0, res);
|
|
|
|
res = !((fd[0] = fopen("/default/" "filename", "r")) != NULL);
|
|
TEST_ASSERT_EQUAL(0, res);
|
|
|
|
int read_sz = fread(read_buf, sizeof(char), sizeof(read_buf), fd[0]);
|
|
TEST_ASSERT_EQUAL(sizeof(write_buf), read_sz);
|
|
TEST_ASSERT_EQUAL_STRING(write_buf, read_buf);
|
|
|
|
res = fclose(fd[0]);
|
|
TEST_ASSERT_EQUAL(0, res);
|
|
|
|
res = remove("/default/" "filename");
|
|
TEST_ASSERT_EQUAL(0, res);
|
|
}
|
|
|
|
//append buffer to non empty file
|
|
static void FS_append_non_empty_file()
|
|
{
|
|
char write_buf[17] = "1234567890123456";
|
|
char rewrite_buf[17] = "abcdefghijklmnop";
|
|
char read_buf[34] = {};
|
|
char check_buf[34] = "1234567890123456abcdefghijklmnop";
|
|
|
|
int res = !((fd[0] = fopen("/default/" "filename", "a")) != NULL);
|
|
TEST_ASSERT_EQUAL(0, res);
|
|
|
|
int write_sz = fwrite(write_buf, sizeof(char), sizeof(write_buf) - 1, fd[0]);
|
|
TEST_ASSERT_EQUAL(sizeof(write_buf) - 1, write_sz);
|
|
|
|
res = fclose(fd[0]);
|
|
TEST_ASSERT_EQUAL(0, res);
|
|
|
|
res = !((fd[0] = fopen("/default/" "filename", "a+")) != NULL);
|
|
TEST_ASSERT_EQUAL(0, res);
|
|
#if defined(__MICROLIB)
|
|
// Microlib does not support opening a file in an append mode.
|
|
fseek(fd[0], 0L, SEEK_END);
|
|
#endif
|
|
write_sz = fwrite(rewrite_buf, sizeof(char), sizeof(rewrite_buf), fd[0]);
|
|
TEST_ASSERT_EQUAL(sizeof(write_buf), write_sz);
|
|
|
|
res = fclose(fd[0]);
|
|
TEST_ASSERT_EQUAL(0, res);
|
|
|
|
res = !((fd[0] = fopen("/default/" "filename", "r")) != NULL);
|
|
TEST_ASSERT_EQUAL(0, res);
|
|
|
|
memcpy(check_buf, write_buf, sizeof(write_buf) - 1);
|
|
memcpy(check_buf + sizeof(write_buf) - 1, rewrite_buf, sizeof(rewrite_buf));
|
|
|
|
int read_sz = fread(read_buf, sizeof(char), sizeof(read_buf) - 1, fd[0]);
|
|
TEST_ASSERT_EQUAL(sizeof(check_buf) - 1, read_sz);
|
|
TEST_ASSERT_EQUAL_STRING(check_buf, read_buf);
|
|
|
|
res = fclose(fd[0]);
|
|
TEST_ASSERT_EQUAL(0, res);
|
|
|
|
res = remove("/default/" "filename");
|
|
TEST_ASSERT_EQUAL(0, res);
|
|
}
|
|
|
|
//fill write_buf buffer with random data, read back the data from the file
|
|
static void FS_write_read_random_data()
|
|
{
|
|
char write_buf[medium_buf_size] = {};
|
|
unsigned int i;
|
|
|
|
// Fill write_buf buffer with random data and write the data into the file
|
|
int res = !((fd[0] = fopen("/default/" "filename", "w")) != NULL);
|
|
TEST_ASSERT_EQUAL(0, res);
|
|
|
|
for (i = 0; i < medium_buf_size; i++) {
|
|
write_buf[i] = rand() % 0XFF;
|
|
res = fprintf(fd[0], "%c", write_buf[i]);
|
|
TEST_ASSERT_EQUAL(1, res);
|
|
}
|
|
|
|
res = fclose(fd[0]);
|
|
TEST_ASSERT_EQUAL(0, res);
|
|
|
|
// Read back the data from the file and store them in data_read
|
|
res = !((fd[0] = fopen("/default/" "filename", "r")) != NULL);
|
|
TEST_ASSERT_EQUAL(0, res);
|
|
|
|
for (i = 0; i < medium_buf_size; i++) {
|
|
uint8_t data = fgetc(fd[0]);
|
|
TEST_ASSERT_EQUAL(write_buf[i], data);
|
|
}
|
|
|
|
res = fclose(fd[0]);
|
|
TEST_ASSERT_EQUAL(0, res);
|
|
|
|
res = remove("/default/" "filename");
|
|
TEST_ASSERT_EQUAL(0, res);
|
|
}
|
|
|
|
//fill write_buf buffer with random data, read back the data from the file
|
|
static void FS_fill_data_and_seek()
|
|
{
|
|
unsigned int i, j;
|
|
|
|
int res = !((fd[0] = fopen("/default/" "filename", "w")) != NULL);
|
|
TEST_ASSERT_EQUAL(0, res);
|
|
|
|
for (i = 0; i < 256; i++) {
|
|
res = fputc(i, fd[0]);
|
|
TEST_ASSERT_EQUAL(i, res);
|
|
}
|
|
|
|
res = fclose(fd[0]);
|
|
TEST_ASSERT_EQUAL(0, res);
|
|
|
|
res = !((fd[0] = fopen("/default/" "filename", "r")) != NULL);
|
|
TEST_ASSERT_EQUAL(0, res);
|
|
|
|
for (i = 1; i <= 255; i++) {
|
|
|
|
res = fseek(fd[0], (long) - i, SEEK_END);
|
|
TEST_ASSERT_EQUAL(0, res);
|
|
|
|
j = getc(fd[0]);
|
|
TEST_ASSERT_EQUAL(256 - i, j);
|
|
|
|
res = fseek(fd[0], (long)i, SEEK_SET);
|
|
TEST_ASSERT_EQUAL(0, res);
|
|
|
|
j = getc(fd[0]);
|
|
TEST_ASSERT_EQUAL(i, j);
|
|
|
|
res = fseek(fd[0], (long)i, SEEK_SET);
|
|
TEST_ASSERT_EQUAL(0, res);
|
|
|
|
res = fseek(fd[0], (long)(i >= 128 ? -128 : 128), SEEK_CUR);
|
|
TEST_ASSERT_EQUAL(0, res);
|
|
|
|
j = getc(fd[0]);
|
|
TEST_ASSERT_EQUAL((i >= 128 ? i - 128 : i + 128), j);
|
|
}
|
|
|
|
res = fclose(fd[0]);
|
|
TEST_ASSERT_EQUAL(0, res);
|
|
|
|
res = remove("/default/" "filename");
|
|
TEST_ASSERT_EQUAL(0, res);
|
|
}
|
|
|
|
//deinit the blockdevice and unmount the filesystem
|
|
static void bd_deinit_fs_unmount()
|
|
{
|
|
deinit();
|
|
}
|
|
|
|
/*----------------setup------------------*/
|
|
|
|
Case cases[] = {
|
|
Case("bd_init_fs_reformat", bd_init_fs_reformat),
|
|
|
|
Case("FS_fopen_path_not_valid", FS_fopen_path_not_valid),
|
|
Case("FS_fopen_empty_path_r_mode", FS_fopen_empty_path_r_mode),
|
|
Case("FS_fopen_empty_path_w_mode", FS_fopen_empty_path_w_mode),
|
|
Case("FS_fopen_invalid_mode", FS_fopen_invalid_mode),
|
|
Case("FS_fopen_supported_wb_mode", FS_fopen_supported_wb_mode),
|
|
Case("FS_fopen_supported_a_mode", FS_fopen_supported_a_mode),
|
|
Case("FS_fopen_supported_r_mode", FS_fopen_supported_r_mode),
|
|
Case("FS_fopen_supported_a_update_mode", FS_fopen_supported_a_update_mode),
|
|
Case("FS_fopen_supported_r_update_mode", FS_fopen_supported_r_update_mode),
|
|
Case("FS_fopen_supported_w_update_mode", FS_fopen_supported_w_update_mode),
|
|
Case("FS_fopen_read_update_create", FS_fopen_read_update_create),
|
|
Case("FS_fopen_write_update_create", FS_fopen_write_update_create),
|
|
|
|
Case("FS_fclose_valid_flow", FS_fclose_valid_flow),
|
|
|
|
Case("FS_fwrite_nmemb_zero", FS_fwrite_nmemb_zero),
|
|
Case("FS_fwrite_valid_flow", FS_fwrite_valid_flow),
|
|
Case("FS_fwrite_with_fopen_r_mode", FS_fwrite_with_fopen_r_mode),
|
|
#if !defined(__MICROLIB)
|
|
Case("FS_fread_size_zero", FS_fread_size_zero),
|
|
#endif
|
|
Case("FS_fread_nmemb_zero", FS_fread_nmemb_zero),
|
|
Case("FS_fread_with_fopen_w_mode", FS_fread_with_fopen_w_mode),
|
|
Case("FS_fread_to_fwrite_file", FS_fread_to_fwrite_file),
|
|
Case("FS_fread_empty_file", FS_fread_empty_file),
|
|
Case("FS_fread_valid_flow_small_file", FS_fread_valid_flow_small_file),
|
|
Case("FS_fread_valid_flow_medium_file", FS_fread_valid_flow_medium_file),
|
|
Case("FS_fread_valid_flow_large_file", FS_fread_valid_flow_large_file),
|
|
Case("FS_fread_valid_flow_small_file_read_more_than_write", FS_fread_valid_flow_small_file_read_more_than_write),
|
|
|
|
Case("FS_fgetc_empty_file", FS_fgetc_empty_file),
|
|
Case("FS_fgetc_valid_flow", FS_fgetc_valid_flow),
|
|
Case("FS_fgetc_with_fopen_w_mode", FS_fgetc_with_fopen_w_mode),
|
|
|
|
Case("FS_fgets_empty_file", FS_fgets_empty_file),
|
|
Case("FS_fgets_null_buffer_zero_len", FS_fgets_null_buffer_zero_len),
|
|
Case("FS_fgets_null_buffer", FS_fgets_null_buffer),
|
|
Case("FS_fgets_valid_flow", FS_fgets_valid_flow),
|
|
Case("FS_fgets_new_line", FS_fgets_new_line),
|
|
Case("FS_fgets_with_fopen_w_mode", FS_fgets_with_fopen_w_mode),
|
|
#if !defined(__MICROLIB)
|
|
Case("FS_fflush_null_stream", FS_fflush_null_stream),
|
|
#endif
|
|
Case("FS_fflush_valid_flow", FS_fflush_valid_flow),
|
|
Case("FS_fflush_twice", FS_fflush_twice),
|
|
|
|
Case("FS_fputc_valid_flow", FS_fputc_valid_flow),
|
|
Case("FS_fputc_in_read_mode", FS_fputc_in_read_mode),
|
|
|
|
Case("FS_fputs_valid_flow", FS_fputs_valid_flow),
|
|
Case("FS_fputs_in_read_mode", FS_fputs_in_read_mode),
|
|
|
|
Case("FS_fseek_empty_file_seek_set", FS_fseek_empty_file_seek_set),
|
|
Case("FS_fseek_non_empty_file_seek_set", FS_fseek_non_empty_file_seek_set),
|
|
Case("FS_fseek_empty_file_seek_set", FS_fseek_beyond_empty_file_seek_set),
|
|
Case("FS_fseek_beyond_non_empty_file_seek_set", FS_fseek_beyond_non_empty_file_seek_set),
|
|
Case("FS_fseek_empty_file_seek_cur", FS_fseek_empty_file_seek_cur),
|
|
Case("FS_fseek_non_empty_file_seek_cur", FS_fseek_non_empty_file_seek_cur),
|
|
Case("FS_fseek_empty_file_seek_cur", FS_fseek_beyond_empty_file_seek_cur),
|
|
Case("FS_fseek_beyond_non_empty_file_seek_cur", FS_fseek_beyond_non_empty_file_seek_cur),
|
|
Case("FS_fseek_empty_file_seek_end", FS_fseek_empty_file_seek_end),
|
|
Case("FS_fseek_non_empty_file_seek_end", FS_fseek_non_empty_file_seek_end),
|
|
Case("FS_fseek_empty_file_seek_end", FS_fseek_beyond_empty_file_seek_end),
|
|
Case("FS_fseek_beyond_non_empty_file_seek_end", FS_fseek_beyond_non_empty_file_seek_end),
|
|
Case("FS_fseek_negative_non_empty_file_seek_end", FS_fseek_negative_non_empty_file_seek_end),
|
|
|
|
Case("FS_fgetpos_rewrite_check_data", FS_fgetpos_rewrite_check_data),
|
|
|
|
Case("FS_fscanf_valid_flow", FS_fscanf_valid_flow),
|
|
Case("FS_fscanf_empty_file", FS_fscanf_empty_file),
|
|
Case("FS_fscanf_more_fields_than_exist", FS_fscanf_more_fields_than_exist),
|
|
|
|
Case("FS_fprintf_read_mode", FS_fprintf_read_mode),
|
|
|
|
Case("FS_freopen_point_to_same_file", FS_freopen_point_to_same_file),
|
|
Case("FS_freopen_valid_flow", FS_freopen_valid_flow),
|
|
|
|
Case("FS_fopen_write_one_byte_file", FS_fopen_write_one_byte_file),
|
|
Case("FS_fopen_write_two_byte_file", FS_fopen_write_two_byte_file),
|
|
Case("FS_fopen_write_five_byte_file", FS_fopen_write_five_byte_file),
|
|
Case("FS_fopen_write_fifteen_byte_file", FS_fopen_write_fifteen_byte_file),
|
|
Case("FS_fopen_write_five_Kbyte_file", FS_fopen_write_five_Kbyte_file),
|
|
|
|
Case("FS_fseek_rewrite_non_empty_file_begining", FS_fseek_rewrite_non_empty_file_begining),
|
|
Case("FS_fseek_rewrite_non_empty_file_middle", FS_fseek_rewrite_non_empty_file_middle),
|
|
Case("FS_fseek_rewrite_non_empty_file_end", FS_fseek_rewrite_non_empty_file_end),
|
|
|
|
Case("FS_append_empty_file", FS_append_empty_file),
|
|
Case("FS_append_non_empty_file", FS_append_non_empty_file),
|
|
|
|
Case("FS_write_read_random_data", FS_write_read_random_data),
|
|
Case("FS_fill_data_and_seek", FS_fill_data_and_seek),
|
|
|
|
Case("bd_deinit_fs_unmount", bd_deinit_fs_unmount),
|
|
};
|
|
|
|
|
|
utest::v1::status_t greentea_test_setup(const size_t number_of_cases)
|
|
{
|
|
GREENTEA_SETUP(300, "default_auto");
|
|
return greentea_test_setup_handler(number_of_cases);
|
|
}
|
|
|
|
Specification specification(greentea_test_setup, cases, greentea_test_teardown_handler);
|
|
|
|
int main()
|
|
{
|
|
return !Harness::run(specification);
|
|
}
|
|
|