1 package org.openecomp.sdc.asdctool.migration.tasks.mig1710;
4 import com.google.common.collect.Lists;
6 import org.junit.Before;
7 import org.junit.BeforeClass;
9 import org.junit.runner.RunWith;
10 import org.mockito.InjectMocks;
11 import org.mockito.Mock;
12 import org.mockito.junit.MockitoJUnitRunner;
13 import org.openecomp.sdc.asdctool.migration.core.task.MigrationResult;
14 import org.openecomp.sdc.asdctool.migration.tasks.handlers.XlsOutputHandler;
15 import org.openecomp.sdc.be.components.lifecycle.LifecycleBusinessLogic;
16 import org.openecomp.sdc.be.config.Configuration;
17 import org.openecomp.sdc.be.config.ConfigurationManager;
18 import org.openecomp.sdc.be.dao.api.ActionStatus;
19 import org.openecomp.sdc.be.dao.jsongraph.GraphVertex;
20 import org.openecomp.sdc.be.dao.jsongraph.TitanDao;
21 import org.openecomp.sdc.be.dao.titan.TitanOperationStatus;
22 import org.openecomp.sdc.be.datatypes.enums.JsonPresentationFields;
23 import org.openecomp.sdc.be.datatypes.enums.OriginTypeEnum;
24 import org.openecomp.sdc.be.impl.ComponentsUtils;
25 import org.openecomp.sdc.be.model.*;
26 import org.openecomp.sdc.be.model.jsontitan.operations.ToscaOperationFacade;
27 import org.openecomp.sdc.be.model.operations.api.IUserAdminOperation;
28 import org.openecomp.sdc.be.model.operations.api.StorageOperationStatus;
29 import org.openecomp.sdc.common.api.ConfigurationSource;
30 import org.openecomp.sdc.exception.ResponseFormat;
33 import java.util.stream.Collectors;
34 import java.util.stream.Stream;
36 import static org.junit.Assert.assertEquals;
37 import static org.mockito.Mockito.*;
38 @RunWith(MockitoJUnitRunner.class)
39 public class UpgradeMigration1710Test {
41 private final static String USER = "jh0003";
42 private final static String CONF_LEVEL = "5.0";
44 private final User user = new User();
47 private UpgradeMigration1710 migration = new UpgradeMigration1710();
49 private IUserAdminOperation userAdminOperation;
51 private ToscaOperationFacade toscaOperationFacade;
53 private LifecycleBusinessLogic lifecycleBusinessLogic;
55 private TitanDao titanDao;
57 private ComponentsUtils componentUtils;
59 private ConfigurationSource configurationSource;
61 private XlsOutputHandler outputHandler;
63 private static ConfigurationManager configurationManager;
64 private static List<String> resources = Stream.of("org.openecomp.resource.cp.extCP").collect(Collectors.toList());
65 private static Map<String, List<String>> resourcesForUpgrade;
68 public static void setUpClass() {
69 resourcesForUpgrade = new HashMap<>();
70 resourcesForUpgrade.put(CONF_LEVEL, resources);
76 configurationManager = new ConfigurationManager(configurationSource);
77 configurationManager.setConfiguration(new Configuration());
78 configurationManager.getConfiguration().setSkipUpgradeVSPs(true);
79 configurationManager.getConfiguration().setSkipUpgradeFailedVfs(true);
80 configurationManager.getConfiguration().setAutoHealingOwner(USER);
85 public void nodeTypesUpgradeFailed() {
86 resolveUserAndDefineUpgradeLevel();
87 when(titanDao.getByCriteria(any(), any(), any(), any()))
88 .thenReturn(Either.right(TitanOperationStatus.NOT_FOUND));
89 assertEquals(MigrationResult.MigrationStatus.FAILED, migration.migrate().getMigrationStatus());
93 public void nodeTypesUpgradePassedAndVFsUpgradeFailedWhenSkipFailedVFsIsNotSupported() {
94 final boolean failOnVfUpgrade = true;
95 final boolean upgradeServices = false;
96 final boolean exceptionOnVfUpgrade = false;
97 final boolean upgradeVFC = false;
98 configurationManager.getConfiguration().setSkipUpgradeFailedVfs(false);
99 resolveUserAndDefineUpgradeLevel();
100 upgradeRules(failOnVfUpgrade, exceptionOnVfUpgrade, upgradeServices, upgradeVFC);
101 assertEquals(MigrationResult.MigrationStatus.FAILED, migration.migrate().getMigrationStatus());
102 verify(titanDao, times(1)).commit();
103 verify(titanDao, times(2)).rollback();
107 public void upgradeAllVFsUpgradeFailedOnExceptionWhenSkipFailedVFsIsNotSupported() {
108 final boolean failOnVfUpgrade = false;
109 final boolean upgradeServices = false;
110 final boolean exceptionOnVfUpgrade = true;
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 upgradeAllIfVFsUpgradeFailedOnExceptionWhenSkipFailedVFsIsSupported() {
122 final boolean failOnVfUpgrade = false;
123 final boolean upgradeServices = true;
124 final boolean exceptionOnFvUpgrade = true;
125 final boolean upgradeVFC = false;
126 configurationManager.getConfiguration().setSkipUpgradeFailedVfs(true);
127 resolveUserAndDefineUpgradeLevel();
128 upgradeRules(failOnVfUpgrade, exceptionOnFvUpgrade, upgradeServices, upgradeVFC);
129 assertEquals(MigrationResult.MigrationStatus.COMPLETED, migration.migrate().getMigrationStatus());
130 verify(titanDao, times(2)).commit();
131 verify(titanDao, times(3)).rollback();
136 public void upgradeAll() {
137 final boolean failOnVfUpgrade = false;
138 final boolean upgradeServices = true;
139 final boolean exceptionOnFvUpgrade = false;
140 final boolean upgradeVFC = false;
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();
149 public void upgradeAllWhenVspUpgradeIsRequired() {
150 final boolean failOnVfUpgrade = false;
151 final boolean upgradeServices = true;
152 final boolean exceptionOnFvUpgrade = false;
153 final boolean upgradeVFC = true;
154 resolveUserAndDefineUpgradeLevel();
155 upgradeRules(failOnVfUpgrade, exceptionOnFvUpgrade, upgradeServices, upgradeVFC);
156 configurationManager.getConfiguration().setSkipUpgradeVSPs(false);
157 // migration.setComponentsUtils(componentUtils);
158 assertEquals(MigrationResult.MigrationStatus.COMPLETED, migration.migrate().getMigrationStatus());
162 public void migrationFailedWhenUserNotResolved() {
163 when(userAdminOperation.getUserData(anyString(), eq(false))).thenReturn(Either.right(ActionStatus.MISSING_INFORMATION));
164 when(titanDao.rollback()).thenReturn(TitanOperationStatus.OK);
165 assertEquals(MigrationResult.MigrationStatus.FAILED, migration.migrate().getMigrationStatus());
168 private void resolveUserAndDefineUpgradeLevel() {
169 when(userAdminOperation.getUserData(anyString(), eq(false))).thenReturn(Either.left(user));
170 configurationManager.getConfiguration().setToscaConformanceLevel(CONF_LEVEL);
171 configurationManager.getConfiguration().setResourcesForUpgrade(resourcesForUpgrade);
174 private void upgradeRules(boolean failedVfUpgrade, boolean exceptionOnVfUpgrade, boolean upgradeService, boolean upgradeVFCs) {
175 GraphVertex component = new GraphVertex();
176 component.setJsonMetadataField(JsonPresentationFields.LIFECYCLE_STATE, LifecycleStateEnum.CERTIFIED.name());
177 component.setJsonMetadataField(JsonPresentationFields.UNIQUE_ID, "12345");
178 List<GraphVertex> components = Lists.newArrayList();
179 components.add(component);
181 Resource resource = new Resource();
182 Either<Component, StorageOperationStatus> foundResource = Either.left(resource);
184 when(titanDao.getByCriteria(any(), any(), any(), any()))
185 .thenReturn(Either.left(components));
186 when(titanDao.getParentVertecies(any(GraphVertex.class), any(), any()))
187 //1th node to upgrade
188 .thenReturn(Either.left(components))
189 //parent of the 1th node - stop recursion
190 .thenReturn(Either.right(TitanOperationStatus.NOT_FOUND));
191 if (failedVfUpgrade) {
192 Either<Component, StorageOperationStatus> getToscaForVF = Either.right(StorageOperationStatus.NOT_FOUND);
193 when(toscaOperationFacade.getToscaElement(anyString())).thenReturn(foundResource)
194 .thenReturn(foundResource)
195 .thenReturn(getToscaForVF);
198 if (exceptionOnVfUpgrade) {
199 when(toscaOperationFacade.getToscaElement(anyString())).thenReturn(foundResource)
200 .thenReturn(foundResource)
201 .thenThrow(new RuntimeException());
204 when(toscaOperationFacade.getToscaElement(anyString())).thenReturn(foundResource);
206 if (upgradeService) {
207 Either<Resource, StorageOperationStatus> service = Either.left(resource);
209 when(componentUtils.convertFromStorageResponse(any(), any())).thenCallRealMethod();
210 when(componentUtils.getResponseFormat(any(ActionStatus.class),any())).thenCallRealMethod();
211 when(toscaOperationFacade.getLatestCertifiedByToscaResourceName(any(), any(), any()))
213 .thenReturn(Either.right(StorageOperationStatus.NOT_FOUND))
215 .thenReturn(Either.right(StorageOperationStatus.NOT_FOUND));
218 when(toscaOperationFacade.getLatestCertifiedByToscaResourceName(any(), any(), any()))
219 .thenReturn(service);
224 List<ComponentInstance> instances = Lists.newArrayList();
225 instances.add(createComponentInstance());
226 resource.setComponentInstances(instances);
227 Either<Resource, ResponseFormat> fromLifeCycle = Either.left(resource);
228 doReturn(fromLifeCycle).when(lifecycleBusinessLogic)
229 .changeComponentState(any(), any(), any(), any(), any(),eq(true), eq(false));
233 private ComponentInstance createComponentInstance() {
234 ComponentInstance instance = new ComponentInstance();
235 instance.setIcon("");
236 instance.setUniqueId("");
237 instance.setName("");
238 instance.setComponentUid("");
239 instance.setCreationTime(1L);
240 instance.setModificationTime(2L);
241 instance.setDescription("");
242 instance.setPosX("");
243 instance.setPosY("");
244 instance.setPropertyValueCounter(1);
245 instance.setNormalizedName("");
246 instance.setOriginType(OriginTypeEnum.CVFC);
247 instance.setCustomizationUUID("");
248 instance.setComponentName("");
249 instance.setComponentVersion("");
250 instance.setToscaComponentName("");
251 instance.setInvariantName("");
252 instance.setSourceModelInvariant("");
253 instance.setSourceModelName("");
254 instance.setSourceModelUuid("");
255 instance.setSourceModelUid("");
256 instance.setIsProxy(false);