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.versioning.ItemManager;
57 import org.openecomp.sdc.versioning.VersioningManager;
58 import org.openecomp.sdc.versioning.dao.types.Version;
59 import org.openecomp.sdc.versioning.types.Item;
60 import org.openecomp.sdcrests.item.types.ItemActionRequestDto;
62 @ExtendWith(MockitoExtension.class)
65 private static final String ITEM_ID = "item-id";
66 private static final String USER = "USER";
67 private static final String EXTERNAL_CSAR_STORE = "externalCsarStore";
68 private static final String STORAGE_TYPE = "storageType";
69 private static final String ENDPOINT = "endpoint";
70 private static final String CREDENTIALS = "credentials";
71 private static final String TEMP_PATH = "tempPath";
72 private static final String UPLOAD_PARTSIZE = "uploadPartSize";
75 private ManagersProvider managersProvider;
77 private ItemManager itemManager;
79 private ItemActionRequestDto request;
83 private VersioningManager versioningManager;
85 private ActivityLogManager activityManager;
87 private CommonConfigurationManager commonConfigurationManager;
88 @Mock(answer = Answers.RETURNS_DEEP_STUBS)
89 private MinioClient.Builder builderMinio;
90 @Mock(answer = Answers.RETURNS_DEEP_STUBS)
91 private BucketExistsArgs.Builder builderBucketExistsArgs;
94 private ItemsImpl items;
98 MockitoAnnotations.openMocks(this);
102 void shouldInitActionSideAffectsMap() {
103 items.initActionSideAffectsMap();
104 assertEquals(2, items.getActionSideAffectsMap().size());
108 void shouldActOnEmptyItem() {
109 items.initActionSideAffectsMap();
110 items.setManagersProvider(managersProvider);
111 when(managersProvider.getItemManager()).thenReturn(itemManager);
112 when(itemManager.get(any())).thenReturn(null);
113 Response response = items.actOn(request, ITEM_ID, USER);
114 assertEquals(response.getStatus(), Response.Status.NOT_FOUND.getStatusCode());
118 void shouldActOnARCHIVE() {
119 items.initActionSideAffectsMap();
120 items.setManagersProvider(managersProvider);
121 when(itemManager.get(any())).thenReturn(item);
122 when(request.getAction()).thenReturn(ARCHIVE);
123 when(managersProvider.getItemManager()).thenReturn(itemManager);
124 when(managersProvider.getVersioningManager()).thenReturn(versioningManager);
125 when(versioningManager.list(any())).thenReturn(getVersions());
126 when(managersProvider.getActivityLogManager()).thenReturn(activityManager);
127 items.actOn(request, ITEM_ID, USER);
128 verify(itemManager).archive(any());
132 void shouldActOnRESTORE() {
133 items.initActionSideAffectsMap();
134 items.setManagersProvider(managersProvider);
135 when(itemManager.get(any())).thenReturn(item);
136 when(request.getAction()).thenReturn(RESTORE);
137 when(managersProvider.getItemManager()).thenReturn(itemManager);
138 when(managersProvider.getVersioningManager()).thenReturn(versioningManager);
139 when(versioningManager.list(any())).thenReturn(getVersions());
140 when(managersProvider.getActivityLogManager()).thenReturn(activityManager);
141 items.actOn(request, ITEM_ID, USER);
142 verify(itemManager).restore(any());
146 void shouldActOnRESTORE_with_S3() throws Exception {
147 items.initActionSideAffectsMap();
148 items.setManagersProvider(managersProvider);
149 when(itemManager.get(any())).thenReturn(item);
150 when(request.getAction()).thenReturn(RESTORE);
151 when(managersProvider.getItemManager()).thenReturn(itemManager);
152 try (MockedStatic<CommonConfigurationManager> utilities = Mockito.mockStatic(CommonConfigurationManager.class)) {
153 utilities.when(CommonConfigurationManager::getInstance).thenReturn(commonConfigurationManager);
154 try (MockedStatic<MinioClient> minioUtilities = Mockito.mockStatic(MinioClient.class)) {
155 minioUtilities.when(MinioClient::builder).thenReturn(builderMinio);
156 when(commonConfigurationManager.getConfigValue(EXTERNAL_CSAR_STORE, STORAGE_TYPE, NONE.name())).thenReturn(MINIO.name());
157 when(commonConfigurationManager.getConfigValue(EXTERNAL_CSAR_STORE, ENDPOINT, null)).thenReturn(new HashMap<String, Object>());
158 when(commonConfigurationManager.getConfigValue(EXTERNAL_CSAR_STORE, CREDENTIALS, null)).thenReturn(new HashMap<String, Object>());
159 when(commonConfigurationManager.getConfigValue(EXTERNAL_CSAR_STORE, TEMP_PATH, null)).thenReturn("");
160 when(commonConfigurationManager.getConfigValue(eq(EXTERNAL_CSAR_STORE), eq(UPLOAD_PARTSIZE), anyInt())).thenReturn(0);
161 when(builderBucketExistsArgs
164 ).thenReturn(new BucketExistsArgs());
166 final var response = items.actOn(request, ITEM_ID, USER);
167 assertNotNull(response);
168 assertEquals(INTERNAL_SERVER_ERROR.getStatusCode(), response.getStatus());
169 assertNotNull(response.getEntity());
170 assertTrue(response.getEntity() instanceof ErrorCodeAndMessage);
171 assertEquals(INTERNAL_SERVER_ERROR.getStatusCode(), ((ErrorCodeAndMessage) response.getEntity()).getStatus().getStatusCode());
172 assertEquals(INTERNAL_SERVER_ERROR.name(), ((ErrorCodeAndMessage) response.getEntity()).getErrorCode());
178 void shouldGetItem() {
179 items.initActionSideAffectsMap();
180 items.setManagersProvider(managersProvider);
181 when(managersProvider.getItemManager()).thenReturn(itemManager);
182 Response response = items.getItem(ITEM_ID, USER);
183 assertEquals(response.getStatus(), Response.Status.OK.getStatusCode());
188 items.initActionSideAffectsMap();
189 items.setManagersProvider(managersProvider);
190 when(managersProvider.getItemManager()).thenReturn(itemManager);
191 Response response = items.list(null, null, null, null, null, USER);
192 assertEquals(response.getStatus(), Response.Status.OK.getStatusCode());
195 private List<Version> getVersions() {
196 List<Version> versions = new ArrayList<>();
197 versions.add(new Version("1"));
198 versions.add(new Version("2"));
199 versions.add(new Version("3"));