forked from Mirrors/opensbi
		
	lib: tests: Add test for spinlocks
Implement the test which covers some of the functions from the `riscv_locks.h` file. This test consists of 3 test cases: 1) For lock/unlock functions 2) Unsuccessful trylock (the lock was previously taken) 3) Successful trylock (the lock is free and can be taken) Signed-off-by: Ivan Orlov <ivan.orlov0322@gmail.com> Reviewed-by: Anup Patel <anup@brainfault.org>
This commit is contained in:
		@@ -9,3 +9,6 @@ libsbi-objs-$(CONFIG_SBIUNIT) += tests/sbi_console_test.o
 | 
			
		||||
 | 
			
		||||
carray-sbi_unit_tests-$(CONFIG_SBIUNIT) += atomic_test_suite
 | 
			
		||||
libsbi-objs-$(CONFIG_SBIUNIT) += tests/riscv_atomic_test.o
 | 
			
		||||
 | 
			
		||||
carray-sbi_unit_tests-$(CONFIG_SBIUNIT) += locks_test_suite
 | 
			
		||||
libsbi-objs-$(CONFIG_SBIUNIT) += tests/riscv_locks_test.o
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										41
									
								
								lib/sbi/tests/riscv_locks_test.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										41
									
								
								lib/sbi/tests/riscv_locks_test.c
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,41 @@
 | 
			
		||||
#include <sbi/sbi_unit_test.h>
 | 
			
		||||
#include <sbi/riscv_locks.h>
 | 
			
		||||
 | 
			
		||||
static spinlock_t test_lock = SPIN_LOCK_INITIALIZER;
 | 
			
		||||
 | 
			
		||||
static void spin_lock_test(struct sbiunit_test_case *test)
 | 
			
		||||
{
 | 
			
		||||
	/* We don't want to accidentally get locked */
 | 
			
		||||
	SBIUNIT_ASSERT(test, !spin_lock_check(&test_lock));
 | 
			
		||||
 | 
			
		||||
	spin_lock(&test_lock);
 | 
			
		||||
	SBIUNIT_EXPECT(test, spin_lock_check(&test_lock));
 | 
			
		||||
	spin_unlock(&test_lock);
 | 
			
		||||
 | 
			
		||||
	SBIUNIT_ASSERT(test, !spin_lock_check(&test_lock));
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static void spin_trylock_fail(struct sbiunit_test_case *test)
 | 
			
		||||
{
 | 
			
		||||
	/* We don't want to accidentally get locked */
 | 
			
		||||
	SBIUNIT_ASSERT(test, !spin_lock_check(&test_lock));
 | 
			
		||||
 | 
			
		||||
	spin_lock(&test_lock);
 | 
			
		||||
	SBIUNIT_EXPECT(test, !spin_trylock(&test_lock));
 | 
			
		||||
	spin_unlock(&test_lock);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static void spin_trylock_success(struct sbiunit_test_case *test)
 | 
			
		||||
{
 | 
			
		||||
	SBIUNIT_EXPECT(test, spin_trylock(&test_lock));
 | 
			
		||||
	spin_unlock(&test_lock);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static struct sbiunit_test_case locks_test_cases[] = {
 | 
			
		||||
	SBIUNIT_TEST_CASE(spin_lock_test),
 | 
			
		||||
	SBIUNIT_TEST_CASE(spin_trylock_fail),
 | 
			
		||||
	SBIUNIT_TEST_CASE(spin_trylock_success),
 | 
			
		||||
	SBIUNIT_END_CASE,
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
SBIUNIT_TEST_SUITE(locks_test_suite, locks_test_cases);
 | 
			
		||||
		Reference in New Issue
	
	Block a user