Package org.springframework.batch.core.jsr.configuration.xml

Source Code of org.springframework.batch.core.jsr.configuration.xml.JsrBeanDefinitionDocumentReaderTests$TestBatchlet

/*
* Copyright 2013-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.jsr.configuration.xml;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.junit.Test;
import org.springframework.batch.core.jsr.AbstractJsrTestCase;
import org.springframework.beans.factory.config.BeanDefinition;
import org.springframework.beans.factory.xml.DefaultDocumentLoader;
import org.springframework.beans.factory.xml.DelegatingEntityResolver;
import org.springframework.beans.factory.xml.DocumentLoader;
import org.springframework.core.io.ClassPathResource;
import org.springframework.util.StringUtils;
import org.springframework.util.xml.SimpleSaxErrorHandler;
import org.w3c.dom.Document;
import org.xml.sax.ErrorHandler;
import org.xml.sax.InputSource;

import javax.batch.api.Batchlet;
import javax.batch.runtime.JobExecution;
import java.io.IOException;
import java.io.InputStream;
import java.util.Properties;

import static junit.framework.Assert.assertEquals;
import static junit.framework.Assert.assertNotNull;
import static junit.framework.Assert.assertTrue;

/**
* <p>
* Test cases around {@link JsrBeanDefinitionDocumentReader}.
* </p>
*
* @author Chris Schaefer
*/
public class JsrBeanDefinitionDocumentReaderTests extends AbstractJsrTestCase {
  private static final String JOB_PARAMETERS_BEAN_DEFINITION_NAME = "jsr_jobParameters";

  private Log logger = LogFactory.getLog(getClass());
  private DocumentLoader documentLoader = new DefaultDocumentLoader();
  private ErrorHandler errorHandler = new SimpleSaxErrorHandler(logger);

  @Test
  @SuppressWarnings("resource")
  public void testGetJobParameters() {
    Properties jobParameters = new Properties();
    jobParameters.setProperty("jobParameter1", "jobParameter1Value");
    jobParameters.setProperty("jobParameter2", "jobParameter2Value");

    JsrXmlApplicationContext applicationContext = new JsrXmlApplicationContext(jobParameters);
    applicationContext.setValidating(false);
    applicationContext.load(new ClassPathResource("baseContext.xml"),
        new ClassPathResource("/META-INF/batch.xml"),
        new ClassPathResource("/META-INF/batch-jobs/jsrPropertyPreparseTestJob.xml"));
    applicationContext.refresh();

    BeanDefinition beanDefinition = applicationContext.getBeanDefinition(JOB_PARAMETERS_BEAN_DEFINITION_NAME);

    Properties processedJobParameters = (Properties) beanDefinition.getConstructorArgumentValues().getGenericArgumentValue(Properties.class).getValue();
    assertNotNull(processedJobParameters);
    assertTrue("Wrong number of job parameters", processedJobParameters.size() == 2);
    assertEquals("jobParameter1Value", processedJobParameters.getProperty("jobParameter1"));
    assertEquals("jobParameter2Value", processedJobParameters.getProperty("jobParameter2"));
  }

  @Test
  public void testGetJobProperties() {
    Document document = getDocument("/META-INF/batch-jobs/jsrPropertyPreparseTestJob.xml");

    @SuppressWarnings("resource")
    JsrXmlApplicationContext applicationContext = new JsrXmlApplicationContext();
    JsrBeanDefinitionDocumentReader documentReader = new JsrBeanDefinitionDocumentReader(applicationContext);
    documentReader.initProperties(document.getDocumentElement());

    Properties documentJobProperties = documentReader.getJobProperties();
    assertNotNull(documentJobProperties);
    assertTrue("Wrong number of job properties", documentJobProperties.size() == 3);
    assertEquals("jobProperty1Value", documentJobProperties.getProperty("jobProperty1"));
    assertEquals("jobProperty1Value", documentJobProperties.getProperty("jobProperty2"));
    assertEquals("", documentJobProperties.getProperty("jobProperty3"));
  }

  @Test
  public void testJobParametersResolution() {
    Properties jobParameters = new Properties();
    jobParameters.setProperty("jobParameter1", "myfile.txt");
    jobParameters.setProperty("jobParameter2", "#{jobProperties['jobProperty2']}");
    jobParameters.setProperty("jobParameter3", "#{jobParameters['jobParameter1']}");

    @SuppressWarnings("resource")
    JsrXmlApplicationContext applicationContext = new JsrXmlApplicationContext(jobParameters);
    applicationContext.setValidating(false);
    applicationContext.load(new ClassPathResource("baseContext.xml"),
        new ClassPathResource("/META-INF/batch.xml"),
        new ClassPathResource("/META-INF/batch-jobs/jsrPropertyPreparseTestJob.xml"));
    applicationContext.refresh();

    Document document = getDocument("/META-INF/batch-jobs/jsrPropertyPreparseTestJob.xml");

    JsrBeanDefinitionDocumentReader documentReader = new JsrBeanDefinitionDocumentReader(applicationContext);
    documentReader.initProperties(document.getDocumentElement());

    Properties resolvedParameters = documentReader.getJobParameters();

    assertNotNull(resolvedParameters);
    assertTrue("Wrong number of job parameters", resolvedParameters.size() == 3);
    assertEquals("myfile.txt", resolvedParameters.getProperty("jobParameter1"));
    assertEquals("jobProperty1Value", resolvedParameters.getProperty("jobParameter2"));
    assertEquals("myfile.txt", resolvedParameters.getProperty("jobParameter3"));
  }

  @Test
  public void testJobPropertyResolution() {
    Properties jobParameters = new Properties();
    jobParameters.setProperty("file.name", "myfile.txt");

    @SuppressWarnings("resource")
    JsrXmlApplicationContext applicationContext = new JsrXmlApplicationContext(jobParameters);
    applicationContext.setValidating(false);
    applicationContext.load(new ClassPathResource("baseContext.xml"),
        new ClassPathResource("/META-INF/batch.xml"),
        new ClassPathResource("/META-INF/batch-jobs/jsrPropertyPreparseTestJob.xml"));
    applicationContext.refresh();

    Document document = getDocument("/META-INF/batch-jobs/jsrPropertyPreparseTestJob.xml");

    JsrBeanDefinitionDocumentReader documentReader = new JsrBeanDefinitionDocumentReader(applicationContext);
    documentReader.initProperties(document.getDocumentElement());

    Properties resolvedProperties = documentReader.getJobProperties();
    assertNotNull(resolvedProperties);
    assertTrue("Wrong number of job properties", resolvedProperties.size() == 3);
    assertEquals("jobProperty1Value", resolvedProperties.getProperty("jobProperty1"));
    assertEquals("jobProperty1Value", resolvedProperties.getProperty("jobProperty2"));
    assertEquals("myfile.txt", resolvedProperties.getProperty("jobProperty3"));
  }

  @SuppressWarnings("resource")
  @Test
  public void testGenerationOfBeanDefinitionsForMultipleReferences() throws Exception {
    JsrXmlApplicationContext applicationContext = new JsrXmlApplicationContext(new Properties());
    applicationContext.setValidating(false);
    applicationContext.load(new ClassPathResource("baseContext.xml"),
        new ClassPathResource("/META-INF/batch.xml"),
        new ClassPathResource("/META-INF/batch-jobs/jsrUniqueInstanceTests.xml"));
    applicationContext.refresh();

    assertTrue("exitStatusSettingStepListener bean definition not found", applicationContext.containsBeanDefinition("exitStatusSettingStepListener"));
    assertTrue("exitStatusSettingStepListener1 bean definition not found", applicationContext.containsBeanDefinition("exitStatusSettingStepListener1"));
    assertTrue("exitStatusSettingStepListener2 bean definition not found", applicationContext.containsBeanDefinition("exitStatusSettingStepListener2"));
    assertTrue("exitStatusSettingStepListener3 bean definition not found", applicationContext.containsBeanDefinition("exitStatusSettingStepListener3"));
    assertTrue("exitStatusSettingStepListenerClassBeanDefinition bean definition not found", applicationContext.containsBeanDefinition("org.springframework.batch.core.jsr.step.listener.ExitStatusSettingStepListener"));
    assertTrue("exitStatusSettingStepListener1ClassBeanDefinition bean definition not found", applicationContext.containsBeanDefinition("org.springframework.batch.core.jsr.step.listener.ExitStatusSettingStepListener1"));
    assertTrue("exitStatusSettingStepListener2ClassBeanDefinition bean definition not found", applicationContext.containsBeanDefinition("org.springframework.batch.core.jsr.step.listener.ExitStatusSettingStepListener2"));
    assertTrue("exitStatusSettingStepListener3ClassBeanDefinition bean definition not found", applicationContext.containsBeanDefinition("org.springframework.batch.core.jsr.step.listener.ExitStatusSettingStepListener3"));
    assertTrue("testBatchlet bean definition not found", applicationContext.containsBeanDefinition("testBatchlet"));
    assertTrue("testBatchlet1 bean definition not found", applicationContext.containsBeanDefinition("testBatchlet1"));
  }

  @Test
  public void testArtifactUniqueness() throws Exception {
    JobExecution jobExecution = runJob("jsrUniqueInstanceTests", new Properties(), 10000L);
    String exitStatus = jobExecution.getExitStatus();

    assertTrue("Exit status must contain listener3", exitStatus.contains("listener3"));
    exitStatus = exitStatus.replace("listener3", "");

    assertTrue("Exit status must contain listener2", exitStatus.contains("listener2"));
    exitStatus = exitStatus.replace("listener2", "");

    assertTrue("Exit status must contain listener1", exitStatus.contains("listener1"));
    exitStatus = exitStatus.replace("listener1", "");

    assertTrue("Exit status must contain listener0", exitStatus.contains("listener0"));
    exitStatus = exitStatus.replace("listener0", "");

    assertTrue("Exit status must contain listener7", exitStatus.contains("listener7"));
    exitStatus = exitStatus.replace("listener7", "");

    assertTrue("Exit status must contain listener6", exitStatus.contains("listener6"));
    exitStatus = exitStatus.replace("listener6", "");

    assertTrue("Exit status must contain listener5", exitStatus.contains("listener5"));
    exitStatus = exitStatus.replace("listener5", "");

    assertTrue("Exit status must contain listener4", exitStatus.contains("listener4"));
    exitStatus = exitStatus.replace("listener4", "");

    assertTrue("exitStatus must be empty", "".equals(exitStatus));
  }

  @Test
  @SuppressWarnings("resource")
  public void testGenerationOfSpringBeanDefinitionsForMultipleReferences() {
    JsrXmlApplicationContext applicationContext = new JsrXmlApplicationContext(new Properties());
    applicationContext.setValidating(false);
    applicationContext.load(new ClassPathResource("baseContext.xml"),
        new ClassPathResource("/META-INF/batch-jobs/jsrSpringInstanceTests.xml"));

    applicationContext.refresh();

    assertTrue("exitStatusSettingStepListener bean definition not found", applicationContext.containsBeanDefinition("exitStatusSettingStepListener"));
    assertTrue("scopedTarget.exitStatusSettingStepListener bean definition not found", applicationContext.containsBeanDefinition("scopedTarget.exitStatusSettingStepListener"));

    BeanDefinition exitStatusSettingStepListenerBeanDefinition = applicationContext.getBeanDefinition("scopedTarget.exitStatusSettingStepListener");
    assertTrue("step".equals(exitStatusSettingStepListenerBeanDefinition.getScope()));

    assertTrue("Should not contain bean definition for exitStatusSettingStepListener1", !applicationContext.containsBeanDefinition("exitStatusSettingStepListener1"));
    assertTrue("Should not contain bean definition for exitStatusSettingStepListener2", !applicationContext.containsBeanDefinition("exitStatusSettingStepListener2"));
    assertTrue("Should not contain bean definition for exitStatusSettingStepListener3", !applicationContext.containsBeanDefinition("exitStatusSettingStepListener3"));

    assertTrue("Should not contain bean definition for testBatchlet1", !applicationContext.containsBeanDefinition("testBatchlet1"));
    assertTrue("Should not contain bean definition for testBatchlet2", !applicationContext.containsBeanDefinition("testBatchlet2"));

    assertTrue("testBatchlet bean definition not found", applicationContext.containsBeanDefinition("testBatchlet"));

    BeanDefinition testBatchletBeanDefinition = applicationContext.getBeanDefinition("testBatchlet");
    assertTrue("singleton".equals(testBatchletBeanDefinition.getScope()));
  }

  @Test
  public void testSpringArtifactUniqueness() throws Exception {
    JobExecution jobExecution = runJob("jsrSpringInstanceTests", new Properties(), 10000L);
    String exitStatus = jobExecution.getExitStatus();

    assertTrue("Exit status must contain listener1", exitStatus.contains("listener1"));
    assertTrue("exitStatus must contain 2 listener1 values", StringUtils.countOccurrencesOf(exitStatus, "listener1") == 2);

    exitStatus = exitStatus.replace("listener1", "");

    assertTrue("Exit status must contain listener4", exitStatus.contains("listener4"));
    assertTrue("exitStatus must contain 2 listener4 values", StringUtils.countOccurrencesOf(exitStatus, "listener4") == 2);
    exitStatus = exitStatus.replace("listener4", "");

    assertTrue("exitStatus must be empty", "".equals(exitStatus));
  }

  private Document getDocument(String location) {
    InputStream inputStream = ClassLoader.class.getResourceAsStream(location);

    try {
      return documentLoader.loadDocument(new InputSource(inputStream),
        new DelegatingEntityResolver(getClass().getClassLoader()), errorHandler, 0, true);
    } catch (Exception e) {
      throw new RuntimeException(e);
    } finally {
      try {
        inputStream.close();
      } catch (IOException e) { }
    }
  }

  public static class TestBatchlet implements Batchlet {
    @Override
    public String process() throws Exception {
      return null;
    }

    @Override
    public void stop() throws Exception {

    }
  }
}
TOP

Related Classes of org.springframework.batch.core.jsr.configuration.xml.JsrBeanDefinitionDocumentReaderTests$TestBatchlet

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.