diff --git a/cli/src/main/java/denominator/cli/Denominator.java b/cli/src/main/java/denominator/cli/Denominator.java index a90f5fb1..71246a77 100644 --- a/cli/src/main/java/denominator/cli/Denominator.java +++ b/cli/src/main/java/denominator/cli/Denominator.java @@ -8,7 +8,9 @@ import com.google.common.collect.FluentIterable; import com.google.common.collect.ImmutableList; import com.google.common.collect.ImmutableList.Builder; +import com.google.common.collect.ImmutableSortedSet; import com.google.common.collect.Iterators; +import com.google.common.collect.Ordering; import com.google.common.io.Files; import com.google.common.net.InternetDomainName; import com.google.gson.Gson; @@ -56,7 +58,7 @@ import java.util.ArrayList; import java.util.Collection; import java.util.Collections; -import java.util.HashMap; +import java.util.LinkedHashMap; import java.util.Iterator; import java.util.List; import java.util.Map; @@ -136,7 +138,7 @@ public static String providerAndCredentialsTable() { StringBuilder builder = new StringBuilder(); builder.append(format(table, "provider", "url", "duplicateZones", "credentialType", "credentialArgs")); - for (Provider provider : Providers.list()) { + for (Provider provider : ImmutableSortedSet.copyOf(Ordering.usingToString(), Providers.list())) { if (provider.credentialTypeToParameterNames().isEmpty()) builder.append(format("%-10s %-51s %-14s %n", provider.name(), provider.url(), provider.supportsDuplicateZoneNames())); @@ -265,13 +267,14 @@ String getFileContentsFromPath(String path) throws IOException { } Map getConfigFromEnv() { - Map env = new HashMap(); - String provider = getEnvValue("PROVIDER"); - env.put("provider", provider); - env.put("url", getEnvValue("URL")); - - Map credentialMap = new HashMap(); - Provider providerLoaded = Providers.getByName(provider); + Map env = new LinkedHashMap(); + if (providerName == null) providerName = getEnvValue("PROVIDER"); + env.put("provider", providerName); + if (url == null) url = getEnvValue("URL"); + env.put("url", url); + + Map credentialMap = new LinkedHashMap(); + Provider providerLoaded = Providers.getByName(providerName); if (providerLoaded != null) { // merge the list of possible credentials for (Entry> entry : diff --git a/cli/src/test/java/denominator/cli/DenominatorTest.java b/cli/src/test/java/denominator/cli/DenominatorTest.java index e1f3a667..0c68af49 100644 --- a/cli/src/test/java/denominator/cli/DenominatorTest.java +++ b/cli/src/test/java/denominator/cli/DenominatorTest.java @@ -26,6 +26,7 @@ import java.net.URL; import java.util.Iterator; import java.util.Map; +import org.testng.annotations.BeforeTest; import org.testng.annotations.Test; import static denominator.cli.Denominator.json; @@ -41,11 +42,12 @@ public class DenominatorTest { public void listsAllProvidersWithCredentials() { assertEquals(ListProviders.providerAndCredentialsTable(), Joiner.on('\n').join( "provider url duplicateZones credentialType credentialArgs", - "mock mem:mock false ", "clouddns https://identity.api.rackspacecloud.com/v2.0 true password username password", "clouddns https://identity.api.rackspacecloud.com/v2.0 true apiKey username apiKey", "designate http://localhost:5000/v2.0 true password tenantId username password", - "dynect https://api2.dynect.net/REST false password customer username password", + "discoverydns https://api.reseller.discoverydns.com false clientCertificate certificatePem keyPem", + "dynect https://api2.dynect.net/REST false password customer username password", + "mock mem:mock false ", "route53 https://route53.amazonaws.com true accessKey accessKey secretKey", "route53 https://route53.amazonaws.com true session accessKey secretKey sessionToken", "ultradns https://ultra-api.ultradns.com:8443/UltraDNS_WS/v01 false password username password", "")); @@ -53,6 +55,10 @@ public void listsAllProvidersWithCredentials() { DNSApiManager mgr = denominator.Denominator.create(new MockProvider()); + @BeforeTest public void reset() { + mgr = denominator.Denominator.create(new MockProvider()); + } + @Test(description = "denominator -p mock zone list") public void testZoneList() { assertEquals(Joiner.on('\n').join(new ZoneList().doRun(mgr)), "denominator.io."); @@ -83,13 +89,13 @@ public void testCredentialsFromYaml() { } private String getTestYaml() { - return "providerConfigurationName: blah1\n" + + return "name: blah1\n" + "provider: route53\n" + "credentials:\n" + " accessKey: foo1\n" + " secretKey: foo2\n" + "---\n" + - "providerConfigurationName: blah2\n" + + "name: blah2\n" + "provider: mock\n" + "url: mem:mock2\n" + "credentials:\n" + @@ -240,8 +246,20 @@ public void testResourceRecordSetList() { ResourceRecordSetList command = new ResourceRecordSetList(); command.zoneIdOrName = "denominator.io."; assertEquals(Joiner.on('\n').join(command.doRun(mgr)), Joiner.on('\n').join( + "denominator.io. MX 86400 1 mx1.denominator.io.", "denominator.io. NS 86400 ns1.denominator.io.", "denominator.io. SOA 3600 ns1.denominator.io. admin.denominator.io. 1 3600 600 604800 60", + "denominator.io. SPF 86400 v=spf1 a mx -all", + "denominator.io. TXT 86400 blah", + "phone.denominator.io. NAPTR 3600 1 1 U E2U+sip !^.*$!sip:customer-service@example.com! .", + "ptr.denominator.io. PTR 3600 www.denominator.io.", + "server1.denominator.io. CERT 3600 12345 1 1 B33F", + "server1.denominator.io. LOC 3600 37 48 48.892 S 144 57 57.502 E 26m", + "server1.denominator.io. SRV 3600 0 1 80 www.denominator.io.", + "server1.denominator.io. SSHFP 3600 1 1 B33F", + "server1.denominator.io. TLSA 3600 1 1 1 B33F", + "subdomain.denominator.io. DS 3600 12345 1 1 B33F", + "subdomain.denominator.io. NS 3600 ns1.denominator.io.", "www.denominator.io. CNAME 3600 www1.denominator.io.", "www.geo.denominator.io. CNAME alazona 300 a.denominator.io.", "www.geo.denominator.io. CNAME antarctica 0 c.denominator.io.", @@ -424,7 +442,7 @@ public void testResourceRecordSetReplaceRoute53AliasForgotZone() { command.doRun(mgr); } - @Test(expectedExceptions = IllegalArgumentException.class, expectedExceptionsMessageRegExp = "--alias-hosted-zone-id must be a hosted zone id, not a zone providerConfigurationName") + @Test(expectedExceptions = IllegalArgumentException.class, expectedExceptionsMessageRegExp = "--alias-hosted-zone-id must be a hosted zone id, not a zone name") public void testResourceRecordSetReplaceRoute53AliasZoneNameInsteadOfZoneId() { ResourceRecordSetReplace command = new ResourceRecordSetReplace(); command.zoneIdOrName = "denominator.io."; @@ -527,10 +545,22 @@ public void testResourceRecordSetDelete() { public void testGeoTypeList() { GeoTypeList command = new GeoTypeList(); command.zoneIdOrName = "denominator.io."; - assertEquals(Joiner.on('\n').join(command.doRun(mgr)), Joiner.on('\n').join( - "A", - "AAAA", - "CNAME")); + assertEquals(Joiner.on('\n').join(command.doRun(mgr)), "" + + "A\n" + + "AAAA\n" + + "CNAME\n" + + "NS\n" + + "PTR\n" + + "SPF\n" + + "TXT\n" + + "MX\n" + + "SRV\n" + + "DS\n" + + "CERT\n" + + "NAPTR\n" + + "SSHFP\n" + + "LOC\n" + + "TLSA"); } @Test(description = "denominator -p mock geo -z denominator.io. regions") @@ -647,8 +677,8 @@ public void testGeoResourceRecordSetAddRegionsEntireRegion() { assertEquals(Joiner.on('\n').join(command.doRun(mgr)), Joiner.on('\n').join( ";; in zone denominator.io. adding regions {\"Mexico\":[\"Mexico\"]} to rrset www2.geo.denominator.io. A alazona", - ";; current rrset: {\"providerConfigurationName\":\"www2.geo.denominator.io.\",\"type\":\"A\",\"qualifier\":\"alazona\",\"ttl\":300,\"records\":[{\"address\":\"192.0.2.1\"}],\"profiles\":[{\"type\":\"geo\",\"regions\":{\"United States (US)\":[\"Alaska\",\"Arizona\"]}}]}", - ";; revised rrset: {\"providerConfigurationName\":\"www2.geo.denominator.io.\",\"type\":\"A\",\"qualifier\":\"alazona\",\"ttl\":300,\"records\":[{\"address\":\"192.0.2.1\"}],\"profiles\":[{\"type\":\"geo\",\"regions\":{\"United States (US)\":[\"Alaska\",\"Arizona\"],\"Mexico\":[\"Mexico\"]}}]}", + ";; current rrset: {\"name\":\"www2.geo.denominator.io.\",\"type\":\"A\",\"qualifier\":\"alazona\",\"ttl\":300,\"records\":[{\"address\":\"192.0.2.1\"}],\"geo\":{\"regions\":{\"United States (US)\":[\"Alaska\",\"Arizona\"]}}}", + ";; revised rrset: {\"name\":\"www2.geo.denominator.io.\",\"type\":\"A\",\"qualifier\":\"alazona\",\"ttl\":300,\"records\":[{\"address\":\"192.0.2.1\"}],\"geo\":{\"regions\":{\"United States (US)\":[\"Alaska\",\"Arizona\"],\"Mexico\":[\"Mexico\"]}}}", ";; ok")); assertEquals( @@ -673,7 +703,7 @@ public void testGeoResourceRecordSetAddRegionsSkipsWhenSame() { assertEquals(Joiner.on('\n').join(command.doRun(mgr)), Joiner.on('\n').join( ";; in zone denominator.io. adding regions {\"United States (US)\":[\"Arizona\"]} to rrset www2.geo.denominator.io. A alazona", - ";; current rrset: {\"providerConfigurationName\":\"www2.geo.denominator.io.\",\"type\":\"A\",\"qualifier\":\"alazona\",\"ttl\":300,\"records\":[{\"address\":\"192.0.2.1\"}],\"profiles\":[{\"type\":\"geo\",\"regions\":{\"United States (US)\":[\"Alaska\",\"Arizona\"]}}]}", + ";; current rrset: {\"name\":\"www2.geo.denominator.io.\",\"type\":\"A\",\"qualifier\":\"alazona\",\"ttl\":300,\"records\":[{\"address\":\"192.0.2.1\"}],\"geo\":{\"regions\":{\"United States (US)\":[\"Alaska\",\"Arizona\"]}}}", ";; ok")); assertEquals( @@ -695,8 +725,8 @@ public void testGeoResourceRecordSetAddRegionsEntireRegionAndTerritory() { assertEquals(Joiner.on('\n').join(command.doRun(mgr)), Joiner.on('\n').join( ";; in zone denominator.io. adding regions {\"Mexico\":[\"Mexico\"],\"South America\":[\"Ecuador\"]} to rrset www2.geo.denominator.io. A alazona", - ";; current rrset: {\"providerConfigurationName\":\"www2.geo.denominator.io.\",\"type\":\"A\",\"qualifier\":\"alazona\",\"ttl\":300,\"records\":[{\"address\":\"192.0.2.1\"}],\"profiles\":[{\"type\":\"geo\",\"regions\":{\"United States (US)\":[\"Alaska\",\"Arizona\"]}}]}", - ";; revised rrset: {\"providerConfigurationName\":\"www2.geo.denominator.io.\",\"type\":\"A\",\"qualifier\":\"alazona\",\"ttl\":300,\"records\":[{\"address\":\"192.0.2.1\"}],\"profiles\":[{\"type\":\"geo\",\"regions\":{\"United States (US)\":[\"Alaska\",\"Arizona\"],\"Mexico\":[\"Mexico\"],\"South America\":[\"Ecuador\"]}}]}", + ";; current rrset: {\"name\":\"www2.geo.denominator.io.\",\"type\":\"A\",\"qualifier\":\"alazona\",\"ttl\":300,\"records\":[{\"address\":\"192.0.2.1\"}],\"geo\":{\"regions\":{\"United States (US)\":[\"Alaska\",\"Arizona\"]}}}", + ";; revised rrset: {\"name\":\"www2.geo.denominator.io.\",\"type\":\"A\",\"qualifier\":\"alazona\",\"ttl\":300,\"records\":[{\"address\":\"192.0.2.1\"}],\"geo\":{\"regions\":{\"United States (US)\":[\"Alaska\",\"Arizona\"],\"Mexico\":[\"Mexico\"],\"South America\":[\"Ecuador\"]}}}", ";; ok")); assertEquals( @@ -724,8 +754,8 @@ public void testGeoResourceRecordSetAddRegionsEntireRegionAndTerritoryValidatedD assertEquals(Joiner.on('\n').join(command.doRun(mgr)), Joiner.on('\n').join( ";; in zone denominator.io. adding regions {\"Mexico\":[\"Mexico\"],\"South America\":[\"Ecuador\"]} to rrset www2.geo.denominator.io. A alazona", ";; validated regions: {\"Mexico\":[\"Mexico\"],\"South America\":[\"Ecuador\"]}", - ";; current rrset: {\"providerConfigurationName\":\"www2.geo.denominator.io.\",\"type\":\"A\",\"qualifier\":\"alazona\",\"ttl\":300,\"records\":[{\"address\":\"192.0.2.1\"}],\"profiles\":[{\"type\":\"geo\",\"regions\":{\"United States (US)\":[\"Alaska\",\"Arizona\"]}}]}", - ";; revised rrset: {\"providerConfigurationName\":\"www2.geo.denominator.io.\",\"type\":\"A\",\"qualifier\":\"alazona\",\"ttl\":300,\"records\":[{\"address\":\"192.0.2.1\"}],\"profiles\":[{\"type\":\"geo\",\"regions\":{\"United States (US)\":[\"Alaska\",\"Arizona\"],\"Mexico\":[\"Mexico\"],\"South America\":[\"Ecuador\"]}}]}", + ";; current rrset: {\"name\":\"www2.geo.denominator.io.\",\"type\":\"A\",\"qualifier\":\"alazona\",\"ttl\":300,\"records\":[{\"address\":\"192.0.2.1\"}],\"geo\":{\"regions\":{\"United States (US)\":[\"Alaska\",\"Arizona\"]}}}", + ";; revised rrset: {\"name\":\"www2.geo.denominator.io.\",\"type\":\"A\",\"qualifier\":\"alazona\",\"ttl\":300,\"records\":[{\"address\":\"192.0.2.1\"}],\"geo\":{\"regions\":{\"United States (US)\":[\"Alaska\",\"Arizona\"],\"Mexico\":[\"Mexico\"],\"South America\":[\"Ecuador\"]}}}", ";; ok")); assertEquals( diff --git a/discoverydns/src/test/java/denominator/discoverydns/crypto/PemsTest.java b/discoverydns/src/test/java/denominator/discoverydns/crypto/PemsTest.java index 69943693..97e8e2b8 100644 --- a/discoverydns/src/test/java/denominator/discoverydns/crypto/PemsTest.java +++ b/discoverydns/src/test/java/denominator/discoverydns/crypto/PemsTest.java @@ -1,18 +1,15 @@ package denominator.discoverydns.crypto; -import java.io.File; +import com.google.common.base.Charsets; +import com.google.common.io.ByteStreams; import java.io.IOException; import java.security.PrivateKey; import java.security.cert.Certificate; - import org.testng.annotations.Test; import static org.testng.Assert.assertEquals; -import static org.testng.Assert.assertTrue; import static org.testng.Assert.assertNotNull; - -import com.google.common.base.Charsets; -import com.google.common.io.Files; +import static org.testng.Assert.assertTrue; public class PemsTest { @Test @@ -35,15 +32,6 @@ public void readPrivateKeyRsaUnencrypted() throws IOException { assertNotNull(key); assertEquals(key.getAlgorithm(), "RSA"); assertEquals(key.getFormat(), "PKCS#8"); - assertTrue(key.toString().contains("13027056791347954860993705134784360" - + "90604656096917973695562883321428489" - + "98948407504753182462366967344028665" - + "37344247877657226225006174465507621" - + "39437947285863531387544470171256920" - + "21960122274296762437642683683205703" - + "96222695213071318030195835255388795" - + "63345001588010191621586917319925054" - + "12412889441923662748528114071")); } @Test(expectedExceptions = IOException.class, @@ -58,15 +46,6 @@ public void readPrivateKeyRsaUnencryptedPkcs8() throws IOException { assertNotNull(key); assertEquals(key.getAlgorithm(), "RSA"); assertEquals(key.getFormat(), "PKCS#8"); - assertTrue(key.toString().contains("13027056791347954860993705134784360" - + "90604656096917973695562883321428489" - + "98948407504753182462366967344028665" - + "37344247877657226225006174465507621" - + "39437947285863531387544470171256920" - + "21960122274296762437642683683205703" - + "96222695213071318030195835255388795" - + "63345001588010191621586917319925054" - + "12412889441923662748528114071")); } @Test(expectedExceptions = IOException.class, @@ -76,6 +55,6 @@ public void readPrivateKeyRsaEncryptedPkcs8() throws IOException { } private String readPemtoString(String file) throws IOException { - return Files.toString(new File("src/test/resources/" + file), Charsets.US_ASCII); + return new String(ByteStreams.toByteArray(PemsTest.class.getResourceAsStream("/" + file)), Charsets.US_ASCII); } }