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.when;
11 import java.util.HashMap;
12 import java.util.List;
14 import java.util.stream.Collectors;
15 import java.util.stream.Stream;
17 import org.junit.Before;
18 import org.junit.BeforeClass;
19 import org.junit.Test;
20 import org.junit.runner.RunWith;
21 import org.mockito.Mock;
22 import org.mockito.junit.MockitoJUnitRunner;
23 import org.openecomp.sdc.asdctool.migration.core.task.MigrationResult;
24 import org.openecomp.sdc.be.components.lifecycle.LifecycleBusinessLogic;
25 import org.openecomp.sdc.be.config.Configuration;
26 import org.openecomp.sdc.be.config.ConfigurationManager;
27 import org.openecomp.sdc.be.dao.api.ActionStatus;
28 import org.openecomp.sdc.be.dao.jsongraph.GraphVertex;
29 import org.openecomp.sdc.be.dao.jsongraph.TitanDao;
30 import org.openecomp.sdc.be.dao.titan.TitanOperationStatus;
31 import org.openecomp.sdc.be.datatypes.enums.JsonPresentationFields;
32 import org.openecomp.sdc.be.datatypes.enums.OriginTypeEnum;
33 import org.openecomp.sdc.be.impl.ComponentsUtils;
34 import org.openecomp.sdc.be.model.Component;
35 import org.openecomp.sdc.be.model.ComponentInstance;
36 import org.openecomp.sdc.be.model.LifecycleStateEnum;
37 import org.openecomp.sdc.be.model.Resource;
38 import org.openecomp.sdc.be.model.User;
39 import org.openecomp.sdc.be.model.jsontitan.operations.ToscaOperationFacade;
40 import org.openecomp.sdc.be.model.operations.api.IUserAdminOperation;
41 import org.openecomp.sdc.be.model.operations.api.StorageOperationStatus;
42 import org.openecomp.sdc.common.api.ConfigurationSource;
43 import org.openecomp.sdc.exception.ResponseFormat;
45 import com.google.common.collect.Lists;
47 import fj.data.Either;
49 @RunWith(MockitoJUnitRunner.class)
50 public class UpgradeMigration1710Test {
52 private final static String USER = "jh0003";
53 private final static String CONF_LEVEL = "5.0";
55 private final User user = new User();
56 private UpgradeMigration1710 migration;
58 private IUserAdminOperation userAdminOperation;
60 private ToscaOperationFacade toscaOperationFacade;
62 private LifecycleBusinessLogic lifecycleBusinessLogic;
64 private TitanDao titanDao;
66 private ComponentsUtils componentUtils;
68 private ConfigurationSource configurationSource;
69 private static ConfigurationManager configurationManager;
70 private static List<String> resources = Stream.of("org.openecomp.resource.cp.extCP").collect(Collectors.toList());
71 private static Map<String, List<String>> resourcesForUpgrade;
74 public static void setUpClass() {
75 resourcesForUpgrade = new HashMap<>();
76 resourcesForUpgrade.put(CONF_LEVEL, resources);
81 migration = new UpgradeMigration1710();
82 migration.setUserAdminOperation(userAdminOperation);
83 migration.setTitanDao(titanDao);
84 migration.setTosckaOperationFacade(toscaOperationFacade);
85 migration.setLifecycleBusinessLogic(lifecycleBusinessLogic);
88 configurationManager = new ConfigurationManager(configurationSource);
89 configurationManager.setConfiguration(new Configuration());
90 configurationManager.getConfiguration().setSkipUpgradeVSPs(true);
91 configurationManager.getConfiguration().setSkipUpgradeFailedVfs(true);
92 configurationManager.getConfiguration().setAutoHealingOwner(USER);
97 public void nodeTypesUpgradeFailed() {
98 resolveUserAndDefineUpgradeLevel();
99 when(titanDao.getByCriteria(any(), any(), any(), any()))
100 .thenReturn(Either.right(TitanOperationStatus.NOT_FOUND));
101 assertEquals(MigrationResult.MigrationStatus.FAILED, migration.migrate().getMigrationStatus());
105 public void nodeTypesUpgradePassedAndVFsUpgradeFailedWhenSkipFailedVFsIsNotSupported() {
106 final boolean failOnVfUpgrade = true;
107 final boolean upgradeServices = false;
108 final boolean exceptionOnVfUpgrade = false;
109 final boolean upgradeFVC = false;
110 configurationManager.getConfiguration().setSkipUpgradeFailedVfs(false);
111 resolveUserAndDefineUpgradeLevel();
112 upgradeRules(failOnVfUpgrade, exceptionOnVfUpgrade, upgradeServices, upgradeFVC);
113 assertEquals(MigrationResult.MigrationStatus.FAILED, migration.migrate().getMigrationStatus());
117 public void upgradeAllVFsUpgradeFailedOnExceptionWhenSkipFailedVFsIsNotSupported() {
118 final boolean failOnVfUpgrade = false;
119 final boolean upgradeServices = false;
120 final boolean exceptionOnVfUpgrade = true;
121 final boolean upgradeFVC = false;
122 configurationManager.getConfiguration().setSkipUpgradeFailedVfs(false);
123 resolveUserAndDefineUpgradeLevel();
124 upgradeRules(failOnVfUpgrade, exceptionOnVfUpgrade, upgradeServices, upgradeFVC);
125 assertEquals(MigrationResult.MigrationStatus.FAILED, migration.migrate().getMigrationStatus());
129 public void upgradeAllIfVFsUpgradeFailedOnExceptionWhenSkipFailedVFsIsSupported() {
130 final boolean failOnVfUpgrade = false;
131 final boolean upgradeServices = true;
132 final boolean exceptionOnFvUpgrade = true;
133 final boolean upgradeFVC = false;
134 configurationManager.getConfiguration().setSkipUpgradeFailedVfs(true);
135 resolveUserAndDefineUpgradeLevel();
136 upgradeRules(failOnVfUpgrade, exceptionOnFvUpgrade, upgradeServices, upgradeFVC);
137 assertEquals(MigrationResult.MigrationStatus.COMPLETED, migration.migrate().getMigrationStatus());
142 public void upgradeAll() {
143 final boolean failOnVfUpgrade = false;
144 final boolean upgradeServices = true;
145 final boolean exceptionOnFvUpgrade = false;
146 final boolean upgradeFVC = false;
147 resolveUserAndDefineUpgradeLevel();
148 upgradeRules(failOnVfUpgrade, exceptionOnFvUpgrade, upgradeServices, upgradeFVC);
149 assertEquals(MigrationResult.MigrationStatus.COMPLETED, migration.migrate().getMigrationStatus());
153 public void upgradeAllWhenVspUpgradeIsRequired() {
154 final boolean failOnVfUpgrade = false;
155 final boolean upgradeServices = true;
156 final boolean exceptionOnFvUpgrade = false;
157 final boolean upgradeFVC = true;
158 resolveUserAndDefineUpgradeLevel();
159 upgradeRules(failOnVfUpgrade, exceptionOnFvUpgrade, upgradeServices, upgradeFVC);
160 configurationManager.getConfiguration().setSkipUpgradeVSPs(false);
161 migration.setComponentsUtils(componentUtils);
162 assertEquals(MigrationResult.MigrationStatus.COMPLETED, migration.migrate().getMigrationStatus());
166 public void migrationFailedWhenUserNotResolved() {
167 when(userAdminOperation.getUserData(anyString(), eq(false))).thenReturn(Either.right(ActionStatus.MISSING_INFORMATION));
168 when(titanDao.rollback()).thenReturn(TitanOperationStatus.OK);
169 assertEquals(MigrationResult.MigrationStatus.FAILED, migration.migrate().getMigrationStatus());
172 private void resolveUserAndDefineUpgradeLevel() {
173 when(userAdminOperation.getUserData(anyString(), eq(false))).thenReturn(Either.left(user));
174 configurationManager.getConfiguration().setToscaConformanceLevel(CONF_LEVEL);
175 configurationManager.getConfiguration().setResourcesForUpgrade(resourcesForUpgrade);
178 private void upgradeRules(boolean failedVfUpgrade, boolean exceptionOnVfUpgrade, boolean upgradeService, boolean upgradeVFCs) {
179 GraphVertex component = new GraphVertex();
180 component.setJsonMetadataField(JsonPresentationFields.LIFECYCLE_STATE, LifecycleStateEnum.CERTIFIED.name());
181 component.setJsonMetadataField(JsonPresentationFields.UNIQUE_ID, "12345");
182 List<GraphVertex> components = Lists.newArrayList();
183 components.add(component);
185 Resource resource = new Resource();
186 Either<Component, StorageOperationStatus> foundResource = Either.left(resource);
188 when(titanDao.getByCriteria(any(), any(), any(), any()))
189 .thenReturn(Either.left(components));
190 when(titanDao.getParentVertecies(any(), any(), any()))
191 //1th node to upgrade
192 .thenReturn(Either.left(components))
193 //parent of the 1th node - stop recursion
194 .thenReturn(Either.right(TitanOperationStatus.NOT_FOUND));
195 if (failedVfUpgrade) {
196 Either<Component, StorageOperationStatus> getToscaForVF = Either.right(StorageOperationStatus.NOT_FOUND);
197 when(toscaOperationFacade.getToscaElement(anyString())).thenReturn(foundResource)
198 .thenReturn(foundResource)
199 .thenReturn(getToscaForVF);
202 if (exceptionOnVfUpgrade) {
203 when(toscaOperationFacade.getToscaElement(anyString())).thenReturn(foundResource)
204 .thenReturn(foundResource)
205 .thenThrow(new RuntimeException());
208 when(toscaOperationFacade.getToscaElement(anyString())).thenReturn(foundResource);
210 if (upgradeService) {
211 Either<Resource, StorageOperationStatus> service = Either.left(resource);
213 when(componentUtils.convertFromStorageResponse(any(), any())).thenCallRealMethod();
214 when(componentUtils.getResponseFormat(any(ActionStatus.class),any())).thenCallRealMethod();
215 when(toscaOperationFacade.getLatestCertifiedByToscaResourceName(any(), any(), any()))
217 .thenReturn(Either.right(StorageOperationStatus.NOT_FOUND))
219 .thenReturn(Either.right(StorageOperationStatus.NOT_FOUND));
222 when(toscaOperationFacade.getLatestCertifiedByToscaResourceName(any(), any(), any()))
223 .thenReturn(service);
228 List<ComponentInstance> instances = Lists.newArrayList();
229 instances.add(createComponentInstance());
230 resource.setComponentInstances(instances);
231 Either<Resource, ResponseFormat> fromLifeCycle = Either.left(resource);
232 doReturn(fromLifeCycle).when(lifecycleBusinessLogic)
233 .changeComponentState(any(), any(), any(), any(), any(),eq(true), eq(false));
237 private ComponentInstance createComponentInstance() {
238 ComponentInstance instance = new ComponentInstance();
239 instance.setIcon("");
240 instance.setUniqueId("");
241 instance.setName("");
242 instance.setComponentUid("");
243 instance.setCreationTime(1L);
244 instance.setModificationTime(2L);
245 instance.setDescription("");
246 instance.setPosX("");
247 instance.setPosY("");
248 instance.setPropertyValueCounter(1);
249 instance.setNormalizedName("");
250 instance.setOriginType(OriginTypeEnum.CVFC);
251 instance.setCustomizationUUID("");
252 instance.setComponentName("");
253 instance.setComponentVersion("");
254 instance.setToscaComponentName("");
255 instance.setInvariantName("");
256 instance.setSourceModelInvariant("");
257 instance.setSourceModelName("");
258 instance.setSourceModelUuid("");
259 instance.setSourceModelUid("");
260 instance.setIsProxy(false);