blob: 3e08e425a9c76fba4e3dc855aa7cce972650397f [file] [log] [blame]
#include <stdarg.h>
#include <setjmp.h>
#include <stddef.h>
#include <stdint.h>
#include <unistd.h>
#include <stdlib.h>
#include <string.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <sys/ioctl.h>
#include <cmocka.h>
#include "libubi.h"
#include "test_lib.h"
static void test_libubi_open(void **state)
{
libubi_t lib = NULL;
expect_open(SYSFS_ROOT "/class/ubi", O_RDONLY, 4);
expect_close(4,0);
expect_open(SYSFS_ROOT "/class/ubi/version", O_RDONLY, 0);
expect_read_real(50,0);
expect_close(3,1);
lib = libubi_open();
assert_non_null(lib);
libubi_close(lib);
(void) state;
}
static void test_ubi_vol_block_create(void **state)
{
int mock_fd = 1;
expect_ioctl_short(UBI_IOCVOLCRBLK, 0);
int r = ubi_vol_block_create(mock_fd);
assert_int_equal(r, 0);
(void) state;
}
static void test_ubi_vol_block_remove(void **state)
{
int mock_fd = 1;
expect_ioctl_short(UBI_IOCVOLRMBLK, 0);
int r = ubi_vol_block_remove(mock_fd);
assert_int_equal(r, 0);
(void) state;
}
static void test_ubi_leb_unmap(void **state)
{
int mock_fd = 1;
int lnum = 12;
expect_ioctl(UBI_IOCEBUNMAP, 0, &lnum, sizeof(lnum));
int r = ubi_leb_unmap(mock_fd, lnum);
assert_int_equal(r, 0);
(void) state;
}
static void test_ubi_is_mapped(void **state)
{
int mock_fd = 1;
int lnum = 1;
expect_ioctl(UBI_IOCEBISMAP, 0, &lnum, sizeof(lnum));
int r = ubi_is_mapped(mock_fd, lnum);
assert_int_equal(r, 0);
(void) state;
}
static void test_ubi_update_start(void **state)
{
int mock_fd = 1;
long long bytes = 0x1234;
expect_ioctl(UBI_IOCVOLUP, 0, &bytes, sizeof(bytes));
int r = ubi_update_start(NULL, mock_fd, bytes);
assert_int_equal(r, 0);
(void) state;
}
static libubi_t mock_libubi_open()
{
expect_open(SYSFS_ROOT "/class/ubi", O_RDONLY, 4);
expect_close(4,0);
expect_open(SYSFS_ROOT "/class/ubi/version", O_RDONLY, 0);
expect_read_real(50,0);
expect_close(3,1);
libubi_t lib = libubi_open();
assert_non_null(lib);
return lib;
}
static void test_ubi_dev_present(void **state)
{
libubi_t lib = mock_libubi_open();
expect_stat(SYSFS_ROOT "/class/ubi/ubi0", 0);
int r = ubi_dev_present(lib, 0);
assert_int_equal(r, 1);
libubi_close(lib);
(void) state;
}
static void test_ubi_rsvol(void **state)
{
const char *node = "/foo";
int vol_id = 0;
long long bytes = 0xadadaf;
struct ubi_rsvol_req req;
memset(&req, 0, sizeof(req));
req.bytes = bytes;
req.vol_id = vol_id;
expect_open(node, O_RDONLY, 4);
expect_ioctl(UBI_IOCRSVOL, 0, &req, sizeof(req));
expect_close(4, 0);
int r = ubi_rsvol(NULL, node, vol_id, bytes);
assert_int_equal(r, 0);
(void) state;
}
static void test_ubi_rnvols(void **state)
{
libubi_t lib = mock_libubi_open();
const char *node = "/foo";
struct ubi_rnvol_req req;
memset(&req, 0xaf, sizeof(req));
expect_open(node, O_RDONLY, 4);
expect_ioctl(UBI_IOCRNVOL, 0, &req, sizeof(req));
expect_close(4, 0);
int r = ubi_rnvols(lib, node, &req);
assert_int_equal(r, 0);
libubi_close(lib);
(void) state;
}
static void test_ubi_rmvol(void **state)
{
libubi_t lib = mock_libubi_open();
const char *node = "/foo";
int vol_id = 12;
expect_open(node, O_RDONLY, 4);
expect_ioctl(UBI_IOCRMVOL, 0, &vol_id, sizeof(vol_id));
expect_close(4, 0);
int r = ubi_rmvol(lib, node, vol_id);
assert_int_equal(r, 0);
libubi_close(lib);
(void) state;
}
static void test_ubi_leb_change_start(void **state)
{
libubi_t lib = mock_libubi_open();
int mock_fd = 1;
int lnum = 12;
int bytes = 48;
struct ubi_leb_change_req req;
memset(&req, 0, sizeof(req));
req.lnum = lnum;
req.bytes = bytes;
req.dtype = 3;
expect_ioctl(UBI_IOCEBCH, 0, &req, sizeof(req));
int r = ubi_leb_change_start(lib, mock_fd, lnum, bytes);
assert_int_equal(r, 0);
libubi_close(lib);
(void) state;
}
static void test_ubi_get_info(void **state)
{
libubi_t lib = mock_libubi_open();
struct ubi_info info;
expect_open(SYSFS_ROOT "/class/misc/ubi_ctrl/dev", O_RDONLY, 0);
expect_read_real(50,0);
expect_read(1,0);
expect_close(3,1);
expect_open(SYSFS_ROOT "/class/ubi/version", O_RDONLY, 0);
expect_read_real(50,0);
expect_close(3,1);
int r = ubi_get_info(lib, &info);
assert_int_equal(r, 0);
assert_int_equal(info.dev_count, 1);
libubi_close(lib);
(void) state;
}
static void test_ubi_mkvol(void **state)
{
libubi_t lib = mock_libubi_open();
const char *node = "/foo";
const char *vol_name = "testvol";
int vol_id = 12;
struct ubi_mkvol_request req;
struct ubi_mkvol_req rr;
memset(&rr, 0, sizeof(rr));
memset(&req, 0, sizeof(req));
req.vol_id = vol_id;
req.name = vol_name;
rr.vol_id = vol_id;
rr.name_len = strlen(vol_name);
strncpy(rr.name, vol_name, UBI_MAX_VOLUME_NAME + 1);
expect_open(node, O_RDONLY, 3);
expect_ioctl(UBI_IOCMKVOL, 0, &rr, sizeof(rr));
expect_close(3,0);
int r = ubi_mkvol(lib, node, &req);
assert_int_equal(r, 0);
assert_int_equal(req.vol_id, vol_id);
libubi_close(lib);
(void) state;
}
void test_ubi_remove_dev(void **state)
{
const char *node = "/foo";
libubi_t lib = mock_libubi_open();
int ubi_dev = 0xAA;
expect_open(node, O_RDONLY, 4);
expect_ioctl(UBI_IOCDET, 0, &ubi_dev, sizeof(ubi_dev));
expect_close(4,0);
int r = ubi_remove_dev(lib, node, ubi_dev);
assert_int_equal(r, 0);
libubi_close(lib);
(void) state;
}
void test_ubi_attach(void **state)
{
const char *node = "/foo";
struct ubi_attach_request req;
struct ubi_attach_req rr;
memset(&req, 0, sizeof(req));
memset(&rr, 0, sizeof(rr));
libubi_t lib = mock_libubi_open();
req.dev_num = 1;
req.mtd_num = 1;
rr.ubi_num = 1;
rr.mtd_num = 1;
expect_open(node, O_RDONLY, 4);
expect_ioctl(UBI_IOCATT, 0, &rr, sizeof(rr));
expect_close(4,0);
int r = ubi_attach(lib, node, &req);
assert_int_equal(r, 0);
libubi_close(lib);
(void) state;
}
void test_ubi_set_property(void **state)
{
int mock_fd = 1;
uint8_t prop = 0xad;
uint64_t val = 0xaabbccdd;
struct ubi_set_vol_prop_req req;
memset(&req, 0, sizeof(req));
req.property = prop;
req.value = val;
expect_ioctl(UBI_IOCSETVOLPROP, 0, &req, sizeof(req));
int r = ubi_set_property(mock_fd, prop, val);
assert_int_equal(r,0);
(void)state;
}
/* functions to test
* ubi_get_vol_info
* ubi_get_vol_info1
* ubi_get_vol_info1_nm
* ubi_get_dev_info1
* ubi_get_dev_info
* ubi_probe_node
* ubi_detach_mtd
* ubi_detach
* mtd_num2ubi_dev
*/
int main(void)
{
const struct CMUnitTest tests[] = {
cmocka_unit_test(test_libubi_open),
cmocka_unit_test(test_ubi_vol_block_create),
cmocka_unit_test(test_ubi_vol_block_remove),
cmocka_unit_test(test_ubi_update_start),
cmocka_unit_test(test_ubi_dev_present),
cmocka_unit_test(test_ubi_rsvol),
cmocka_unit_test(test_ubi_rmvol),
cmocka_unit_test(test_ubi_rnvols),
cmocka_unit_test(test_ubi_leb_change_start),
cmocka_unit_test(test_ubi_get_info),
cmocka_unit_test(test_ubi_mkvol),
cmocka_unit_test(test_ubi_leb_unmap),
cmocka_unit_test(test_ubi_is_mapped),
cmocka_unit_test(test_ubi_remove_dev),
cmocka_unit_test(test_ubi_attach),
cmocka_unit_test(test_ubi_set_property),
};
return cmocka_run_group_tests(tests, NULL, NULL);
}