@Test void testDescribeAWSKeyPairs() { for (String region : Region.DEFAULT_REGIONS) { SortedSet<KeyPair> allResults = newTreeSet(client.describeKeyPairsInRegion(region)); assertNotNull(allResults); if (allResults.size() >= 1) { KeyPair pair = allResults.last(); SortedSet<KeyPair> result = newTreeSet(client.describeKeyPairsInRegion(region, pair.getKeyName())); assertNotNull(result); KeyPair compare = result.last(); assertEquals(compare, pair); } } }
@VisibleForTesting KeyPair importOrReturnExistingKeypair(String region, String group, String publicKeyMaterial) { checkNotNull(region, "region"); checkNotNull(group, "group"); checkNotNull(publicKeyMaterial, "publicKeyMaterial"); logger.debug(">> importing keyPair region(%s) group(%s)", region, group); KeyPair keyPair = null; // loop for eventual consistency or race condition. // as this command is idempotent, it should be ok while (keyPair == null) try { keyPair = ec2Api.getKeyPairApi().get().importKeyPairInRegion(region, "jclouds#" + group, publicKeyMaterial); keyPair = addFingerprintToKeyPair(publicKeyMaterial, keyPair); logger.debug("<< imported keyPair(%s)", keyPair); } catch (IllegalStateException e) { keyPair = Iterables.getFirst(ec2Api.getKeyPairApi().get().describeKeyPairsInRegion(region, "jclouds#" + group), null); if (keyPair != null) { keyPair = addFingerprintToKeyPair(publicKeyMaterial, keyPair); logger.debug("<< retrieved existing keyPair(%s)", keyPair); } } return keyPair; }
@VisibleForTesting KeyPair importOrReturnExistingKeypair(String region, String group, String publicKeyMaterial) { checkNotNull(region, "region"); checkNotNull(group, "group"); checkNotNull(publicKeyMaterial, "publicKeyMaterial"); logger.debug(">> importing keyPair region(%s) group(%s)", region, group); KeyPair keyPair = null; // loop for eventual consistency or race condition. // as this command is idempotent, it should be ok while (keyPair == null) try { keyPair = ec2Api.getKeyPairApi().get().importKeyPairInRegion(region, "jclouds#" + group, publicKeyMaterial); keyPair = addFingerprintToKeyPair(publicKeyMaterial, keyPair); logger.debug("<< imported keyPair(%s)", keyPair); } catch (IllegalStateException e) { keyPair = Iterables.getFirst(ec2Api.getKeyPairApi().get().describeKeyPairsInRegion(region, "jclouds#" + group), null); if (keyPair != null) { keyPair = addFingerprintToKeyPair(publicKeyMaterial, keyPair); logger.debug("<< retrieved existing keyPair(%s)", keyPair); } } return keyPair; }
@VisibleForTesting KeyPair importOrReturnExistingKeypair(String region, String group, String publicKeyMaterial) { checkNotNull(region, "region"); checkNotNull(group, "group"); checkNotNull(publicKeyMaterial, "publicKeyMaterial"); logger.debug(">> importing keyPair region(%s) group(%s)", region, group); KeyPair keyPair = null; // loop for eventual consistency or race condition. // as this command is idempotent, it should be ok while (keyPair == null) try { keyPair = ec2Api.getKeyPairApi().get().importKeyPairInRegion(region, "jclouds#" + group, publicKeyMaterial); keyPair = addFingerprintToKeyPair(publicKeyMaterial, keyPair); logger.debug("<< imported keyPair(%s)", keyPair); } catch (IllegalStateException e) { keyPair = Iterables.getFirst(ec2Api.getKeyPairApi().get().describeKeyPairsInRegion(region, "jclouds#" + group), null); if (keyPair != null) { keyPair = addFingerprintToKeyPair(publicKeyMaterial, keyPair); logger.debug("<< retrieved existing keyPair(%s)", keyPair); } } return keyPair; }
protected void checkKeyPair(String keyName, KeyPair keyPair) { assertNotNull(keyPair); assertNotNull(keyPair.getSha1OfPrivateKey()); assertEquals(keyPair.getKeyName(), keyName); Set<KeyPair> twoResults = client.describeKeyPairsInRegion(null, keyName); assertNotNull(twoResults); assertEquals(twoResults.size(), 1); KeyPair listPair = twoResults.iterator().next(); assertEquals(listPair.getKeyName(), keyPair.getKeyName()); assertEquals(listPair.getSha1OfPrivateKey(), keyPair.getSha1OfPrivateKey()); }
@Test public void testApplyWithIllegalStateExceptionReturnsExistingKey() { AWSEC2Api client = createMock(AWSEC2Api.class); AWSKeyPairApi keyApi = createMock(AWSKeyPairApi.class); expect(client.getKeyPairApi()).andReturn((Optional) Optional.of(keyApi)).atLeastOnce(); expect(keyApi.importKeyPairInRegion("region", "jclouds#group", PUBLIC_KEY)).andThrow( new IllegalStateException()); expect(keyApi.describeKeyPairsInRegion("region", "jclouds#group")).andReturn(ImmutableSet.of(pair)); replay(client); replay(keyApi); ImportOrReturnExistingKeypair parser = new ImportOrReturnExistingKeypair(client); // enriching to include the ssh fingerprint so that ssh logs are easier to correlate assertEquals(parser.importOrReturnExistingKeypair("region", "group", PUBLIC_KEY), pairWithFingerprint); verify(client); verify(keyApi); }
@Test public void testApplyWithIllegalStateExceptionRetriesWhenExistingKeyNotFound() { AWSEC2Api client = createMock(AWSEC2Api.class); AWSKeyPairApi keyApi = createMock(AWSKeyPairApi.class); expect(client.getKeyPairApi()).andReturn((Optional) Optional.of(keyApi)).atLeastOnce(); expect(keyApi.importKeyPairInRegion("region", "jclouds#group", PUBLIC_KEY)).andThrow( new IllegalStateException()); expect(keyApi.describeKeyPairsInRegion("region", "jclouds#group")).andReturn(ImmutableSet.<KeyPair> of()); expect(keyApi.importKeyPairInRegion("region", "jclouds#group", PUBLIC_KEY)).andThrow( new IllegalStateException()); expect(keyApi.describeKeyPairsInRegion("region", "jclouds#group")).andReturn(ImmutableSet.<KeyPair> of(pair)); replay(client); replay(keyApi); ImportOrReturnExistingKeypair parser = new ImportOrReturnExistingKeypair(client); assertEquals(parser.importOrReturnExistingKeypair("region", "group", PUBLIC_KEY), pairWithFingerprint); verify(client); verify(keyApi); } }