Fix test cases failing incorrectly
[sdc.git] / catalog-model / src / test / java / org / openecomp / sdc / be / model / jsonjanusgraph / operations / UpgradeOperationTest.java
1 /*-
2  * ============LICENSE_START=======================================================
3  * SDC
4  * ================================================================================
5  * Copyright (C) 2019 AT&T Intellectual Property. All rights reserved.
6  * ================================================================================
7  * Licensed under the Apache License, Version 2.0 (the "License");
8  * you may not use this file except in compliance with the License.
9  * You may obtain a copy of the License at
10  *
11  *      http://www.apache.org/licenses/LICENSE-2.0
12  *
13  * Unless required by applicable law or agreed to in writing, software
14  * distributed under the License is distributed on an "AS IS" BASIS,
15  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16  * See the License for the specific language governing permissions and
17  * limitations under the License.
18  * ============LICENSE_END=========================================================
19  */
20
21 package org.openecomp.sdc.be.model.jsonjanusgraph.operations;
22
23 import static org.assertj.core.api.Assertions.assertThat;
24
25 import fj.data.Either;
26 import java.util.ArrayList;
27 import java.util.List;
28 import javax.annotation.Resource;
29 import org.apache.commons.lang3.tuple.ImmutablePair;
30 import org.junit.jupiter.api.BeforeAll;
31 import org.junit.jupiter.api.BeforeEach;
32 import org.junit.jupiter.api.Test;
33 import org.openecomp.sdc.be.dao.api.ActionStatus;
34 import org.openecomp.sdc.be.dao.janusgraph.JanusGraphDao;
35 import org.openecomp.sdc.be.dao.jsongraph.utils.IdBuilderUtils;
36 import org.openecomp.sdc.be.datatypes.enums.ComponentTypeEnum;
37 import org.openecomp.sdc.be.datatypes.enums.JsonPresentationFields;
38 import org.openecomp.sdc.be.datatypes.enums.NodeTypeEnum;
39 import org.openecomp.sdc.be.datatypes.enums.ResourceTypeEnum;
40 import org.openecomp.sdc.be.model.ComponentDependency;
41 import org.openecomp.sdc.be.model.ComponentInstance;
42 import org.openecomp.sdc.be.model.LifecycleStateEnum;
43 import org.openecomp.sdc.be.model.ModelTestBase;
44 import org.openecomp.sdc.be.model.User;
45 import org.openecomp.sdc.be.model.category.CategoryDefinition;
46 import org.openecomp.sdc.be.model.category.SubCategoryDefinition;
47 import org.openecomp.sdc.be.model.jsonjanusgraph.datamodel.TopologyTemplate;
48 import org.openecomp.sdc.be.model.jsonjanusgraph.utils.GraphTestUtils;
49 import org.openecomp.sdc.be.model.operations.api.IElementOperation;
50 import org.openecomp.sdc.be.model.operations.api.StorageOperationStatus;
51 import org.openecomp.sdc.be.model.operations.impl.UserAdminOperation;
52 import org.springframework.test.context.junit.jupiter.SpringJUnitConfig;
53
54 @SpringJUnitConfig(locations = "classpath:application-context-test.xml")
55 public class UpgradeOperationTest extends ModelTestBase {
56
57     private boolean isInitialized;
58     @Resource
59     private JanusGraphDao janusGraphDao;
60     @Resource
61     private UpgradeOperation upgradeOperation;
62     @Resource
63     private TopologyTemplateOperation topologyTemplateOperation;
64     @Resource
65     private NodeTemplateOperation nodeTemplateOperation;
66     @Resource
67     private UserAdminOperation userAdminOperation;
68     @javax.annotation.Resource
69     private IElementOperation elementOperation;
70
71     private User user;
72
73     private CategoryDefinition resourceCategory;
74     private CategoryDefinition serviceCategory;
75
76
77     @BeforeAll
78     public static void initTest() {
79         ModelTestBase.init();
80     }
81
82     @BeforeEach
83     public void beforeTest() {
84         if (!isInitialized) {
85             GraphTestUtils.clearGraph(janusGraphDao);
86             initGraphForTest();
87             isInitialized = true;
88         }
89     }
90
91     @Test
92     public void testGetSimpleDependency() {
93
94         TopologyTemplate vf = createVf("vf1");
95
96         TopologyTemplate service = createServiceWitnInstance("service1", vf);
97
98         Either<List<ComponentDependency>, StorageOperationStatus> result = upgradeOperation.getComponentDependencies(vf.getUniqueId());
99         assertThat(result.isLeft()).isTrue();
100         List<ComponentDependency> dependencies = result.left().value();
101         assertThat(dependencies).hasSize(1);
102
103         ComponentDependency dependency = dependencies.get(0);
104         assertThat(dependency.getName()).isEqualTo(vf.getName());
105         assertThat(dependency.getVersion()).isEqualTo(vf.getVersion());
106         assertThat(dependency.getDependencies()).hasSize(1);
107
108         ComponentDependency container = dependency.getDependencies().get(0);
109         assertThat(container.getName()).isEqualTo(service.getName());
110         assertThat(container.getVersion()).isEqualTo(service.getVersion());
111         assertThat(container.getDependencies()).isNull();
112
113     }
114
115     /*******************************
116      * Preperation Methods
117      *******************************/
118     private void initGraphForTest() {
119
120         user = new User("Jim", "Tom", "jt123a", "1@mail.com", "DESIGNER", System.currentTimeMillis());
121         userAdminOperation.saveUserData(user);
122
123         GraphTestUtils.createRootCatalogVertex(janusGraphDao);
124         resourceCategory = createResourceCategories();
125         serviceCategory = createServiceCategory();
126
127     }
128
129     private TopologyTemplate createServiceWitnInstance(String name, TopologyTemplate createdVf) {
130
131         TopologyTemplate serviceNew = createTopologyTemplate(ComponentTypeEnum.SERVICE, name);
132         List<CategoryDefinition> categoriesService = new ArrayList<>();
133         categoriesService.add(serviceCategory);
134         serviceNew.setCategories(categoriesService);
135
136         Either<TopologyTemplate, StorageOperationStatus> createService = topologyTemplateOperation.createTopologyTemplate(serviceNew);
137         assertThat(createService.isLeft()).isTrue();
138
139         ComponentInstance vfInstance = new ComponentInstance();
140         vfInstance.setUniqueId(createdVf.getUniqueId() + createdVf.getName());
141         vfInstance.setComponentUid(createdVf.getUniqueId());
142         vfInstance.setName(createdVf.getName());
143         Either<ImmutablePair<TopologyTemplate, String>, StorageOperationStatus> addInstance = nodeTemplateOperation.addComponentInstanceToTopologyTemplate(
144             serviceNew, createdVf, "0", vfInstance, false, user);
145         assertThat(addInstance.isLeft()).isTrue();
146         return serviceNew;
147     }
148
149     private CategoryDefinition createServiceCategory() {
150         CategoryDefinition categoryService = new CategoryDefinition();
151         categoryService.setName("servicecategory");
152         categoryService.setNormalizedName("servicecategory");
153         categoryService.setUniqueId("servicecategory");
154         Either<CategoryDefinition, ActionStatus> createCategory = elementOperation.createCategory(categoryService, NodeTypeEnum.ServiceNewCategory);
155
156         assertThat(createCategory.isLeft()).isTrue();
157         return categoryService;
158     }
159
160     private TopologyTemplate createVf(String name) {
161
162         TopologyTemplate resource = createTopologyTemplate(ComponentTypeEnum.RESOURCE, name);
163
164         resource.setResourceType(ResourceTypeEnum.VF);
165         List<CategoryDefinition> categories = new ArrayList<>();
166         categories.add(resourceCategory);
167         resource.setCategories(categories);
168         Either<TopologyTemplate, StorageOperationStatus> createVf = topologyTemplateOperation.createTopologyTemplate(resource);
169         assertThat(createVf.isLeft()).isTrue();
170         return resource;
171     }
172
173     private CategoryDefinition createResourceCategories() {
174         CategoryDefinition category = new CategoryDefinition();
175         category.setName("category1");
176         category.setNormalizedName("category1");
177         category.setUniqueId("category1");
178         Either<CategoryDefinition, ActionStatus> createCategory = elementOperation.createCategory(category, NodeTypeEnum.ResourceNewCategory);
179         assertThat(createCategory.isLeft()).isTrue();
180
181         SubCategoryDefinition subCategory = new SubCategoryDefinition();
182
183         subCategory.setName("subcategory1");
184         subCategory.setNormalizedName("subcategory1");
185         subCategory.setUniqueId("subcategory1");
186         elementOperation.createSubCategory(createCategory.left().value().getUniqueId(), subCategory, NodeTypeEnum.ResourceSubcategory);
187         category.addSubCategory(subCategory);
188         return category;
189     }
190
191     private TopologyTemplate createTopologyTemplate(ComponentTypeEnum type, String name) {
192         TopologyTemplate template = new TopologyTemplate();
193         template.setUniqueId(IdBuilderUtils.generateUniqueId());
194         template.setComponentType(type);
195         template.setHighestVersion(true);
196         template.setLifecycleState(LifecycleStateEnum.CERTIFIED);
197         template.setMetadataValue(JsonPresentationFields.NAME, name);
198         template.setMetadataValue(JsonPresentationFields.VERSION, "1.0");
199         template.setCreatorUserId(user.getUserId());
200         return template;
201     }
202 }