@Test( enabled = true, dependsOnMethods = "testCreateAnotherNodeWithANewContextToEnsureSharedMemIsntRequired") public void testGet() throws Exception { Map<String, ? extends NodeMetadata> metadataMap = newLinkedHashMap( uniqueIndex( filter( client.listNodesDetailsMatching(all()), and(inGroup(group), 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.getGroup(), node.getGroup()); assertLocationSameOrChild( checkNotNull(metadata.getLocation(), "location of %s", metadata), template.getLocation()); checkImageIdMatchesTemplate(metadata); checkOsMatchesTemplate(metadata); assert metadata.getStatus() == Status.RUNNING : metadata; // due to DHCP the addresses can actually change in-between runs. assertEquals( metadata.getPrivateAddresses().size(), node.getPrivateAddresses().size(), format( "[%s] didn't match: [%s]", metadata.getPrivateAddresses(), node.getPrivateAddresses().size())); assertEquals( metadata.getPublicAddresses().size(), node.getPublicAddresses().size(), format( "[%s] didn't match: [%s]", metadata.getPublicAddresses(), node.getPublicAddresses().size())); } assertNodeZero(metadataMap.values()); }
// since surefire and eclipse don't otherwise guarantee the order, we are // starting this one alphabetically before create2nodes.. @Test( enabled = true, dependsOnMethods = {"testCompareSizes"}) public void testAScriptExecutionAfterBootWithBasicTemplate() throws Exception { String group = this.group + "r"; try { client.destroyNodesMatching(inGroup(group)); } catch (Exception e) { } template = buildTemplate(client.templateBuilder()); template.getOptions().blockOnPort(22, 120); try { Set<? extends NodeMetadata> nodes = client.createNodesInGroup(group, 1, template); NodeMetadata node = get(nodes, 0); LoginCredentials good = node.getCredentials(); assert good.identity != null : nodes; for (Entry<? extends NodeMetadata, ExecResponse> response : client .runScriptOnNodesMatching( runningInGroup(group), "hostname", wrapInInitScript(false).runAsRoot(false).overrideLoginCredentials(good)) .entrySet()) { checkResponseEqualsHostname(response.getValue(), response.getKey()); } // test single-node execution ExecResponse response = client.runScriptOnNode( node.getId(), "hostname", wrapInInitScript(false).runAsRoot(false)); checkResponseEqualsHostname(response, node); OperatingSystem os = node.getOperatingSystem(); // test bad password tryBadPassword(group, good); runScriptWithCreds(group, os, good); checkNodes(nodes, group, "runScriptWithCreds"); // test adding AdminAccess later changes the default boot user, in this // case to foo, with home dir /over/ridden/foo ListenableFuture<ExecResponse> future = client.submitScriptOnNode( node.getId(), AdminAccess.builder().adminUsername("foo").adminHome("/over/ridden/foo").build(), nameTask("adminUpdate")); response = future.get(3, TimeUnit.MINUTES); assert response.getExitStatus() == 0 : node.getId() + ": " + response; node = client.getNodeMetadata(node.getId()); // test that the node updated to the correct admin user! assertEquals(node.getCredentials().identity, "foo"); assert node.getCredentials().credential != null : nodes; weCanCancelTasks(node); assert response.getExitStatus() == 0 : node.getId() + ": " + response; response = client.runScriptOnNode( node.getId(), "echo $USER", wrapInInitScript(false).runAsRoot(false)); assert response.getOutput().trim().equals("foo") : node.getId() + ": " + response; } finally { client.destroyNodesMatching(inGroup(group)); } }