update User

This commit is contained in:
danikov 2012-03-12 09:45:18 +00:00
parent bdc09ee053
commit 1309d803e8
7 changed files with 171 additions and 8 deletions

View File

@ -30,10 +30,9 @@ import javax.xml.bind.annotation.XmlElementWrapper;
import javax.xml.bind.annotation.XmlRootElement;
import javax.xml.bind.annotation.XmlType;
import org.testng.collections.Lists;
import com.google.common.base.Objects;
import com.google.common.collect.ImmutableList;
import com.google.common.collect.Lists;
import com.google.common.collect.Sets;
/**

View File

@ -24,6 +24,7 @@ import javax.ws.rs.Consumes;
import javax.ws.rs.DELETE;
import javax.ws.rs.GET;
import javax.ws.rs.POST;
import javax.ws.rs.PUT;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;
@ -55,7 +56,7 @@ public interface UserAsyncClient {
@Produces(VCloudDirectorMediaType.USER)
@JAXBResponseParser
@ExceptionParser(ThrowVCloudErrorOn4xx.class)
ListenableFuture<User> createUser(@EndpointParam URI orgRef,
ListenableFuture<User> createUser(@EndpointParam URI userRef,
@BinderParam(BindToXMLPayload.class) User user);
/**
@ -67,7 +68,16 @@ public interface UserAsyncClient {
@ExceptionParser(ThrowVCloudErrorOn4xx.class)
ListenableFuture<User> getUser(@EndpointParam URI userRef);
// PUT /admin/user/{id}
/**
* @see UserClient#updateUser(URI, User)
*/
@PUT
@Consumes(VCloudDirectorMediaType.USER)
@Produces(VCloudDirectorMediaType.USER)
@JAXBResponseParser
@ExceptionParser(ThrowVCloudErrorOn4xx.class)
ListenableFuture<User> updateUser(@EndpointParam URI userRef,
@BinderParam(BindToXMLPayload.class) User user);
/**
* @see UserClient#deleteUser(URI)

View File

@ -57,7 +57,18 @@ public interface UserClient {
*/
User getUser(URI userRef);
// PUT /admin/user/{id}
/**
* Modifies a user. The user object could be enabled or disabled.
* Note: the lock status cannot be changed using this call: use unlockUser.
*
* <pre>
* PUT /admin/user/{id}
* </pre>
*
* @param userRef the reference for the user
* @return the modified user
*/
User updateUser(URI userRef, User user);
/**
* Deletes a user. Enabled and disabled users could be deleted.

View File

@ -132,7 +132,45 @@ public class UserClientExpectTest extends BaseVCloudDirectorRestClientExpectTest
.build();
}
// PUT /admin/user/{id}
@Test
public void testUpdateUser() {
VCloudDirectorClient client = requestsSendResponses(loginRequest, sessionResponse,
new VcloudHttpRequestPrimer()
.apiCommand("PUT", "/admin/user/b37223f3-8792-477a-820f-334998f61cd6")
.xmlFilePayload("/user/updateUserSource.xml", VCloudDirectorMediaType.USER)
.acceptMedia(VCloudDirectorMediaType.USER)
.httpRequestBuilder().build(),
new VcloudHttpResponsePrimer()
.xmlFilePayload("/user/updateUser.xml", VCloudDirectorMediaType.USER)
.httpResponseBuilder().build());
User source = updateUserSource();
User expected = updateUser();
assertEquals(client.getUserClient().updateUser(userRef.getHref(), source), expected);
}
public static final User updateUserSource() {
return user().toBuilder()
.fullName("new"+user().getFullName())
.emailAddress("new"+user().getEmailAddress())
.telephone("1-"+user().getTelephone())
.isEnabled(true)
.im("new"+user().getIM())
.isAlertEnabled(true)
.alertEmailPrefix("new"+user().getAlertEmailPrefix())
.alertEmail("new"+user().getAlertEmail())
.storedVmQuota(1)
.deployedVmQuota(1)
.password("newPassword")
.build();
}
public static final User updateUser() {
return updateUserSource().toBuilder()
.password(null)
.build();
}
// POST /admin/user/{id}/action/unlock

View File

@ -18,9 +18,12 @@
*/
package org.jclouds.vcloud.director.v1_5.features;
import static com.google.common.base.Objects.equal;
import static org.jclouds.vcloud.director.v1_5.VCloudDirectorLiveTestConstants.OBJ_DEL;
import static org.jclouds.vcloud.director.v1_5.VCloudDirectorLiveTestConstants.OBJ_FIELD_UPDATABLE;
import static org.testng.Assert.assertEquals;
import static org.testng.Assert.assertNull;
import static org.testng.Assert.assertTrue;
import static org.testng.Assert.fail;
import java.net.URI;
@ -28,6 +31,7 @@ import java.net.URI;
import org.jclouds.vcloud.director.v1_5.VCloudDirectorException;
import org.jclouds.vcloud.director.v1_5.domain.Checks;
import org.jclouds.vcloud.director.v1_5.domain.Error;
import org.jclouds.vcloud.director.v1_5.domain.Owner;
import org.jclouds.vcloud.director.v1_5.domain.Reference;
import org.jclouds.vcloud.director.v1_5.domain.ReferenceType;
import org.jclouds.vcloud.director.v1_5.domain.User;
@ -99,12 +103,69 @@ public class UserClientLiveTest extends BaseVCloudDirectorClientLiveTest {
Checks.checkUser(user);
}
// PUT /admin/user/{id}
@Test(testName = "PUT /admin/user/{id}",
dependsOnMethods = { "testGetUser" })
public void testUpdateUser() {
User oldUser = user.toBuilder().build();
User newUser = user.toBuilder()
// .name("new"+oldUser.getName())
.fullName("new"+oldUser.getFullName())
.emailAddress("new"+oldUser.getEmailAddress())
.telephone("1-"+oldUser.getTelephone())
.isEnabled(true)
.im("new"+oldUser.getIM())
.isAlertEnabled(true)
.alertEmailPrefix("new"+oldUser.getAlertEmailPrefix())
.alertEmail("new"+oldUser.getAlertEmail())
// .role(Reference.builder() // FIXME: auto-fetch a role? or inject
// .name("vApp Author")
// .href(URI.create("https://vcloudbeta.bluelock.com/api/admin/role/1bf4457f-a253-3cf1-b163-f319f1a31802"))
// .build())
.storedVmQuota(1)
.deployedVmQuota(1)
.password("newPassword")
.build();
try {
userClient.updateUser(user.getHref(), newUser);
user = userClient.getUser(user.getHref());
Checks.checkUser(user);
// assertTrue(equal(user.getName(), newUser.getName()),
// String.format(OBJ_FIELD_UPDATABLE, USER, "name"));
assertTrue(equal(user.getFullName(), newUser.getFullName()),
String.format(OBJ_FIELD_UPDATABLE, USER, "fullName"));
assertTrue(equal(user.getEmailAddress(), newUser.getEmailAddress()),
String.format(OBJ_FIELD_UPDATABLE, USER, "emailAddress"));
assertTrue(equal(user.getTelephone(), newUser.getTelephone()),
String.format(OBJ_FIELD_UPDATABLE, USER, "telephone"));
assertTrue(equal(user.isEnabled(), newUser.isEnabled()),
String.format(OBJ_FIELD_UPDATABLE, USER, "isEnabled"));
assertTrue(equal(user.getIM(), newUser.getIM()),
String.format(OBJ_FIELD_UPDATABLE, USER, "im"));
assertTrue(equal(user.isAlertEnabled(), newUser.isAlertEnabled()),
String.format(OBJ_FIELD_UPDATABLE, USER, "isAlertEnabled"));
assertTrue(equal(user.getAlertEmailPrefix(), newUser.getAlertEmailPrefix()),
String.format(OBJ_FIELD_UPDATABLE, USER, "alertEmailPrefix"));
assertTrue(equal(user.getAlertEmail(), newUser.getAlertEmail()),
String.format(OBJ_FIELD_UPDATABLE, USER, "alertEmail"));
// assertTrue(equal(user.getRole(), newUser.getRole()),
// String.format(OBJ_FIELD_UPDATABLE, USER, "role"));
assertTrue(equal(user.getStoredVmQuota(), newUser.getStoredVmQuota()),
String.format(OBJ_FIELD_UPDATABLE, USER, "storedVmQuota"));
assertTrue(equal(user.getDeployedVmQuota(), newUser.getDeployedVmQuota()),
String.format(OBJ_FIELD_UPDATABLE, USER, "deployedVmQuota"));
// FIXME: assert password is changed with session client?
} finally {
userClient.updateUser(user.getHref(), oldUser);
user = userClient.getUser(user.getHref());
}
}
// POST /admin/user/{id}/action/unlock
@Test(testName = "DELETE /admin/user/{id}",
dependsOnMethods = { "testGetUser" } )
dependsOnMethods = { "testUpdateUser" } )
public void testDeleteUser() {
userClient.deleteUser(user.getHref());

View File

@ -0,0 +1,21 @@
<?xml version="1.0" encoding="UTF-8"?>
<User xmlns="http://www.vmware.com/vcloud/v1.5" name="test" id="urn:vcloud:user:b37223f3-8792-477a-820f-334998f61cd6" type="application/vnd.vmware.admin.user+xml" href="https://vcloudbeta.bluelock.com/api/admin/user/5fc76423-0380-4a6d-9f52-dffb4ffaa46a" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.vmware.com/vcloud/v1.5 http://vcloudbeta.bluelock.com/api/v1.5/schema/master.xsd">
<Link rel="edit" type="application/vnd.vmware.admin.user+xml" href="https://vcloudbeta.bluelock.com/api/admin/user/b37223f3-8792-477a-820f-334998f61cd6"/>
<FullName>newtestFullName</FullName>
<EmailAddress>newtest@test.com</EmailAddress>
<Telephone>1-555-1234</Telephone>
<IsEnabled>true</IsEnabled>
<IsLocked>false</IsLocked>
<IM>newtestIM</IM>
<NameInSource>test</NameInSource>
<IsAlertEnabled>true</IsAlertEnabled>
<AlertEmailPrefix>newtestPrefix</AlertEmailPrefix>
<AlertEmail>newtestAlert@test.com</AlertEmail>
<IsExternal>false</IsExternal>
<IsDefaultCached>false</IsDefaultCached>
<IsGroupRole>false</IsGroupRole>
<StoredVmQuota>1</StoredVmQuota>
<DeployedVmQuota>1</DeployedVmQuota>
<Role type="application/vnd.vmware.admin.role+xml" name="vApp User" href="https://vcloudbeta.bluelock.com/api/admin/role/ff1e0c91-1288-3664-82b7-a6fa303af4d1"/>
<GroupReferences/>
</User>

View File

@ -0,0 +1,23 @@
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<User name="test" id="urn:vcloud:user:b37223f3-8792-477a-820f-334998f61cd6" type="application/vnd.vmware.admin.user+xml" href="https://vcloudbeta.bluelock.com/api/admin/user/b37223f3-8792-477a-820f-334998f61cd6" xmlns="http://www.vmware.com/vcloud/v1.5">
<Link rel="edit" type="application/vnd.vmware.admin.user+xml" href="https://vcloudbeta.bluelock.com/api/admin/user/b37223f3-8792-477a-820f-334998f61cd6"/>
<Link rel="remove" href="https://vcloudbeta.bluelock.com/api/admin/user/b37223f3-8792-477a-820f-334998f61cd6"/>
<FullName>newtestFullName</FullName>
<EmailAddress>newtest@test.com</EmailAddress>
<Telephone>1-555-1234</Telephone>
<IsEnabled>true</IsEnabled>
<IsLocked>false</IsLocked>
<IM>newtestIM</IM>
<NameInSource>test</NameInSource>
<IsAlertEnabled>true</IsAlertEnabled>
<AlertEmailPrefix>newtestPrefix</AlertEmailPrefix>
<AlertEmail>newtestAlert@test.com</AlertEmail>
<IsExternal>false</IsExternal>
<IsDefaultCached>false</IsDefaultCached>
<IsGroupRole>false</IsGroupRole>
<StoredVmQuota>1</StoredVmQuota>
<DeployedVmQuota>1</DeployedVmQuota>
<Role type="application/vnd.vmware.admin.role+xml" name="vApp User" href="https://vcloudbeta.bluelock.com/api/admin/role/ff1e0c91-1288-3664-82b7-a6fa303af4d1"/>
<Password>newPassword</Password>
<GroupReferences/>
</User>