Added oparent to sdc main
[sdc.git] / catalog-be / src / test / java / org / openecomp / sdc / be / components / impl / ConsumerBusinessLogicTest.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.components.impl;
22
23 import org.apache.commons.lang3.RandomStringUtils;
24 import org.junit.Before;
25 import org.junit.Test;
26 import org.mockito.InjectMocks;
27 import org.mockito.Mock;
28 import org.mockito.Mockito;
29 import org.mockito.MockitoAnnotations;
30 import org.openecomp.sdc.be.dao.api.ActionStatus;
31 import org.openecomp.sdc.be.datatypes.elements.ConsumerDataDefinition;
32 import org.openecomp.sdc.be.datatypes.enums.NodeTypeEnum;
33 import org.openecomp.sdc.be.impl.ComponentsUtils;
34 import org.openecomp.sdc.be.model.ConsumerDefinition;
35 import org.openecomp.sdc.be.model.User;
36 import org.openecomp.sdc.be.model.operations.api.IGraphLockOperation;
37 import org.openecomp.sdc.be.model.operations.api.StorageOperationStatus;
38 import org.openecomp.sdc.be.model.operations.impl.ConsumerOperation;
39 import org.openecomp.sdc.be.resources.data.ConsumerData;
40 import org.openecomp.sdc.be.user.IUserBusinessLogic;
41 import org.openecomp.sdc.exception.ResponseFormat;
42 import fj.data.Either;
43 import java.util.HashMap;
44 import java.util.Map;
45
46 import static org.junit.Assert.assertEquals;
47 import static org.junit.Assert.assertTrue;
48 import static org.mockito.ArgumentMatchers.any;
49 import static org.mockito.ArgumentMatchers.anyString;
50
51
52 public class ConsumerBusinessLogicTest {
53
54         private User user;
55         private ConsumerDefinition consumer;
56         private ConsumerDataDefinition consumerDataDefinition;
57
58         @InjectMocks
59         private ConsumerBusinessLogic consumerBusinessLogic;
60
61         @Mock
62         private ComponentsUtils componentsUtils;
63
64         @Mock
65         private IUserBusinessLogic iUserBusinessLogic;
66
67         @Mock
68         private IGraphLockOperation iGraphLockOperation;
69
70         @Mock
71         private ConsumerOperation consumerOperation;
72
73         @Mock
74         private ConsumerData consumerData;
75
76         @Before
77         public void setUp(){
78                 consumerBusinessLogic = new ConsumerBusinessLogic();
79                 consumerDataDefinition = new ConsumerDataDefinition();
80                 consumer = new ConsumerDefinition();
81                 MockitoAnnotations.initMocks(this);
82                 user = new User("Stan", "Lee", "stan.lee",
83                                 "stan.lee@marvel.com", "ADMIN", 1542024000L);
84         }
85
86         @Test
87         public void testCreateConsumer_givenMissingUser_thenReturnsError() {
88                 User user = new User();
89                 ConsumerDefinition consumerDefinition = new ConsumerDefinition();
90                 Mockito.when(componentsUtils.getResponseFormat(ActionStatus.MISSING_INFORMATION))
91                                 .thenReturn(new ResponseFormat());
92                 assertTrue(consumerBusinessLogic.createConsumer(user, consumerDefinition).isRight());
93         }
94
95         @Test
96         public void testCreateConsumer_givenNonListedUser_thenReturnsError() {
97                 ConsumerDefinition consumerDefinition = new ConsumerDefinition();
98                 Mockito.when(componentsUtils.getResponseFormat(ActionStatus.RESTRICTED_ACCESS))
99                                 .thenReturn(new ResponseFormat());
100                 Mockito.when(iUserBusinessLogic.getUser(user.getUserId(), false))
101                                 .thenReturn(Either.right(ActionStatus.RESTRICTED_OPERATION));
102                 assertTrue(consumerBusinessLogic.createConsumer(user, consumerDefinition).isRight());
103         }
104
105         @Test
106         public void testCreateConsumer_givenNonAdminUser_thenReturnsError() {
107                 user.setRole("DESIGNER");
108                 Mockito.when(componentsUtils.getResponseFormat(ActionStatus.RESTRICTED_OPERATION))
109                                 .thenReturn(new ResponseFormat());
110                 Mockito.when(iUserBusinessLogic.getUser(user.getUserId(), false))
111                                 .thenReturn(Either.left(user));
112                 assertTrue(consumerBusinessLogic.createConsumer(user, consumer).isRight());
113         }
114
115         @Test
116         public void testCreateConsumer_givenInvalidConsumerNames_thenReturnsError() {
117                 Map<String, ActionStatus> invalidConsumerNames = new HashMap<>();
118                 invalidConsumerNames.put(null, ActionStatus.MISSING_DATA);
119                 invalidConsumerNames.put(".#()", ActionStatus.INVALID_CONTENT);
120                 invalidConsumerNames.put(RandomStringUtils.random(256, true, false), ActionStatus.EXCEEDS_LIMIT);
121                 for(Map.Entry<String, ActionStatus> e: invalidConsumerNames.entrySet()){
122                         consumer.setConsumerName(e.getKey());
123                         Mockito.when(iUserBusinessLogic.getUser(user.getUserId(), false))
124                                         .thenReturn(Either.left(user));
125                         Mockito.when(componentsUtils.getResponseFormat(e.getValue(), "Consumer name"))
126                                         .thenReturn(new ResponseFormat());
127                         assertTrue(consumerBusinessLogic.createConsumer(user, consumer).isRight());
128                 }
129         }
130
131         @Test
132         public void testCreateConsumer_givenInvalidConsumerPasswords_thenReturnsError() {
133                 Map<String, ActionStatus> invalidPasswordResults = new HashMap<>();
134                 invalidPasswordResults.put(null, ActionStatus.MISSING_DATA);
135                 invalidPasswordResults.put(RandomStringUtils.random(64, '*' ), ActionStatus.INVALID_CONTENT_PARAM);
136                 invalidPasswordResults.put("password", ActionStatus.INVALID_LENGTH);
137                 for(Map.Entry<String, ActionStatus> e: invalidPasswordResults.entrySet()){
138                         consumer.setConsumerName("_marvel");
139                         consumer.setConsumerPassword(e.getKey());
140                         Mockito.when(iUserBusinessLogic.getUser(user.getUserId(), false))
141                                         .thenReturn(Either.left(user));
142                         Mockito.when(componentsUtils.getResponseFormat(e.getValue(), "Consumer password"))
143                                         .thenReturn(new ResponseFormat());
144                         assertTrue(consumerBusinessLogic.createConsumer(user, consumer).isRight());
145                 }
146         }
147
148         @Test
149         public void testCreateConsumer_givenInvalidConsumerSalts_thenReturnsError() {
150                 consumer.setConsumerPassword(RandomStringUtils.random(64, true,true));
151                 Map<String, ActionStatus> invalidPasswordSalts = new HashMap<>();
152                 invalidPasswordSalts.put(null, ActionStatus.MISSING_DATA);
153                 invalidPasswordSalts.put(RandomStringUtils.random(32, "*" ), ActionStatus.INVALID_CONTENT_PARAM);
154                 invalidPasswordSalts.put("password", ActionStatus.INVALID_LENGTH);
155                 for(Map.Entry<String, ActionStatus> e: invalidPasswordSalts.entrySet()){
156                         consumer.setConsumerName("_marvel");
157                         consumer.setConsumerSalt(e.getKey());
158                         Mockito.when(iUserBusinessLogic.getUser(user.getUserId(), false))
159                                         .thenReturn(Either.left(user));
160                         Mockito.when(componentsUtils.getResponseFormat(e.getValue(), "Consumer salt"))
161                                         .thenReturn(new ResponseFormat());
162                         assertTrue(consumerBusinessLogic.createConsumer(user, consumer).isRight());
163                 }
164         }
165
166         @Test
167         public void testCreateConsumer_givenConsumerNotLocked_thenReturnsError() {
168                 consumer.setConsumerName("_marvel");
169                 consumer.setConsumerPassword(RandomStringUtils.random(64, true,true));
170                 consumer.setConsumerSalt(RandomStringUtils.random(32, 'a'));
171                 Mockito.when(iUserBusinessLogic.getUser(user.getUserId(), false))
172                                 .thenReturn(Either.left(user));
173                 Mockito.when(iGraphLockOperation.lockComponent(anyString(), any(NodeTypeEnum.class)))
174                                 .thenReturn(StorageOperationStatus.GENERAL_ERROR);
175                 assertTrue(consumerBusinessLogic.createConsumer(user, consumer).isRight());
176         }
177
178         @Test
179         public void testCreateConsumer_givenUnableToCreateCredentials_thenReturnsError() {
180                 ConsumerDataDefinition consumerDataDefinition = new ConsumerDataDefinition();
181                 consumerDataDefinition.setConsumerName("_marvel");
182                 consumerDataDefinition.setConsumerPassword(RandomStringUtils.random(64, true,true));
183                 consumerDataDefinition.setConsumerSalt(RandomStringUtils.random(32, 'a'));
184                 ConsumerDefinition consumer = new ConsumerDefinition(consumerDataDefinition);
185                 Mockito.when(iUserBusinessLogic.getUser(user.getUserId(), false))
186                                 .thenReturn(Either.left(user));
187                 Mockito.when(iGraphLockOperation.lockComponent(anyString(), any(NodeTypeEnum.class)))
188                                 .thenReturn(StorageOperationStatus.OK);
189                 Mockito.when(consumerOperation.getCredentials(anyString()))
190                                 .thenReturn(Either.right(StorageOperationStatus.OK));
191                 Mockito.when(consumerOperation.createCredentials(any(ConsumerData.class)))
192                                 .thenReturn(Either.right(StorageOperationStatus.USER_NOT_FOUND));
193                 assertTrue(consumerBusinessLogic.createConsumer(user, consumer).isRight());
194         }
195
196         @Test
197         public void testCreateConsumer_givenValidUserAndConsumer_thenReturnsConsumer() {
198                 ConsumerDataDefinition consumerDataDefinition = new ConsumerDataDefinition();
199                 consumerDataDefinition.setConsumerName("_marvel");
200                 consumerDataDefinition.setConsumerPassword(RandomStringUtils.random(64, true,true));
201                 consumerDataDefinition.setConsumerSalt(RandomStringUtils.random(32, 'a'));
202                 ConsumerDefinition consumer = new ConsumerDefinition(consumerDataDefinition);
203                 Mockito.when(iUserBusinessLogic.getUser(user.getUserId(), false))
204                                 .thenReturn(Either.left(user));
205                 Mockito.when(iGraphLockOperation.lockComponent(anyString(), any(NodeTypeEnum.class)))
206                                 .thenReturn(StorageOperationStatus.OK);
207                 Mockito.when(consumerOperation.getCredentials(anyString()))
208                                 .thenReturn(Either.right(StorageOperationStatus.OK));
209                 Mockito.when(consumerOperation.createCredentials(any(ConsumerData.class)))
210                                 .thenReturn(Either.left(new ConsumerData(consumerDataDefinition)));
211                 assertTrue(consumerBusinessLogic.createConsumer(user, consumer).isLeft());
212         }
213
214         @Test
215         public void testGetConsumer_givenNullUser_thenReturnsError() {
216                 Mockito.when(consumerOperation.getCredentials("marvel123"))
217                                 .thenReturn(Either.right(StorageOperationStatus.USER_NOT_FOUND));
218                 assertTrue(consumerBusinessLogic.getConsumer("marvel123", null).isRight());
219         }
220
221         @Test
222         public void testGetConsumer_givenValidUserAndConsumerId_thenReturnsConsumer() {
223                 Mockito.when(consumerOperation.getCredentials("marvel123"))
224                                 .thenReturn(Either.left(new ConsumerData()));
225                 Mockito.when(consumerData.getConsumerDataDefinition())
226                                 .thenReturn(consumerDataDefinition);
227                 Mockito.when(iUserBusinessLogic.getUser(user.getUserId(), false))
228                                 .thenReturn(Either.left(user));
229                 assertTrue(consumerBusinessLogic.getConsumer("marvel123", user).isLeft());
230         }
231
232         @Test
233         public void testUpdateConsumer_givenValidConsumer_thenReturnsUpdatedConsumer() {
234                 ConsumerDefinition updatedConsumer = new ConsumerDefinition(consumerDataDefinition);
235                 updatedConsumer.setConsumerName("marvel2");
236                 ConsumerDataDefinition updatedConsumerDataDef = new ConsumerDataDefinition();
237                 updatedConsumerDataDef.setConsumerName("marvel2");
238                 ConsumerData consumerData = new ConsumerData(updatedConsumerDataDef);
239                 Mockito.when(consumerOperation.updateCredentials(any(ConsumerData.class)))
240                                 .thenReturn(Either.left(consumerData));
241                 assertEquals(updatedConsumer.getConsumerName(), consumerBusinessLogic.updateConsumer(consumer).left().value().getConsumerName());
242         }
243
244         @Test
245         public void testUpdateConsumer_givenUpdateFailure_thenReturnsError() {
246                 Mockito.when(consumerOperation.updateCredentials(any(ConsumerData.class)))
247                                 .thenReturn(Either.right(StorageOperationStatus.GENERAL_ERROR));
248                 assertTrue(consumerBusinessLogic.updateConsumer(consumer).isRight());
249         }
250
251         @Test
252         public void testDeleteConsumer_givenValidUserAndConsumerId_thenReturnsSuccessful() {
253                 ConsumerData consumerData = new ConsumerData(new ConsumerDataDefinition());
254                 Mockito.when(iUserBusinessLogic.getUser(user.getUserId(), false))
255                                 .thenReturn(Either.left(user));
256                 Mockito.when(consumerOperation.deleteCredentials("marvel123"))
257                                 .thenReturn(Either.left(consumerData));
258                 assertTrue(consumerBusinessLogic.deleteConsumer("marvel123", user).isLeft());
259         }
260
261         @Test
262         public void testDeleteConsumer_givenInvalidUser_thenReturnsError() {
263                 Mockito.when(iUserBusinessLogic.getUser(user.getUserId(), false))
264                                 .thenReturn(Either.left(user));
265                 Mockito.when(consumerOperation.deleteCredentials("marvel123"))
266                                 .thenReturn(Either.right(StorageOperationStatus.USER_NOT_FOUND));
267                 assertTrue(consumerBusinessLogic.deleteConsumer("marvel123", user).isRight());
268         }
269 }