25de08304b285880d4bfff07165b4bda3491134c
[sdc.git] /
1 /*-
2  * ============LICENSE_START=======================================================
3  * SDC
4  * ================================================================================
5  * Copyright (C) 2019 Nokia. 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 package org.openecomp.sdcrests.item.rest.services;
21
22 import static javax.ws.rs.core.Response.Status.INTERNAL_SERVER_ERROR;
23 import static org.junit.jupiter.api.Assertions.assertEquals;
24 import static org.junit.jupiter.api.Assertions.assertNotNull;
25 import static org.junit.jupiter.api.Assertions.assertTrue;
26 import static org.mockito.ArgumentMatchers.any;
27 import static org.mockito.ArgumentMatchers.anyInt;
28 import static org.mockito.ArgumentMatchers.anyString;
29 import static org.mockito.ArgumentMatchers.eq;
30 import static org.mockito.Mockito.verify;
31 import static org.mockito.Mockito.when;
32 import static org.openecomp.sdc.be.csar.storage.StorageFactory.StorageType.MINIO;
33 import static org.openecomp.sdc.be.csar.storage.StorageFactory.StorageType.NONE;
34 import static org.openecomp.sdcrests.item.types.ItemAction.ARCHIVE;
35 import static org.openecomp.sdcrests.item.types.ItemAction.RESTORE;
36
37 import io.minio.BucketExistsArgs;
38 import io.minio.MinioClient;
39 import java.util.ArrayList;
40 import java.util.HashMap;
41 import java.util.List;
42 import javax.ws.rs.core.Response;
43 import org.junit.jupiter.api.BeforeEach;
44 import org.junit.jupiter.api.Test;
45 import org.junit.jupiter.api.extension.ExtendWith;
46 import org.mockito.Answers;
47 import org.mockito.InjectMocks;
48 import org.mockito.Mock;
49 import org.mockito.MockedStatic;
50 import org.mockito.Mockito;
51 import org.mockito.MockitoAnnotations;
52 import org.mockito.junit.jupiter.MockitoExtension;
53 import org.openecomp.sdc.activitylog.ActivityLogManager;
54 import org.openecomp.sdc.common.CommonConfigurationManager;
55 import org.openecomp.sdc.common.errors.ErrorCodeAndMessage;
56 import org.openecomp.sdc.datatypes.model.ItemType;
57 import org.openecomp.sdc.versioning.ItemManager;
58 import org.openecomp.sdc.versioning.VersioningManager;
59 import org.openecomp.sdc.versioning.dao.types.Version;
60 import org.openecomp.sdc.versioning.types.Item;
61 import org.openecomp.sdcrests.item.types.ItemActionRequestDto;
62
63 @ExtendWith(MockitoExtension.class)
64 class ItemsImplTest {
65
66     private static final String ITEM_ID = "item-id";
67     private static final String USER = "USER";
68     private static final String EXTERNAL_CSAR_STORE = "externalCsarStore";
69     private static final String STORAGE_TYPE = "storageType";
70     private static final String ENDPOINT = "endpoint";
71     private static final String CREDENTIALS = "credentials";
72     private static final String TEMP_PATH = "tempPath";
73     private static final String UPLOAD_PARTSIZE = "uploadPartSize";
74
75     @Mock
76     private ManagersProvider managersProvider;
77     @Mock
78     private ItemManager itemManager;
79     @Mock
80     private ItemActionRequestDto request;
81     @Mock
82     private Item item;
83     @Mock
84     private VersioningManager versioningManager;
85     @Mock
86     private ActivityLogManager activityManager;
87     @Mock
88     private CommonConfigurationManager commonConfigurationManager;
89     @Mock(answer = Answers.RETURNS_DEEP_STUBS)
90     private MinioClient.Builder builderMinio;
91     @Mock(answer = Answers.RETURNS_DEEP_STUBS)
92     private BucketExistsArgs.Builder builderBucketExistsArgs;
93
94     @InjectMocks
95     private ItemsImpl items;
96
97     @BeforeEach
98     void setUp() {
99         MockitoAnnotations.openMocks(this);
100     }
101
102     @Test
103     void shouldInitActionSideAffectsMap() {
104         items.initActionSideAffectsMap();
105         assertEquals(2, items.getActionSideAffectsMap().size());
106     }
107
108     @Test
109     void shouldActOnEmptyItem() {
110         items.initActionSideAffectsMap();
111         items.setManagersProvider(managersProvider);
112         when(managersProvider.getItemManager()).thenReturn(itemManager);
113         when(itemManager.get(any())).thenReturn(null);
114         Response response = items.actOn(request, ITEM_ID, USER);
115         assertEquals(response.getStatus(), Response.Status.NOT_FOUND.getStatusCode());
116     }
117
118     @Test
119     void shouldActOnARCHIVE() {
120         items.initActionSideAffectsMap();
121         items.setManagersProvider(managersProvider);
122         when(itemManager.get(any())).thenReturn(item);
123         when(request.getAction()).thenReturn(ARCHIVE);
124         when(managersProvider.getItemManager()).thenReturn(itemManager);
125         when(managersProvider.getVersioningManager()).thenReturn(versioningManager);
126         when(versioningManager.list(any())).thenReturn(getVersions());
127         when(managersProvider.getActivityLogManager()).thenReturn(activityManager);
128         items.actOn(request, ITEM_ID, USER);
129         verify(itemManager).archive(any());
130     }
131
132     @Test
133     void shouldActOnRESTORE() {
134         items.initActionSideAffectsMap();
135         items.setManagersProvider(managersProvider);
136         when(itemManager.get(any())).thenReturn(item);
137         when(request.getAction()).thenReturn(RESTORE);
138         when(managersProvider.getItemManager()).thenReturn(itemManager);
139         when(managersProvider.getVersioningManager()).thenReturn(versioningManager);
140         when(versioningManager.list(any())).thenReturn(getVersions());
141         when(managersProvider.getActivityLogManager()).thenReturn(activityManager);
142         items.actOn(request, ITEM_ID, USER);
143         verify(itemManager).restore(any());
144     }
145
146     @Test
147     void shouldActOnRESTORE_with_S3() throws Exception {
148         items.initActionSideAffectsMap();
149         items.setManagersProvider(managersProvider);
150         when(itemManager.get(any())).thenReturn(item);
151         when(item.getType()).thenReturn(ItemType.vsp.getName());
152         when(request.getAction()).thenReturn(RESTORE);
153         when(managersProvider.getItemManager()).thenReturn(itemManager);
154         try (MockedStatic<CommonConfigurationManager> utilities = Mockito.mockStatic(CommonConfigurationManager.class)) {
155             utilities.when(CommonConfigurationManager::getInstance).thenReturn(commonConfigurationManager);
156             try (MockedStatic<MinioClient> minioUtilities = Mockito.mockStatic(MinioClient.class)) {
157                 minioUtilities.when(MinioClient::builder).thenReturn(builderMinio);
158                 when(commonConfigurationManager.getConfigValue(EXTERNAL_CSAR_STORE, STORAGE_TYPE, NONE.name())).thenReturn(MINIO.name());
159                 when(commonConfigurationManager.getConfigValue(EXTERNAL_CSAR_STORE, ENDPOINT, null)).thenReturn(new HashMap<String, Object>());
160                 when(commonConfigurationManager.getConfigValue(EXTERNAL_CSAR_STORE, CREDENTIALS, null)).thenReturn(new HashMap<String, Object>());
161                 when(commonConfigurationManager.getConfigValue(EXTERNAL_CSAR_STORE, TEMP_PATH, null)).thenReturn("");
162                 when(commonConfigurationManager.getConfigValue(eq(EXTERNAL_CSAR_STORE), eq(UPLOAD_PARTSIZE), anyInt())).thenReturn(0);
163                 when(builderBucketExistsArgs
164                     .bucket(anyString())
165                     .build()
166                 ).thenReturn(new BucketExistsArgs());
167
168                 final var response = items.actOn(request, ITEM_ID, USER);
169                 assertNotNull(response);
170                 assertEquals(INTERNAL_SERVER_ERROR.getStatusCode(), response.getStatus());
171                 assertNotNull(response.getEntity());
172                 assertTrue(response.getEntity() instanceof ErrorCodeAndMessage);
173                 assertEquals(INTERNAL_SERVER_ERROR.getStatusCode(), ((ErrorCodeAndMessage) response.getEntity()).getStatus().getStatusCode());
174                 assertEquals(INTERNAL_SERVER_ERROR.name(), ((ErrorCodeAndMessage) response.getEntity()).getErrorCode());
175             }
176         }
177     }
178
179     @Test
180     void shouldGetItem() {
181         items.initActionSideAffectsMap();
182         items.setManagersProvider(managersProvider);
183         when(managersProvider.getItemManager()).thenReturn(itemManager);
184         Response response = items.getItem(ITEM_ID, USER);
185         assertEquals(response.getStatus(), Response.Status.OK.getStatusCode());
186     }
187
188     @Test
189     void shouldList() {
190         items.initActionSideAffectsMap();
191         items.setManagersProvider(managersProvider);
192         when(managersProvider.getItemManager()).thenReturn(itemManager);
193         Response response = items.list(null, null, null, null, null, USER);
194         assertEquals(response.getStatus(), Response.Status.OK.getStatusCode());
195     }
196
197     private List<Version> getVersions() {
198         List<Version> versions = new ArrayList<>();
199         versions.add(new Version("1"));
200         versions.add(new Version("2"));
201         versions.add(new Version("3"));
202         return versions;
203     }
204 }