Parallel Tests
Explore how to write and run parallel property-based tests with PropEr in Erlang. This lesson demonstrates adapting stateful properties for concurrent scenarios to uncover potential issues. You will understand the limitations and considerations of parallel testing, including transaction behaviors and concurrency safety in database interactions.
We'll cover the following...
As with the last chapter, the parallel version of our system can be adapted by just declaring a new property and reusing the same model, to see if any glaring concurrency issues can be found.
Let’s take a look at the property and then see it in action in the code widgets below.
Code
The prop_parallel property in the following code has been highlighted for us.
-module(book_shim).
-compile(export_all).
add_book_existing(ISBN, Title, Author, Owned, Avail) ->
bookstore_db:add_book(ISBN, Title, Author, Owned, Avail).
add_book_new(ISBN, Title, Author, Owned, Avail) ->
bookstore_db:add_book(ISBN, Title, Author, Owned, Avail).
add_copy_existing(ISBN) -> bookstore_db:add_copy(ISBN).
add_copy_new(ISBN) -> bookstore_db:add_copy(ISBN).
borrow_copy_avail(ISBN) -> bookstore_db:borrow_copy(ISBN).
borrow_copy_unavail(ISBN) -> bookstore_db:borrow_copy(ISBN). borrow_copy_unknown(ISBN) -> bookstore_db:borrow_copy(ISBN).
return_copy_full(ISBN) -> bookstore_db:return_copy(ISBN).
return_copy_existing(ISBN) -> bookstore_db:return_copy(ISBN).
return_copy_unknown(ISBN) -> bookstore_db:return_copy(ISBN).
find_book_by_isbn_exists(ISBN) -> bookstore_db:find_book_by_isbn(ISBN).
find_book_by_isbn_unknown(ISBN) -> bookstore_db:find_book_by_isbn(ISBN).
find_book_by_author_matching(Author) ->
bookstore_db:find_book_by_author(Author).
find_book_by_author_unknown(Author) ->
bookstore_db:find_book_by_author(Author).
find_book_by_title_matching(Title) ->
bookstore_db:find_book_by_title(Title).
find_book_by_title_unknown(Title) ->
bookstore_db:find_book_by_title(Title).Once again, few changes are required aside from the ...