mirror of
https://github.com/apache/cloudstack.git
synced 2025-10-26 08:42:29 +01:00
Added new field to updateBackupOffering API. (#6190)
* Added new field to updateBackupOffering API. * Fix some unit tests. Co-authored-by: João Paraquetti <joao@scclouds.com.br> Co-authored-by: Joao <JoaoJandre@gitlab.com>
This commit is contained in:
parent
133b195688
commit
afc819e5c8
@ -27,6 +27,7 @@ import org.apache.cloudstack.api.ServerApiException;
|
|||||||
import org.apache.cloudstack.api.response.BackupOfferingResponse;
|
import org.apache.cloudstack.api.response.BackupOfferingResponse;
|
||||||
import org.apache.cloudstack.backup.BackupManager;
|
import org.apache.cloudstack.backup.BackupManager;
|
||||||
import org.apache.cloudstack.backup.BackupOffering;
|
import org.apache.cloudstack.backup.BackupOffering;
|
||||||
|
import org.apache.cloudstack.utils.reflectiontostringbuilderutils.ReflectionToStringBuilderUtils;
|
||||||
import org.apache.commons.lang3.StringUtils;
|
import org.apache.commons.lang3.StringUtils;
|
||||||
import org.apache.log4j.Logger;
|
import org.apache.log4j.Logger;
|
||||||
|
|
||||||
@ -55,6 +56,9 @@ public class UpdateBackupOfferingCmd extends BaseCmd {
|
|||||||
@Parameter(name = ApiConstants.NAME, type = CommandType.STRING, description = "The name of the Backup Offering to be updated")
|
@Parameter(name = ApiConstants.NAME, type = CommandType.STRING, description = "The name of the Backup Offering to be updated")
|
||||||
private String name;
|
private String name;
|
||||||
|
|
||||||
|
@Parameter(name = ApiConstants.ALLOW_USER_DRIVEN_BACKUPS, type = CommandType.BOOLEAN, description = "Whether to allow user driven backups or not")
|
||||||
|
private Boolean allowUserDrivenBackups;
|
||||||
|
|
||||||
/////////////////////////////////////////////////////
|
/////////////////////////////////////////////////////
|
||||||
/////////////////// Accessors ///////////////////////
|
/////////////////// Accessors ///////////////////////
|
||||||
/////////////////////////////////////////////////////
|
/////////////////////////////////////////////////////
|
||||||
@ -70,20 +74,26 @@ public class UpdateBackupOfferingCmd extends BaseCmd {
|
|||||||
return description;
|
return description;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public Boolean getAllowUserDrivenBackups() {
|
||||||
|
return allowUserDrivenBackups;
|
||||||
|
}
|
||||||
|
|
||||||
/////////////////////////////////////////////////////
|
/////////////////////////////////////////////////////
|
||||||
/////////////// API Implementation///////////////////
|
/////////////// API Implementation///////////////////
|
||||||
/////////////////////////////////////////////////////
|
/////////////////////////////////////////////////////
|
||||||
@Override
|
@Override
|
||||||
public void execute() {
|
public void execute() {
|
||||||
try {
|
try {
|
||||||
if (StringUtils.isAllEmpty(name, description)) {
|
if (StringUtils.isAllEmpty(getName(), getDescription()) && getAllowUserDrivenBackups() == null) {
|
||||||
throw new InvalidParameterValueException(String.format("Can't update Backup Offering [id: %s] because there is no change in name or description.", id));
|
throw new InvalidParameterValueException(String.format("Can't update Backup Offering [id: %s] because there are no parameters to be updated, at least one of the",
|
||||||
|
"following should be informed: name, description or allowUserDrivenBackups.", id));
|
||||||
}
|
}
|
||||||
|
|
||||||
BackupOffering result = backupManager.updateBackupOffering(this);
|
BackupOffering result = backupManager.updateBackupOffering(this);
|
||||||
|
|
||||||
if (result == null) {
|
if (result == null) {
|
||||||
throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, String.format("Failed to update backup offering [id: %s, name: %s, description: %s].", id, name, description));
|
throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, String.format("Failed to update backup offering %s.",
|
||||||
|
ReflectionToStringBuilderUtils.reflectOnlySelectedFields(this, "id", "name", "description", "allowUserDrivenBackups")));
|
||||||
}
|
}
|
||||||
BackupOfferingResponse response = _responseGenerator.createBackupOfferingResponse(result);
|
BackupOfferingResponse response = _responseGenerator.createBackupOfferingResponse(result);
|
||||||
response.setResponseName(getCommandName());
|
response.setResponseName(getCommandName());
|
||||||
|
|||||||
@ -1081,14 +1081,14 @@ public class BackupManagerImpl extends ManagerBase implements BackupManager {
|
|||||||
Long id = updateBackupOfferingCmd.getId();
|
Long id = updateBackupOfferingCmd.getId();
|
||||||
String name = updateBackupOfferingCmd.getName();
|
String name = updateBackupOfferingCmd.getName();
|
||||||
String description = updateBackupOfferingCmd.getDescription();
|
String description = updateBackupOfferingCmd.getDescription();
|
||||||
|
Boolean allowUserDrivenBackups = updateBackupOfferingCmd.getAllowUserDrivenBackups();
|
||||||
|
|
||||||
BackupOfferingVO backupOfferingVO = backupOfferingDao.findById(id);
|
BackupOfferingVO backupOfferingVO = backupOfferingDao.findById(id);
|
||||||
if (backupOfferingVO == null) {
|
if (backupOfferingVO == null) {
|
||||||
throw new InvalidParameterValueException(String.format("Unable to find Backup Offering with id: [%s].", id));
|
throw new InvalidParameterValueException(String.format("Unable to find Backup Offering with id: [%s].", id));
|
||||||
}
|
}
|
||||||
|
LOG.debug(String.format("Trying to update Backup Offering %s to %s.", ReflectionToStringBuilderUtils.reflectOnlySelectedFields(backupOfferingVO,"uuid", "name",
|
||||||
LOG.debug(String.format("Trying to update Backup Offering [id: %s, name: %s, description: %s] to [name: %s, description: %s].",
|
"description", "userDrivenBackupAllowed"), ReflectionToStringBuilderUtils.reflectOnlySelectedFields(this,"name", "description", "allowUserDrivenBackups")));
|
||||||
backupOfferingVO.getUuid(), backupOfferingVO.getName(), backupOfferingVO.getDescription(), name, description));
|
|
||||||
|
|
||||||
BackupOfferingVO offering = backupOfferingDao.createForUpdate(id);
|
BackupOfferingVO offering = backupOfferingDao.createForUpdate(id);
|
||||||
List<String> fields = new ArrayList<>();
|
List<String> fields = new ArrayList<>();
|
||||||
@ -1102,13 +1102,19 @@ public class BackupManagerImpl extends ManagerBase implements BackupManager {
|
|||||||
fields.add("description: " + description);
|
fields.add("description: " + description);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
if (allowUserDrivenBackups != null){
|
||||||
|
offering.setUserDrivenBackupAllowed(allowUserDrivenBackups);
|
||||||
|
fields.add("allowUserDrivenBackups: " + allowUserDrivenBackups);
|
||||||
|
}
|
||||||
|
|
||||||
if (!backupOfferingDao.update(id, offering)) {
|
if (!backupOfferingDao.update(id, offering)) {
|
||||||
LOG.warn(String.format("Couldn't update Backup offering [id: %s] with [%s].", id, String.join(", ", fields)));
|
LOG.warn(String.format("Couldn't update Backup offering [id: %s] with [%s].", id, String.join(", ", fields)));
|
||||||
}
|
}
|
||||||
|
|
||||||
BackupOfferingVO response = backupOfferingDao.findById(id);
|
BackupOfferingVO response = backupOfferingDao.findById(id);
|
||||||
CallContext.current().setEventDetails(String.format("Backup Offering updated [%s].",
|
CallContext.current().setEventDetails(String.format("Backup Offering updated [%s].",
|
||||||
ReflectionToStringBuilderUtils.reflectOnlySelectedFields(response, "id", "name", "description", "externalId")));
|
ReflectionToStringBuilderUtils.reflectOnlySelectedFields(response, "id", "name", "description", "userDrivenBackupAllowed", "externalId")));
|
||||||
return response;
|
return response;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -18,6 +18,7 @@ package org.apache.cloudstack.backup;
|
|||||||
import static org.junit.Assert.assertEquals;
|
import static org.junit.Assert.assertEquals;
|
||||||
import static org.mockito.Mockito.when;
|
import static org.mockito.Mockito.when;
|
||||||
|
|
||||||
|
import org.apache.cloudstack.api.ServerApiException;
|
||||||
import org.apache.cloudstack.api.command.admin.backup.UpdateBackupOfferingCmd;
|
import org.apache.cloudstack.api.command.admin.backup.UpdateBackupOfferingCmd;
|
||||||
import org.apache.cloudstack.backup.dao.BackupOfferingDao;
|
import org.apache.cloudstack.backup.dao.BackupOfferingDao;
|
||||||
import org.junit.Before;
|
import org.junit.Before;
|
||||||
@ -48,6 +49,7 @@ public class BackupManagerTest {
|
|||||||
when(offering.getId()).thenReturn(1234l);
|
when(offering.getId()).thenReturn(1234l);
|
||||||
when(offering.getName()).thenCallRealMethod();
|
when(offering.getName()).thenCallRealMethod();
|
||||||
when(offering.getDescription()).thenCallRealMethod();
|
when(offering.getDescription()).thenCallRealMethod();
|
||||||
|
when(offering.isUserDrivenBackupAllowed()).thenCallRealMethod();
|
||||||
|
|
||||||
BackupOfferingVO offeringUpdate = Mockito.spy(BackupOfferingVO.class);
|
BackupOfferingVO offeringUpdate = Mockito.spy(BackupOfferingVO.class);
|
||||||
when(offeringUpdate.getId()).thenReturn(1234l);
|
when(offeringUpdate.getId()).thenReturn(1234l);
|
||||||
@ -59,6 +61,7 @@ public class BackupManagerTest {
|
|||||||
when(backupOfferingDao.update(1234l, offeringUpdate)).thenAnswer(answer -> {
|
when(backupOfferingDao.update(1234l, offeringUpdate)).thenAnswer(answer -> {
|
||||||
offering.setName("New name");
|
offering.setName("New name");
|
||||||
offering.setDescription("New description");
|
offering.setDescription("New description");
|
||||||
|
offering.setUserDrivenBackupAllowed(true);
|
||||||
return true;
|
return true;
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
@ -77,34 +80,26 @@ public class BackupManagerTest {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test (expected = InvalidParameterValueException.class)
|
||||||
public void testExceptionWhenUpdateWithNonExistentId() {
|
public void testExceptionWhenUpdateWithNonExistentId() {
|
||||||
try {
|
Long id = 123l;
|
||||||
Long id = 123l;
|
|
||||||
|
|
||||||
UpdateBackupOfferingCmd cmd = Mockito.spy(UpdateBackupOfferingCmd.class);
|
UpdateBackupOfferingCmd cmd = Mockito.spy(UpdateBackupOfferingCmd.class);
|
||||||
when(cmd.getId()).thenReturn(id);
|
when(cmd.getId()).thenReturn(id);
|
||||||
|
|
||||||
backupManager.updateBackupOffering(cmd);
|
backupManager.updateBackupOffering(cmd);
|
||||||
} catch (InvalidParameterValueException e) {
|
|
||||||
assertEquals("Unable to find Backup Offering with id: [123].", e.getMessage());
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test (expected = ServerApiException.class)
|
||||||
public void testExceptionWhenUpdateWithoutChanges() {
|
public void testExceptionWhenUpdateWithoutChanges() {
|
||||||
try {
|
UpdateBackupOfferingCmd cmd = Mockito.spy(UpdateBackupOfferingCmd.class);
|
||||||
Long id = 1234l;
|
when(cmd.getName()).thenReturn(null);
|
||||||
|
when(cmd.getDescription()).thenReturn(null);
|
||||||
|
when(cmd.getAllowUserDrivenBackups()).thenReturn(null);
|
||||||
|
|
||||||
UpdateBackupOfferingCmd cmd = Mockito.spy(UpdateBackupOfferingCmd.class);
|
Mockito.doCallRealMethod().when(cmd).execute();
|
||||||
when(cmd.getId()).thenReturn(id);
|
|
||||||
when(cmd.getName()).thenReturn(null);
|
|
||||||
when(cmd.getDescription()).thenReturn(null);
|
|
||||||
|
|
||||||
backupManager.updateBackupOffering(cmd);
|
cmd.execute();
|
||||||
} catch (InvalidParameterValueException e) {
|
|
||||||
assertEquals("Can't update Backup Offering [id: 1234] because there is no change in name or description.", e.getMessage());
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
@ -115,9 +110,11 @@ public class BackupManagerTest {
|
|||||||
when(cmd.getId()).thenReturn(id);
|
when(cmd.getId()).thenReturn(id);
|
||||||
when(cmd.getName()).thenReturn("New name");
|
when(cmd.getName()).thenReturn("New name");
|
||||||
when(cmd.getDescription()).thenReturn("New description");
|
when(cmd.getDescription()).thenReturn("New description");
|
||||||
|
when(cmd.getAllowUserDrivenBackups()).thenReturn(true);
|
||||||
|
|
||||||
BackupOffering updated = backupManager.updateBackupOffering(cmd);
|
BackupOffering updated = backupManager.updateBackupOffering(cmd);
|
||||||
assertEquals("New name", updated.getName());
|
assertEquals("New name", updated.getName());
|
||||||
assertEquals("New description", updated.getDescription());
|
assertEquals("New description", updated.getDescription());
|
||||||
|
assertEquals(true, updated.isUserDrivenBackupAllowed());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
Loading…
x
Reference in New Issue
Block a user