/** * Copyright © 2013 enioka. All rights reserved * * 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 com.enioka.jqm.tools; import java.io.File; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import org.junit.Assert; import org.junit.Test; import com.enioka.jqm.jdbc.NoResultException; import com.enioka.jqm.model.JobDef; import com.enioka.jqm.model.Queue; import com.enioka.jqm.test.helpers.CreationTools; import com.enioka.jqm.test.helpers.TestHelpers; public class XmlTest extends JqmBaseTest { @Test public void testExportQueue() throws Exception { CreationTools.createJobDef(null, true, "com.enioka.jqm.tests.App", null, "jqm-tests/jqm-test-fibo/target/test.jar", TestHelpers.qVip, 42, "Fibo", null, "Franquin", "ModuleMachin", "other1", "other2", false, cnx); CreationTools.createJobDef(null, true, "App", null, "jqm-tests/jqm-test-geo/target/test.jar", TestHelpers.qVip, 42, "Geo", null, "Franquin", "ModuleMachin", "other1", "other2", false, cnx); CreationTools.createJobDef(null, true, "App", null, "jqm-tests/jqm-test-datetimemaven/target/test.jar", TestHelpers.qNormal, 42, "DateTime", null, "Franquin", "ModuleMachin", "other", "other", false, cnx); ArrayList<String> tmp = new ArrayList<String>(); tmp.add("VIPQueue"); tmp.add("NormalQueue"); XmlQueueExporter.export(TestHelpers.node.getDlRepo() + "xmlexportqueuetest.xml", cnx, tmp); File t = new File(TestHelpers.node.getDlRepo() + "xmlexportqueuetest.xml"); Assert.assertEquals(true, t.exists()); // --> Test Import XmlQueueParser.parse(TestHelpers.node.getDlRepo() + "xmlexportqueuetest.xml", cnx); try { Queue.select(cnx, "q_select_by_key", "VIPQueue"); Queue.select(cnx, "q_select_by_key", "NormalQueue"); JobDef jd1 = JobDef.select_key(cnx, "Fibo"); JobDef jd2 = JobDef.select_key(cnx, "Geo"); JobDef jd3 = JobDef.select_key(cnx, "DateTime"); Assert.assertEquals("VIPQueue", jd1.getQueue(cnx).getName()); Assert.assertEquals("VIPQueue", jd2.getQueue(cnx).getName()); Assert.assertEquals("NormalQueue", jd3.getQueue(cnx).getName()); } catch (NoResultException e) { Assert.fail("missing configuration element"); } t.delete(); } @Test public void testExportQueueAll() throws Exception { CreationTools.createJobDef(null, true, "com.enioka.jqm.tests.App", null, "jqm-tests/jqm-test-fibo/target/test.jar", TestHelpers.qVip, 42, "Fibo", null, "Franquin", "ModuleMachin", "other1", "other2", false, cnx); CreationTools.createJobDef(null, true, "App", null, "jqm-tests/jqm-test-geo/target/test.jar", TestHelpers.qVip, 42, "Geo", null, "Franquin", "ModuleMachin", "other1", "other2", false, cnx); CreationTools.createJobDef(null, true, "App", null, "jqm-tests/jqm-test-datetimemaven/target/test.jar", TestHelpers.qNormal, 42, "DateTime", null, "Franquin", "ModuleMachin", "other", "other", false, cnx); XmlQueueExporter.export(TestHelpers.node.getDlRepo() + "xmlexportqueuetest.xml", cnx); File t = new File(TestHelpers.node.getDlRepo() + "xmlexportqueuetest.xml"); Assert.assertEquals(true, t.exists()); // --> Test Import XmlQueueParser.parse(TestHelpers.node.getDlRepo() + "xmlexportqueuetest.xml", cnx); try { Queue.select(cnx, "q_select_by_key", "VIPQueue"); Queue.select(cnx, "q_select_by_key", "NormalQueue"); JobDef jd1 = JobDef.select_key(cnx, "Fibo"); JobDef jd2 = JobDef.select_key(cnx, "Geo"); JobDef jd3 = JobDef.select_key(cnx, "DateTime"); Assert.assertEquals("VIPQueue", jd1.getQueue(cnx).getName()); Assert.assertEquals("VIPQueue", jd2.getQueue(cnx).getName()); Assert.assertEquals("NormalQueue", jd3.getQueue(cnx).getName()); } catch (NoResultException e) { Assert.fail("missing configuration element"); } t.delete(); } @Test public void testXmlParser() { // Init the default queue (don't start the engine!) Helpers.updateConfiguration(cnx); Main.main(new String[] { "-importjobdef", "target/payloads/jqm-test-xml/xmltest.xml" }); List<JobDef> jd = JobDef.select(cnx, "jd_select_all"); JobDef fibo = JobDef.select_key(cnx, "Fibo"); Assert.assertEquals(2, jd.size()); Assert.assertEquals("Fibo", fibo.getApplicationName()); Assert.assertEquals(true, fibo.isCanBeRestarted()); Assert.assertEquals("com.enioka.jqm.tests.App", fibo.getJavaClassName()); Assert.assertEquals(TestHelpers.qVip, fibo.getQueue()); Assert.assertEquals("ApplicationTest", fibo.getApplication()); Assert.assertEquals("TestModuleRATONLAVEUR", fibo.getModule()); Assert.assertEquals(false, fibo.isHighlander()); Assert.assertEquals("1", fibo.getParametersMap(cnx).get("p1")); Assert.assertEquals("2", fibo.getParametersMap(cnx).get("p2")); Assert.assertEquals("com.enioka.jqm.tests.App", fibo.getJavaClassName()); Assert.assertEquals("com.enioka.jqm.tests.App", fibo.getJavaClassName()); } @Test public void testUpdateJobDef() { // Init the default queue (don't start the engine!) Helpers.updateConfiguration(cnx); Main.main(new String[] { "-importjobdef", "target/payloads/jqm-test-xml/xmltest.xml" }); // Sanity check List<JobDef> jd = JobDef.select(cnx, "jd_select_all"); JobDef fibo = JobDef.select_key(cnx, "Fibo"); Assert.assertEquals(2, jd.size()); Assert.assertEquals("Fibo", fibo.getApplicationName()); Assert.assertEquals("vdjvkdv", fibo.getKeyword1()); Assert.assertEquals("sgfbgg", fibo.getKeyword2()); Assert.assertEquals("jvhkdfl", fibo.getKeyword3()); // Import and therefore update the job definitions. Main.main(new String[] { "-importjobdef", "target/payloads/jqm-test-xml/xmltest_update.xml" }); jd = JobDef.select(cnx, "jd_select_all"); fibo = JobDef.select_key(cnx, "Fibo"); Assert.assertEquals(2, jd.size()); Assert.assertEquals("Fibo", fibo.getApplicationName()); Assert.assertEquals("NEWVALUE", fibo.getKeyword1()); Assert.assertEquals("", fibo.getKeyword2()); Assert.assertEquals(null, fibo.getKeyword3()); } @Test public void testExportJobDef() throws Exception { Map<String, String> jdp = new HashMap<String, String>(); jdp.put("test-key", "test-value"); CreationTools.createJobDef("My Description", true, "com.enioka.jqm.tests.App", jdp, "jqm-tests/jqm-test-fibo/target/test.jar", TestHelpers.qVip, 42, "Fibo", "App", "ModuleMachin", "other1", "other2", null, false, cnx, "Isolation", true, "HIDDEN"); CreationTools.createJobDef(null, true, "App", null, "jqm-tests/jqm-test-geo/target/test.jar", TestHelpers.qVip, 42, "Geo", null, "Franquin", "ModuleMachin", "other1", "other2", false, cnx); CreationTools.createJobDef(null, true, "App", null, "jqm-tests/jqm-test-datetimemaven/target/test.jar", TestHelpers.qNormal, 42, "DateTime", null, "Franquin", "ModuleMachin", "other", "other", false, cnx); CreationTools.createJobDef(null, true, "App", null, "jqm-tests/jqm-test-datetimemaven/target/test.jar", TestHelpers.qNormal, 42, "DateTime2", null, "Franquin", "ModuleMachin", "other", "other", false, cnx); XmlJobDefExporter.export(TestHelpers.node.getDlRepo() + "xmlexportjobdeftest.xml", cnx); File f = new File(TestHelpers.node.getDlRepo() + "xmlexportjobdeftest.xml"); Assert.assertEquals(true, f.exists()); // -> Delete all entries and try to reimport them from the exported file TestHelpers.cleanup(cnx, true); XmlJobDefParser.parse(TestHelpers.node.getDlRepo() + "xmlexportjobdeftest.xml", cnx); // test the 4 JobDef were imported JobDef fibo = null; try { fibo = JobDef.select_key(cnx, "Fibo"); JobDef.select_key(cnx, "Geo"); JobDef.select_key(cnx, "DateTime"); JobDef.select_key(cnx, "DateTime2"); } catch (NoResultException e) { Assert.fail("missing configuration element"); } Assert.assertEquals("My Description", fibo.getDescription()); Assert.assertEquals("App", fibo.getApplication()); Assert.assertEquals("jqm-tests/jqm-test-fibo/target/test.jar", fibo.getJarPath()); Assert.assertEquals("FS", fibo.getPathType().toString()); Assert.assertEquals("VIPQueue", fibo.getQueue(cnx).getName()); Assert.assertEquals(true, fibo.isCanBeRestarted()); Assert.assertEquals("com.enioka.jqm.tests.App", fibo.getJavaClassName()); Assert.assertEquals("ModuleMachin", fibo.getModule()); Assert.assertEquals("other1", fibo.getKeyword1()); Assert.assertEquals("other2", fibo.getKeyword2()); Assert.assertEquals(null, fibo.getKeyword3()); Assert.assertEquals(false, fibo.isHighlander()); Assert.assertEquals("Isolation", fibo.getClassLoader(cnx).getName()); Assert.assertEquals(true, fibo.getClassLoader().isChildFirst()); Assert.assertEquals("HIDDEN", fibo.getClassLoader().getHiddenClasses()); f.delete(); } @Test public void testImportThenReimportJobDefWithPrms() { // Init the default queue (don't start the engine!) Helpers.updateConfiguration(cnx); // First import Main.main(new String[] { "-importjobdef", "target/payloads/jqm-test-xml/xmltest.xml" }); List<JobDef> jd = JobDef.select(cnx, "jd_select_all"); Assert.assertEquals(2, jd.size()); JobDef fibo = JobDef.select_key(cnx, "Fibo"); Assert.assertEquals("Fibo", fibo.getApplicationName()); Assert.assertEquals("1", fibo.getParametersMap(cnx).get("p1")); // Second import - parameters are different, note 3 instead of 1 Main.main(new String[] { "-importjobdef", "target/payloads/jqm-test-xml/xmltest_np.xml" }); jd = JobDef.select(cnx, "jd_select_all"); fibo = JobDef.select_key(cnx, "Fibo"); Assert.assertEquals(2, jd.size()); Assert.assertNotNull(fibo); Assert.assertEquals("Fibo", fibo.getApplicationName()); Assert.assertEquals("3", fibo.getParametersMap(cnx).get("p1")); } @Test public void testImportJobdefWithQueue() { // Init the default queue (don't start the engine!) Helpers.updateConfiguration(cnx); Main.main(new String[] { "-importjobdef", "target/payloads/jqm-test-xml/xmltestnewqueue.xml" }); List<JobDef> jd = JobDef.select(cnx, "jd_select_all"); Assert.assertEquals(2, jd.size()); // Was the queue created (and only once)? Queue q = Queue.select_key(cnx, "NewQueue"); Assert.assertEquals("Created from a jobdef import. Description should be set later", q.getDescription()); cnx.close(); } @Test public void testImportQueue() throws Exception { CreationTools.createJobDef(null, true, "com.enioka.jqm.tests.App", null, "jqm-tests/jqm-test-fibo/target/test.jar", TestHelpers.qVip, 42, "Fibo", null, "Franquin", "ModuleMachin", "other1", "other2", false, cnx); CreationTools.createJobDef(null, true, "App", null, "jqm-tests/jqm-test-geo/target/test.jar", TestHelpers.qVip, 42, "Geo", null, "Franquin", "ModuleMachin", "other1", "other2", false, cnx); CreationTools.createJobDef(null, true, "App", null, "jqm-tests/jqm-test-datetimemaven/target/test.jar", TestHelpers.qNormal, 42, "DateTime", null, "Franquin", "ModuleMachin", "other", "other", false, cnx); XmlQueueParser.parse("target/payloads/jqm-test-xml/xmlqueuetest.xml", cnx); try { Queue.select(cnx, "q_select_by_key", "XmlQueue"); Queue.select(cnx, "q_select_by_key", "XmlQueue2"); JobDef jd1 = JobDef.select_key(cnx, "Fibo"); JobDef jd2 = JobDef.select_key(cnx, "Geo"); JobDef jd3 = JobDef.select_key(cnx, "DateTime"); Assert.assertEquals("XmlQueue", jd1.getQueue(cnx).getName()); Assert.assertEquals("XmlQueue", jd2.getQueue(cnx).getName()); Assert.assertEquals("XmlQueue2", jd3.getQueue(cnx).getName()); } catch (NoResultException e) { Assert.fail("missing configuration element"); } } }