1 package org.openecomp.sdc.be.components.distribution.engine;
3 import static java.util.Objects.isNull;
4 import static org.apache.commons.lang3.StringUtils.isEmpty;
5 import static org.mockito.Mockito.doNothing;
6 import static org.mockito.Mockito.verify;
7 import static org.mockito.Mockito.when;
9 import org.apache.commons.lang.NotImplementedException;
10 import org.apache.commons.lang.math.NumberUtils;
11 import org.apache.http.HttpStatus;
12 import org.junit.Assert;
13 import org.mockito.InjectMocks;
14 import org.mockito.Mock;
15 import org.mockito.Mockito;
16 import org.mockito.MockitoAnnotations;
17 import org.mockito.Spy;
18 import org.openecomp.sdc.be.dao.cassandra.CassandraOperationStatus;
19 import org.openecomp.sdc.be.dao.cassandra.OperationalEnvironmentDao;
20 import org.openecomp.sdc.be.datatypes.enums.EnvironmentStatusEnum;
21 import org.openecomp.sdc.be.impl.ComponentsUtils;
22 import org.openecomp.sdc.be.resources.data.OperationalEnvironmentEntry;
23 import org.openecomp.sdc.be.resources.data.auditing.AuditingActionEnum;
24 import org.openecomp.sdc.common.datastructure.Wrapper;
25 import org.openecomp.sdc.common.http.client.api.HttpResponse;
27 import com.att.aft.dme2.api.DME2Exception;
28 import com.att.aft.dme2.iterator.DME2EndpointIterator;
29 import com.att.nsa.apiClient.credentials.ApiCredential;
30 import com.google.gson.Gson;
31 import com.google.gson.GsonBuilder;
33 import cucumber.api.java.Before;
34 import cucumber.api.java.en.Given;
35 import cucumber.api.java.en.Then;
36 import cucumber.api.java.en.When;
37 import fj.data.Either;
39 public class StepsTenantIsolation {
41 // Notification Fields
42 private String operationalEnvironmentId = "28122015552391";
43 private String operationalEnvironmentName = "Operational Environment Name";
44 private String operationalEnvironmentType;
45 private String tenantContext ;
46 private String workloadContext;
47 private String action;
50 private DmaapConsumer dmaapConsumer;
52 private OperationalEnvironmentDao operationalEnvironmentDao;
54 private DME2EndpointIteratorCreator epIterCreator;
56 private ComponentsUtils componentsUtils;
58 private AaiRequestHandler aaiRequestHandler;
60 private CambriaHandler cambriaHandler;
63 private EnvironmentsEngine envEngine;
65 private boolean isSuccessful;
66 private boolean cassandraUp;
69 public void beforeScenario() {
70 MockitoAnnotations.initMocks(this);
71 when(operationalEnvironmentDao.getByEnvironmentsStatus(EnvironmentStatusEnum.COMPLETED))
72 .thenReturn(Either.right(CassandraOperationStatus.NOT_FOUND));
73 doNothing().when(envEngine).createUebTopicsForEnvironments();
77 // ############################# Given - Start #############################
78 @Given("^Dmaap consumer recieved notification with fields (.*)$")
79 public void dmaap_consumer_recieved_notification_with_fields(String notificationFields) throws Throwable {
80 Gson gson = new GsonBuilder().create();
81 IDmaapNotificationData notification = gson.fromJson(notificationFields, DmaapNotificationDataImpl.class);
82 if (!isNull(notification.getOperationalEnvironmentType())) {
83 this.operationalEnvironmentType = notification.getOperationalEnvironmentType().getEventTypenName();
85 if( !isEmpty(notification.getOperationalEnvironmentId()) ){
86 this.operationalEnvironmentId = notification.getOperationalEnvironmentId();
88 if( !isNull(notification.getAction()) ){
89 this.action = notification.getAction().getActionName();
94 @Given("^Cassandra service status is (.*)$")
95 public void cassandra_service_status_is(String status) throws Throwable {
98 this.cassandraUp = true;
101 when(operationalEnvironmentDao.get(operationalEnvironmentId))
102 .thenReturn(Either.right(CassandraOperationStatus.GENERAL_ERROR));
103 when(operationalEnvironmentDao.save(Mockito.any(OperationalEnvironmentEntry.class)))
104 .thenReturn(CassandraOperationStatus.GENERAL_ERROR);
107 throw new NotImplementedException();
111 @Given("^Record status is (.*)$")
112 public void record_status_is(String status) throws Throwable {
116 Either<OperationalEnvironmentEntry, CassandraOperationStatus> eitherResult;
117 final OperationalEnvironmentEntry entryMock = Mockito.mock(OperationalEnvironmentEntry.class);
119 case "FOUND_IN_PROGRESS":
120 when(entryMock.getStatus()).thenReturn(EnvironmentStatusEnum.IN_PROGRESS.getName());
121 eitherResult = Either.left(entryMock);
123 case "FOUND_COMPLETED":
124 when(entryMock.getStatus()).thenReturn(EnvironmentStatusEnum.COMPLETED.getName());
125 eitherResult = Either.left(entryMock);
128 when(entryMock.getStatus()).thenReturn(EnvironmentStatusEnum.FAILED.getName());
129 eitherResult = Either.left(entryMock);
132 eitherResult = Either.right(CassandraOperationStatus.NOT_FOUND);
135 throw new NotImplementedException();
138 when(operationalEnvironmentDao.get(operationalEnvironmentId)).thenReturn(eitherResult);
139 when(operationalEnvironmentDao.save(Mockito.any(OperationalEnvironmentEntry.class)))
140 .thenReturn(CassandraOperationStatus.OK);
143 @Given("^AAI service status is (.*) and Tenant returned is (.*) and worload returned is (.*)$")
144 public void aai_service_status_is(String aaiServiceStatus, String tenant, String workload) throws Throwable {
145 this.tenantContext = tenant;
146 this.workloadContext = workload;
147 HttpResponse<String> resp = Mockito.mock(HttpResponse.class);
148 when(aaiRequestHandler.getOperationalEnvById(operationalEnvironmentId)).thenReturn(resp);
149 switch (aaiServiceStatus) {
151 when(resp.getStatusCode()).thenReturn(HttpStatus.SC_OK);
152 String aaiResponseTemplate =
155 + " \"operational-environment-id\": \"%s\",\r\n"
156 + " \"operational-environment-name\": \"%s\",\r\n"
157 + " \"operational-environment-type\": \"%s\",\r\n"
158 + " \"operational-environment-status\": \"IN-PROGRESS\",\r\n"
159 + " \"tenant-context\": \"%s\",\r\n"
160 + " \"workload-context\": \"%s\"\r\n"
163 when(resp.getResponse()).thenReturn(String.format(aaiResponseTemplate, operationalEnvironmentId,
164 operationalEnvironmentName, operationalEnvironmentType, tenantContext, workloadContext));
168 when(resp.getStatusCode()).thenReturn(HttpStatus.SC_REQUEST_TIMEOUT);
171 throw new NotImplementedException();
175 @Given("^AFT_DME service status is (.*)$")
176 public void aft_dme_service_status_is(String aftDmeStatus) throws Throwable {
177 switch (aftDmeStatus) {
179 DME2EndpointIterator mockItr = Mockito.mock(DME2EndpointIterator.class);
180 when(mockItr.hasNext()).thenReturn(false);
181 when(epIterCreator.create(Mockito.anyString())).thenReturn(mockItr);
184 when(epIterCreator.create(Mockito.anyString()))
185 .thenThrow(new DME2Exception("dummyCode", new NotImplementedException()));
188 throw new NotImplementedException();
192 @SuppressWarnings("unchecked")
193 @Given("^UEB service status is (.*)$")
194 public void ueb_service_status_is(String status) throws Throwable {
196 Either<ApiCredential, CambriaErrorResponse> response;
199 ApiCredential apiCredential = Mockito.mock(ApiCredential.class);
200 when(apiCredential.getApiKey()).thenReturn("MockAPIKey");
201 when(apiCredential.getApiSecret()).thenReturn("MockSecretKey");
202 response = Either.left(apiCredential);
205 CambriaErrorResponse cambriaError = Mockito.mock(CambriaErrorResponse.class);
206 response = Either.right(cambriaError);
209 throw new NotImplementedException();
211 when(cambriaHandler.createUebKeys(Mockito.anyList())).thenReturn(response);
213 // ############################# Given - End #############################
215 // ############################# When - Start #############################
217 @When("^handle message is activated$")
218 public void handle_message_is_activated() throws Throwable {
219 this.isSuccessful = envEngine.handleMessage(buildNotification());
221 // ############################# When - End #############################
223 // ############################# Then - Start #############################
224 @SuppressWarnings("unchecked")
225 @Then("^handle message activates validation of eventType (.*)$")
226 public void handle_message_activates_validation_of_eventType(boolean isValidated) throws Throwable {
227 verify(envEngine, Mockito.times(getNumberOfCallsToValidate(isValidated)))
228 .validateEnvironmentType(Mockito.any(Wrapper.class), Mockito.any(IDmaapNotificationData.class),
229 Mockito.any(IDmaapAuditNotificationData.class));
232 @SuppressWarnings("unchecked")
233 @Then("^trying to write message to audit log and table (.*)$")
234 public void trying_to_write_message_to_audit_log_and_table(boolean isUnsupportedTypeEventRecorded) throws Throwable {
235 int count = isUnsupportedTypeEventRecorded ? 2 : 1;
236 verify(componentsUtils, Mockito.atLeast(count))
237 .auditEnvironmentEngine(Mockito.any(AuditingActionEnum.class), Mockito.eq(operationalEnvironmentId),
238 Mockito.any(String.class), Mockito.any(String.class), Mockito.eq(operationalEnvironmentName), Mockito.eq(tenantContext));
241 @SuppressWarnings("unchecked")
242 @Then("^handle message activates validation of action (.*)$")
243 public void handle_message_activates_validation_of_action(boolean isValidated) throws Throwable {
244 verify(envEngine, Mockito.times(getNumberOfCallsToValidate(isValidated)))
245 .validateActionType(Mockito.any(Wrapper.class), Mockito.any(IDmaapNotificationData.class));
248 @SuppressWarnings("unchecked")
249 @Then("^handle message activates validation of state (.*)$")
250 public void handle_message_activates_validation_of_state(boolean isValidated) throws Throwable {
251 verify(envEngine, Mockito.times(getNumberOfCallsToValidate(isValidated)))
252 .validateState(Mockito.any(Wrapper.class), Mockito.any(IDmaapNotificationData.class));
255 @SuppressWarnings("unchecked")
256 @Then("^trying to save in-progress record (.*)$")
257 public void trying_to_save_in_progress_record(boolean isActivated) throws Throwable {
258 verify(envEngine, Mockito.times(getNumberOfCallsToValidate(isActivated)))
259 .saveEntryWithInProgressStatus(Mockito.any(Wrapper.class), Mockito.any(Wrapper.class), Mockito.any(IDmaapNotificationData.class));
262 @SuppressWarnings("unchecked")
263 @Then("^trying to get environment info from A&AI API (.*)$")
264 public void trying_to_get_environment_info_from_AAI_AP(boolean isActivated) throws Throwable {
265 verify(envEngine, Mockito.times(getNumberOfCallsToValidate(isActivated)))
266 .retrieveOpEnvInfoFromAAI(Mockito.any(Wrapper.class), Mockito.any(OperationalEnvironmentEntry.class));
269 @SuppressWarnings("unchecked")
270 @Then("^trying to retrieve Ueb Addresses From AftDme (.*)$")
271 public void trying_to_retrieve_ueb_addresses_from_AftDme(boolean isActivated) throws Throwable {
272 verify(envEngine, Mockito.times(getNumberOfCallsToValidate(isActivated))).discoverUebHosts(
273 Mockito.anyString(), Mockito.anyString());
277 @SuppressWarnings("unchecked")
278 @Then("^trying to create Ueb keys (.*)$")
279 public void trying_to_create_ueb_keys(boolean isActivated) throws Throwable {
280 verify(envEngine, Mockito.times(getNumberOfCallsToValidate(isActivated)))
281 .createUebKeys(Mockito.any(Wrapper.class), Mockito.any(OperationalEnvironmentEntry.class));
284 @Then("^trying to create Ueb Topics (.*)$")
285 public void trying_to_create_ueb_topics(boolean isActivated) throws Throwable {
286 verify(envEngine, Mockito.times(getNumberOfCallsToValidate(isActivated)))
287 .createUebTopicsForEnvironment(Mockito.any(OperationalEnvironmentEntry.class));
290 @Then("^handle message finished successfully (.*)$")
291 public void handle_message_finished_successfully(boolean isSuccessfull) throws Throwable {
292 Assert.assertTrue(this.isSuccessful == isSuccessfull);
295 // ############################# Then - End #############################
297 private String buildNotification() {
298 String notificationTemplate = "{ \"operationalEnvironmentId\": \"%s\",\r\n"
299 + " \"operationalEnvironmentName\": \"%s\",\r\n"
300 + " \"operationalEnvironmentType\": \"%s\",\r\n" + " \"tenantContext\": \"%s\",\r\n"
301 + " \"workloadContext\": \"%s\",\r\n" + " \"action\": \"%s\"}";
303 String notification = String.format(notificationTemplate, operationalEnvironmentId, operationalEnvironmentName,
304 operationalEnvironmentType, tenantContext, workloadContext, action);
308 private int getNumberOfCallsToValidate(boolean isValidated) {
309 return isValidated ? NumberUtils.INTEGER_ONE : NumberUtils.INTEGER_ZERO;