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.titan.TitanGenericDao;
32 import org.openecomp.sdc.be.dao.titan.TitanOperationStatus;
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.transaction.api.IDBAction;
38 import org.openecomp.sdc.common.transaction.api.RollbackHandler;
39 import org.openecomp.sdc.common.transaction.api.TransactionUtils;
40 import org.openecomp.sdc.common.transaction.api.TransactionUtils.ActionTypeEnum;
41 import org.openecomp.sdc.common.transaction.api.TransactionUtils.DBActionCodeEnum;
42 import org.openecomp.sdc.common.transaction.api.TransactionUtils.DBTypeEnum;
43 import org.openecomp.sdc.common.transaction.api.TransactionUtils.ESActionTypeEnum;
44 import org.openecomp.sdc.common.transaction.api.TransactionUtils.LogMessages;
45 import org.openecomp.sdc.common.transaction.api.TransactionUtils.TransactionCodeEnum;
46 import org.openecomp.sdc.common.transaction.api.TransactionUtils.TransactionStatusEnum;
47 import org.slf4j.Logger;
49 import static org.junit.Assert.assertTrue;
50 import static org.mockito.Mockito.reset;
51 import static org.mockito.Mockito.times;
52 import static org.mockito.Mockito.verify;
53 import static org.mockito.Mockito.when;
55 public class SdncTransactionTest {
56 private static ESCatalogDAO esCatalogDao = Mockito.mock(ESCatalogDAO.class);
57 private static TitanGenericDao titanGenericDao = Mockito.mock(TitanGenericDao.class);
58 private static final Logger log = Mockito.spy(Logger.class);
59 private static int transactionId = 0;
60 private static ConfigurationManager configurationManager;
62 public enum TestAction {
63 TitanAction, Rollback, GeneralAction
66 public enum TestResponse {
67 TitanResponseSuccess, GeneralSuccess
71 public static void beforeClass() {
72 TransactionSdncImpl.setLog(log);
73 CommitManager.setLog(log);
74 RollbackHandler.setLog(log);
75 String appConfigDir = "src/test/resources/config/catalog-be";
76 ConfigurationSource configurationSource = new FSConfigurationSource(ExternalConfiguration.getChangeListener(), appConfigDir);
77 configurationManager = new ConfigurationManager(configurationSource);
81 public void beforeTest() {
84 reset(titanGenericDao);
88 public void testInvokeTitanAction() {
89 int transactionId = getNextTransactionId();
90 TransactionSdncImpl tx = new TransactionSdncImpl(transactionId, TransactionUtils.DUMMY_USER, ActionTypeEnum.ADD_ARTIFACT, esCatalogDao, titanGenericDao);
92 doBasicTitanAction(transactionId, tx, false, true);
93 assertTrue(tx.getStatus() == TransactionStatusEnum.OPEN);
97 public void testInvokeESAction() {
98 int transactionId = getNextTransactionId();
99 TransactionSdncImpl tx = new TransactionSdncImpl(transactionId, TransactionUtils.DUMMY_USER, ActionTypeEnum.ADD_ARTIFACT, esCatalogDao, titanGenericDao);
101 doESAddArtifactAction(transactionId, tx, true, true);
102 assertTrue(tx.getStatus() == TransactionStatusEnum.OPEN);
106 public void testfinishTransaction() {
107 int transactionId = getNextTransactionId();
108 TransactionSdncImpl tx = new TransactionSdncImpl(transactionId, TransactionUtils.DUMMY_USER, ActionTypeEnum.ADD_ARTIFACT, esCatalogDao, titanGenericDao);
109 doFinishTransaction(transactionId, tx, true);
110 assertTrue(tx.getStatus() == TransactionStatusEnum.CLOSED);
114 public void testFinishOnClosedTransaction() {
115 int transactionId = getNextTransactionId();
116 TransactionSdncImpl tx = new TransactionSdncImpl(transactionId, TransactionUtils.DUMMY_USER, ActionTypeEnum.ADD_ARTIFACT, esCatalogDao, titanGenericDao);
117 doFinishTransaction(transactionId, tx, true);
119 TransactionCodeEnum finishTransaction = tx.finishTransaction();
120 assertTrue(finishTransaction == TransactionCodeEnum.TRANSACTION_CLOSED);
121 verify(log).info(TransactionUtils.TRANSACTION_MARKER, LogMessages.COMMIT_ON_CLOSED_TRANSACTION, transactionId, TransactionStatusEnum.CLOSED.name(), TransactionUtils.DUMMY_USER, ActionTypeEnum.ADD_ARTIFACT.name());
122 assertTrue(tx.getStatus() == TransactionStatusEnum.CLOSED);
127 public void testCallingLastActionTwice() {
128 int transactionId = getNextTransactionId();
129 TransactionSdncImpl tx = new TransactionSdncImpl(transactionId, TransactionUtils.DUMMY_USER, ActionTypeEnum.ADD_ARTIFACT, esCatalogDao, titanGenericDao);
130 doBasicTitanAction(transactionId, tx, true, true);
131 Either<TestResponse, TransactionCodeEnum> doBasicTitanAction = doBasicTitanAction(transactionId, tx, true, false);
132 assertTrue(doBasicTitanAction.isRight());
133 assertTrue(tx.getStatus() != TransactionStatusEnum.OPEN);
134 verify(log).info(TransactionUtils.TRANSACTION_MARKER, LogMessages.DOUBLE_FINISH_FLAG_ACTION, transactionId, DBTypeEnum.TITAN.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, titanGenericDao);
141 doFinishTransaction(transactionId, tx, true);
143 Either<DBActionCodeEnum, TransactionCodeEnum> eitherESResult = tx.invokeESAction(false, ESActionTypeEnum.ADD_ARTIFACT, createDummyArtifactData());
144 assertTrue(eitherESResult.isRight());
145 assertTrue(eitherESResult.right().value() == TransactionCodeEnum.TRANSACTION_CLOSED);
147 Either<Object, TransactionCodeEnum> eitherTitanResult = tx.invokeTitanAction(false, createBasicAction(TestAction.TitanAction, TestResponse.TitanResponseSuccess));
148 assertTrue(eitherTitanResult.isRight());
149 assertTrue(eitherTitanResult.right().value() == TransactionCodeEnum.TRANSACTION_CLOSED);
151 Either<Object, TransactionCodeEnum> eitherGeneralDBAction = tx.invokeGeneralDBAction(true, DBTypeEnum.TITAN, createBasicAction(TestAction.TitanAction, TestResponse.TitanResponseSuccess),
152 createBasicAction(TestAction.Rollback, TestResponse.TitanResponseSuccess));
153 assertTrue(eitherGeneralDBAction.isRight());
154 assertTrue(eitherGeneralDBAction.right().value() == TransactionCodeEnum.TRANSACTION_CLOSED);
156 assertTrue(tx.getStatus() == TransactionStatusEnum.CLOSED);
157 verify(log, times(3)).info(TransactionUtils.TRANSACTION_MARKER, LogMessages.ACTION_ON_CLOSED_TRANSACTION, transactionId, TransactionUtils.DUMMY_USER, ActionTypeEnum.ADD_ARTIFACT.name());
162 public void testBasicHappyScenario() {
163 int transactionId = getNextTransactionId();
164 TransactionSdncImpl tx = new TransactionSdncImpl(transactionId, TransactionUtils.DUMMY_USER, ActionTypeEnum.ADD_ARTIFACT, esCatalogDao, titanGenericDao);
166 doBasicTitanAction(transactionId, tx, false, true);
167 assertTrue(tx.getStatus() == TransactionStatusEnum.OPEN);
169 doESAddArtifactAction(transactionId, tx, true, true);
170 assertTrue(tx.getStatus() == TransactionStatusEnum.OPEN);
172 doFinishTransaction(transactionId, tx, true);
174 assertTrue(tx.getStatus() == TransactionStatusEnum.CLOSED);
179 public void testRollbackSucceededOnAction() {
180 int transactionId = getNextTransactionId();
181 TransactionSdncImpl tx = new TransactionSdncImpl(transactionId, TransactionUtils.DUMMY_USER, ActionTypeEnum.ADD_ARTIFACT, esCatalogDao, titanGenericDao);
182 doESAddArtifactAction(transactionId, tx, false, true);
184 when(titanGenericDao.rollback()).thenReturn(TitanOperationStatus.OK);
185 String crushMessage = "DB Crush Simulation";
186 Either<TestResponse, TransactionCodeEnum> eitherTransactionResult = tx.invokeTitanAction(false, createCrushingAction(TestAction.TitanAction, crushMessage));
188 assertTrue(eitherTransactionResult.isRight());
189 assertTrue(eitherTransactionResult.right().value() == TransactionCodeEnum.ROLLBACK_SUCCESS);
190 assertTrue(tx.getStatus() == TransactionStatusEnum.CLOSED);
191 verify(log).info(TransactionUtils.TRANSACTION_MARKER, LogMessages.DB_ACTION_FAILED_WITH_EXCEPTION, DBTypeEnum.TITAN.name(), transactionId, crushMessage, TransactionUtils.DUMMY_USER, ActionTypeEnum.ADD_ARTIFACT.name());
193 verify(log, times(1)).debug(LogMessages.ROLLBACK_PERSISTENT_ACTION, DBTypeEnum.ELASTIC_SEARCH.name(), transactionId, TransactionUtils.DUMMY_USER, ActionTypeEnum.ADD_ARTIFACT.name());
194 verify(log, times(1)).debug(TransactionUtils.TRANSACTION_MARKER, LogMessages.ROLLBACK_PERSISTENT_ACTION, DBTypeEnum.ELASTIC_SEARCH.name(), transactionId, TransactionUtils.DUMMY_USER, ActionTypeEnum.ADD_ARTIFACT.name());
196 verify(log, times(1)).debug(LogMessages.ROLLBACK_NON_PERSISTENT_ACTION, DBTypeEnum.TITAN.name(), transactionId, TransactionUtils.DUMMY_USER, ActionTypeEnum.ADD_ARTIFACT.name());
197 verify(log, times(1)).debug(TransactionUtils.TRANSACTION_MARKER, LogMessages.ROLLBACK_NON_PERSISTENT_ACTION, DBTypeEnum.TITAN.name(), transactionId, TransactionUtils.DUMMY_USER, ActionTypeEnum.ADD_ARTIFACT.name());
199 verify(log).info(LogMessages.ROLLBACK_SUCCEEDED_GENERAL, transactionId, TransactionUtils.DUMMY_USER, ActionTypeEnum.ADD_ARTIFACT.name());
200 verify(log).info(TransactionUtils.TRANSACTION_MARKER, LogMessages.ROLLBACK_SUCCEEDED_GENERAL, transactionId, TransactionUtils.DUMMY_USER, ActionTypeEnum.ADD_ARTIFACT.name());
204 public void testRollbackFailedOnAction() {
205 int transactionId = getNextTransactionId();
206 TransactionSdncImpl tx = new TransactionSdncImpl(transactionId, TransactionUtils.DUMMY_USER, ActionTypeEnum.ADD_ARTIFACT, esCatalogDao, titanGenericDao);
208 doESAddArtifactAction(transactionId, tx, false, true);
210 when(titanGenericDao.rollback()).thenReturn(TitanOperationStatus.NOT_CONNECTED);
211 String crushMessage = "DB Crush Simulation";
212 Either<TestResponse, TransactionCodeEnum> eitherTransactionResult = tx.invokeTitanAction(false, createCrushingAction(TestAction.TitanAction, crushMessage));
214 assertTrue(eitherTransactionResult.isRight());
215 assertTrue(tx.getStatus() == TransactionStatusEnum.FAILED_ROLLBACK);
216 assertTrue(eitherTransactionResult.right().value() == TransactionCodeEnum.ROLLBACK_FAILED);
217 verify(log).info(TransactionUtils.TRANSACTION_MARKER, LogMessages.DB_ACTION_FAILED_WITH_EXCEPTION, DBTypeEnum.TITAN.name(), transactionId, crushMessage, TransactionUtils.DUMMY_USER, ActionTypeEnum.ADD_ARTIFACT.name());
219 verify(log, times(1)).debug(LogMessages.ROLLBACK_PERSISTENT_ACTION, DBTypeEnum.ELASTIC_SEARCH.name(), transactionId, TransactionUtils.DUMMY_USER, ActionTypeEnum.ADD_ARTIFACT.name());
220 verify(log, times(1)).debug(TransactionUtils.TRANSACTION_MARKER, LogMessages.ROLLBACK_PERSISTENT_ACTION, DBTypeEnum.ELASTIC_SEARCH.name(), transactionId, TransactionUtils.DUMMY_USER, ActionTypeEnum.ADD_ARTIFACT.name());
222 verify(log, times(1)).debug(LogMessages.ROLLBACK_NON_PERSISTENT_ACTION, DBTypeEnum.TITAN.name(), transactionId, TransactionUtils.DUMMY_USER, ActionTypeEnum.ADD_ARTIFACT.name());
223 verify(log, times(1)).debug(TransactionUtils.TRANSACTION_MARKER, LogMessages.ROLLBACK_NON_PERSISTENT_ACTION, DBTypeEnum.TITAN.name(), transactionId, TransactionUtils.DUMMY_USER, ActionTypeEnum.ADD_ARTIFACT.name());
227 public void testRollbackSucceededOnCommit() {
228 int transactionId = getNextTransactionId();
229 TransactionSdncImpl tx = new TransactionSdncImpl(transactionId, TransactionUtils.DUMMY_USER, ActionTypeEnum.ADD_ARTIFACT, esCatalogDao, titanGenericDao);
230 doESAddArtifactAction(transactionId, tx, false, true);
231 doBasicTitanAction(transactionId, tx, true, true);
233 when(titanGenericDao.commit()).thenReturn(TitanOperationStatus.GENERAL_ERROR);
234 when(titanGenericDao.rollback()).thenReturn(TitanOperationStatus.OK);
236 TransactionCodeEnum transactionCode = tx.finishTransaction();
237 assertTrue(transactionCode == TransactionCodeEnum.ROLLBACK_SUCCESS);
238 assertTrue(tx.getStatus() == TransactionStatusEnum.CLOSED);
240 verify(log, times(1)).debug(LogMessages.ROLLBACK_PERSISTENT_ACTION, DBTypeEnum.ELASTIC_SEARCH.name(), transactionId, TransactionUtils.DUMMY_USER, ActionTypeEnum.ADD_ARTIFACT.name());
241 verify(log, times(1)).debug(TransactionUtils.TRANSACTION_MARKER, LogMessages.ROLLBACK_PERSISTENT_ACTION, DBTypeEnum.ELASTIC_SEARCH.name(), transactionId, TransactionUtils.DUMMY_USER, ActionTypeEnum.ADD_ARTIFACT.name());
243 verify(log, times(1)).debug(LogMessages.ROLLBACK_NON_PERSISTENT_ACTION, DBTypeEnum.TITAN.name(), transactionId, TransactionUtils.DUMMY_USER, ActionTypeEnum.ADD_ARTIFACT.name());
244 verify(log, times(1)).debug(TransactionUtils.TRANSACTION_MARKER, LogMessages.ROLLBACK_NON_PERSISTENT_ACTION, DBTypeEnum.TITAN.name(), transactionId, TransactionUtils.DUMMY_USER, ActionTypeEnum.ADD_ARTIFACT.name());
246 verify(log).info(LogMessages.ROLLBACK_SUCCEEDED_GENERAL, transactionId, TransactionUtils.DUMMY_USER, ActionTypeEnum.ADD_ARTIFACT.name());
247 verify(log).info(TransactionUtils.TRANSACTION_MARKER, LogMessages.ROLLBACK_SUCCEEDED_GENERAL, transactionId, TransactionUtils.DUMMY_USER, ActionTypeEnum.ADD_ARTIFACT.name());
251 public void testRollbackFailedOnCommit() {
252 int transactionId = getNextTransactionId();
253 TransactionSdncImpl tx = new TransactionSdncImpl(transactionId, TransactionUtils.DUMMY_USER, ActionTypeEnum.ADD_ARTIFACT, esCatalogDao, titanGenericDao);
254 doESAddArtifactAction(transactionId, tx, false, true);
255 doBasicTitanAction(transactionId, tx, true, true);
257 when(titanGenericDao.commit()).thenReturn(TitanOperationStatus.GENERAL_ERROR);
258 when(titanGenericDao.rollback()).thenReturn(TitanOperationStatus.OK);
259 String esError = "No Connection to Es";
260 Mockito.doThrow(new RuntimeException(esError)).when(esCatalogDao).deleteArtifact(Mockito.anyString());
262 TransactionCodeEnum transactionCode = tx.finishTransaction();
263 assertTrue(transactionCode == TransactionCodeEnum.ROLLBACK_FAILED);
264 assertTrue(tx.getStatus() == TransactionStatusEnum.FAILED_ROLLBACK);
266 verify(log, times(1)).debug(LogMessages.ROLLBACK_PERSISTENT_ACTION, DBTypeEnum.ELASTIC_SEARCH.name(), transactionId, TransactionUtils.DUMMY_USER, ActionTypeEnum.ADD_ARTIFACT.name());
267 verify(log, times(1)).debug(TransactionUtils.TRANSACTION_MARKER, LogMessages.ROLLBACK_PERSISTENT_ACTION, DBTypeEnum.ELASTIC_SEARCH.name(), transactionId, TransactionUtils.DUMMY_USER, ActionTypeEnum.ADD_ARTIFACT.name());
269 verify(log, times(1)).debug(LogMessages.ROLLBACK_NON_PERSISTENT_ACTION, DBTypeEnum.TITAN.name(), transactionId, TransactionUtils.DUMMY_USER, ActionTypeEnum.ADD_ARTIFACT.name());
270 verify(log, times(1)).debug(TransactionUtils.TRANSACTION_MARKER, LogMessages.ROLLBACK_NON_PERSISTENT_ACTION, DBTypeEnum.TITAN.name(), transactionId, TransactionUtils.DUMMY_USER, ActionTypeEnum.ADD_ARTIFACT.name());
274 public void testInvokeGeneralAction() {
275 when(titanGenericDao.rollback()).thenReturn(TitanOperationStatus.OK);
276 int transactionId = getNextTransactionId();
277 TransactionSdncImpl tx = new TransactionSdncImpl(transactionId, TransactionUtils.DUMMY_USER, ActionTypeEnum.ADD_ARTIFACT, esCatalogDao, titanGenericDao);
278 IDBAction generalAction = createBasicAction(TestAction.GeneralAction, TestResponse.GeneralSuccess);
279 IDBAction rollbackAction = createBasicAction(TestAction.Rollback, TestResponse.GeneralSuccess);
280 String crushMessage = "No DB Connection";
281 IDBAction crushingAction = createCrushingAction(TestAction.GeneralAction, crushMessage);
283 Either<TestResponse, TransactionCodeEnum> eitherResult = tx.invokeGeneralDBAction(false, DBTypeEnum.MYSTERY, generalAction, rollbackAction);
284 assertTrue(eitherResult.isLeft());
285 assertTrue(eitherResult.left().value() == TestResponse.GeneralSuccess);
286 assertTrue(tx.getStatus() == TransactionStatusEnum.OPEN);
287 eitherResult = tx.invokeGeneralDBAction(false, DBTypeEnum.MYSTERY, crushingAction, rollbackAction);
289 assertTrue(eitherResult.isRight());
290 assertTrue(eitherResult.right().value() == TransactionCodeEnum.ROLLBACK_SUCCESS);
291 assertTrue(tx.getStatus() == TransactionStatusEnum.CLOSED);
293 verify(log).info(TransactionUtils.TRANSACTION_MARKER, LogMessages.DB_ACTION_FAILED_WITH_EXCEPTION, DBTypeEnum.MYSTERY.name(), transactionId, crushMessage, TransactionUtils.DUMMY_USER, ActionTypeEnum.ADD_ARTIFACT.name());
295 verify(log, times(2)).debug(LogMessages.ROLLBACK_PERSISTENT_ACTION, DBTypeEnum.MYSTERY.name(), transactionId, TransactionUtils.DUMMY_USER, ActionTypeEnum.ADD_ARTIFACT.name());
296 verify(log, times(2)).debug(TransactionUtils.TRANSACTION_MARKER, LogMessages.ROLLBACK_PERSISTENT_ACTION, DBTypeEnum.MYSTERY.name(), transactionId, TransactionUtils.DUMMY_USER, ActionTypeEnum.ADD_ARTIFACT.name());
298 verify(log).info(LogMessages.ROLLBACK_SUCCEEDED_GENERAL, transactionId, TransactionUtils.DUMMY_USER, ActionTypeEnum.ADD_ARTIFACT.name());
299 verify(log).info(TransactionUtils.TRANSACTION_MARKER, LogMessages.ROLLBACK_SUCCEEDED_GENERAL, transactionId, TransactionUtils.DUMMY_USER, ActionTypeEnum.ADD_ARTIFACT.name());
303 private Either<TestResponse, TransactionCodeEnum> doBasicTitanAction(int transactionId, TransactionSdncImpl tx, boolean isLastAction, boolean isVerifyAction) {
305 Either<TestResponse, TransactionCodeEnum> eitherTitanResult = tx.invokeTitanAction(isLastAction, createBasicAction(TestAction.TitanAction, TestResponse.TitanResponseSuccess));
306 if (isVerifyAction) {
307 // Check Titan Action
308 assertTrue(eitherTitanResult.isLeft());
309 assertTrue(eitherTitanResult.left().value() == TestResponse.TitanResponseSuccess);
310 verify(log).debug(TestAction.TitanAction.name());
311 verify(log).debug(LogMessages.INVOKE_ACTION, transactionId, DBTypeEnum.TITAN.name(), TransactionUtils.DUMMY_USER, ActionTypeEnum.ADD_ARTIFACT.name());
312 verifyNoErrorsInLog();
315 return eitherTitanResult;
318 private TransactionCodeEnum doFinishTransaction(int transactionId, TransactionSdncImpl tx, boolean isVerifyAction) {
319 // Prerequisite finishTransaction
320 when(titanGenericDao.commit()).thenReturn(TitanOperationStatus.OK);
322 TransactionCodeEnum transactionCode = tx.finishTransaction();
323 if (isVerifyAction) {
324 // Check finishTransaction
325 verify(log).debug(LogMessages.COMMIT_ACTION_ALL_DB, transactionId, TransactionUtils.DUMMY_USER, ActionTypeEnum.ADD_ARTIFACT.name());
326 verify(log).debug(LogMessages.COMMIT_ACTION_SPECIFIC_DB, transactionId, DBTypeEnum.TITAN.name(), TransactionUtils.DUMMY_USER, ActionTypeEnum.ADD_ARTIFACT.name());
327 assertTrue(transactionCode == TransactionCodeEnum.SUCCESS);
329 return transactionCode;
332 private void doESAddArtifactAction(int transactionId, TransactionSdncImpl tx, boolean isLastAction, boolean isVerifyAction) {
333 // Prerequisite ES Action
334 Either<ESArtifactData, ResourceUploadStatus> eitherBeforeAddArtifact = Either.right(ResourceUploadStatus.NOT_EXIST);
335 when(esCatalogDao.getArtifact(Mockito.anyString())).thenReturn(eitherBeforeAddArtifact);
338 Either<DBActionCodeEnum, TransactionCodeEnum> eitherEsAction = tx.invokeESAction(isLastAction, ESActionTypeEnum.ADD_ARTIFACT, createDummyArtifactData());
340 if (isVerifyAction) {
341 // Check Titan Action
342 assertTrue(eitherEsAction.isLeft());
343 assertTrue(eitherEsAction.left().value() == DBActionCodeEnum.SUCCESS);
344 verify(log).debug(LogMessages.INVOKE_ACTION, transactionId, DBTypeEnum.ELASTIC_SEARCH.name(), TransactionUtils.DUMMY_USER, ActionTypeEnum.ADD_ARTIFACT.name());
345 verifyNoErrorsInLog();
350 private ESArtifactData createDummyArtifactData() {
351 String strData = "qweqwqweqw34e4wrwer";
352 ESArtifactData arData = new ESArtifactData("artifactNewMarina11", strData.getBytes());
356 private void verifyNoErrorsInLog() {
357 verify(log, Mockito.times(0)).error(Mockito.anyString(), Mockito.any(Object[].class));
358 verify(log, Mockito.times(0)).error(Mockito.anyString());
361 private void verifyNoInfoInLog() {
362 verify(log, Mockito.times(0)).info(Mockito.anyString(), Mockito.any(Object[].class));
363 verify(log, Mockito.times(0)).info(Mockito.anyString());
366 private IDBAction createBasicAction(TestAction action, TestResponse resp) {
367 final TestAction finalAction = action;
368 final TestResponse finalResp = resp;
369 return new IDBAction() {
371 public TestResponse doAction() {
372 log.debug(finalAction.name());
378 private IDBAction createCrushingAction(TestAction action, final String crushMessage) {
379 final TestAction finalAction = action;
380 return new IDBAction() {
382 public TestResponse doAction() {
383 log.debug(finalAction.name());
384 throw new RuntimeException(crushMessage);
389 public int getNextTransactionId() {
391 return transactionId;