diff --git a/bmc-common/src/main/java/com/oracle/bmc/ConfigFileReader.java b/bmc-common/src/main/java/com/oracle/bmc/ConfigFileReader.java index 5061153c38..375c65736b 100644 --- a/bmc-common/src/main/java/com/oracle/bmc/ConfigFileReader.java +++ b/bmc-common/src/main/java/com/oracle/bmc/ConfigFileReader.java @@ -4,10 +4,8 @@ */ package com.oracle.bmc; -import org.slf4j.Logger; +import static com.oracle.bmc.util.internal.FileUtils.expandUserHome; -import jakarta.annotation.Nonnull; -import jakarta.annotation.Nullable; import java.io.BufferedReader; import java.io.File; import java.io.FileInputStream; @@ -16,14 +14,18 @@ import java.io.InputStreamReader; import java.nio.charset.Charset; import java.nio.charset.StandardCharsets; +import java.util.Collections; import java.util.HashMap; import java.util.Map; +import java.util.Optional; +import java.util.Set; -import jakarta.annotation.Nonnull; -import jakarta.annotation.Nullable; +import org.slf4j.Logger; import com.oracle.bmc.util.internal.StringUtils; -import static com.oracle.bmc.util.internal.FileUtils.expandUserHome; + +import jakarta.annotation.Nonnull; +import jakarta.annotation.Nullable; /** * Simple implementation to read OCI configuration files. @@ -197,6 +199,22 @@ public String get(String key) { : null; } + public Set getProfileNames() { + return Collections.unmodifiableSet(accumulator.configurationsByProfile.keySet()); + } + + public Map getProfileKeys(String profileName) { + Map keyValues = new HashMap<>(); + if (accumulator.foundDefaultProfile) { + keyValues.putAll(accumulator.configurationsByProfile.get(DEFAULT_PROFILE_NAME)); + } + Map overrideKeyValues = + Optional.ofNullable(accumulator.configurationsByProfile.get(profileName)) + .orElse(Collections.emptyMap()); + keyValues.putAll(overrideKeyValues); + return Collections.unmodifiableMap(keyValues); + } + @Override public String toString() { StringBuilder sb = new StringBuilder(); diff --git a/bmc-common/src/test/java/com/oracle/bmc/ConfigFileReader2Test.java b/bmc-common/src/test/java/com/oracle/bmc/ConfigFileReader2Test.java new file mode 100644 index 0000000000..ad25fd002f --- /dev/null +++ b/bmc-common/src/test/java/com/oracle/bmc/ConfigFileReader2Test.java @@ -0,0 +1,71 @@ +package com.oracle.bmc; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNotNull; +import static org.junit.Assert.assertTrue; + +import java.io.File; +import java.io.IOException; +import java.util.List; +import java.util.Map; +import java.util.Set; + +import org.junit.Before; +import org.junit.BeforeClass; +import org.junit.Test; + +import com.oracle.bmc.ConfigFileReader.ConfigFile; + +public class ConfigFileReader2Test { + + private static File CONFIG_FILE; + + @BeforeClass + public static void beforeClass() { + CONFIG_FILE = new File("./src/test/resources/oci.config"); + assertTrue(CONFIG_FILE.isFile()); + } + + private ConfigFile configFile; + @Before + public void before() throws IOException { + this.configFile = ConfigFileReader.parse(CONFIG_FILE.getAbsolutePath()); + assertNotNull(configFile); + } + + @Test + public void testProfileNames() { + Set actualProfileNames = configFile.getProfileNames(); + List expectedProfileNames = ExpectedConfigValues2.getExpectedProfileNames();; + assertEquals(expectedProfileNames.size(), configFile.getProfileNames().size()); + actualProfileNames.forEach(pname -> assertTrue(expectedProfileNames.contains(pname))); + } + @Test + public void testDefaultConfig() throws IOException { + assertDefaultProfile(configFile); + } + + @Test + public void testAshburnOverrideConfig() throws IOException { + assertAshburnOverridsDefault(configFile); + } + + private void assertAshburnOverridsDefault(ConfigFile configFileProfiles) { + Map profileKeys = configFileProfiles.getProfileKeys("ASHBURN"); + Map expectedMap = ExpectedConfigValues2.createDefaultExpectedMap(); + + // override region + expectedMap.put("region", "us-ashburn-1"); + assertEquals(expectedMap, profileKeys); + } + + private void assertDefaultProfile(ConfigFile configFileProfiles) { + Map profileKeys = configFileProfiles.getProfileKeys("DEFAULT"); + Map expectedMap = ExpectedConfigValues2.createDefaultExpectedMap(); + assertEquals(expectedMap, profileKeys); + } + + + + +} diff --git a/bmc-common/src/test/java/com/oracle/bmc/ExpectedConfigValues2.java b/bmc-common/src/test/java/com/oracle/bmc/ExpectedConfigValues2.java new file mode 100644 index 0000000000..510e0f0d87 --- /dev/null +++ b/bmc-common/src/test/java/com/oracle/bmc/ExpectedConfigValues2.java @@ -0,0 +1,24 @@ +package com.oracle.bmc; + +import java.util.Arrays; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +public class ExpectedConfigValues2 { + + public static List getExpectedProfileNames() { + return Arrays.asList("DEFAULT", "ALWAYSFREE", "ONPREMJAVA", "ASHBURN"); + } + + public static Map createDefaultExpectedMap() { + Map expectedMap = new HashMap<>(); + expectedMap.put("user", "ocid1.user.oc1..aaaaaaaarqntblargh"); + expectedMap.put("fingerprint", "xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx"); + expectedMap.put("tenancy", "ocid1.tenancy.oc1.aaaaablah"); + expectedMap.put("region", "us-phoenix-1"); + expectedMap.put("key_file", "/Users/homer/.oci/hsimpson/homer-simpson-06-16-12.pem"); + return expectedMap; + } + +} diff --git a/bmc-common/src/test/resources/oci.config b/bmc-common/src/test/resources/oci.config new file mode 100644 index 0000000000..785e32573b --- /dev/null +++ b/bmc-common/src/test/resources/oci.config @@ -0,0 +1,23 @@ +[DEFAULT] +user=ocid1.user.oc1..aaaaaaaarqntblargh +fingerprint=xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx +tenancy=ocid1.tenancy.oc1.aaaaablah +region=us-phoenix-1 +key_file=/Users/homer/.oci/hsimpson/homer-simpson-06-16-12.pem + +[ALWAYSFREE] +user=ocid1.user.oc1..aaaaaaaarqntblargh +fingerprint=xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx +tenancy=ocid1.tenancy.oc1.aaaaablah +region=us-ashburn-1 +key_file=/Users/homer/.oci/hsimpson/homer-simpson-06-16-12.pem + +[ONPREMJAVA] +user=ocid1.user.oc1..aaaaaaaarqntblargh22 +fingerprint=xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx +tenancy=ocid1.tenancy.oc1.aaaaablah2 +region=us-phoenix-1 +key_file=/Users/lisa/.oci/lsimpson/lisa-simpson-04-06-12.pem + +[ASHBURN] +region=us-ashburn-1 \ No newline at end of file