Package org.springframework.xd.dirt.plugins.job

Source Code of org.springframework.xd.dirt.plugins.job.JobLaunchRequestTransformerTests

/*
* Copyright 2013 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.xd.dirt.plugins.job;

import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertTrue;
import static org.junit.Assert.fail;
import static org.mockito.Mockito.when;

import java.io.File;
import java.text.DateFormat;
import java.text.DecimalFormat;
import java.text.NumberFormat;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.HashMap;
import java.util.Locale;
import java.util.Map;
import java.util.Properties;

import org.junit.Before;
import org.junit.Rule;
import org.junit.Test;
import org.junit.rules.TemporaryFolder;
import org.mockito.Mockito;

import org.springframework.batch.core.Job;
import org.springframework.batch.core.JobParameter;
import org.springframework.batch.core.JobParameters;
import org.springframework.batch.core.configuration.JobRegistry;
import org.springframework.batch.core.launch.support.RunIdIncrementer;
import org.springframework.batch.integration.launch.JobLaunchRequest;
import org.springframework.integration.support.MessageBuilder;
import org.springframework.integration.test.util.TestUtils;
import org.springframework.messaging.Message;
import org.springframework.xd.tuple.Tuple;
import org.springframework.xd.tuple.TupleBuilder;

/**
* @author Gunnar Hillert
* @author Ilayaperumal Gopinathan
*/
public class JobLaunchRequestTransformerTests {

  JobRegistry mockedJobRegistry;

  Job mockedJob;

  JobLaunchRequestTransformer transformer;

  RunIdIncrementer jobParameterIncrementer = new RunIdIncrementer();

  @Rule
  public TemporaryFolder temporaryFolder = new TemporaryFolder();

  @Before
  public void setup() throws Exception {
    mockedJob = Mockito.mock(Job.class);
    mockedJobRegistry = Mockito.mock(JobRegistry.class);
    when(mockedJobRegistry.getJob("testJob")).thenReturn(mockedJob);
    transformer = new JobLaunchRequestTransformer(mockedJobRegistry, "testJob");
  }

  @Test
  public void createJobParametersWithUniqueParam() throws Exception {

    final Message<String> message = MessageBuilder.withPayload("{\"param1\":\"Kenny\", \"param2\":\"Cartman\"}").build();

    final JobLaunchRequest jobLaunchRequest = transformer.toJobLaunchRequest(message);

    assertNotNull(jobLaunchRequest.getJobParameters());
    assertTrue(jobLaunchRequest.getJobParameters().getParameters().size() == 3);

    assertEquals("Kenny", jobLaunchRequest.getJobParameters().getString("param1"));
    assertEquals("Cartman", jobLaunchRequest.getJobParameters().getString("param2"));
    assertNotNull(jobLaunchRequest.getJobParameters().getString("random"));

  }

  @Test
  public void createJobParametersUsingPropertiesWithUniqueParam() throws Exception {

    final Properties properties = new Properties();
    properties.put("param1", "Kenny");
    properties.put("param2", "Cartman");

    final Message<Properties> message = MessageBuilder.withPayload(properties).build();

    final JobLaunchRequest jobLaunchRequest = transformer.toJobLaunchRequest(message);

    assertNotNull(jobLaunchRequest.getJobParameters());
    assertTrue(jobLaunchRequest.getJobParameters().getParameters().size() == 3);

    assertEquals("Kenny", jobLaunchRequest.getJobParameters().getString("param1"));
    assertEquals("Cartman", jobLaunchRequest.getJobParameters().getString("param2"));
    assertNotNull(jobLaunchRequest.getJobParameters().getString("random"));

  }

  @Test
  public void createJobParametersUsingMapWithUniqueParam() throws Exception {

    final Map<String, String> map = new HashMap<String, String>();
    map.put("param1", "Kenny");
    map.put("param2", "Cartman");

    final Message<Map<String, String>> message = MessageBuilder.withPayload(map).build();

    final JobLaunchRequest jobLaunchRequest = transformer.toJobLaunchRequest(message);

    assertNotNull(jobLaunchRequest.getJobParameters());
    assertTrue(jobLaunchRequest.getJobParameters().getParameters().size() == 3);

    assertEquals("Kenny", jobLaunchRequest.getJobParameters().getString("param1"));
    assertEquals("Cartman", jobLaunchRequest.getJobParameters().getString("param2"));
    assertNotNull(jobLaunchRequest.getJobParameters().getString("random"));

  }

  @Test
  public void createJobParametersUsingFileWithUniqueParam() throws Exception {

    final File file = temporaryFolder.newFile("MyPayloadFile.txt");
    final Message<File> message = MessageBuilder.withPayload(file).build();

    final JobLaunchRequest jobLaunchRequest = transformer.toJobLaunchRequest(message);
    final JobParameters jobParameters = jobLaunchRequest.getJobParameters();

    assertNotNull(jobParameters);
    assertTrue(jobParameters.getParameters().size() == 2);

    assertTrue(
        String.format("Property '%s' did not end with '%s'.",
            ExpandedJobParametersConverter.ABSOLUTE_FILE_PATH, "MyPayloadFile.txt"),
            jobParameters.getString(ExpandedJobParametersConverter.ABSOLUTE_FILE_PATH).endsWith(
                "MyPayloadFile.txt"));
    assertNotNull(jobLaunchRequest.getJobParameters().getString("random"));

  }

  @Test
  public void createJobParametersUsingTupleWithUniqueParam() throws Exception {

    final Tuple tuple = TupleBuilder.tuple().of("foo", "123,456");
    final Message<Tuple> message = MessageBuilder.withPayload(tuple).build();

    final JobLaunchRequest jobLaunchRequest = transformer.toJobLaunchRequest(message);
    final JobParameters jobParameters = jobLaunchRequest.getJobParameters();

    assertNotNull(jobParameters);
    assertTrue(jobParameters.getParameters().size() == 2);

    assertEquals("123,456", jobParameters.getString("foo"));
    assertNotNull(jobLaunchRequest.getJobParameters().getString("random"));
  }

  @Test
  public void createJobParametersWithoutUniqueParam() throws Exception {

    final Message<String> message = MessageBuilder.withPayload("{\"param1\":\"Kenny\", \"param2\":\"Cartman\"}").build();

    transformer.setMakeParametersUnique(false);

    final JobLaunchRequest jobLaunchRequest = transformer.toJobLaunchRequest(message);
    final JobParameters jobParameters = jobLaunchRequest.getJobParameters();

    assertNotNull(jobParameters);
    assertTrue(jobParameters.getParameters().size() == 2);

    assertEquals("Kenny", jobParameters.getString("param1"));
    assertEquals("Cartman", jobParameters.getString("param2"));

    for (JobParameter jobParameter : jobParameters.getParameters().values()) {
      assertTrue(jobParameter.isIdentifying());
    }
  }

  @Test
  public void createNotIdentifyingJobParameters() throws Exception {

    final Message<String> message = MessageBuilder.withPayload("{\"-param1\":\"Kenny\", \"-param2\":\"Cartman\"}").build();

    transformer.setMakeParametersUnique(false);
    final JobLaunchRequest jobLaunchRequest = transformer.toJobLaunchRequest(message);
    final JobParameters jobParameters = jobLaunchRequest.getJobParameters();

    assertNotNull(jobParameters);
    assertTrue(jobParameters.getParameters().size() == 2);

    assertEquals("Kenny", jobParameters.getString("param1"));
    assertEquals("Cartman", jobParameters.getString("param2"));

    for (JobParameter jobParameter : jobParameters.getParameters().values()) {
      assertFalse(jobParameter.isIdentifying());
    }
  }

  @Test
  public void createTypedJobParameters() throws Exception {

    final Message<String> message = MessageBuilder.withPayload(
        "{\"param1(long)\":\"1234\", \"mydate(date)\":\"1978-05-01\"}").build();

    transformer.setMakeParametersUnique(false);
    final JobLaunchRequest jobLaunchRequest = transformer.toJobLaunchRequest(message);
    final JobParameters jobParameters = jobLaunchRequest.getJobParameters();

    assertNotNull(jobParameters);
    assertTrue(jobParameters.getParameters().size() == 2);

    assertEquals("1234", jobParameters.getString("param1"));
    assertEquals(Long.valueOf(1234), jobParameters.getLong("param1"));

    final DateFormat dateFormat = new SimpleDateFormat("yyyy/MM/dd");
    assertEquals(dateFormat.parse("1978/05/01"), jobParameters.getDate("mydate"));

  }

  @Test
  public void createTypedJobParametersWithCustomDateFormat() throws Exception {

    final Message<String> message = MessageBuilder.withPayload(
        "{\"param1\":\"We should all use ISO dates\", \"mydate(date)\":\"2013-08-15T14:50Z\"}").build();

    final DateFormat isoDateformat = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm'Z'");
    transformer.setDateFormat(isoDateformat);

    final JobLaunchRequest jobLaunchRequest = transformer.toJobLaunchRequest(message);
    final JobParameters jobParameters = jobLaunchRequest.getJobParameters();

    assertNotNull(jobParameters);
    assertTrue(jobParameters.getParameters().size() == 3);
    assertEquals(isoDateformat.parse("2013-08-15T14:50Z"), jobParameters.getDate("mydate"));
  }

  @Test
  public void createTypedJobParametersWithNullDateFormat() throws Exception {

    try {
      transformer.setDateFormat(null);
    }
    catch (IllegalArgumentException e) {
      return;
    }

    fail("Expected an IllegalArgumentException to be thrown.");
  }

  @Test
  public void createTypedJobParametersWithNullNumberFormat() throws Exception {

    try {
      transformer.setNumberFormat(null);
    }
    catch (IllegalArgumentException e) {
      return;
    }

    fail("Expected an IllegalArgumentException to be thrown.");
  }

  @Test
  public void createTypedJobParametersWithCustomNumberFormat() throws Exception {

    final Message<String> message = MessageBuilder.withPayload("{\"param1(double)\":\"123,55\"}").build();

    final NumberFormat germanNumberFormat = NumberFormat.getInstance(Locale.GERMANY);
    transformer.setNumberFormat(germanNumberFormat);

    final JobLaunchRequest jobLaunchRequest = transformer.toJobLaunchRequest(message);
    final JobParameters jobParameters = jobLaunchRequest.getJobParameters();

    assertNotNull(jobParameters);

    assertTrue(jobParameters.getParameters().size() == 2);

    assertEquals(Double.valueOf(123.55), jobParameters.getDouble("param1"));
  }

  @Test
  public void createEmptyJobParametersWithUniqueParameter() throws Exception {

    final Message<String> message = MessageBuilder.withPayload("").build();

    final JobLaunchRequest jobLaunchRequest = transformer.toJobLaunchRequest(message);
    final JobParameters jobParameters = jobLaunchRequest.getJobParameters();

    assertNotNull(jobParameters);
    assertTrue(jobParameters.getParameters().size() == 1);
  }

  @Test
  public void createEmptyJobParametersWithOutUniqueParameter() throws Exception {

    final Message<String> message = MessageBuilder.withPayload("").build();

    transformer.setMakeParametersUnique(false);
    final JobLaunchRequest jobLaunchRequest = transformer.toJobLaunchRequest(message);
    final JobParameters jobParameters = jobLaunchRequest.getJobParameters();

    assertNotNull(jobParameters);
    assertTrue(jobParameters.getParameters().size() == 0);
  }

  @Test
  public void createJobParametersWithParamThatMatchesRandom() throws Exception {

    final Message<String> message = MessageBuilder.withPayload("{\"random\":\"Will throw Exception\"}").build();

    try {
      transformer.toJobLaunchRequest(message);
    }
    catch (IllegalStateException e) {
      return;
    }

    fail("Expected an IllegalStateException to be thrown.");
  }

  @Test
  public void createJobParametersWithInvalidJSON() throws Exception {

    final Message<String> message = MessageBuilder.withPayload("this should fail").build();

    try {
      transformer.toJobLaunchRequest(message);
    }
    catch (IllegalArgumentException e) {
      assertEquals("Unable to convert provided JSON to Map<String, Object>", e.getMessage());
      return;
    }

    fail("Expected an IllegalStateException to be thrown.");
  }

  @Test
  public void createJobParametersWithUTFString() throws Exception {

    /** I want to go to Japan. */
    final String stringToPostInJapanese = "\u65e5\u672c\u306b\u884c\u304d\u305f\u3044\u3002";

    final Message<String> message = MessageBuilder.withPayload("{\"param1\":\"" + stringToPostInJapanese
        + "\"}").build();

    final JobLaunchRequest jobLaunchRequest = transformer.toJobLaunchRequest(message);
    final JobParameters jobParameters = jobLaunchRequest.getJobParameters();

    assertNotNull(jobParameters);
    assertTrue(jobParameters.getParameters().size() == 2);
    assertEquals(stringToPostInJapanese, jobParameters.getString("param1"));
  }

  @Test
  public void createJobParametersWithInvalidPayloadType() throws Exception {
    final Message<Date> message = MessageBuilder.withPayload(new Date()).build();

    try {
      transformer.toJobLaunchRequest(message);
    }
    catch (IllegalArgumentException e) {
      assertEquals("This transformer does not support payloads of type "
          + Date.class.getSimpleName(), e.getMessage());
      return;
    }

    fail("Expected an IllegalArgumentException to be thrown.");
  }

  @Test
  public void testSetDateFormat() throws Exception {

    final SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyyy.MMMMM.dd");

    transformer.setDateFormat(simpleDateFormat);

    final SimpleDateFormat retrievedDateFormat = TestUtils.getPropertyValue(transformer,
        "jobParametersConverter.dateFormat", SimpleDateFormat.class);

    assertEquals(simpleDateFormat, retrievedDateFormat);

    transformer.setDateFormatAsString(null);

    final SimpleDateFormat retrievedDateFormat2 = TestUtils.getPropertyValue(transformer,
        "jobParametersConverter.dateFormat", SimpleDateFormat.class);

    assertEquals(simpleDateFormat, retrievedDateFormat2);

    transformer.setDateFormatAsString("yyMMdd");

    final SimpleDateFormat retrievedDateFormat3 = TestUtils.getPropertyValue(transformer,
        "jobParametersConverter.dateFormat", SimpleDateFormat.class);

    assertEquals("yyMMdd", retrievedDateFormat3.toPattern());

  }

  @Test
  public void testSetNumberFormat() throws Exception {

    final NumberFormat numberFormat = NumberFormat.getNumberInstance(Locale.GERMAN);
    transformer.setNumberFormat(numberFormat);

    final NumberFormat retrievedNumberFormat = TestUtils.getPropertyValue(transformer,
        "jobParametersConverter.numberFormat", NumberFormat.class);

    assertEquals(numberFormat, retrievedNumberFormat);

    transformer.setNumberFormatAsString(null);

    final NumberFormat retrievedNumberFormat2 = TestUtils.getPropertyValue(transformer,
        "jobParametersConverter.numberFormat", NumberFormat.class);

    assertEquals(numberFormat, retrievedNumberFormat2);

    transformer.setNumberFormatAsString("#000000.000");

    final DecimalFormat retrievedDecimalFormat = TestUtils.getPropertyValue(transformer,
        "jobParametersConverter.numberFormat", DecimalFormat.class);

    assertEquals("#000000.000", retrievedDecimalFormat.toPattern());

  }

  @Test
  public void testJobParameterIncrementer() {
    jobParameterIncrementer.setKey("test-param-incrementer");
    when(mockedJob.getJobParametersIncrementer()).thenReturn(jobParameterIncrementer);
    final Message<String> message = MessageBuilder.withPayload("{\"test-param-incrementer(long)\":\"1234\"}").build();

    final JobLaunchRequest jobLaunchRequest = transformer.toJobLaunchRequest(message);

    assertNotNull(jobLaunchRequest.getJobParameters());
    assertTrue(jobLaunchRequest.getJobParameters().getParameters().size() == 2);
    // Now check if the job parameter is incremented
    assertEquals(Long.valueOf(1235), jobLaunchRequest.getJobParameters().getLong("test-param-incrementer"));
  }
}
TOP

Related Classes of org.springframework.xd.dirt.plugins.job.JobLaunchRequestTransformerTests

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.