@Test(
      enabled = true,
      dependsOnMethods = "testCreateAnotherNodeWithANewContextToEnsureSharedMemIsntRequired")
  public void testGet() throws Exception {
    Map<String, ? extends NodeMetadata> metadataMap =
        newLinkedHashMap(
            uniqueIndex(
                filter(client.listNodesDetailsMatching(all()), and(withTag(tag), not(TERMINATED))),
                new Function<NodeMetadata, String>() {

                  @Override
                  public String apply(NodeMetadata from) {
                    return from.getId();
                  }
                }));
    for (NodeMetadata node : nodes) {
      metadataMap.remove(node.getId());
      NodeMetadata metadata = client.getNodeMetadata(node.getId());
      assertEquals(metadata.getProviderId(), node.getProviderId());
      assertEquals(metadata.getTag(), node.getTag());
      assertLocationSameOrChild(metadata.getLocation(), template.getLocation());
      checkImageIdMatchesTemplate(metadata);
      checkOsMatchesTemplate(metadata);
      assertEquals(metadata.getState(), NodeState.RUNNING);
      // due to DHCP the addresses can actually change in-between runs.
      assertEquals(metadata.getPrivateAddresses().size(), node.getPrivateAddresses().size());
      assertEquals(metadata.getPublicAddresses().size(), node.getPublicAddresses().size());
    }
    assertNodeZero(metadataMap.values());
  }
 @Test(
     enabled = true,
     dependsOnMethods = {"testListNodes", "testGetNodesWithDetails"})
 public void testDestroyNodes() {
   client.destroyNodesMatching(withTag(tag));
   for (NodeMetadata node : filter(client.listNodesDetailsMatching(all()), withTag(tag))) {
     assert node.getState() == NodeState.TERMINATED : node;
     assertEquals(context.getCredentialStore().get("node#" + node.getId()), null);
   }
 }
 @AfterTest
 protected void cleanup() throws InterruptedException, ExecutionException, TimeoutException {
   if (nodes != null) {
     client.destroyNodesMatching(NodePredicates.withTag(tag));
     for (NodeMetadata node :
         Iterables.filter(
             client.listNodesDetailsMatching(NodePredicates.all()), NodePredicates.withTag(tag))) {
       assert node.getState() == NodeState.TERMINATED : node;
     }
   }
   context.close();
 }
 public void testGetNodesWithDetails() throws Exception {
   for (NodeMetadata node : client.listNodesDetailsMatching(NodePredicates.all())) {
     assert node.getProviderId() != null : node;
     assert node.getLocation() != null : node;
     assertEquals(node.getType(), ComputeType.NODE);
     assert node instanceof NodeMetadata;
     NodeMetadata nodeMetadata = (NodeMetadata) node;
     assert nodeMetadata.getProviderId() != null : nodeMetadata;
     // nullable
     // assert nodeMetadata.getImage() != null : node;
     // user specified name is not always supported
     // assert nodeMetadata.getName() != null : nodeMetadata;
     if (nodeMetadata.getState() == NodeState.RUNNING) {
       assert nodeMetadata.getPublicAddresses() != null : nodeMetadata;
       assert nodeMetadata.getPublicAddresses().size() > 0
               || nodeMetadata.getPrivateAddresses().size() > 0
           : nodeMetadata;
       assertNotNull(nodeMetadata.getPrivateAddresses());
     }
   }
 }
 @Test(
     enabled = true,
     dependsOnMethods = "testCreateAnotherNodeWithANewContextToEnsureSharedMemIsntRequired")
 public void testGet() throws Exception {
   Set<? extends NodeMetadata> metadataSet =
       Sets.newHashSet(
           Iterables.filter(
               client.listNodesDetailsMatching(NodePredicates.all()),
               Predicates.and(
                   NodePredicates.withTag(tag), Predicates.not(NodePredicates.TERMINATED))));
   for (NodeMetadata node : nodes) {
     metadataSet.remove(node);
     NodeMetadata metadata = client.getNodeMetadata(node.getId());
     assertEquals(metadata.getProviderId(), node.getProviderId());
     assertEquals(metadata.getTag(), node.getTag());
     assertLocationSameOrChild(metadata.getLocation(), template.getLocation());
     assertEquals(metadata.getImage(), template.getImage());
     assertEquals(metadata.getState(), NodeState.RUNNING);
     assertEquals(metadata.getPrivateAddresses(), node.getPrivateAddresses());
     assertEquals(metadata.getPublicAddresses(), node.getPublicAddresses());
   }
   assertNodeZero(metadataSet);
 }
 private Set<? extends NodeMetadata> refreshNodes() {
   return filter(client.listNodesDetailsMatching(all()), and(withTag(tag), not(TERMINATED)));
 }