/* * Copyright 2006-2014 the original author or authors. * * 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.springframework.batch.core; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertTrue; import org.junit.Test; import org.springframework.util.SerializationUtils; /** * @author Dave Syer * */ public class ExitStatusTests { @Test public void testExitStatusNullDescription() { ExitStatus status = new ExitStatus("10", null); assertEquals("", status.getExitDescription()); } @Test public void testExitStatusBooleanInt() { ExitStatus status = new ExitStatus("10"); assertEquals("10", status.getExitCode()); } @Test public void testExitStatusConstantsContinuable() { ExitStatus status = ExitStatus.EXECUTING; assertEquals("EXECUTING", status.getExitCode()); } @Test public void testExitStatusConstantsFinished() { ExitStatus status = ExitStatus.COMPLETED; assertEquals("COMPLETED", status.getExitCode()); } /** * Test equality of exit statuses. * * @throws Exception */ @Test public void testEqualsWithSameProperties() throws Exception { assertEquals(ExitStatus.EXECUTING, new ExitStatus("EXECUTING")); } @Test public void testEqualsSelf() { ExitStatus status = new ExitStatus("test"); assertEquals(status, status); } @Test public void testEquals() { assertEquals(new ExitStatus("test"), new ExitStatus("test")); } /** * Test equality of exit statuses. * * @throws Exception */ @Test public void testEqualsWithNull() throws Exception { assertFalse(ExitStatus.EXECUTING.equals(null)); } /** * Test equality of exit statuses. * * @throws Exception */ @Test public void testHashcode() throws Exception { assertEquals(ExitStatus.EXECUTING.toString().hashCode(), ExitStatus.EXECUTING.hashCode()); } /** * Test method for * {@link org.springframework.batch.core.ExitStatus#and(org.springframework.batch.core.ExitStatus)} * . */ @Test public void testAndExitStatusStillExecutable() { assertEquals(ExitStatus.EXECUTING.getExitCode(), ExitStatus.EXECUTING.and(ExitStatus.EXECUTING).getExitCode()); } /** * Test method for * {@link org.springframework.batch.core.ExitStatus#and(org.springframework.batch.core.ExitStatus)} * . */ @Test public void testAndExitStatusWhenFinishedAddedToContinuable() { assertEquals(ExitStatus.COMPLETED.getExitCode(), ExitStatus.EXECUTING.and(ExitStatus.COMPLETED).getExitCode()); } /** * Test method for * {@link org.springframework.batch.core.ExitStatus#and(org.springframework.batch.core.ExitStatus)} * . */ @Test public void testAndExitStatusWhenContinuableAddedToFinished() { assertEquals(ExitStatus.COMPLETED.getExitCode(), ExitStatus.COMPLETED.and(ExitStatus.EXECUTING).getExitCode()); } /** * Test method for * {@link org.springframework.batch.core.ExitStatus#and(org.springframework.batch.core.ExitStatus)} * . */ @Test public void testAndExitStatusWhenCustomContinuableAddedToContinuable() { assertEquals("CUSTOM", ExitStatus.EXECUTING.and(ExitStatus.EXECUTING.replaceExitCode("CUSTOM")).getExitCode()); } /** * Test method for * {@link org.springframework.batch.core.ExitStatus#and(org.springframework.batch.core.ExitStatus)} * . */ @Test public void testAndExitStatusWhenCustomCompletedAddedToCompleted() { assertEquals("COMPLETED_CUSTOM", ExitStatus.COMPLETED.and( ExitStatus.EXECUTING.replaceExitCode("COMPLETED_CUSTOM")).getExitCode()); } /** * Test method for * {@link org.springframework.batch.core.ExitStatus#and(org.springframework.batch.core.ExitStatus)} * . */ @Test public void testAndExitStatusFailedPlusFinished() { assertEquals("FAILED", ExitStatus.COMPLETED.and(ExitStatus.FAILED).getExitCode()); assertEquals("FAILED", ExitStatus.FAILED.and(ExitStatus.COMPLETED).getExitCode()); } /** * Test method for * {@link org.springframework.batch.core.ExitStatus#and(org.springframework.batch.core.ExitStatus)} * . */ @Test public void testAndExitStatusWhenCustomContinuableAddedToFinished() { assertEquals("CUSTOM", ExitStatus.COMPLETED.and(ExitStatus.EXECUTING.replaceExitCode("CUSTOM")).getExitCode()); } @Test public void testAddExitCode() throws Exception { ExitStatus status = ExitStatus.EXECUTING.replaceExitCode("FOO"); assertTrue(ExitStatus.EXECUTING != status); assertEquals("FOO", status.getExitCode()); } @Test public void testAddExitCodeToExistingStatus() throws Exception { ExitStatus status = ExitStatus.EXECUTING.replaceExitCode("FOO").replaceExitCode("BAR"); assertTrue(ExitStatus.EXECUTING != status); assertEquals("BAR", status.getExitCode()); } @Test public void testAddExitCodeToSameStatus() throws Exception { ExitStatus status = ExitStatus.EXECUTING.replaceExitCode(ExitStatus.EXECUTING.getExitCode()); assertTrue(ExitStatus.EXECUTING != status); assertEquals(ExitStatus.EXECUTING.getExitCode(), status.getExitCode()); } @Test public void testAddExitDescription() throws Exception { ExitStatus status = ExitStatus.EXECUTING.addExitDescription("Foo"); assertTrue(ExitStatus.EXECUTING != status); assertEquals("Foo", status.getExitDescription()); } @Test public void testAddExitDescriptionWIthStacktrace() throws Exception { ExitStatus status = ExitStatus.EXECUTING.addExitDescription(new RuntimeException("Foo")); assertTrue(ExitStatus.EXECUTING != status); String description = status.getExitDescription(); assertTrue("Wrong description: "+description, description.contains("Foo")); assertTrue("Wrong description: "+description, description.contains("RuntimeException")); } @Test public void testAddExitDescriptionToSameStatus() throws Exception { ExitStatus status = ExitStatus.EXECUTING.addExitDescription("Foo").addExitDescription("Foo"); assertTrue(ExitStatus.EXECUTING != status); assertEquals("Foo", status.getExitDescription()); } @Test public void testAddEmptyExitDescription() throws Exception { ExitStatus status = ExitStatus.EXECUTING.addExitDescription("Foo").addExitDescription((String)null); assertEquals("Foo", status.getExitDescription()); } @Test public void testAddExitCodeWithDescription() throws Exception { ExitStatus status = new ExitStatus("BAR", "Bar").replaceExitCode("FOO"); assertEquals("FOO", status.getExitCode()); assertEquals("Bar", status.getExitDescription()); } @Test public void testUnkownIsRunning() throws Exception { assertTrue(ExitStatus.UNKNOWN.isRunning()); } @Test public void testSerializable() throws Exception { ExitStatus status = ExitStatus.EXECUTING.replaceExitCode("FOO"); byte[] bytes = SerializationUtils.serialize(status); Object object = SerializationUtils.deserialize(bytes); assertTrue(object instanceof ExitStatus); ExitStatus restored = (ExitStatus) object; assertEquals(status.getExitCode(), restored.getExitCode()); } }