  Relational database applications are notoriously difficult to test and debug.
Concurrent execution of database transactions may violate complex structural
invariants that constraint how changes to the contents of one (shared) table
affect the contents of another. Simplifying the underlying concurrency model is
one way to ameliorate the difficulty of understanding how concurrent accesses
and updates can affect database state with respect to these sophisticated
properties. Enforcing serializable execution of all transactions achieves this
simplification, but it comes at a significant price in performance, especially
at scale, where database state is often replicated to improve latency and
availability. To address these challenges, this paper presents a novel testing
framework for detecting serializability violations in (SQL) database-backed
Java applications executing on weakly-consistent storage systems. We manifest
our approach in a tool named CLOTHO, that combines a static analyzer and a
model checker to generate abstract executions, discover serializability
violations in these executions, and translate them back into concrete test
inputs suitable for deployment in a test environment. To the best of our
knowledge, CLOTHO is the first automated test generation facility for
identifying serializability anomalies of Java applications intended to operate
in geo-replicated distributed environments. An experimental evaluation on a set
of industry-standard benchmarks demonstrates the utility of our approach.
