This is an automated email from the ASF dual-hosted git repository.

apkhmv pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/ignite-3.git


The following commit(s) were added to refs/heads/main by this push:
     new abe1b82390 IGNITE-18833 Fix node configuration file render method and 
write tests (#1723)
abe1b82390 is described below

commit abe1b82390616a810d61ee37161b890d0ce96ab8
Author: Vadim Pakhnushev <[email protected]>
AuthorDate: Tue Feb 28 22:13:57 2023 +0300

    IGNITE-18833 Fix node configuration file render method and write tests 
(#1723)
---
 .../storage/LocalFileConfigurationStorage.java     |  9 ++--
 .../storage/ConfigurationStorageTest.java          |  2 +-
 .../storage/LocalFileConfigurationStorageTest.java | 53 +++++++++++++++++++++-
 3 files changed, 55 insertions(+), 9 deletions(-)

diff --git 
a/modules/runner/src/main/java/org/apache/ignite/internal/configuration/storage/LocalFileConfigurationStorage.java
 
b/modules/runner/src/main/java/org/apache/ignite/internal/configuration/storage/LocalFileConfigurationStorage.java
index f7ad99d742..6d48a8314e 100644
--- 
a/modules/runner/src/main/java/org/apache/ignite/internal/configuration/storage/LocalFileConfigurationStorage.java
+++ 
b/modules/runner/src/main/java/org/apache/ignite/internal/configuration/storage/LocalFileConfigurationStorage.java
@@ -206,10 +206,10 @@ public class LocalFileConfigurationStorage implements 
ConfigurationStorage {
             return value;
         }));
         Config other = ConfigFactory.parseMap(map);
-        Config newConfig = parseConfigOptions().withFallback(other).resolve();
+        Config newConfig = other.withFallback(parseConfigOptions()).resolve();
         return newConfig.isEmpty()
                 ? ""
-                : 
newConfig.root().render(ConfigRenderOptions.concise().setFormatted(true));
+                : 
newConfig.root().render(ConfigRenderOptions.concise().setFormatted(true).setJson(false));
     }
 
     private Config parseConfigOptions() {
@@ -218,10 +218,7 @@ public class LocalFileConfigurationStorage implements 
ConfigurationStorage {
                 ConfigParseOptions.defaults().setAllowMissing(false));
     }
 
-    /**
-     * Checking that configuration file is still existed and restore
-     * it in case when it deleted with latest applied state.
-     */
+    /** Check that configuration file still exists and restore it with latest 
applied state in case it was deleted. */
     private void checkAndRestoreConfigFile() {
         if (!configPath.toFile().exists()) {
             try {
diff --git 
a/modules/runner/src/test/java/org/apache/ignite/internal/configuration/storage/ConfigurationStorageTest.java
 
b/modules/runner/src/test/java/org/apache/ignite/internal/configuration/storage/ConfigurationStorageTest.java
index fa2c67cab0..84d66d3bd3 100644
--- 
a/modules/runner/src/test/java/org/apache/ignite/internal/configuration/storage/ConfigurationStorageTest.java
+++ 
b/modules/runner/src/test/java/org/apache/ignite/internal/configuration/storage/ConfigurationStorageTest.java
@@ -32,7 +32,7 @@ import org.junit.jupiter.api.Test;
  * Base class for testing {@link ConfigurationStorage} implementations.
  */
 public abstract class ConfigurationStorageTest {
-    private ConfigurationStorage storage;
+    protected ConfigurationStorage storage;
 
     /**
      * Returns the storage being tested.
diff --git 
a/modules/runner/src/test/java/org/apache/ignite/internal/configuration/storage/LocalFileConfigurationStorageTest.java
 
b/modules/runner/src/test/java/org/apache/ignite/internal/configuration/storage/LocalFileConfigurationStorageTest.java
index a799586ec2..e2ca7d1b19 100644
--- 
a/modules/runner/src/test/java/org/apache/ignite/internal/configuration/storage/LocalFileConfigurationStorageTest.java
+++ 
b/modules/runner/src/test/java/org/apache/ignite/internal/configuration/storage/LocalFileConfigurationStorageTest.java
@@ -17,10 +17,21 @@
 
 package org.apache.ignite.internal.configuration.storage;
 
+import static 
org.apache.ignite.internal.testframework.matchers.CompletableFutureMatcher.willBe;
+import static org.hamcrest.MatcherAssert.assertThat;
+import static org.hamcrest.Matchers.is;
+
+import java.io.IOException;
+import java.nio.file.Files;
 import java.nio.file.Path;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
 import org.apache.ignite.internal.configuration.NodeBootstrapConfiguration;
 import org.apache.ignite.internal.testframework.WorkDirectory;
 import org.apache.ignite.internal.testframework.WorkDirectoryExtension;
+import org.junit.jupiter.api.Test;
 import org.junit.jupiter.api.extension.ExtendWith;
 
 /**
@@ -34,7 +45,45 @@ public class LocalFileConfigurationStorageTest extends 
ConfigurationStorageTest
 
     @Override
     public ConfigurationStorage getStorage() {
-        Path resolve = 
tmpDir.resolve(NodeBootstrapConfiguration.DEFAULT_CONFIG_NAME);
-        return new 
LocalFileConfigurationStorage(NodeBootstrapConfiguration.directFile(resolve));
+        Path configFile = getConfigFile();
+        return new 
LocalFileConfigurationStorage(NodeBootstrapConfiguration.directFile(configFile));
+    }
+
+    @Test
+    void testHocon() throws IOException {
+        // All of this is needed because write expects serializable values and 
only concrete classes are serializable
+        HashMap<String, ArrayList<String>> map = new HashMap<>(Map.of("list", 
new ArrayList<>(List.of("val1", "val2"))));
+        var data = Map.of("foo1", "bar1", "foo2", "bar2", "map", map);
+
+        assertThat(storage.write(data, 0), willBe(true));
+
+        String contents = Files.readString(getConfigFile());
+
+        // \n instead of System.lineSeparator because Config library writes \n 
only
+        assertThat(contents, is("foo1=bar1\n"
+                + "foo2=bar2\n"
+                + "map {\n"
+                + "    list=[\n"
+                + "        val1,\n"
+                + "        val2\n"
+                + "    ]\n"
+                + "}\n"));
+    }
+
+    @Test
+    void testMergeHocon() throws IOException {
+        var data = Map.of("foo1", "bar");
+        assertThat(storage.write(data, 0), willBe(true));
+
+        var append = Map.of("foo1", "baz", "foo2", "bar");
+        assertThat(storage.write(append, 1), willBe(true));
+
+        String contents = Files.readString(getConfigFile());
+        assertThat(contents, is("foo1=baz\n"
+                + "foo2=bar\n"));
+    }
+
+    private Path getConfigFile() {
+        return tmpDir.resolve(NodeBootstrapConfiguration.DEFAULT_CONFIG_NAME);
     }
 }

Reply via email to