2 * ============LICENSE_START=======================================================
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
11 * http://www.apache.org/licenses/LICENSE-2.0
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=========================================================
20 package org.openecomp.sdcrests.item.rest.services;
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;
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;
63 @ExtendWith(MockitoExtension.class)
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";
76 private ManagersProvider managersProvider;
78 private ItemManager itemManager;
80 private ItemActionRequestDto request;
84 private VersioningManager versioningManager;
86 private ActivityLogManager activityManager;
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;
95 private ItemsImpl items;
99 MockitoAnnotations.openMocks(this);
103 void shouldInitActionSideAffectsMap() {
104 items.initActionSideAffectsMap();
105 assertEquals(2, items.getActionSideAffectsMap().size());
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());
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());
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());
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
166 ).thenReturn(new BucketExistsArgs());
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());
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());
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());
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"));