2cb5e2999c72fd0dc6432b5a49b585670913898c
[sdc.git] /
1 package org.openecomp.sdc.asdctool.migration.tasks.mig1710;
2
3
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;
10
11 import java.util.HashMap;
12 import java.util.List;
13 import java.util.Map;
14 import java.util.stream.Collectors;
15 import java.util.stream.Stream;
16
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;
44
45 import com.google.common.collect.Lists;
46
47 import fj.data.Either;
48
49 @RunWith(MockitoJUnitRunner.class)
50 public class UpgradeMigration1710Test {
51
52     private final static String USER = "jh0003";
53     private final static String CONF_LEVEL =  "5.0";
54
55     private final User user = new User();
56     private UpgradeMigration1710 migration;
57     @Mock
58     private IUserAdminOperation userAdminOperation;
59     @Mock
60     private ToscaOperationFacade toscaOperationFacade;
61     @Mock
62     private LifecycleBusinessLogic lifecycleBusinessLogic;
63     @Mock
64     private TitanDao titanDao;
65     @Mock
66     private ComponentsUtils componentUtils;
67     @Mock
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;
72
73     @BeforeClass
74     public static void setUpClass() {
75         resourcesForUpgrade = new HashMap<>();
76         resourcesForUpgrade.put(CONF_LEVEL, resources);
77     }
78
79     @Before
80     public void setUp() {
81         migration = new UpgradeMigration1710();
82         migration.setUserAdminOperation(userAdminOperation);
83         migration.setTitanDao(titanDao);
84         migration.setTosckaOperationFacade(toscaOperationFacade);
85         migration.setLifecycleBusinessLogic(lifecycleBusinessLogic);
86
87         user.setUserId(USER);
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);
93
94     }
95
96     @Test
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());
102     }
103
104     @Test
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());
114     }
115
116     @Test
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());
126     }
127
128     @Test
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());
138     }
139
140
141     @Test
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());
150     }
151
152     @Test
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());
163     }
164
165     @Test
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());
170     }
171
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);
176     }
177
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);
184
185         Resource resource = new Resource();
186         Either<Component, StorageOperationStatus> foundResource = Either.left(resource);
187
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);
200         }
201         else {
202             if (exceptionOnVfUpgrade) {
203                 when(toscaOperationFacade.getToscaElement(anyString())).thenReturn(foundResource)
204                         .thenReturn(foundResource)
205                         .thenThrow(new RuntimeException());
206             }
207             else {
208                 when(toscaOperationFacade.getToscaElement(anyString())).thenReturn(foundResource);
209                 //happy flow
210                 if (upgradeService) {
211                     Either<Resource, StorageOperationStatus> service = Either.left(resource);
212                     if (upgradeVFCs) {
213                         when(componentUtils.convertFromStorageResponse(any(), any())).thenCallRealMethod();
214                         when(componentUtils.getResponseFormat(any(ActionStatus.class),any())).thenCallRealMethod();
215                         when(toscaOperationFacade.getLatestCertifiedByToscaResourceName(any(), any(), any()))
216                                 .thenReturn(service)
217                                 .thenReturn(Either.right(StorageOperationStatus.NOT_FOUND))
218                                 .thenReturn(service)
219                                 .thenReturn(Either.right(StorageOperationStatus.NOT_FOUND));
220                     }
221                     else {
222                         when(toscaOperationFacade.getLatestCertifiedByToscaResourceName(any(), any(), any()))
223                                 .thenReturn(service);
224                     }
225                 }
226             }
227         }
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));
234
235      }
236
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);
261         return instance;
262      }
263
264
265 }