Sync Integ to Master
[sdc.git] / asdctool / src / test / java / org / openecomp / sdc / asdctool / migration / tasks / mig1710 / UpgradeMigration1710Test.java
1 package org.openecomp.sdc.asdctool.migration.tasks.mig1710;
2
3
4 import com.google.common.collect.Lists;
5 import fj.data.Either;
6 import org.junit.Before;
7 import org.junit.BeforeClass;
8 import org.junit.Test;
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;
31
32 import java.util.*;
33 import java.util.stream.Collectors;
34 import java.util.stream.Stream;
35
36 import static org.junit.Assert.assertEquals;
37 import static org.mockito.Mockito.*;
38 @RunWith(MockitoJUnitRunner.class)
39 public class UpgradeMigration1710Test {
40
41     private final static String USER = "jh0003";
42     private final static String CONF_LEVEL =  "5.0";
43
44     private final User user = new User();
45
46     @InjectMocks
47     private UpgradeMigration1710 migration = new UpgradeMigration1710();
48     @Mock
49     private IUserAdminOperation userAdminOperation;
50     @Mock
51     private ToscaOperationFacade toscaOperationFacade;
52     @Mock
53     private LifecycleBusinessLogic lifecycleBusinessLogic;
54     @Mock
55     private TitanDao titanDao;
56     @Mock
57     private ComponentsUtils componentUtils;
58     @Mock
59     private ConfigurationSource configurationSource;
60     @Mock
61     private XlsOutputHandler outputHandler;
62
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;
66
67     @BeforeClass
68     public static void setUpClass() {
69         resourcesForUpgrade = new HashMap<>();
70         resourcesForUpgrade.put(CONF_LEVEL, resources);
71     }
72
73     @Before
74     public void setUp() {
75         user.setUserId(USER);
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);
81
82     }
83
84     @Test
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());
90     }
91
92     @Test
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();
104     }
105
106     @Test
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();
118     }
119
120     @Test
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();
132     }
133
134
135     @Test
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();
146     }
147
148     @Test
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());
159     }
160
161     @Test
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());
166     }
167
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);
172     }
173
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);
180
181         Resource resource = new Resource();
182         Either<Component, StorageOperationStatus> foundResource = Either.left(resource);
183
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);
196         }
197         else {
198             if (exceptionOnVfUpgrade) {
199                 when(toscaOperationFacade.getToscaElement(anyString())).thenReturn(foundResource)
200                         .thenReturn(foundResource)
201                         .thenThrow(new RuntimeException());
202             }
203             else {
204                 when(toscaOperationFacade.getToscaElement(anyString())).thenReturn(foundResource);
205                 //happy flow
206                 if (upgradeService) {
207                     Either<Resource, StorageOperationStatus> service = Either.left(resource);
208                     if (upgradeVFCs) {
209                         when(componentUtils.convertFromStorageResponse(any(), any())).thenCallRealMethod();
210                         when(componentUtils.getResponseFormat(any(ActionStatus.class),any())).thenCallRealMethod();
211                         when(toscaOperationFacade.getLatestCertifiedByToscaResourceName(any(), any(), any()))
212                                 .thenReturn(service)
213                                 .thenReturn(Either.right(StorageOperationStatus.NOT_FOUND))
214                                 .thenReturn(service)
215                                 .thenReturn(Either.right(StorageOperationStatus.NOT_FOUND));
216                     }
217                     else {
218                         when(toscaOperationFacade.getLatestCertifiedByToscaResourceName(any(), any(), any()))
219                                 .thenReturn(service);
220                     }
221                 }
222             }
223         }
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));
230
231      }
232
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);
257         return instance;
258      }
259
260
261 }