Files
papers/lux-distributed-systems-testing/lux-distributed-systems-testing.tex
zeekay dd93cb41f7 papers: cover-consistency + build pass on Lux Tier-2/3 catalogue
Sweep across the non-Tier-1 paper catalogue (Tier-1 owned by parallel
agent and excluded). All 113 processed papers already had luxcover
wired up; this commit fixes 14 build breakers and produces fresh
PDFs across the catalogue.

Fixes:
- lux-blockchain-scaling-laws: em-dash inside lstlisting -> --
- lux-corona-pq: stale \input pointing at 03-the-corona-scheme renamed
  to 03-the-corona-scheme (file already renamed on disk)
- lux-lattice-cryptography-primer: same Corona->Corona rename
- lux-formal-verification-lean4: Lean source uses unicode (×, ∀, ∃, ∈,
  ∧, ∨, ∩, ≠, ⟨, ⟩, ·, ¬) inside lstlistings. Added a literate map
  so listings render the math glyphs without UTF-8 fault.
- lux-id-did-specification: ✓/✗ in tabular replaced with \ding{51}
  / \ding{55} (pifont). Added pifont package.
- lux-ntt-simd-implementation: middle-dot in Go assembly listings;
  added literate {·}{\textperiodcentered}.
- lux-ntt-transform: μ, ×, –, — in regular text (no T1 fontenc).
  Replaced with $\mu$/$\times$/--/--- via unicode->latex sweep.
- lux-perpetuals-derivatives, lux-quantum-consensus,
  lux-quasar-consensus, lux-tee-computing-mesh: same unicode->latex
  sweep across body text. Also fixed broken math segment
  `$L_{avg} = 10$\times$$` -> `$L_{avg} = 10\times$`.
- lux-zchain: emoji glyphs in roadmap table replaced with
  parenthetical text.
- lux-triple-proof-consensus: dropped duplicate \usepackage{geometry}
  that clashed with luxcover (geometry option clash).
- pq: defined missing \Rq macro.

PDFs rebuilt for the full Tier-2/3 set.

Excluded (Tier-1, parallel agent): lp-073-pulsar, lp-stricte2epq,
dag-evm-formal, lp-010-quasar-stm-{3,4}, lp-020-quasar-consensus,
lux-institutional-custody, lux-nist-mptc-submission, pqsafe-il5,
pq-rns, plus shared/ and lps/.
2026-05-13 01:27:59 -07:00

86 lines
2.8 KiB
TeX

\documentclass[11pt,a4paper]{article}
\usepackage{../shared/luxcover}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage{amsmath,amssymb,amsfonts,amsthm}
\usepackage{graphicx}
\usepackage{hyperref}
\usepackage{booktabs}
\usepackage{listings}
\input{../shared/lstlang}
\usepackage{xcolor}
\usepackage{enumitem}
\usepackage{float}
\usepackage{tikz}
\usetikzlibrary{arrows.meta,positioning}
\newtheorem{theorem}{Theorem}
\newtheorem{definition}{Definition}
\newtheorem{remark}{Remark}
\lstset{
basicstyle=\small\ttfamily,
keywordstyle=\color{blue}\bfseries,
commentstyle=\color{gray},
stringstyle=\color{red},
breaklines=true,
frame=single,
numbers=left,
numberstyle=\tiny\color{gray}
}
\hypersetup{
colorlinks=true,
linkcolor=blue,
citecolor=blue,
urlcolor=blue
}
\title{Testing Distributed Systems:\\From Unit Tests to Jepsen}
\author{
Zach Kelling \\
Lux Industries, Inc.\thanks{Corresponding author: [email protected]}\\
\texttt{[email protected]}
}
\date{2025}
\begin{document}
\luxcoverpage
\begin{abstract}
Distributed systems bugs are the hardest bugs: they only manifest under specific timing,
network conditions, and failure combinations that cannot be reproduced by running the
system once. This paper presents the full testing pyramid for distributed blockchain
systems: unit tests for individual components, integration tests for subsystem
interactions, property-based tests for algorithmic correctness, model checking for
protocol design, and formal proofs for mathematical certainty. We then cover fault
injection (Jepsen-style testing): how to inject network partitions, clock skew, process
crashes, and disk corruption, and how to verify linearizability and consistency under
these faults. We present Lux Network's testing stack: Go unit tests (12,847 tests),
Playwright E2E (342 tests), Foundry smart contract tests (832 tests), Halmos symbolic
tests (9 proofs), TLA+ model checking (2 protocols), and Lean~4 formal proofs (384
theorems). Each layer catches different bugs. Skipping any layer leaves a blind spot
where production failures hide.
\end{abstract}
\tableofcontents
\newpage
%% ============================================================
\input{sections/01-the-testing-pyramid-for-distributed-syst}
\input{sections/02-layer-1-unit-tests}
\input{sections/03-layer-2-integration-tests}
\input{sections/04-layer-3-property-based-and-fuzz-tests}
\input{sections/05-layer-4-end-to-end-tests}
\input{sections/06-layer-5-fault-injection-jepsen-style-tes}
\input{sections/07-layer-6-model-checking-tla}
\input{sections/08-layer-7-formal-proofs-lean-4}
\input{sections/09-our-testing-stack-by-the-numbers}
\input{sections/10-how-to-find-bugs-that-only-appear-under-}
\input{sections/11-practical-advice}
\input{sections/99-conclusion}
\end{document}