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);
}
}