12056ad4db2673f765cb2d00c1980e464b6d0763
[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.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;
61
62 @ExtendWith(MockitoExtension.class)
63 class ItemsImplTest {
64
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";
73
74     @Mock
75     private ManagersProvider managersProvider;
76     @Mock
77     private ItemManager itemManager;
78     @Mock
79     private ItemActionRequestDto request;
80     @Mock
81     private Item item;
82     @Mock
83     private VersioningManager versioningManager;
84     @Mock
85     private ActivityLogManager activityManager;
86     @Mock
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;
92
93     @InjectMocks
94     private ItemsImpl items;
95
96     @BeforeEach
97     void setUp() {
98         MockitoAnnotations.openMocks(this);
99     }
100
101     @Test
102     void shouldInitActionSideAffectsMap() {
103         items.initActionSideAffectsMap();
104         assertEquals(2, items.getActionSideAffectsMap().size());
105     }
106
107     @Test
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());
115     }
116
117     @Test
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());
129     }
130
131     @Test
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());
143     }
144
145     @Test
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
162                     .bucket(anyString())
163                     .build()
164                 ).thenReturn(new BucketExistsArgs());
165
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());
173             }
174         }
175     }
176
177     @Test
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());
184     }
185
186     @Test
187     void shouldList() {
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());
193     }
194
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"));
200         return versions;
201     }
202 }