diff options
Diffstat (limited to 'ubi-utils/tests')
-rw-r--r-- | ubi-utils/tests/README.udev | 19 | ||||
-rw-r--r-- | ubi-utils/tests/mkvol_bad.c | 21 | ||||
-rw-r--r-- | ubi-utils/tests/mkvol_basic.c | 10 | ||||
-rw-r--r-- | ubi-utils/tests/rsvol.c | 4 |
4 files changed, 35 insertions, 19 deletions
diff --git a/ubi-utils/tests/README.udev b/ubi-utils/tests/README.udev new file mode 100644 index 0000000..a4ff9c5 --- /dev/null +++ b/ubi-utils/tests/README.udev @@ -0,0 +1,19 @@ +There is a problem with udev: when a volume is created, there is a delay +before corresponding /dev/ubiX_Y device node is created by udev, so some +tests fail because of this. The symptom is error messages like +"cannot open /dev/ubi0_0". + +One possible solution of this problem is to pre-create UBI device and volume +nodes. there is even a script which may be used for this in ubi-utils/scripts/. +But this is not enough because udev will still remove and re-create the nodes +and tests will still fail. So you need to stop removing device nodes using +the following udev rule: + + KERNEL=="ubi*_*", ACTION=="remove", OPTIONS+="ignore_device" + +In our Ubuntu distribution we put that to new file: +/etc/udev/rules.d/50-local.rules + +Another possibility is to call udevsettle utility in libubi after the volume +has been created See src/libubi.c - the call is there but is commented out. +This is anyway an ugly hack, but works, although makes the tests slower. diff --git a/ubi-utils/tests/mkvol_bad.c b/ubi-utils/tests/mkvol_bad.c index 58ac4e1..023b06b 100644 --- a/ubi-utils/tests/mkvol_bad.c +++ b/ubi-utils/tests/mkvol_bad.c @@ -148,7 +148,7 @@ static int test_mkvol(void) /* Bad vol_type */ req.alignment = 1; - req.bytes = dev_info.avail_bytes; + req.bytes = dev_info.eb_size; req.vol_type = UBI_DYNAMIC_VOLUME + UBI_STATIC_VOLUME; ret = ubi_mkvol(libubi, node, &req); if (check_failed(ret, EINVAL, "ubi_mkvol", "vol_type = %d", @@ -229,25 +229,18 @@ static int test_mkvol(void) req.name = &nm[0]; if (ubi_mkvol(libubi, node, &req)) { + /* + * Note, because of gluebi we may be unable to create + * dev_info.max_vol_count devices (MTD restrictions). + */ + if (errno == ENFILE) + break; failed("ubi_mkvol"); err_msg("vol_id %d", i); goto remove; } } - req.vol_id = UBI_VOL_NUM_AUTO; - req.name = TESTNAME ":impossible"; - ret = ubi_mkvol(libubi, node, &req); - if (check_failed(ret, ENOSPC, "ubi_mkvol", "volume %d created", - req.vol_id)) - goto remove; - - req.vol_id = dev_info.max_vol_count; - ret = ubi_mkvol(libubi, node, &req); - if (check_failed(ret, EINVAL, "ubi_mkvol", "volume %d created", - req.vol_id)) - goto remove; - for (i = 0; i < dev_info.max_vol_count + 1; i++) ubi_rmvol(libubi, node, i); diff --git a/ubi-utils/tests/mkvol_basic.c b/ubi-utils/tests/mkvol_basic.c index 2c6a512..e2120e9 100644 --- a/ubi-utils/tests/mkvol_basic.c +++ b/ubi-utils/tests/mkvol_basic.c @@ -197,11 +197,11 @@ remove: static int mkvol_multiple(void) { struct ubi_mkvol_request req; - int i, ret; + int i, ret, max = dev_info.max_vol_count; const char *name = TESTNAME ":mkvol_multiple()"; /* Create maximum number of volumes */ - for (i = 0; i < dev_info.max_vol_count; i++) { + for (i = 0; i < max; i++) { char nm[strlen(name) + 50]; req.vol_id = UBI_VOL_NUM_AUTO; @@ -213,6 +213,10 @@ static int mkvol_multiple(void) req.name = &nm[0]; if (ubi_mkvol(libubi, node, &req)) { + if (errno == ENFILE) { + max = i; + break; + } failed("ubi_mkvol"); err_msg("vol_id %d", i); goto remove; @@ -224,7 +228,7 @@ static int mkvol_multiple(void) } } - for (i = 0; i < dev_info.max_vol_count; i++) { + for (i = 0; i < max; i++) { struct ubi_vol_info vol_info; if (ubi_rmvol(libubi, node, i)) { diff --git a/ubi-utils/tests/rsvol.c b/ubi-utils/tests/rsvol.c index 51fa069..7a9e5ea 100644 --- a/ubi-utils/tests/rsvol.c +++ b/ubi-utils/tests/rsvol.c @@ -243,7 +243,7 @@ static int test_rsvol1(struct ubi_vol_info *vol_info) fd = open(vol_node, O_RDWR); if (fd == -1) { failed("open"); - err_msg("cannot open \"%s\"\n", node); + err_msg("cannot open \"%s\"\n", vol_node); return -1; } @@ -278,7 +278,7 @@ static int test_rsvol1(struct ubi_vol_info *vol_info) fd = open(vol_node, O_RDWR); if (fd == -1) { failed("open"); - err_msg("cannot open \"%s\"\n", node); + err_msg("cannot open \"%s\"\n", vol_node); return -1; } |