/
Artem276
/
arch
Обзор
Документация
Войти
/
Artem276
/
arch
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
master
src/test/java/org/example/ExchangePersistenceTest.java
67 строк
2 KB
Nazarova Ekaterina
1 commit
29 дек 2025, 11:43
29 дек 2025, 11:43
14775dd
Код
Авторство
О чём код?
package org.example; import org.example.domain.Exchange; import org.example.domain.Order; import org.example.domain.OrderSide; import org.example.domain.User; import org.junit.jupiter.api.Test; import java.io.File; import static org.junit.jupiter.api.Assertions.*; public class ExchangePersistenceTest { private static final String DATA_DIR = System.getProperty("os.name").toLowerCase().contains("win") ? "data" : "/data"; private static final String SAVE_FILE = DATA_DIR + "/exchange_state.json"; private static final String TEMP_FILE = DATA_DIR + "/exchange_state.json.tmp"; @Test public void testSafePersistence() { Exchange ex1 = new Exchange(new org.example.storage.FileStateRepository(SAVE_FILE, TEMP_FILE)); long aliceUsd = 1000, aliceEur = 500; long bobUsd = 1200, bobEur = 300; ex1.login("alice", aliceUsd, aliceEur); ex1.login("bob", bobUsd, bobEur); ex1.saveStateSafe(); Exchange ex2 = new Exchange(new org.example.storage.FileStateRepository(SAVE_FILE, TEMP_FILE)); ex2.loadState(); assertEquals(aliceUsd, ex2.getUserBalance("alice", "USD")); assertEquals(bobEur, ex2.getUserBalance("bob", "EUR")); } @Test public void testCrashDuringTradeDoesNotCorruptBalances() { Exchange ex1 = new Exchange(new org.example.storage.FileStateRepository(SAVE_FILE, TEMP_FILE)); long aliceUsd = 1000, aliceEur = 500; long bobUsd = 1500, bobEur = 300; ex1.login("alice", aliceUsd, aliceEur); ex1.login("bob", bobUsd, bobEur); Order buy = new Order("alice", "EUR/USD", OrderSide.BUY, 100, 1); Order sell = new Order("bob", "EUR/USD", OrderSide.SELL, 100, 1); ex1.placeOrder(buy); ex1.saveStateSafe(); new File(TEMP_FILE).delete(); // симуляция "краша" Exchange ex2 = new Exchange(new org.example.storage.FileStateRepository(SAVE_FILE, TEMP_FILE)); ex2.loadState(); assertEquals(aliceUsd, ex2.getUserBalance("alice", "USD")); assertEquals(aliceEur, ex2.getUserBalance("alice", "EUR")); assertEquals(bobUsd, ex2.getUserBalance("bob", "USD")); assertEquals(bobEur, ex2.getUserBalance("bob", "EUR")); } }