Skip to content

Commit

Permalink
ISPN-14247 Drop snakeyaml dependency from everywhere
Browse files Browse the repository at this point in the history
  • Loading branch information
tristantarrant authored and pruivo committed Oct 21, 2022
1 parent 0a2bad0 commit 4cf310c
Show file tree
Hide file tree
Showing 9 changed files with 98 additions and 30 deletions.
5 changes: 0 additions & 5 deletions cli/pom.xml
Expand Up @@ -48,11 +48,6 @@
<artifactId>infinispan-core</artifactId>
<optional>true</optional> <!-- Configuration converter -->
</dependency>
<dependency>
<groupId>org.yaml</groupId>
<artifactId>snakeyaml</artifactId>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-api</artifactId>
Expand Down
15 changes: 10 additions & 5 deletions cli/src/main/java/org/infinispan/cli/commands/kubernetes/Kube.java
@@ -1,19 +1,24 @@
package org.infinispan.cli.commands.kubernetes;

import java.io.StringReader;
import java.util.Base64;
import java.util.Collections;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
import java.util.Optional;
import java.util.Properties;

import org.aesh.command.Command;
import org.aesh.command.CommandResult;
import org.aesh.command.GroupCommandDefinition;
import org.aesh.command.invocation.CommandInvocation;
import org.infinispan.cli.commands.Version;
import org.infinispan.cli.logging.Messages;
import org.yaml.snakeyaml.Yaml;
import org.infinispan.commons.configuration.io.NamingStrategy;
import org.infinispan.commons.configuration.io.PropertyReplacer;
import org.infinispan.commons.configuration.io.URLConfigurationResourceResolver;
import org.infinispan.commons.configuration.io.yaml.YamlConfigurationReader;

import io.fabric8.kubernetes.api.model.GenericKubernetesResource;
import io.fabric8.kubernetes.api.model.Namespace;
Expand Down Expand Up @@ -127,10 +132,10 @@ static Map<String, String> decodeOpaqueSecrets(Secret secret) {
return Collections.emptyMap();
}
String opaqueIdentities = secret.getData().get("identities.yaml");
String identitiesYaml = new String(Base64.getDecoder().decode(opaqueIdentities));
Yaml yaml = new Yaml();
Map<String, List> identities = yaml.load(identitiesYaml);
List<Map<String, String>> credentialsList = identities.get("credentials");
String yaml = new String(Base64.getDecoder().decode(opaqueIdentities));
YamlConfigurationReader reader = new YamlConfigurationReader(new StringReader(yaml), new URLConfigurationResourceResolver(null), new Properties(), PropertyReplacer.DEFAULT, NamingStrategy.KEBAB_CASE);
Map<String, Object> identities = reader.asMap();
List<Map<String, String>> credentialsList = (List<Map<String, String>>) identities.get("credentials");
Map<String, String> res = new LinkedHashMap<>(identities.size());
for (Map<String, String> credentials : credentialsList) {
res.put(credentials.get("username"), credentials.get("password"));
Expand Down
2 changes: 1 addition & 1 deletion cli/src/main/java/org/infinispan/cli/util/Utils.java
Expand Up @@ -90,6 +90,6 @@ public static Path downloadFile(URL url, Path dest, boolean verbose, boolean for

public static String getFilenameFromURL(URL url) {
String urlPath = url.getPath();
return urlPath.substring(urlPath.lastIndexOf('/') + 1);
return urlPath.substring(urlPath.lastIndexOf('/') + 1);
}
}
Expand Up @@ -7,8 +7,10 @@
import java.io.StringWriter;
import java.util.ArrayDeque;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Deque;
import java.util.HashMap;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
import java.util.Properties;
Expand Down Expand Up @@ -102,7 +104,7 @@ Node addSibling(Node sibling) {
}

Node next() {
if (children != null && !children.isEmpty()) {
if (hasChildren()) {
return children.remove(0);
} else {
if (parent == null) {
Expand All @@ -116,6 +118,10 @@ Node next() {
public String toString() {
return parsed.toString();
}

boolean hasChildren() {
return children != null && !children.isEmpty();
}
}

private void loadTree() {
Expand Down Expand Up @@ -578,6 +584,30 @@ public void setAttributeValue(String namespace, String name, String value) {
this.attributeValues.add(replaceProperties(value));
}

public Map<String, Object> asMap() {
return Collections.singletonMap(lines.parsed.name, asMap(lines));
}

private Object asMap(Node node) {
if (node.hasChildren()) {
if (node.children.get(0).parsed.listItem) {
List<Object> children = new ArrayList<>(node.children.size());
for (Node child : node.children) {
children.add(asMap(child));
}
return children;
} else {
Map<String, Object> children = new LinkedHashMap<>(node.children.size());
for (Node child : node.children) {
children.put(child.parsed.name, asMap(child));
}
return children;
}
} else {
return node.parsed.value;
}
}

public static class Parsed {
final int row;
int indent;
Expand Down
@@ -1,6 +1,8 @@
package org.infinispan.commons.configuration.io.yaml;

import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertNull;
import static org.junit.Assert.assertTrue;
import static org.junit.Assert.fail;
Expand All @@ -9,6 +11,9 @@
import java.io.InputStreamReader;
import java.io.Reader;
import java.io.StringReader;
import java.util.Collections;
import java.util.List;
import java.util.Map;
import java.util.Properties;

import org.infinispan.commons.configuration.io.ConfigurationReader;
Expand Down Expand Up @@ -171,4 +176,32 @@ private void assertAttribute(YamlConfigurationReader yaml, String name, String v
}
fail("Could not find attribute '" + name + " in element '" + yaml.getLocalName() + "'");
}

@Test
public void testYamlMapper() throws IOException {
try (Reader r = new InputStreamReader(YamlConfigurationReaderTest.class.getResourceAsStream("/identities.yaml"))) {
YamlConfigurationReader yaml = new YamlConfigurationReader(r, new URLConfigurationResourceResolver(null), new Properties(), PropertyReplacer.DEFAULT, NamingStrategy.KEBAB_CASE);
Map<String, Object> identities = yaml.asMap();
assertEquals(1, identities.size());
List<Object> credentials = (List<Object>) identities.get("credentials");
assertNotNull(credentials);
assertEquals(3, credentials.size());
for (Object o : credentials) {
Map<String, Object> credential = (Map<String, Object>) o;
assertTrue(credential.containsKey("username"));
assertTrue(credential.containsKey("password"));
assertEquals("changeme", credential.get("password"));
if ("my-user-1".equals(credential.get("username"))) {
assertTrue(credential.containsKey("roles"));
assertEquals(Collections.singletonList("admin"), credential.get("roles"));
} else if ("my-user-2".equals(credential.get("username"))) {
assertTrue(credential.containsKey("roles"));
assertEquals(Collections.singletonList("monitor"), credential.get("roles"));
} else {
assertEquals("admin", credential.get("username"));
assertFalse(credential.containsKey("roles"));
}
}
}
}
}
11 changes: 11 additions & 0 deletions commons/all/src/test/resources/identities.yaml
@@ -0,0 +1,11 @@
credentials:
- username: admin
password: changeme
- username: my-user-1
password: changeme
roles:
- admin
- username: my-user-2
password: changeme
roles:
- monitor
7 changes: 0 additions & 7 deletions pom.xml
Expand Up @@ -422,7 +422,6 @@
<versionx.org.wildfly.openssl.wildfly-openssl-windows-x86_64>${version.org.wildfly.openssl.natives.windows_x86_64}</versionx.org.wildfly.openssl.wildfly-openssl-windows-x86_64>
<versionx.org.wildfly.security.wildfly-elytron>${version.org.wildfly.elytron}</versionx.org.wildfly.security.wildfly-elytron>
<versionx.org.xerial>3.36.0.1</versionx.org.xerial>
<versionx.org.yaml.snakeyaml>1.31</versionx.org.yaml.snakeyaml>
<versionx.software.amazon.ion.java>1.0.2</versionx.software.amazon.ion.java>
<versionx.sun.jdk.jconsole>jdk</versionx.sun.jdk.jconsole>
</properties>
Expand Down Expand Up @@ -1974,12 +1973,6 @@
<version>${versionx.org.xerial}</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.yaml</groupId>
<artifactId>snakeyaml</artifactId>
<version>${versionx.org.yaml.snakeyaml}</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>software.amazon.ion</groupId>
<artifactId>ion-java</artifactId>
Expand Down
5 changes: 0 additions & 5 deletions server/rest/pom.xml
Expand Up @@ -200,11 +200,6 @@
<artifactId>opentelemetry-sdk-testing</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.yaml</groupId>
<artifactId>snakeyaml</artifactId>
<scope>test</scope>
</dependency>
</dependencies>

<build>
Expand Down
Expand Up @@ -32,13 +32,15 @@
import java.io.ByteArrayInputStream;
import java.io.Closeable;
import java.io.IOException;
import java.io.StringReader;
import java.nio.charset.StandardCharsets;
import java.nio.file.Paths;
import java.util.Collection;
import java.util.Collections;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Properties;
import java.util.Set;
import java.util.concurrent.CompletionStage;
import java.util.concurrent.TimeUnit;
Expand All @@ -55,6 +57,10 @@
import org.infinispan.client.rest.RestEntity;
import org.infinispan.client.rest.RestRawClient;
import org.infinispan.client.rest.RestResponse;
import org.infinispan.commons.configuration.io.NamingStrategy;
import org.infinispan.commons.configuration.io.PropertyReplacer;
import org.infinispan.commons.configuration.io.URLConfigurationResourceResolver;
import org.infinispan.commons.configuration.io.yaml.YamlConfigurationReader;
import org.infinispan.commons.dataconversion.MediaType;
import org.infinispan.commons.dataconversion.internal.Json;
import org.infinispan.commons.marshall.ProtoStreamMarshaller;
Expand All @@ -80,7 +86,6 @@
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.NodeList;
import org.yaml.snakeyaml.Yaml;

@Test(groups = "functional", testName = "rest.CacheResourceV2Test")
public class CacheResourceV2Test extends AbstractRestResourceTest {
Expand Down Expand Up @@ -1051,11 +1056,12 @@ private void checkXML(CompletionStage<RestResponse> response) throws Exception {
}

private void checkYaml(CompletionStage<RestResponse> response, String name) {
Yaml yaml = new Yaml();
Map<String, Object> config = yaml.load(join(response).getBody());
assertEquals("SYNC", getYamlProperty(config, name, "distributedCache", "mode"));
assertEquals("OBJECT", getYamlProperty(config, name, "distributedCache", "memory", "storage"));
assertEquals("20", getYamlProperty(config, name, "distributedCache", "memory", "maxCount"));
try (YamlConfigurationReader yaml = new YamlConfigurationReader(new StringReader(join(response).getBody()), new URLConfigurationResourceResolver(null), new Properties(), PropertyReplacer.DEFAULT, NamingStrategy.KEBAB_CASE)) {
Map<String, Object> config = yaml.asMap();
assertEquals("SYNC", getYamlProperty(config, name, "distributedCache", "mode"));
assertEquals("OBJECT", getYamlProperty(config, name, "distributedCache", "memory", "storage"));
assertEquals("20", getYamlProperty(config, name, "distributedCache", "memory", "maxCount"));
}
}

public static <T> T getYamlProperty(Map<String, Object> yaml, String... names) {
Expand Down

0 comments on commit 4cf310c

Please sign in to comment.