/* * 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.assertNull; import static org.junit.Assert.assertTrue; import static org.junit.Assert.fail; import java.text.DateFormat; import java.text.NumberFormat; import java.text.SimpleDateFormat; import java.util.Locale; import org.junit.Test; import org.springframework.batch.core.JobParameter; import org.springframework.batch.core.JobParameters; /** * @author Gunnar Hillert */ public class JobParametersBeanTests { @Test public void createJobParametersWithUniqueParam() throws Exception { final JobParametersBean jobParametersBean = new JobParametersBean( "{\"param1\":\"Kenny\", \"param2\":\"Cartman\"}"); assertNull(jobParametersBean.getJobParameters()); jobParametersBean.afterPropertiesSet(); assertNotNull(jobParametersBean.getJobParameters()); assertTrue(jobParametersBean.getJobParameters().getParameters().size() == 3); assertEquals("Kenny", jobParametersBean.getJobParameters().getString("param1")); assertEquals("Cartman", jobParametersBean.getJobParameters().getString("param2")); assertNotNull(jobParametersBean.getJobParameters().getString("random")); } @Test public void createJobParametersWithoutUniqueParam() throws Exception { final JobParametersBean jobParametersBean = new JobParametersBean( "{\"param1\":\"Kenny\", \"param2\":\"Cartman\"}"); assertNull(jobParametersBean.getJobParameters()); jobParametersBean.setMakeParametersUnique(false); jobParametersBean.afterPropertiesSet(); final JobParameters jobParameters = jobParametersBean.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 JobParametersBean jobParametersBean = new JobParametersBean( "{\"-param1\":\"Kenny\", \"-param2\":\"Cartman\"}"); assertNull(jobParametersBean.getJobParameters()); jobParametersBean.setMakeParametersUnique(false); jobParametersBean.afterPropertiesSet(); final JobParameters jobParameters = jobParametersBean.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 createTypedJobParametersWithDefaultDateFormat() throws Exception { final JobParametersBean jobParametersBean = new JobParametersBean( "{\"param1(long)\":\"1234\", \"mydate(date)\":\"1978-05-01\"}"); assertNull(jobParametersBean.getJobParameters()); jobParametersBean.setMakeParametersUnique(false); jobParametersBean.afterPropertiesSet(); final JobParameters jobParameters = jobParametersBean.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 JobParametersBean jobParametersBean = new JobParametersBean( "{\"param1(long)\":\"1234\", \"mydate(date)\":\"1978/05/01\"}"); assertNull(jobParametersBean.getJobParameters()); jobParametersBean.setMakeParametersUnique(false); jobParametersBean.setDateFormatAsString("yyyy/MM/dd"); jobParametersBean.afterPropertiesSet(); final JobParameters jobParameters = jobParametersBean.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 createTypedJobParametersWithCustomDateFormat2() throws Exception { final JobParametersBean jobParametersBean = new JobParametersBean( "{\"param1\":\"We should all use ISO dates\", \"mydate(date)\":\"2013-08-15T14:50Z\"}"); assertNull(jobParametersBean.getJobParameters()); final DateFormat isoDateformat = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm'Z'"); jobParametersBean.setDateFormat(isoDateformat); jobParametersBean.afterPropertiesSet(); final JobParameters jobParameters = jobParametersBean.getJobParameters(); assertNotNull(jobParameters); assertTrue(jobParameters.getParameters().size() == 3); assertEquals(isoDateformat.parse("2013-08-15T14:50Z"), jobParameters.getDate("mydate")); } @Test public void createTypedJobParametersWithNullDateFormat() throws Exception { final JobParametersBean jobParametersBean = new JobParametersBean( "{\"param1\":\"We should all use ISO dates\", \"mydate(date)\":\"2013-08-15T14:50Z\"}"); assertNull(jobParametersBean.getJobParameters()); try { jobParametersBean.setDateFormat(null); } catch (IllegalArgumentException e) { return; } fail("Expected an IllegalArgumentException to be thrown."); } @Test public void createTypedJobParametersWithNullNumberFormat() throws Exception { final JobParametersBean jobParametersBean = new JobParametersBean("{\"param1(long)\":\"123\"}"); assertNull(jobParametersBean.getJobParameters()); try { jobParametersBean.setNumberFormat(null); } catch (IllegalArgumentException e) { return; } fail("Expected an IllegalArgumentException to be thrown."); } @Test public void createTypedJobParametersWithCustomNumberFormat() throws Exception { final JobParametersBean jobParametersBean = new JobParametersBean("{\"param1(double)\":\"123,55\"}"); assertNull(jobParametersBean.getJobParameters()); final NumberFormat germanNumberFormat = NumberFormat.getInstance(Locale.GERMANY); jobParametersBean.setNumberFormat(germanNumberFormat); jobParametersBean.afterPropertiesSet(); final JobParameters jobParameters = jobParametersBean.getJobParameters(); assertNotNull(jobParameters); assertTrue(jobParameters.getParameters().size() == 2); assertEquals(Double.valueOf(123.55), jobParameters.getDouble("param1")); } @Test public void createEmptyJobParametersWithUniqueParameter() throws Exception { final JobParametersBean jobParametersBean = new JobParametersBean(null); assertNull(jobParametersBean.getJobParameters()); jobParametersBean.afterPropertiesSet(); final JobParameters jobParameters = jobParametersBean.getJobParameters(); assertNotNull(jobParameters); assertTrue(jobParameters.getParameters().size() == 1); } @Test public void createEmptyJobParametersWithOutUniqueParameter() throws Exception { final JobParametersBean jobParametersBean = new JobParametersBean(null); assertNull(jobParametersBean.getJobParameters()); jobParametersBean.setMakeParametersUnique(false); jobParametersBean.afterPropertiesSet(); final JobParameters jobParameters = jobParametersBean.getJobParameters(); assertNotNull(jobParameters); assertTrue(jobParameters.getParameters().size() == 0); } @Test public void createJobParametersWithUniqueParameterAndEmptyJSONString() throws Exception { final JobParametersBean jobParametersBean = new JobParametersBean(""); assertNull(jobParametersBean.getJobParameters()); jobParametersBean.afterPropertiesSet(); final JobParameters jobParameters = jobParametersBean.getJobParameters(); assertNotNull(jobParameters); assertTrue(jobParameters.getParameters().size() == 1); } @Test public void createJobParametersWithParamThatMatchesRandom() throws Exception { final JobParametersBean jobParametersBean = new JobParametersBean("{\"random\":\"Will throw Exception\"}"); assertNull(jobParametersBean.getJobParameters()); try { jobParametersBean.afterPropertiesSet(); } catch (IllegalStateException e) { return; } fail("Expected an IllegalStateException to be thrown."); } @Test public void createJobParametersWithInvalidJSON() throws Exception { final JobParametersBean jobParametersBean = new JobParametersBean("this should fail"); assertNull(jobParametersBean.getJobParameters()); try { jobParametersBean.afterPropertiesSet(); } 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 JobParametersBean jobParametersBean = new JobParametersBean("{\"param1\":\"" + stringToPostInJapanese + "\"}"); assertNull(jobParametersBean.getJobParameters()); jobParametersBean.afterPropertiesSet(); assertNotNull(jobParametersBean.getJobParameters()); assertTrue(jobParametersBean.getJobParameters().getParameters().size() == 2); assertEquals(stringToPostInJapanese, jobParametersBean.getJobParameters().getString("param1")); } }