diff --git a/build.gradle b/build.gradle index da87556..8c3dd98 100644 --- a/build.gradle +++ b/build.gradle @@ -100,3 +100,22 @@ shadowJar { ) } } + + +tasks.named('test') { + enabled = false +} + +tasks.register('itCleanRun', JavaExec) { + group = "build" + description = "Clean data → kill 7070 → start WS → run all IT tests" + + classpath = sourceSets.test.runtimeClasspath + mainClass = "test.it.IT_RunAllCleanStartWsMain" + + // пробрасываем системные флаги (по желанию) + systemProperty "it.debug", System.getProperty("it.debug", "true") + systemProperty "it.login", System.getProperty("it.login", "anya24") + + dependsOn testClasses +} diff --git a/src/main/java/server/ws/Что недоделано. И потом надо доделать b/src/main/java/server/ws/Что недоделано. И потом надо доделать index a291c44..473a0f4 100644 --- a/src/main/java/server/ws/Что недоделано. И потом надо доделать +++ b/src/main/java/server/ws/Что недоделано. И потом надо доделать @@ -1 +0,0 @@ -Работу с линиями diff --git a/src/test/java/test/it/IT_00_Suite.java b/src/test/java/test/it/IT_00_Suite.java index 4c3f3f3..5931b76 100644 --- a/src/test/java/test/it/IT_00_Suite.java +++ b/src/test/java/test/it/IT_00_Suite.java @@ -2,7 +2,6 @@ package test.it; import org.junit.platform.suite.api.SelectClasses; import org.junit.platform.suite.api.Suite; -import test.it.ws.*; /** * Сьют, который запускает IT тесты строго в заданном порядке. diff --git a/src/test/java/test/it/ws/IT_03_AddBlock_NoAuth.java b/src/test/java/test/it/IT_03_AddBlock_NoAuth.java similarity index 99% rename from src/test/java/test/it/ws/IT_03_AddBlock_NoAuth.java rename to src/test/java/test/it/IT_03_AddBlock_NoAuth.java index a6d351d..90b4de0 100644 --- a/src/test/java/test/it/ws/IT_03_AddBlock_NoAuth.java +++ b/src/test/java/test/it/IT_03_AddBlock_NoAuth.java @@ -1,11 +1,11 @@ -package test.it.ws; +package test.it; import org.junit.jupiter.api.BeforeAll; import org.junit.jupiter.api.Test; import test.it.utils.ItRunContext; -import test.it.utils.JsonBuilders; import test.it.utils.TestConfig; import test.it.utils.TestLog; +import test.it.addBlockUtils.AddBlockFlow; import java.time.Duration; diff --git a/src/test/java/test/it/IT_RunAllCleanStartWsMain.java b/src/test/java/test/it/IT_RunAllCleanStartWsMain.java new file mode 100644 index 0000000..bd9fc46 --- /dev/null +++ b/src/test/java/test/it/IT_RunAllCleanStartWsMain.java @@ -0,0 +1,55 @@ +package test.it; + +import server.ws.WsServer; + +public class IT_RunAllCleanStartWsMain { + + public static void main(String[] args) { + // 1) Гасим всё на 7070 (если ничего нет — не падаем) + runBash("kill -9 $(lsof -t -i:7070) 2>/dev/null || true"); + + // 2) Чистим data/ + IT_CleanAllDate.main(new String[0]); + + // 3) Стартуем WS сервер в отдельном потоке (daemon, чтобы JVM могла завершиться) + Thread wsThread = new Thread(() -> { + try { + WsServer.main(new String[0]); // внутри join() -> поток будет висеть + } catch (Throwable t) { + t.printStackTrace(System.out); + } + }, "wsServer-thread"); + wsThread.setDaemon(true); + wsThread.start(); + + // 4) Ждём, чтобы успел стартануть + sleepMs(1000); + + // 5) Запускаем все IT тесты (без System.exit внутри) + int failed = IT_RunAllMain.runAll(); + + // 6) Завершаем процесс с кодом ошибок + System.exit(failed); + } + + private static void runBash(String cmd) { + try { + Process p = new ProcessBuilder("bash", "-lc", cmd) + .inheritIO() + .start(); + int code = p.waitFor(); + // тут не ругаемся: команда может быть "пустой" (ничего не слушает порт) + // а мы уже добавили "|| true" + } catch (Exception e) { + System.out.println("WARN: bash command failed: " + e); + } + } + + private static void sleepMs(long ms) { + try { + Thread.sleep(ms); + } catch (InterruptedException ignored) { + Thread.currentThread().interrupt(); + } + } +} \ No newline at end of file diff --git a/src/test/java/test/it/IT_RunAllMain.java b/src/test/java/test/it/IT_RunAllMain.java index a0e8791..d746508 100644 --- a/src/test/java/test/it/IT_RunAllMain.java +++ b/src/test/java/test/it/IT_RunAllMain.java @@ -2,7 +2,6 @@ package test.it; import test.it.utils.ItRunContext; import test.it.utils.TestLog; -import test.it.ws.IT_03_AddBlock_NoAuth; /** * Ручной запуск всех IT тестов БЕЗ JUnit / Suite. diff --git a/src/test/java/test/it/ws/AddBlockFlow.java b/src/test/java/test/it/addBlockUtils/AddBlockFlow.java similarity index 99% rename from src/test/java/test/it/ws/AddBlockFlow.java rename to src/test/java/test/it/addBlockUtils/AddBlockFlow.java index a15f9fd..b4bc3d6 100644 --- a/src/test/java/test/it/ws/AddBlockFlow.java +++ b/src/test/java/test/it/addBlockUtils/AddBlockFlow.java @@ -1,4 +1,4 @@ -package test.it.ws; +package test.it.addBlockUtils; import blockchain.BchBlockEntry; import blockchain.BchCryptoVerifier; diff --git a/src/test/java/test/it/ws/WsJsonOneShot.java b/src/test/java/test/it/addBlockUtils/WsJsonOneShot.java similarity index 99% rename from src/test/java/test/it/ws/WsJsonOneShot.java rename to src/test/java/test/it/addBlockUtils/WsJsonOneShot.java index 5dda5fc..dc6e077 100644 --- a/src/test/java/test/it/ws/WsJsonOneShot.java +++ b/src/test/java/test/it/addBlockUtils/WsJsonOneShot.java @@ -1,4 +1,4 @@ -package test.it.ws; +package test.it.addBlockUtils; import com.fasterxml.jackson.databind.JsonNode; import com.fasterxml.jackson.databind.ObjectMapper; diff --git a/src/test/java/test/it/ws/WsJsonRoundtripClient.java b/src/test/java/test/it/addBlockUtils/WsJsonRoundtripClient.java similarity index 99% rename from src/test/java/test/it/ws/WsJsonRoundtripClient.java rename to src/test/java/test/it/addBlockUtils/WsJsonRoundtripClient.java index bac7569..2c8fe37 100644 --- a/src/test/java/test/it/ws/WsJsonRoundtripClient.java +++ b/src/test/java/test/it/addBlockUtils/WsJsonRoundtripClient.java @@ -1,4 +1,4 @@ -package test.it.ws; +package test.it.addBlockUtils; import com.fasterxml.jackson.databind.JsonNode; import com.fasterxml.jackson.databind.ObjectMapper;