1 package org.openecomp.sdc.asdctool.migration.tasks.mig1710;
4 import static org.junit.Assert.assertEquals;
5 import static org.mockito.ArgumentMatchers.any;
6 import static org.mockito.ArgumentMatchers.anyString;
7 import static org.mockito.ArgumentMatchers.eq;
8 import static org.mockito.Mockito.doReturn;
9 import static org.mockito.Mockito.times;
10 import static org.mockito.Mockito.verify;
11 import static org.mockito.Mockito.when;
13 import java.util.HashMap;
14 import java.util.List;
16 import java.util.stream.Collectors;
17 import java.util.stream.Stream;
19 import org.junit.Before;
20 import org.junit.BeforeClass;
21 import org.junit.Test;
22 import org.junit.runner.RunWith;
23 import org.mockito.InjectMocks;
24 import org.mockito.Mock;
25 import org.mockito.junit.MockitoJUnitRunner;
26 import org.openecomp.sdc.asdctool.migration.core.task.MigrationResult;
27 import org.openecomp.sdc.asdctool.migration.tasks.handlers.XlsOutputHandler;
28 import org.openecomp.sdc.be.components.lifecycle.LifecycleBusinessLogic;
29 import org.openecomp.sdc.be.config.Configuration;
30 import org.openecomp.sdc.be.config.ConfigurationManager;
31 import org.openecomp.sdc.be.dao.api.ActionStatus;
32 import org.openecomp.sdc.be.dao.jsongraph.GraphVertex;
33 import org.openecomp.sdc.be.dao.jsongraph.TitanDao;
34 import org.openecomp.sdc.be.dao.titan.TitanOperationStatus;
35 import org.openecomp.sdc.be.datatypes.enums.JsonPresentationFields;
36 import org.openecomp.sdc.be.datatypes.enums.OriginTypeEnum;
37 import org.openecomp.sdc.be.impl.ComponentsUtils;
38 import org.openecomp.sdc.be.model.Component;
39 import org.openecomp.sdc.be.model.ComponentInstance;
40 import org.openecomp.sdc.be.model.LifecycleStateEnum;
41 import org.openecomp.sdc.be.model.Resource;
42 import org.openecomp.sdc.be.model.User;
43 import org.openecomp.sdc.be.model.jsontitan.operations.ToscaOperationFacade;
44 import org.openecomp.sdc.be.model.operations.api.IUserAdminOperation;
45 import org.openecomp.sdc.be.model.operations.api.StorageOperationStatus;
46 import org.openecomp.sdc.common.api.ConfigurationSource;
47 import org.openecomp.sdc.exception.ResponseFormat;
49 import com.google.common.collect.Lists;
51 import fj.data.Either;
52 @RunWith(MockitoJUnitRunner.class)
53 public class UpgradeMigration1710Test {
55 private final static String USER = "jh0003";
56 private final static String CONF_LEVEL = "5.0";
58 private final User user = new User();
61 private UpgradeMigration1710 migration = new UpgradeMigration1710();
63 private IUserAdminOperation userAdminOperation;
65 private ToscaOperationFacade toscaOperationFacade;
67 private LifecycleBusinessLogic lifecycleBusinessLogic;
69 private TitanDao titanDao;
71 private ComponentsUtils componentUtils;
73 private ConfigurationSource configurationSource;
75 private XlsOutputHandler outputHandler;
77 private static ConfigurationManager configurationManager;
78 private static List<String> resources = Stream.of("org.openecomp.resource.cp.extCP").collect(Collectors.toList());
79 private static Map<String, List<String>> resourcesForUpgrade;
82 public static void setUpClass() {
83 resourcesForUpgrade = new HashMap<>();
84 resourcesForUpgrade.put(CONF_LEVEL, resources);
90 configurationManager = new ConfigurationManager(configurationSource);
91 configurationManager.setConfiguration(new Configuration());
92 configurationManager.getConfiguration().setSkipUpgradeVSPs(true);
93 configurationManager.getConfiguration().setSkipUpgradeFailedVfs(true);
94 configurationManager.getConfiguration().setAutoHealingOwner(USER);
99 public void nodeTypesUpgradeFailed() {
100 resolveUserAndDefineUpgradeLevel();
101 when(titanDao.getByCriteria(any(), any(), any(), any()))
102 .thenReturn(Either.right(TitanOperationStatus.NOT_FOUND));
103 assertEquals(MigrationResult.MigrationStatus.FAILED, migration.migrate().getMigrationStatus());
107 public void nodeTypesUpgradePassedAndVFsUpgradeFailedWhenSkipFailedVFsIsNotSupported() {
108 final boolean failOnVfUpgrade = true;
109 final boolean upgradeServices = false;
110 final boolean exceptionOnVfUpgrade = false;
111 final boolean upgradeVFC = false;
112 configurationManager.getConfiguration().setSkipUpgradeFailedVfs(false);
113 resolveUserAndDefineUpgradeLevel();
114 upgradeRules(failOnVfUpgrade, exceptionOnVfUpgrade, upgradeServices, upgradeVFC);
115 assertEquals(MigrationResult.MigrationStatus.FAILED, migration.migrate().getMigrationStatus());
116 verify(titanDao, times(1)).commit();
117 verify(titanDao, times(2)).rollback();
121 public void upgradeAllVFsUpgradeFailedOnExceptionWhenSkipFailedVFsIsNotSupported() {
122 final boolean failOnVfUpgrade = false;
123 final boolean upgradeServices = false;
124 final boolean exceptionOnVfUpgrade = true;
125 final boolean upgradeVFC = false;
126 configurationManager.getConfiguration().setSkipUpgradeFailedVfs(false);
127 resolveUserAndDefineUpgradeLevel();
128 upgradeRules(failOnVfUpgrade, exceptionOnVfUpgrade, upgradeServices, upgradeVFC);
129 assertEquals(MigrationResult.MigrationStatus.FAILED, migration.migrate().getMigrationStatus());
130 verify(titanDao, times(1)).commit();
131 verify(titanDao, times(2)).rollback();
135 public void upgradeAllIfVFsUpgradeFailedOnExceptionWhenSkipFailedVFsIsSupported() {
136 final boolean failOnVfUpgrade = false;
137 final boolean upgradeServices = true;
138 final boolean exceptionOnFvUpgrade = true;
139 final boolean upgradeVFC = false;
140 configurationManager.getConfiguration().setSkipUpgradeFailedVfs(true);
141 resolveUserAndDefineUpgradeLevel();
142 upgradeRules(failOnVfUpgrade, exceptionOnFvUpgrade, upgradeServices, upgradeVFC);
143 assertEquals(MigrationResult.MigrationStatus.COMPLETED, migration.migrate().getMigrationStatus());
144 verify(titanDao, times(2)).commit();
145 verify(titanDao, times(3)).rollback();
150 public void upgradeAll() {
151 final boolean failOnVfUpgrade = false;
152 final boolean upgradeServices = true;
153 final boolean exceptionOnFvUpgrade = false;
154 final boolean upgradeVFC = false;
155 resolveUserAndDefineUpgradeLevel();
156 upgradeRules(failOnVfUpgrade, exceptionOnFvUpgrade, upgradeServices, upgradeVFC);
157 assertEquals(MigrationResult.MigrationStatus.COMPLETED, migration.migrate().getMigrationStatus());
158 verify(titanDao, times(2)).commit();
159 verify(titanDao, times(3)).rollback();
163 public void upgradeAllWhenVspUpgradeIsRequired() {
164 final boolean failOnVfUpgrade = false;
165 final boolean upgradeServices = true;
166 final boolean exceptionOnFvUpgrade = false;
167 final boolean upgradeVFC = true;
168 resolveUserAndDefineUpgradeLevel();
169 upgradeRules(failOnVfUpgrade, exceptionOnFvUpgrade, upgradeServices, upgradeVFC);
170 configurationManager.getConfiguration().setSkipUpgradeVSPs(false);
171 // migration.setComponentsUtils(componentUtils);
172 assertEquals(MigrationResult.MigrationStatus.COMPLETED, migration.migrate().getMigrationStatus());
176 public void migrationFailedWhenUserNotResolved() {
177 when(userAdminOperation.getUserData(anyString(), eq(false))).thenReturn(Either.right(ActionStatus.MISSING_INFORMATION));
178 when(titanDao.rollback()).thenReturn(TitanOperationStatus.OK);
179 assertEquals(MigrationResult.MigrationStatus.FAILED, migration.migrate().getMigrationStatus());
182 private void resolveUserAndDefineUpgradeLevel() {
183 when(userAdminOperation.getUserData(anyString(), eq(false))).thenReturn(Either.left(user));
184 configurationManager.getConfiguration().setToscaConformanceLevel(CONF_LEVEL);
185 configurationManager.getConfiguration().setResourcesForUpgrade(resourcesForUpgrade);
188 private void upgradeRules(boolean failedVfUpgrade, boolean exceptionOnVfUpgrade, boolean upgradeService, boolean upgradeVFCs) {
189 GraphVertex component = new GraphVertex();
190 component.setJsonMetadataField(JsonPresentationFields.LIFECYCLE_STATE, LifecycleStateEnum.CERTIFIED.name());
191 component.setJsonMetadataField(JsonPresentationFields.UNIQUE_ID, "12345");
192 List<GraphVertex> components = Lists.newArrayList();
193 components.add(component);
195 Resource resource = new Resource();
196 Either<Component, StorageOperationStatus> foundResource = Either.left(resource);
198 when(titanDao.getByCriteria(any(), any(), any(), any()))
199 .thenReturn(Either.left(components));
200 when(titanDao.getParentVertecies(any(GraphVertex.class), any(), any()))
201 //1th node to upgrade
202 .thenReturn(Either.left(components))
203 //parent of the 1th node - stop recursion
204 .thenReturn(Either.right(TitanOperationStatus.NOT_FOUND));
205 if (failedVfUpgrade) {
206 Either<Component, StorageOperationStatus> getToscaForVF = Either.right(StorageOperationStatus.NOT_FOUND);
207 when(toscaOperationFacade.getToscaElement(anyString())).thenReturn(foundResource)
208 .thenReturn(foundResource)
209 .thenReturn(getToscaForVF);
212 if (exceptionOnVfUpgrade) {
213 when(toscaOperationFacade.getToscaElement(anyString())).thenReturn(foundResource)
214 .thenReturn(foundResource)
215 .thenThrow(new RuntimeException());
218 when(toscaOperationFacade.getToscaElement(anyString())).thenReturn(foundResource);
220 if (upgradeService) {
221 Either<Resource, StorageOperationStatus> service = Either.left(resource);
223 when(componentUtils.convertFromStorageResponse(any(), any())).thenCallRealMethod();
224 when(componentUtils.getResponseFormat(any(ActionStatus.class),any())).thenCallRealMethod();
225 when(toscaOperationFacade.getLatestCertifiedByToscaResourceName(any(), any(), any()))
227 .thenReturn(Either.right(StorageOperationStatus.NOT_FOUND))
229 .thenReturn(Either.right(StorageOperationStatus.NOT_FOUND));
232 when(toscaOperationFacade.getLatestCertifiedByToscaResourceName(any(), any(), any()))
233 .thenReturn(service);
238 List<ComponentInstance> instances = Lists.newArrayList();
239 instances.add(createComponentInstance());
240 resource.setComponentInstances(instances);
241 Either<Resource, ResponseFormat> fromLifeCycle = Either.left(resource);
242 doReturn(fromLifeCycle).when(lifecycleBusinessLogic)
243 .changeComponentState(any(), any(), any(), any(), any(),eq(true), eq(false));
247 private ComponentInstance createComponentInstance() {
248 ComponentInstance instance = new ComponentInstance();
249 instance.setIcon("");
250 instance.setUniqueId("");
251 instance.setName("");
252 instance.setComponentUid("");
253 instance.setCreationTime(1L);
254 instance.setModificationTime(2L);
255 instance.setDescription("");
256 instance.setPosX("");
257 instance.setPosY("");
258 instance.setPropertyValueCounter(1);
259 instance.setNormalizedName("");
260 instance.setOriginType(OriginTypeEnum.CVFC);
261 instance.setCustomizationUUID("");
262 instance.setComponentName("");
263 instance.setComponentVersion("");
264 instance.setToscaComponentName("");
265 instance.setInvariantName("");
266 instance.setSourceModelInvariant("");
267 instance.setSourceModelName("");
268 instance.setSourceModelUuid("");
269 instance.setSourceModelUid("");
270 instance.setIsProxy(false);