/** * Copyright (c) 2009 - 2012 Red Hat, Inc. * * This software is licensed to you under the GNU General Public License, * version 2 (GPLv2). There is NO WARRANTY for this software, express or * implied, including the implied warranties of MERCHANTABILITY or FITNESS * FOR A PARTICULAR PURPOSE. You should have received a copy of GPLv2 * along with this software; if not, see * http://www.gnu.org/licenses/old-licenses/gpl-2.0.txt. * * Red Hat trademarks are not licensed under GPLv2. No permission is * granted to use or replicate Red Hat trademarks that are incorporated * in this software or its documentation. */ package org.candlepin.pinsetter.tasks; import static org.junit.Assert.*; import static org.mockito.Mockito.*; import java.io.IOException; import org.candlepin.common.exceptions.NotFoundException; import org.candlepin.controller.ManifestManager; import org.candlepin.model.ImportRecord; import org.candlepin.model.Owner; import org.candlepin.model.OwnerCurator; import org.candlepin.pinsetter.core.model.JobStatus; import org.candlepin.sync.ConflictOverrides; import org.candlepin.sync.Importer.Conflict; import org.candlepin.sync.ImporterException; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; import org.mockito.Mock; import org.mockito.runners.MockitoJUnitRunner; import org.quartz.JobDataMap; import org.quartz.JobDetail; import org.quartz.JobExecutionContext; import org.quartz.JobExecutionException; @RunWith(MockitoJUnitRunner.class) public class ImportJobTest { @Mock private OwnerCurator ownerCurator; @Mock private JobExecutionContext ctx; @Mock private ManifestManager manifestManager; private ImportJob job; private Owner owner; @Before public void setup() { owner = new Owner("my-test-owner"); job = new ImportJob(ownerCurator, manifestManager); } @Test public void checkJobDetail() throws IOException { String archiveFilePath = "/path/to/some/file.zip"; String expectedOriginalUploadFileName = "test.zip"; ConflictOverrides expectedConflictOverrides = new ConflictOverrides(Conflict.values()); JobDetail detail = job.scheduleImport(owner, archiveFilePath, expectedOriginalUploadFileName, expectedConflictOverrides); JobDataMap dataMap = detail.getJobDataMap(); assertEquals(dataMap.get(JobStatus.OWNER_ID), owner.getKey()); assertEquals(dataMap.get(JobStatus.TARGET_ID), owner.getKey()); assertEquals(dataMap.get(JobStatus.TARGET_TYPE), JobStatus.TargetType.OWNER); assertEquals(dataMap.get(ImportJob.STORED_FILE_ID), archiveFilePath); assertEquals(dataMap.get(ImportJob.UPLOADED_FILE_NAME), expectedOriginalUploadFileName); String[] overrides = (String[]) dataMap.get(ImportJob.CONFLICT_OVERRIDES); assertArrayEquals(expectedConflictOverrides.asStringArray(), overrides); } @Test public void enusureJobSuccess() throws JobExecutionException, ImporterException, IOException { String archiveFilePath = "/path/to/some/file.zip"; ConflictOverrides co = new ConflictOverrides(); ImportRecord record = new ImportRecord(owner); String uploadedFileName = "test.zip"; JobDetail detail = job.scheduleImport(owner, archiveFilePath, uploadedFileName, co); when(ctx.getMergedJobDataMap()).thenReturn(detail.getJobDataMap()); when(ownerCurator.lookupByKey(eq(owner.getKey()))).thenReturn(owner); when(manifestManager.importStoredManifest(eq(owner), any(String.class), any(ConflictOverrides.class), eq(uploadedFileName))).thenReturn(record); job.execute(ctx); verify(ctx).setResult(eq(record)); } @Test public void ensureJobFailure() throws Exception { String archiveFilePath = "/path/to/some/file.zip"; ConflictOverrides co = new ConflictOverrides(); String uploadedFileName = "test.zip"; String expectedMessage = "Expected Exception Message"; JobDetail detail = job.scheduleImport(owner, archiveFilePath, uploadedFileName, co); when(ctx.getMergedJobDataMap()).thenReturn(detail.getJobDataMap()); when(ownerCurator.lookupByKey(eq(owner.getKey()))).thenReturn(owner); when(manifestManager.importStoredManifest(eq(owner), any(String.class), any(ConflictOverrides.class), eq(uploadedFileName))).thenThrow(new ImporterException(expectedMessage)); try { job.execute(ctx); fail("Expected exception to be thrown"); } catch (JobExecutionException e) { // Expected } verify(ctx).setResult(eq(expectedMessage)); } @Test public void ensureJobExceptionThrownIfOwnerNotFound() throws Exception { String archiveFilePath = "/path/to/some/file.zip"; ConflictOverrides co = new ConflictOverrides(); String uploadedFileName = "test.zip"; String expectedMessage = String.format("Owner %s was not found.", owner.getKey()); JobDetail detail = job.scheduleImport(owner, archiveFilePath, uploadedFileName, co); when(ctx.getMergedJobDataMap()).thenReturn(detail.getJobDataMap()); when(ownerCurator.lookupByKey(eq(owner.getKey()))).thenReturn(null); try { job.execute(ctx); fail("Expected exception not thrown"); } catch (JobExecutionException je) { Throwable cause = je.getCause(); assertTrue(cause instanceof NotFoundException); } verify(ctx).setResult(eq(expectedMessage)); } }