2 * ============LICENSE_START=======================================================
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
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=========================================================
21 package org.openecomp.sdc.be.components.impl;
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;
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;
52 public class ConsumerBusinessLogicTest {
55 private ConsumerDefinition consumer;
56 private ConsumerDataDefinition consumerDataDefinition;
59 private ConsumerBusinessLogic consumerBusinessLogic;
62 private ComponentsUtils componentsUtils;
65 private IUserBusinessLogic iUserBusinessLogic;
68 private IGraphLockOperation iGraphLockOperation;
71 private ConsumerOperation consumerOperation;
74 private ConsumerData consumerData;
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);
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());
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());
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());
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());
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());
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());
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());
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());
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());
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());
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());
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());
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());
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());
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());