2 * ============LICENSE_START=======================================================
4 * ================================================================================
5 * Copyright (C) 2017 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.common.transaction.mngr;
23 import fj.data.Either;
24 import org.junit.Before;
25 import org.junit.BeforeClass;
26 import org.junit.Test;
27 import org.mockito.Mockito;
28 import org.openecomp.sdc.be.config.ConfigurationManager;
29 import org.openecomp.sdc.be.dao.api.ResourceUploadStatus;
30 import org.openecomp.sdc.be.dao.impl.ESCatalogDAO;
31 import org.openecomp.sdc.be.dao.janusgraph.JanusGraphGenericDao;
32 import org.openecomp.sdc.be.dao.janusgraph.JanusGraphOperationStatus;
33 import org.openecomp.sdc.be.resources.data.ESArtifactData;
34 import org.openecomp.sdc.common.api.ConfigurationSource;
35 import org.openecomp.sdc.common.impl.ExternalConfiguration;
36 import org.openecomp.sdc.common.impl.FSConfigurationSource;
37 import org.openecomp.sdc.common.log.wrappers.Logger;
38 import org.openecomp.sdc.common.transaction.api.IDBAction;
39 import org.openecomp.sdc.common.transaction.api.RollbackHandler;
40 import org.openecomp.sdc.common.transaction.api.TransactionUtils;
41 import org.openecomp.sdc.common.transaction.api.TransactionUtils.*;
43 import static org.junit.Assert.assertNotSame;
44 import static org.junit.Assert.assertSame;
45 import static org.junit.Assert.assertTrue;
46 import static org.mockito.Mockito.*;
47 import static org.mockito.Mockito.when;
49 public class SdncTransactionTest {
50 private static ESCatalogDAO esCatalogDao = Mockito.mock(ESCatalogDAO.class);
51 private static JanusGraphGenericDao janusGraphGenericDao = Mockito.mock(JanusGraphGenericDao.class);
52 private static final Logger log = Mockito.spy(Logger.getLogger(SdncTransactionTest.class));
53 private static int transactionId = 0;
54 private static ConfigurationManager configurationManager;
56 public enum TestAction {
57 JanusGraphAction, Rollback, GeneralAction
60 public enum TestResponse {
61 JanusGraphResponseSuccess, GeneralSuccess
65 public static void beforeClass() {
66 TransactionSdncImpl.setLog(log);
67 CommitManager.setLog(log);
68 RollbackHandler.setLog(log);
69 String appConfigDir = "src/test/resources/config/catalog-be";
70 ConfigurationSource configurationSource = new FSConfigurationSource(ExternalConfiguration.getChangeListener(), appConfigDir);
71 configurationManager = new ConfigurationManager(configurationSource);
75 public void beforeTest() {
78 reset(janusGraphGenericDao);
82 public void testInvokeJanusGraphAction() {
83 int transactionId = getNextTransactionId();
84 TransactionSdncImpl tx = new TransactionSdncImpl(transactionId, TransactionUtils.DUMMY_USER, ActionTypeEnum.ADD_ARTIFACT, esCatalogDao,
85 janusGraphGenericDao);
87 doBasicJanusGraphAction(transactionId, tx, false, true);
88 assertSame(TransactionStatusEnum.OPEN, tx.getStatus());
92 public void testInvokeESAction() {
93 int transactionId = getNextTransactionId();
94 TransactionSdncImpl tx = new TransactionSdncImpl(transactionId, TransactionUtils.DUMMY_USER, ActionTypeEnum.ADD_ARTIFACT, esCatalogDao,
95 janusGraphGenericDao);
97 doESAddArtifactAction(transactionId, tx, true, true);
98 assertSame(TransactionStatusEnum.OPEN, tx.getStatus());
102 public void testfinishTransaction() {
103 int transactionId = getNextTransactionId();
104 TransactionSdncImpl tx = new TransactionSdncImpl(transactionId, TransactionUtils.DUMMY_USER, ActionTypeEnum.ADD_ARTIFACT, esCatalogDao,
105 janusGraphGenericDao);
106 doFinishTransaction(transactionId, tx, true);
107 assertSame(TransactionStatusEnum.CLOSED, tx.getStatus());
111 public void testFinishOnClosedTransaction() {
112 int transactionId = getNextTransactionId();
113 TransactionSdncImpl tx = new TransactionSdncImpl(transactionId, TransactionUtils.DUMMY_USER, ActionTypeEnum.ADD_ARTIFACT, esCatalogDao,
114 janusGraphGenericDao);
115 doFinishTransaction(transactionId, tx, true);
117 TransactionCodeEnum finishTransaction = tx.finishTransaction();
118 assertSame(TransactionCodeEnum.TRANSACTION_CLOSED, finishTransaction);
119 verify(log).info(TransactionUtils.TRANSACTION_MARKER, LogMessages.COMMIT_ON_CLOSED_TRANSACTION, transactionId, TransactionStatusEnum.CLOSED.name(), TransactionUtils.DUMMY_USER, ActionTypeEnum.ADD_ARTIFACT.name());
120 assertSame(TransactionStatusEnum.CLOSED, tx.getStatus());
125 public void testCallingLastActionTwice() {
126 int transactionId = getNextTransactionId();
127 TransactionSdncImpl tx = new TransactionSdncImpl(transactionId, TransactionUtils.DUMMY_USER, ActionTypeEnum.ADD_ARTIFACT, esCatalogDao,
128 janusGraphGenericDao);
129 doBasicJanusGraphAction(transactionId, tx, true, true);
130 Either<TestResponse, TransactionCodeEnum> doBasicJanusGraphAction = doBasicJanusGraphAction(transactionId, tx, true, false);
131 assertTrue(doBasicJanusGraphAction.isRight());
132 assertNotSame(TransactionStatusEnum.OPEN, tx.getStatus());
133 verify(log).info(TransactionUtils.TRANSACTION_MARKER, LogMessages.DOUBLE_FINISH_FLAG_ACTION, transactionId, DBTypeEnum.JANUSGRAPH
134 .name(), TransactionUtils.DUMMY_USER, ActionTypeEnum.ADD_ARTIFACT.name());
138 public void testActionOnClosedTransaction() {
139 int transactionId = getNextTransactionId();
140 TransactionSdncImpl tx = new TransactionSdncImpl(transactionId, TransactionUtils.DUMMY_USER, ActionTypeEnum.ADD_ARTIFACT, esCatalogDao,
141 janusGraphGenericDao);
142 doFinishTransaction(transactionId, tx, true);
144 Either<DBActionCodeEnum, TransactionCodeEnum> eitherESResult = tx.invokeESAction(false, ESActionTypeEnum.ADD_ARTIFACT, createDummyArtifactData());
145 assertTrue(eitherESResult.isRight());
146 assertSame(TransactionCodeEnum.TRANSACTION_CLOSED, eitherESResult.right().value());
148 Either<Object, TransactionCodeEnum> eitherJanusGraphResult = tx.invokeJanusGraphAction(false, createBasicAction(TestAction.JanusGraphAction, TestResponse.JanusGraphResponseSuccess));
149 assertTrue(eitherJanusGraphResult.isRight());
150 assertSame(TransactionCodeEnum.TRANSACTION_CLOSED, eitherJanusGraphResult.right().value());
152 Either<Object, TransactionCodeEnum> eitherGeneralDBAction = tx.invokeGeneralDBAction(true, DBTypeEnum.JANUSGRAPH, createBasicAction(TestAction.JanusGraphAction, TestResponse.JanusGraphResponseSuccess),
153 createBasicAction(TestAction.Rollback, TestResponse.JanusGraphResponseSuccess));
154 assertTrue(eitherGeneralDBAction.isRight());
155 assertSame(TransactionCodeEnum.TRANSACTION_CLOSED, eitherGeneralDBAction.right().value());
157 assertSame(TransactionStatusEnum.CLOSED, tx.getStatus());
158 verify(log, times(3)).info(TransactionUtils.TRANSACTION_MARKER, LogMessages.ACTION_ON_CLOSED_TRANSACTION, transactionId, TransactionUtils.DUMMY_USER, ActionTypeEnum.ADD_ARTIFACT.name());
163 public void testBasicHappyScenario() {
164 int transactionId = getNextTransactionId();
165 TransactionSdncImpl tx = new TransactionSdncImpl(transactionId, TransactionUtils.DUMMY_USER, ActionTypeEnum.ADD_ARTIFACT, esCatalogDao,
166 janusGraphGenericDao);
168 doBasicJanusGraphAction(transactionId, tx, false, true);
169 assertSame(TransactionStatusEnum.OPEN, tx.getStatus());
171 doESAddArtifactAction(transactionId, tx, true, true);
172 assertSame(TransactionStatusEnum.OPEN, tx.getStatus());
174 doFinishTransaction(transactionId, tx, true);
176 assertSame(TransactionStatusEnum.CLOSED, tx.getStatus());
181 public void testRollbackSucceededOnAction() {
182 int transactionId = getNextTransactionId();
183 TransactionSdncImpl tx = new TransactionSdncImpl(transactionId, TransactionUtils.DUMMY_USER, ActionTypeEnum.ADD_ARTIFACT, esCatalogDao,
184 janusGraphGenericDao);
185 doESAddArtifactAction(transactionId, tx, false, true);
187 when(janusGraphGenericDao.rollback()).thenReturn(JanusGraphOperationStatus.OK);
188 String crushMessage = "DB Crush Simulation";
189 Either<TestResponse, TransactionCodeEnum> eitherTransactionResult = tx.invokeJanusGraphAction(false, createCrushingAction(TestAction.JanusGraphAction, crushMessage));
191 assertTrue(eitherTransactionResult.isRight());
192 assertSame(TransactionCodeEnum.ROLLBACK_SUCCESS, eitherTransactionResult.right().value());
193 assertSame(TransactionStatusEnum.CLOSED, tx.getStatus());
194 verify(log).info(TransactionUtils.TRANSACTION_MARKER, LogMessages.DB_ACTION_FAILED_WITH_EXCEPTION, DBTypeEnum.JANUSGRAPH
195 .name(), transactionId, crushMessage, TransactionUtils.DUMMY_USER, ActionTypeEnum.ADD_ARTIFACT.name());
197 verify(log, times(1)).debug(LogMessages.ROLLBACK_PERSISTENT_ACTION, DBTypeEnum.ELASTIC_SEARCH.name(), transactionId, TransactionUtils.DUMMY_USER, ActionTypeEnum.ADD_ARTIFACT.name());
198 verify(log, times(1)).debug(TransactionUtils.TRANSACTION_MARKER, LogMessages.ROLLBACK_PERSISTENT_ACTION, DBTypeEnum.ELASTIC_SEARCH.name(), transactionId, TransactionUtils.DUMMY_USER, ActionTypeEnum.ADD_ARTIFACT.name());
200 verify(log, times(1)).debug(LogMessages.ROLLBACK_NON_PERSISTENT_ACTION, DBTypeEnum.JANUSGRAPH
201 .name(), transactionId, TransactionUtils.DUMMY_USER, ActionTypeEnum.ADD_ARTIFACT.name());
202 verify(log, times(1)).debug(TransactionUtils.TRANSACTION_MARKER, LogMessages.ROLLBACK_NON_PERSISTENT_ACTION, DBTypeEnum.JANUSGRAPH
203 .name(), transactionId, TransactionUtils.DUMMY_USER, ActionTypeEnum.ADD_ARTIFACT.name());
205 verify(log).info(LogMessages.ROLLBACK_SUCCEEDED_GENERAL, transactionId, TransactionUtils.DUMMY_USER, ActionTypeEnum.ADD_ARTIFACT.name());
206 verify(log).info(TransactionUtils.TRANSACTION_MARKER, LogMessages.ROLLBACK_SUCCEEDED_GENERAL, transactionId, TransactionUtils.DUMMY_USER, ActionTypeEnum.ADD_ARTIFACT.name());
210 public void testRollbackFailedOnAction() {
211 int transactionId = getNextTransactionId();
212 TransactionSdncImpl tx = new TransactionSdncImpl(transactionId, TransactionUtils.DUMMY_USER, ActionTypeEnum.ADD_ARTIFACT, esCatalogDao,
213 janusGraphGenericDao);
215 doESAddArtifactAction(transactionId, tx, false, true);
217 when(janusGraphGenericDao.rollback()).thenReturn(JanusGraphOperationStatus.NOT_CONNECTED);
218 String crushMessage = "DB Crush Simulation";
219 Either<TestResponse, TransactionCodeEnum> eitherTransactionResult = tx.invokeJanusGraphAction(false, createCrushingAction(TestAction.JanusGraphAction, crushMessage));
221 assertTrue(eitherTransactionResult.isRight());
222 assertSame(TransactionStatusEnum.FAILED_ROLLBACK, tx.getStatus());
223 assertSame(TransactionCodeEnum.ROLLBACK_FAILED, eitherTransactionResult.right().value());
224 verify(log).info(TransactionUtils.TRANSACTION_MARKER, LogMessages.DB_ACTION_FAILED_WITH_EXCEPTION, DBTypeEnum.JANUSGRAPH
225 .name(), transactionId, crushMessage, TransactionUtils.DUMMY_USER, ActionTypeEnum.ADD_ARTIFACT.name());
227 verify(log, times(1)).debug(LogMessages.ROLLBACK_PERSISTENT_ACTION, DBTypeEnum.ELASTIC_SEARCH.name(), transactionId, TransactionUtils.DUMMY_USER, ActionTypeEnum.ADD_ARTIFACT.name());
228 verify(log, times(1)).debug(TransactionUtils.TRANSACTION_MARKER, LogMessages.ROLLBACK_PERSISTENT_ACTION, DBTypeEnum.ELASTIC_SEARCH.name(), transactionId, TransactionUtils.DUMMY_USER, ActionTypeEnum.ADD_ARTIFACT.name());
230 verify(log, times(1)).debug(LogMessages.ROLLBACK_NON_PERSISTENT_ACTION, DBTypeEnum.JANUSGRAPH
231 .name(), transactionId, TransactionUtils.DUMMY_USER, ActionTypeEnum.ADD_ARTIFACT.name());
232 verify(log, times(1)).debug(TransactionUtils.TRANSACTION_MARKER, LogMessages.ROLLBACK_NON_PERSISTENT_ACTION, DBTypeEnum.JANUSGRAPH
233 .name(), transactionId, TransactionUtils.DUMMY_USER, ActionTypeEnum.ADD_ARTIFACT.name());
237 public void testRollbackSucceededOnCommit() {
238 int transactionId = getNextTransactionId();
239 TransactionSdncImpl tx = new TransactionSdncImpl(transactionId, TransactionUtils.DUMMY_USER, ActionTypeEnum.ADD_ARTIFACT, esCatalogDao,
240 janusGraphGenericDao);
241 doESAddArtifactAction(transactionId, tx, false, true);
242 doBasicJanusGraphAction(transactionId, tx, true, true);
244 when(janusGraphGenericDao.commit()).thenReturn(JanusGraphOperationStatus.GENERAL_ERROR);
245 when(janusGraphGenericDao.rollback()).thenReturn(JanusGraphOperationStatus.OK);
247 TransactionCodeEnum transactionCode = tx.finishTransaction();
248 assertSame(TransactionCodeEnum.ROLLBACK_SUCCESS, transactionCode);
249 assertSame(TransactionStatusEnum.CLOSED, tx.getStatus());
251 verify(log, times(1)).debug(LogMessages.ROLLBACK_PERSISTENT_ACTION, DBTypeEnum.ELASTIC_SEARCH.name(), transactionId, TransactionUtils.DUMMY_USER, ActionTypeEnum.ADD_ARTIFACT.name());
252 verify(log, times(1)).debug(TransactionUtils.TRANSACTION_MARKER, LogMessages.ROLLBACK_PERSISTENT_ACTION, DBTypeEnum.ELASTIC_SEARCH.name(), transactionId, TransactionUtils.DUMMY_USER, ActionTypeEnum.ADD_ARTIFACT.name());
254 verify(log, times(1)).debug(LogMessages.ROLLBACK_NON_PERSISTENT_ACTION, DBTypeEnum.JANUSGRAPH
255 .name(), transactionId, TransactionUtils.DUMMY_USER, ActionTypeEnum.ADD_ARTIFACT.name());
256 verify(log, times(1)).debug(TransactionUtils.TRANSACTION_MARKER, LogMessages.ROLLBACK_NON_PERSISTENT_ACTION, DBTypeEnum.JANUSGRAPH
257 .name(), transactionId, TransactionUtils.DUMMY_USER, ActionTypeEnum.ADD_ARTIFACT.name());
259 verify(log).info(LogMessages.ROLLBACK_SUCCEEDED_GENERAL, transactionId, TransactionUtils.DUMMY_USER, ActionTypeEnum.ADD_ARTIFACT.name());
260 verify(log).info(TransactionUtils.TRANSACTION_MARKER, LogMessages.ROLLBACK_SUCCEEDED_GENERAL, transactionId, TransactionUtils.DUMMY_USER, ActionTypeEnum.ADD_ARTIFACT.name());
264 public void testRollbackFailedOnCommit() {
265 int transactionId = getNextTransactionId();
266 TransactionSdncImpl tx = new TransactionSdncImpl(transactionId, TransactionUtils.DUMMY_USER, ActionTypeEnum.ADD_ARTIFACT, esCatalogDao,
267 janusGraphGenericDao);
268 doESAddArtifactAction(transactionId, tx, false, true);
269 doBasicJanusGraphAction(transactionId, tx, true, true);
271 when(janusGraphGenericDao.commit()).thenReturn(JanusGraphOperationStatus.GENERAL_ERROR);
272 when(janusGraphGenericDao.rollback()).thenReturn(JanusGraphOperationStatus.OK);
273 String esError = "No Connection to Es";
274 Mockito.doThrow(new RuntimeException(esError)).when(esCatalogDao).deleteArtifact(Mockito.anyString());
276 TransactionCodeEnum transactionCode = tx.finishTransaction();
277 assertSame(TransactionCodeEnum.ROLLBACK_FAILED, transactionCode);
278 assertSame(TransactionStatusEnum.FAILED_ROLLBACK, tx.getStatus());
280 verify(log, times(1)).debug(LogMessages.ROLLBACK_PERSISTENT_ACTION, DBTypeEnum.ELASTIC_SEARCH.name(), transactionId, TransactionUtils.DUMMY_USER, ActionTypeEnum.ADD_ARTIFACT.name());
281 verify(log, times(1)).debug(TransactionUtils.TRANSACTION_MARKER, LogMessages.ROLLBACK_PERSISTENT_ACTION, DBTypeEnum.ELASTIC_SEARCH.name(), transactionId, TransactionUtils.DUMMY_USER, ActionTypeEnum.ADD_ARTIFACT.name());
283 verify(log, times(1)).debug(LogMessages.ROLLBACK_NON_PERSISTENT_ACTION, DBTypeEnum.JANUSGRAPH
284 .name(), transactionId, TransactionUtils.DUMMY_USER, ActionTypeEnum.ADD_ARTIFACT.name());
285 verify(log, times(1)).debug(TransactionUtils.TRANSACTION_MARKER, LogMessages.ROLLBACK_NON_PERSISTENT_ACTION, DBTypeEnum.JANUSGRAPH
286 .name(), transactionId, TransactionUtils.DUMMY_USER, ActionTypeEnum.ADD_ARTIFACT.name());
290 public void testInvokeGeneralAction() {
291 when(janusGraphGenericDao.rollback()).thenReturn(JanusGraphOperationStatus.OK);
292 int transactionId = getNextTransactionId();
293 TransactionSdncImpl tx = new TransactionSdncImpl(transactionId, TransactionUtils.DUMMY_USER, ActionTypeEnum.ADD_ARTIFACT, esCatalogDao,
294 janusGraphGenericDao);
295 IDBAction generalAction = createBasicAction(TestAction.GeneralAction, TestResponse.GeneralSuccess);
296 IDBAction rollbackAction = createBasicAction(TestAction.Rollback, TestResponse.GeneralSuccess);
297 String crushMessage = "No DB Connection";
298 IDBAction crushingAction = createCrushingAction(TestAction.GeneralAction, crushMessage);
300 Either<TestResponse, TransactionCodeEnum> eitherResult = tx.invokeGeneralDBAction(false, DBTypeEnum.MYSTERY, generalAction, rollbackAction);
301 assertTrue(eitherResult.isLeft());
302 assertSame(TestResponse.GeneralSuccess, eitherResult.left().value());
303 assertSame(TransactionStatusEnum.OPEN, tx.getStatus());
304 eitherResult = tx.invokeGeneralDBAction(false, DBTypeEnum.MYSTERY, crushingAction, rollbackAction);
306 assertTrue(eitherResult.isRight());
307 assertSame(TransactionCodeEnum.ROLLBACK_SUCCESS, eitherResult.right().value());
308 assertSame(TransactionStatusEnum.CLOSED, tx.getStatus());
310 verify(log).info(TransactionUtils.TRANSACTION_MARKER, LogMessages.DB_ACTION_FAILED_WITH_EXCEPTION, DBTypeEnum.MYSTERY.name(), transactionId, crushMessage, TransactionUtils.DUMMY_USER, ActionTypeEnum.ADD_ARTIFACT.name());
312 verify(log, times(2)).debug(LogMessages.ROLLBACK_PERSISTENT_ACTION, DBTypeEnum.MYSTERY.name(), transactionId, TransactionUtils.DUMMY_USER, ActionTypeEnum.ADD_ARTIFACT.name());
313 verify(log, times(2)).debug(TransactionUtils.TRANSACTION_MARKER, LogMessages.ROLLBACK_PERSISTENT_ACTION, DBTypeEnum.MYSTERY.name(), transactionId, TransactionUtils.DUMMY_USER, ActionTypeEnum.ADD_ARTIFACT.name());
315 verify(log).info(LogMessages.ROLLBACK_SUCCEEDED_GENERAL, transactionId, TransactionUtils.DUMMY_USER, ActionTypeEnum.ADD_ARTIFACT.name());
316 verify(log).info(TransactionUtils.TRANSACTION_MARKER, LogMessages.ROLLBACK_SUCCEEDED_GENERAL, transactionId, TransactionUtils.DUMMY_USER, ActionTypeEnum.ADD_ARTIFACT.name());
320 private Either<TestResponse, TransactionCodeEnum> doBasicJanusGraphAction(int transactionId, TransactionSdncImpl tx, boolean isLastAction, boolean isVerifyAction) {
321 // Add JanusGraph Action
322 Either<TestResponse, TransactionCodeEnum> eitherJanusGraphResult = tx.invokeJanusGraphAction(isLastAction, createBasicAction(TestAction.JanusGraphAction, TestResponse.JanusGraphResponseSuccess));
323 if (isVerifyAction) {
324 // Check JanusGraph Action
325 assertTrue(eitherJanusGraphResult.isLeft());
326 assertSame(TestResponse.JanusGraphResponseSuccess, eitherJanusGraphResult.left().value());
327 verify(log).debug(TestAction.JanusGraphAction.name());
328 verify(log).debug(LogMessages.INVOKE_ACTION, transactionId, DBTypeEnum.JANUSGRAPH.name(), TransactionUtils.DUMMY_USER, ActionTypeEnum.ADD_ARTIFACT.name());
329 verifyNoErrorsInLog();
332 return eitherJanusGraphResult;
335 private TransactionCodeEnum doFinishTransaction(int transactionId, TransactionSdncImpl tx, boolean isVerifyAction) {
336 // Prerequisite finishTransaction
337 when(janusGraphGenericDao.commit()).thenReturn(JanusGraphOperationStatus.OK);
339 TransactionCodeEnum transactionCode = tx.finishTransaction();
340 if (isVerifyAction) {
341 // Check finishTransaction
342 verify(log).debug(LogMessages.COMMIT_ACTION_ALL_DB, transactionId, TransactionUtils.DUMMY_USER, ActionTypeEnum.ADD_ARTIFACT.name());
343 verify(log).debug(LogMessages.COMMIT_ACTION_SPECIFIC_DB, transactionId, DBTypeEnum.JANUSGRAPH
344 .name(), TransactionUtils.DUMMY_USER, ActionTypeEnum.ADD_ARTIFACT.name());
345 assertSame(TransactionCodeEnum.SUCCESS, transactionCode);
347 return transactionCode;
350 private void doESAddArtifactAction(int transactionId, TransactionSdncImpl tx, boolean isLastAction, boolean isVerifyAction) {
351 // Prerequisite ES Action
352 Either<ESArtifactData, ResourceUploadStatus> eitherBeforeAddArtifact = Either.right(ResourceUploadStatus.NOT_EXIST);
353 when(esCatalogDao.getArtifact(Mockito.anyString())).thenReturn(eitherBeforeAddArtifact);
356 Either<DBActionCodeEnum, TransactionCodeEnum> eitherEsAction = tx.invokeESAction(isLastAction, ESActionTypeEnum.ADD_ARTIFACT, createDummyArtifactData());
358 if (isVerifyAction) {
359 // Check JanusGraph Action
360 assertTrue(eitherEsAction.isLeft());
361 assertSame(DBActionCodeEnum.SUCCESS, eitherEsAction.left().value());
362 verify(log).debug(LogMessages.INVOKE_ACTION, transactionId, DBTypeEnum.ELASTIC_SEARCH.name(), TransactionUtils.DUMMY_USER, ActionTypeEnum.ADD_ARTIFACT.name());
363 verifyNoErrorsInLog();
368 private ESArtifactData createDummyArtifactData() {
369 String strData = "qweqwqweqw34e4wrwer";
370 return new ESArtifactData("artifactNewMarina11", strData.getBytes());
373 private void verifyNoErrorsInLog() {
374 verify(log, Mockito.times(0)).error(Mockito.anyString(), Mockito.any(Object[].class));
375 verify(log, Mockito.times(0)).error(Mockito.anyString());
378 private void verifyNoInfoInLog() {
379 verify(log, Mockito.times(0)).info(Mockito.anyString(), Mockito.any(Object[].class));
380 verify(log, Mockito.times(0)).info(Mockito.anyString());
383 private IDBAction createBasicAction(TestAction action, TestResponse resp) {
384 final TestAction finalAction = action;
385 final TestResponse finalResp = resp;
386 return new IDBAction() {
388 public TestResponse doAction() {
389 log.debug(finalAction.name());
395 private IDBAction createCrushingAction(TestAction action, final String crushMessage) {
396 final TestAction finalAction = action;
397 return new IDBAction() {
399 public TestResponse doAction() {
400 log.debug(finalAction.name());
401 throw new RuntimeException(crushMessage);
406 public int getNextTransactionId() {
408 return transactionId;