From e66da190badd2a8617ae9f0bb3ba1a52ad88975e Mon Sep 17 00:00:00 2001 From: Dominik Suliga Date: Sun, 11 Oct 2026 11:52:33 +0200 Subject: [PATCH] fix(config): stop overwriting config and lang files on shutdown --- .../github/imdmk/automessage/AutoMessage.java | 1 - .../automessage/AutoMessageEndToEndTest.java | 36 +++++++++++-------- 2 files changed, 21 insertions(+), 16 deletions(-) diff --git a/automessage-core/src/main/java/com/github/imdmk/automessage/AutoMessage.java b/automessage-core/src/main/java/com/github/imdmk/automessage/AutoMessage.java index 3cc853e..6623cad 100644 --- a/automessage-core/src/main/java/com/github/imdmk/automessage/AutoMessage.java +++ b/automessage-core/src/main/java/com/github/imdmk/automessage/AutoMessage.java @@ -150,7 +150,6 @@ public AutoMessage( public void shutdown() { close("stop the dispatcher", dispatcherService::stop); close("save who turned announcements off", optOut::save); - close("save the configuration", configManager::saveAll); close("release the configuration", configManager::clearAll); close("stop the scheduler", platform.scheduler()::shutdown); close("close the Discord webhook", dispatchObserver::shutdown); diff --git a/automessage-core/src/test/java/com/github/imdmk/automessage/AutoMessageEndToEndTest.java b/automessage-core/src/test/java/com/github/imdmk/automessage/AutoMessageEndToEndTest.java index 961732e..b7ef89a 100644 --- a/automessage-core/src/test/java/com/github/imdmk/automessage/AutoMessageEndToEndTest.java +++ b/automessage-core/src/test/java/com/github/imdmk/automessage/AutoMessageEndToEndTest.java @@ -257,25 +257,31 @@ void shouldStopEverythingOnShutdown() { } @Test - @DisplayName("should shut down cleanly even when the configuration cannot be written") - void shouldShutDownWithAnUnwritableConfiguration() { + @DisplayName("should leave files edited while running as they are when the server shuts down") + void shouldNotOverwriteEditedFilesOnShutdown() throws IOException { start(TestPlatform.fullServer()); - // A read-only file, not a read-only folder: the folder permission does not stop a write - // to a file that already exists, so a test built on it passes without ever failing. - final File config = new File(dataFolder.toFile(), "config.yml"); - assertThat(config.setReadOnly()).isTrue(); + // What a deploy or a git pull does to a running server: new files, and no reload. + final String editedLanguage = """ + announcements: + only-one: + - "/warps" + """; + final String editedMessages = """ + messages: + - name: only-one + """; - try { - assertThatCode(() -> automessage.shutdown()).doesNotThrowAnyException(); + final Path language = dataFolder.resolve("lang/en.yml"); + final Path messages = dataFolder.resolve("scheduledMessages.yml"); + Files.writeString(language, editedLanguage); + Files.writeString(messages, editedMessages); - // The point of the fix: the steps after the failing save still ran, so nothing is - // left holding threads under a class loader nobody can collect. - assertThat(platform.scheduler().isShutdown()).isTrue(); - } finally { - assertThat(config.setWritable(true)).isTrue(); - this.automessage = null; - } + automessage.shutdown(); + this.automessage = null; + + assertThat(language).hasContent(editedLanguage); + assertThat(messages).hasContent(editedMessages); } @Test