/* * Copyright 2015 herd contributors * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.finra.herd.service.impl; import static org.junit.Assert.assertNull; import static org.mockito.Matchers.any; import static org.mockito.Mockito.doThrow; import static org.mockito.Mockito.eq; import static org.mockito.Mockito.times; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.verifyNoMoreInteractions; import static org.mockito.Mockito.when; import javax.persistence.OptimisticLockException; import org.junit.Before; import org.junit.Test; import org.mockito.InjectMocks; import org.mockito.Mock; import org.mockito.MockitoAnnotations; import org.finra.herd.core.helper.ConfigurationHelper; import org.finra.herd.dao.BusinessObjectDefinitionDao; import org.finra.herd.dao.S3Dao; import org.finra.herd.dao.StsDao; import org.finra.herd.dao.helper.AwsHelper; import org.finra.herd.dao.helper.JsonHelper; import org.finra.herd.service.AbstractServiceTest; import org.finra.herd.service.UploadDownloadHelperService; import org.finra.herd.service.helper.AlternateKeyHelper; import org.finra.herd.service.helper.AttributeHelper; import org.finra.herd.service.helper.BusinessObjectDataDaoHelper; import org.finra.herd.service.helper.BusinessObjectDataHelper; import org.finra.herd.service.helper.BusinessObjectDefinitionDaoHelper; import org.finra.herd.service.helper.BusinessObjectDefinitionHelper; import org.finra.herd.service.helper.BusinessObjectFormatDaoHelper; import org.finra.herd.service.helper.BusinessObjectFormatHelper; import org.finra.herd.service.helper.S3KeyPrefixHelper; import org.finra.herd.service.helper.StorageDaoHelper; import org.finra.herd.service.helper.StorageHelper; import org.finra.herd.service.helper.StorageUnitDaoHelper; /** * This class tests functionality within the upload download service implementation. */ public class UploadDownloadServiceImplTest extends AbstractServiceTest { @Mock private AlternateKeyHelper alternateKeyHelper; @Mock private AttributeHelper attributeHelper; @Mock private AwsHelper awsHelper; @Mock private BusinessObjectDataDaoHelper businessObjectDataDaoHelper; @Mock private BusinessObjectDataHelper businessObjectDataHelper; @Mock private BusinessObjectDefinitionDao businessObjectDefinitionDao; @Mock private BusinessObjectDefinitionDaoHelper businessObjectDefinitionDaoHelper; @Mock private BusinessObjectDefinitionHelper businessObjectDefinitionHelper; @Mock private BusinessObjectFormatDaoHelper businessObjectFormatDaoHelper; @Mock private BusinessObjectFormatHelper businessObjectFormatHelper; @Mock private ConfigurationHelper configurationHelper; @Mock private JsonHelper jsonHelper; @Mock private S3Dao s3Dao; @Mock private S3KeyPrefixHelper s3KeyPrefixHelper; @Mock private StorageDaoHelper storageDaoHelper; @Mock private StorageHelper storageHelper; @Mock private StorageUnitDaoHelper storageUnitDaoHelper; @Mock private StsDao stsDao; @Mock private UploadDownloadHelperService uploadDownloadHelperService; @InjectMocks private UploadDownloadServiceImpl uploadDownloadServiceImpl; @Before public void before() { MockitoAnnotations.initMocks(this); } @Test public void testPerformCompleteUploadSingleMessageImplOptimisticLockException() { // Create an object key. String objectKey = STRING_VALUE; // Mock the external calls. doThrow(new OptimisticLockException(ERROR_MESSAGE)).when(uploadDownloadHelperService).prepareForFileMove(eq(objectKey), any()); when(jsonHelper.objectToJson(any())).thenReturn(JSON_STRING); // Call the method being tested. UploadDownloadServiceImpl.CompleteUploadSingleMessageResult response = uploadDownloadServiceImpl.performCompleteUploadSingleMessageImpl(objectKey); // Verify the external calls. verify(uploadDownloadHelperService).prepareForFileMove(eq(objectKey), any()); verify(jsonHelper, times(2)).objectToJson(any()); verifyNoMoreInteractions(alternateKeyHelper, attributeHelper, awsHelper, businessObjectDataDaoHelper, businessObjectDataHelper, businessObjectDefinitionDao, businessObjectDefinitionDaoHelper, businessObjectDefinitionHelper, businessObjectFormatDaoHelper, businessObjectFormatHelper, configurationHelper, jsonHelper, s3Dao, s3KeyPrefixHelper, storageDaoHelper, storageHelper, storageUnitDaoHelper, stsDao, uploadDownloadHelperService); // Validate the returned object. assertNull(response); } }