mirror of
				https://github.com/apache/cloudstack.git
				synced 2025-10-26 08:42:29 +01:00 
			
		
		
		
	server: do not check zone imagestores for directdownload template delete (#7607)
Signed-off-by: Abhishek Kumar <abhishek.mrt22@gmail.com>
This commit is contained in:
		
							parent
							
								
									1275db4081
								
							
						
					
					
						commit
						5e5d194d77
					
				| @ -177,7 +177,10 @@ public class HypervisorTemplateAdapter extends TemplateAdapterBase { | ||||
|         return ans.getTemplateSize(); | ||||
|     } | ||||
| 
 | ||||
|     private void checkZoneImageStores(final List<Long> zoneIdList) { | ||||
|     protected void checkZoneImageStores(final VMTemplateVO template, final List<Long> zoneIdList) { | ||||
|         if (template.isDirectDownload()) { | ||||
|             return; | ||||
|         } | ||||
|         if (zoneIdList != null && CollectionUtils.isEmpty(storeMgr.getImageStoresByScope(new ZoneScope(zoneIdList.get(0))))) { | ||||
|             throw new InvalidParameterValueException("Failed to find a secondary storage in the specified zone."); | ||||
|         } | ||||
| @ -677,14 +680,14 @@ public class HypervisorTemplateAdapter extends TemplateAdapterBase { | ||||
|         if (template.getTemplateType() == TemplateType.SYSTEM) { | ||||
|             throw new InvalidParameterValueException("The DomR template cannot be deleted."); | ||||
|         } | ||||
|         checkZoneImageStores(profile.getZoneIdList()); | ||||
|         checkZoneImageStores(profile.getTemplate(), profile.getZoneIdList()); | ||||
|         return profile; | ||||
|     } | ||||
| 
 | ||||
|     @Override | ||||
|     public TemplateProfile prepareDelete(DeleteIsoCmd cmd) { | ||||
|         TemplateProfile profile = super.prepareDelete(cmd); | ||||
|         checkZoneImageStores(profile.getZoneIdList()); | ||||
|         checkZoneImageStores(profile.getTemplate(), profile.getZoneIdList()); | ||||
|         return profile; | ||||
|     } | ||||
| } | ||||
|  | ||||
| @ -18,6 +18,13 @@ | ||||
| 
 | ||||
| package com.cloud.template; | ||||
| 
 | ||||
| import static org.mockito.Mockito.any; | ||||
| import static org.mockito.Mockito.anyLong; | ||||
| import static org.mockito.Mockito.doAnswer; | ||||
| import static org.mockito.Mockito.eq; | ||||
| import static org.mockito.Mockito.mock; | ||||
| import static org.mockito.Mockito.when; | ||||
| 
 | ||||
| import java.lang.reflect.Field; | ||||
| import java.lang.reflect.InvocationTargetException; | ||||
| import java.lang.reflect.Method; | ||||
| @ -29,6 +36,7 @@ import java.util.Map; | ||||
| import java.util.concurrent.ExecutionException; | ||||
| 
 | ||||
| import org.apache.cloudstack.engine.subsystem.api.storage.DataStore; | ||||
| import org.apache.cloudstack.engine.subsystem.api.storage.DataStoreManager; | ||||
| import org.apache.cloudstack.engine.subsystem.api.storage.TemplateDataFactory; | ||||
| import org.apache.cloudstack.engine.subsystem.api.storage.TemplateInfo; | ||||
| import org.apache.cloudstack.engine.subsystem.api.storage.TemplateService; | ||||
| @ -44,7 +52,7 @@ import org.apache.cloudstack.storage.datastore.db.TemplateDataStoreVO; | ||||
| import org.apache.cloudstack.storage.image.datastore.ImageStoreEntity; | ||||
| import org.junit.Assert; | ||||
| import org.junit.Before; | ||||
| //import org.junit.Test; | ||||
| import org.junit.Test; | ||||
| import org.junit.runner.RunWith; | ||||
| import org.mockito.InjectMocks; | ||||
| import org.mockito.Mock; | ||||
| @ -61,23 +69,17 @@ import com.cloud.event.EventTypes; | ||||
| import com.cloud.event.UsageEventUtils; | ||||
| import com.cloud.event.UsageEventVO; | ||||
| import com.cloud.event.dao.UsageEventDao; | ||||
| import com.cloud.exception.InvalidParameterValueException; | ||||
| import com.cloud.storage.Storage.ImageFormat; | ||||
| import com.cloud.storage.TemplateProfile; | ||||
| import com.cloud.storage.VMTemplateStorageResourceAssoc.Status; | ||||
| import com.cloud.storage.dao.VMTemplateZoneDao; | ||||
| import com.cloud.storage.VMTemplateVO; | ||||
| import com.cloud.storage.dao.VMTemplateZoneDao; | ||||
| import com.cloud.user.AccountVO; | ||||
| import com.cloud.user.ResourceLimitService; | ||||
| import com.cloud.user.dao.AccountDao; | ||||
| import com.cloud.utils.component.ComponentContext; | ||||
| 
 | ||||
| import static org.mockito.Mockito.any; | ||||
| import static org.mockito.Mockito.anyLong; | ||||
| import static org.mockito.Mockito.when; | ||||
| import static org.mockito.Mockito.eq; | ||||
| import static org.mockito.Mockito.doAnswer; | ||||
| import static org.mockito.Mockito.mock; | ||||
| 
 | ||||
| @RunWith(PowerMockRunner.class) | ||||
| @PrepareForTest(ComponentContext.class) | ||||
| public class HypervisorTemplateAdapterTest { | ||||
| @ -118,6 +120,9 @@ public class HypervisorTemplateAdapterTest { | ||||
|     @Mock | ||||
|     ConfigurationDao _configDao; | ||||
| 
 | ||||
|     @Mock | ||||
|     DataStoreManager storeMgr; | ||||
| 
 | ||||
|     @InjectMocks | ||||
|     HypervisorTemplateAdapter _adapter; | ||||
| 
 | ||||
| @ -282,4 +287,27 @@ public class HypervisorTemplateAdapterTest { | ||||
| 
 | ||||
|         cleanupUsageUtils(); | ||||
|     } | ||||
| 
 | ||||
|     @Test | ||||
|     public void testCheckZoneImageStoresDirectDownloadTemplate() { | ||||
|         VMTemplateVO templateVO = Mockito.mock(VMTemplateVO.class); | ||||
|         Mockito.when(templateVO.isDirectDownload()).thenReturn(true); | ||||
|         _adapter.checkZoneImageStores(templateVO, List.of(1L)); | ||||
|     } | ||||
| 
 | ||||
|     @Test | ||||
|     public void testCheckZoneImageStoresRegularTemplateWithStore() { | ||||
|         VMTemplateVO templateVO = Mockito.mock(VMTemplateVO.class); | ||||
|         Mockito.when(templateVO.isDirectDownload()).thenReturn(false); | ||||
|         Mockito.when(storeMgr.getImageStoresByScope(Mockito.any())).thenReturn(List.of(Mockito.mock(DataStore.class))); | ||||
|         _adapter.checkZoneImageStores(templateVO, List.of(1L)); | ||||
|     } | ||||
| 
 | ||||
|     @Test(expected = InvalidParameterValueException.class) | ||||
|     public void testCheckZoneImageStoresRegularTemplateNoStore() { | ||||
|         VMTemplateVO templateVO = Mockito.mock(VMTemplateVO.class); | ||||
|         Mockito.when(templateVO.isDirectDownload()).thenReturn(false); | ||||
|         Mockito.when(storeMgr.getImageStoresByScope(Mockito.any())).thenReturn(new ArrayList<>()); | ||||
|         _adapter.checkZoneImageStores(templateVO, List.of(1L)); | ||||
|     } | ||||
| } | ||||
|  | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user