#
|
# SPDX-License-Identifier: MIT
|
#
|
|
import re
|
import time
|
|
from oeqa.runtime.case import OERuntimeTestCase
|
from oeqa.core.decorator.depends import OETestDepends
|
from oeqa.core.decorator.data import skipIfQemu
|
|
class StorageBase(OERuntimeTestCase):
|
def storage_mount(cls, tmo=1):
|
|
(status, output) = cls.target.run('mkdir -p %s' % cls.mount_point)
|
(status, output) = cls.target.run('mount %s %s' % (cls.device, cls.mount_point))
|
msg = ('Mount failed: %s.' % status)
|
cls.assertFalse(output, msg = msg)
|
time.sleep(tmo)
|
(status, output) = cls.target.run('cat /proc/mounts')
|
match = re.search('%s' % cls.device, output)
|
if match:
|
msg = ('Device %s not mounted.' % cls.device)
|
cls.assertTrue(match, msg = msg)
|
|
(status, output) = cls.target.run('mkdir -p %s' % cls.test_dir)
|
|
(status, output) = cls.target.run('rm -f %s/*' % cls.test_dir)
|
msg = ('Failed to cleanup files @ %s/*' % cls.test_dir)
|
cls.assertFalse(output, msg = msg)
|
|
|
def storage_basic(cls):
|
# create file on device
|
(status, output) = cls.target.run('touch %s/%s' % (cls.test_dir, cls.test_file))
|
msg = ('File %s not created on %s' % (cls.test_file, cls.device))
|
cls.assertFalse(status, msg = msg)
|
# move file
|
(status, output) = cls.target.run('mv %s/%s %s/%s1' %
|
(cls.test_dir, cls.test_file, cls.test_dir, cls.test_file))
|
msg = ('File %s not moved to %s' % (cls.test_file, cls.device))
|
cls.assertFalse(status, msg = msg)
|
# remove file
|
(status, output) = cls.target.run('rm %s/%s1' % (cls.test_dir, cls.test_file))
|
msg = ('File %s not removed on %s' % (cls.test_file, cls.device))
|
cls.assertFalse(status, msg = msg)
|
|
def storage_read(cls):
|
# check if message is in file
|
(status, output) = cls.target.run('cat %s/%s' %
|
(cls.test_dir, cls.test_file))
|
|
match = re.search('%s' % cls.test_msg, output)
|
msg = ('Test message %s not in file %s.' % (cls.test_msg, cls.test_file))
|
cls.assertEqual(status, 0, msg = msg)
|
|
def storage_write(cls):
|
# create test message in file on device
|
(status, output) = cls.target.run('echo "%s" > %s/%s' %
|
(cls.test_msg, cls.test_dir, cls.test_file))
|
msg = ('File %s not create test message on %s' % (cls.test_file, cls.device))
|
cls.assertEqual(status, 0, msg = msg)
|
|
def storage_umount(cls, tmo=1):
|
time.sleep(tmo)
|
(status, output) = cls.target.run('umount %s' % cls.mount_point)
|
|
if status == 32:
|
# already unmounted, should it fail?
|
return
|
else:
|
msg = ('Device not unmount %s' % cls.mount_point)
|
cls.assertEqual(status, 0, msg = msg)
|
|
(status, output) = cls.target.run('cat /proc/mounts')
|
match = re.search('%s' % cls.device, output)
|
if match:
|
msg = ('Device %s still mounted.' % cls.device)
|
cls.assertTrue(match, msg = msg)
|
|
|
class UsbTest(StorageBase):
|
'''
|
This is to mimic the usb test previously done in manual bsp-hw.json
|
'''
|
@classmethod
|
def setUpClass(self):
|
self.test_msg = "Hello World - USB"
|
self.mount_point = "/media/usb"
|
self.device = "/dev/sda1"
|
self.test_file = "usb.tst"
|
self.test_dir = os.path.join(self.mount_point, "oeqa")
|
|
@skipIfQemu('qemuall', 'Test only runs on real hardware')
|
@OETestDepends(['ssh.SSHTest.test_ssh'])
|
def test_usb_mount(self):
|
self.storage_umount(2)
|
self.storage_mount(5)
|
|
@skipIfQemu('qemuall', 'Test only runs on real hardware')
|
@OETestDepends(['storage.UsbTest.test_usb_mount'])
|
def test_usb_basic_operations(self):
|
self.storage_basic()
|
|
@skipIfQemu('qemuall', 'Test only runs on real hardware')
|
@OETestDepends(['storage.UsbTest.test_usb_basic_operations'])
|
def test_usb_basic_rw(self):
|
self.storage_write()
|
self.storage_read()
|
|
@skipIfQemu('qemuall', 'Test only runs on real hardware')
|
@OETestDepends(['storage.UsbTest.test_usb_mount'])
|
def test_usb_umount(self):
|
self.storage_umount(2)
|
|
|
class MMCTest(StorageBase):
|
'''
|
This is to mimic the usb test previously done in manual bsp-hw.json
|
'''
|
@classmethod
|
def setUpClass(self):
|
self.test_msg = "Hello World - MMC"
|
self.mount_point = "/media/mmc"
|
self.device = "/dev/mmcblk1p1"
|
self.test_file = "mmc.tst"
|
self.test_dir = os.path.join(self.mount_point, "oeqa")
|
|
@skipIfQemu('qemuall', 'Test only runs on real hardware')
|
@OETestDepends(['ssh.SSHTest.test_ssh'])
|
def test_mmc_mount(self):
|
self.storage_umount(2)
|
self.storage_mount()
|
|
@skipIfQemu('qemuall', 'Test only runs on real hardware')
|
@OETestDepends(['storage.MMCTest.test_mmc_mount'])
|
def test_mmc_basic_operations(self):
|
self.storage_basic()
|
|
@skipIfQemu('qemuall', 'Test only runs on real hardware')
|
@OETestDepends(['storage.MMCTest.test_mmc_basic_operations'])
|
def test_mmc_basic_rw(self):
|
self.storage_write()
|
self.storage_read()
|
|
@skipIfQemu('qemuall', 'Test only runs on real hardware')
|
@OETestDepends(['storage.MMCTest.test_mmc_mount'])
|
def test_mmc_umount(self):
|
self.storage_umount(2)
|