BATCH-859: fixed failing tests

This commit is contained in:
trisberg
2008-10-28 20:00:56 +00:00
parent a3ba1913f2
commit 1fa38d4c20
7 changed files with 85 additions and 23 deletions

View File

@@ -0,0 +1,50 @@
/*
* Copyright 2006-2007 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.sample.domain.trade.internal;
import org.springframework.batch.item.ItemProcessor;
import org.springframework.batch.item.validator.ValidationException;
import org.springframework.batch.sample.domain.trade.Trade;
/**
* Processes the Trade - throwing validation errors if necessary.
*/
public class TradeProcessor implements ItemProcessor<Trade, Trade> {
private int failure = -1;
private int index = 0;
private Trade failedItem = null;
/**
* Public setter for the the index on which failure should occur.
*
* @param failure the failure to set
*/
public void setValidationFailure(int failure) {
this.failure = failure;
}
public Trade process(Trade item) throws Exception {
if ((failedItem == null && index++ == failure) || (failedItem != null && failedItem.equals(item))) {
failedItem = item;
throw new ValidationException("Some bad data for " + failedItem);
}
return item;
}
}

View File

@@ -4,7 +4,6 @@ import java.util.ArrayList;
import java.util.List;
import org.springframework.batch.item.ItemWriter;
import org.springframework.batch.item.validator.ValidationException;
/**
* Remembers all items written - useful for testing.
@@ -21,7 +20,7 @@ public class ItemTrackingItemWriter<T> implements ItemWriter<T> {
public void write(List<? extends T> items) throws Exception {
if (failed!=null && items.contains(failed)) {
throw new ValidationException("validation failed");
throw new RuntimeException("write failed again");
}
this.items.addAll(items);
int current = counter;
@@ -29,7 +28,7 @@ public class ItemTrackingItemWriter<T> implements ItemWriter<T> {
if (current < failure && counter >= failure) {
failed = items.get(failure-current-1);
this.items.remove(failed);
throw new ValidationException("validation failed");
throw new RuntimeException("write failed");
}
}
@@ -37,7 +36,7 @@ public class ItemTrackingItemWriter<T> implements ItemWriter<T> {
return items;
}
public void setValidationFailure(int failure) {
public void setWriteFailure(int failure) {
this.failure = failure;
}

View File

@@ -16,20 +16,33 @@
<bean id="step1" parent="skipLimitStep">
<property name="skipLimit" value="1" />
<property name="itemReader" ref="fileItemReader" />
<property name="itemProcessor">
<bean
class="org.springframework.batch.sample.domain.trade.internal.TradeProcessor"
p:validationFailure="3" />
</property>
<property name="itemWriter">
<bean
class="org.springframework.batch.sample.domain.trade.internal.TradeWriter"
p:dao-ref="tradeDao" p:failure="3" />
p:dao-ref="tradeDao" />
</property>
</bean>
<bean id="step2" parent="skipLimitStep">
<property name="commitInterval" value="2" />
<property name="skipLimit" value="1" />
<!-- No rollback for exceptions that are marked with "+" in the tx attributes -->
<property name="transactionAttribute"
value="+org.springframework.batch.item.validator.ValidationException" />
<property name="skippableExceptionClasses">
<list>
<value>org.springframework.batch.item.validator.ValidationException</value>
</list>
</property>
<property name="itemReader"
ref="tradeSqlItemReader" />
<property name="itemProcessor">
<bean
class="org.springframework.batch.sample.domain.trade.internal.TradeProcessor"
p:validationFailure="2" />
</property>
<property name="itemWriter"
ref="itemTrackingWriter" />
</bean>
@@ -38,8 +51,7 @@
</bean>
<bean id="itemTrackingWriter"
class="org.springframework.batch.sample.support.ItemTrackingItemWriter"
p:validationFailure="2" />
class="org.springframework.batch.sample.support.ItemTrackingItemWriter" />
<bean id="tradeSqlItemReader"
class="org.springframework.batch.item.database.JdbcCursorItemReader">

View File

@@ -45,8 +45,8 @@ public class SkipSampleFunctionalTests extends AbstractValidatingBatchLauncherTe
// 5 input records, 1 skipped => 4 written to output
assertEquals(before + 4, after);
// no item was processed twice (no rollback occurred despite error on write)
assertEquals(after, writer.getItems().size());
// no item was processed twice (one rollback occurred due to validation error)
assertEquals(after - 1, writer.getItems().size());
}
}

View File

@@ -42,13 +42,13 @@ public class ItemTrackingItemWriterTests {
}
@Test
public void testValidationFailure() throws Exception {
writer.setValidationFailure(2);
public void testWriteFailure() throws Exception {
writer.setWriteFailure(2);
try {
writer.write(Arrays.asList("a", "b", "c"));
fail("Expected ValidationException");
fail("Expected Write Failure Exception");
}
catch (ValidationException e) {
catch (RuntimeException e) {
// expected
}
// the failed item is removed
@@ -57,9 +57,9 @@ public class ItemTrackingItemWriterTests {
assertEquals(5, writer.getItems().size());
try {
writer.write(Arrays.asList("f", "b", "g"));
fail("Expected ValidationException");
fail("Expected RuntimeException");
}
catch (ValidationException e) {
catch (RuntimeException e) {
// expected
}
// barf immediately if a failure is detected