Java tutorial
/* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You 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.apache.batchee.jaxrs.server; import com.fasterxml.jackson.jaxrs.json.JacksonJsonProvider; import org.apache.batchee.jaxrs.common.JBatchResource; import org.apache.batchee.jaxrs.common.RestEntry; import org.apache.batchee.jaxrs.common.RestJobExecution; import org.apache.batchee.jaxrs.common.RestJobInstance; import org.apache.batchee.jaxrs.common.RestProperties; import org.apache.batchee.jaxrs.common.RestStepExecution; import org.apache.batchee.jaxrs.server.util.CreateSomeJobs; import org.apache.cxf.interceptor.LoggingOutInterceptor; import org.apache.cxf.jaxrs.client.WebClient; import org.jboss.arquillian.container.test.api.Deployment; import org.jboss.arquillian.container.test.api.OverProtocol; import org.jboss.arquillian.junit.Arquillian; import org.jboss.arquillian.test.api.ArquillianResource; import org.jboss.shrinkwrap.api.Archive; import org.jboss.shrinkwrap.api.ShrinkWrap; import org.jboss.shrinkwrap.api.asset.StringAsset; import org.jboss.shrinkwrap.api.spec.WebArchive; import org.jboss.shrinkwrap.descriptor.api.Descriptors; import org.jboss.shrinkwrap.descriptor.api.webapp30.WebAppDescriptor; import org.junit.Test; import org.junit.runner.RunWith; import javax.batch.runtime.BatchStatus; import javax.ws.rs.core.MediaType; import javax.ws.rs.core.Response; import java.net.URL; import java.util.Arrays; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNotNull; @RunWith(Arquillian.class) public class RestTest { @ArquillianResource private URL base; @Test public void getJobNames() { final String[] jobNames = newClient().path("job-names").get(String[].class); assertNotNull(jobNames); assertEquals(1, jobNames.length); assertEquals("init", jobNames[0]); } @Test public void getJobInstanceCount() { final int count = newClient().path("job-instance/count/{id}", "init").get(Integer.class); assertEquals(1, count); } @Test public void getJobInstances() { final RestJobInstance[] instances = newClient().path("job-instances/{name}", "init").query("start", 0) .query("count", 10).get(RestJobInstance[].class); assertNotNull(instances); assertEquals(1, instances.length); assertEquals(0, instances[0].getId()); assertEquals("init", instances[0].getName()); } @Test public void getRunningExecutions() { final int status = newClient().path("executions/running/{name}", "init").get().getStatus(); assertEquals(Response.Status.INTERNAL_SERVER_ERROR.getStatusCode(), status); // no more running so exception } @Test public void getJobInstance() { final RestJobInstance instance = newClient().path("job-instance/{id}", 0).get(RestJobInstance.class); assertNotNull(instance); assertEquals(0, instance.getId()); assertEquals("init", instance.getName()); } @Test public void getParameters() { final RestProperties params = newClient().path("execution/parameter/{id}", 0).get(RestProperties.class); assertNotNull(params); assertEquals(1, params.getEntries().size()); final RestEntry entry = params.getEntries().iterator().next(); assertEquals("test", entry.getKey()); assertEquals("jbatch", entry.getValue()); } @Test public void getJobExecutions() { final RestJobExecution[] executions = newClient().path("job-executions/{id}/{name}", 0, "init") .get(RestJobExecution[].class); assertNotNull(executions); assertEquals(1, executions.length); assertEquals(0, executions[0].getId()); assertEquals("init", executions[0].getName()); assertEquals("COMPLETED", executions[0].getExitStatus()); assertEquals(BatchStatus.COMPLETED, executions[0].getBatchStatus()); } @Test public void getJobExecution() { final RestJobExecution executions = newClient().path("job-execution/{id}", 0).get(RestJobExecution.class); assertNotNull(executions); assertEquals(0, executions.getId()); assertEquals("init", executions.getName()); assertEquals("COMPLETED", executions.getExitStatus()); assertEquals(BatchStatus.COMPLETED, executions.getBatchStatus()); } @Test public void getStepExecutions() { final RestStepExecution[] executions = newClient().path("step-executions/{id}", 0) .get(RestStepExecution[].class); assertNotNull(executions); assertEquals(1, executions.length); assertEquals(0, executions[0].getId()); assertEquals("step1", executions[0].getName()); assertEquals("OK", executions[0].getExitStatus()); assertEquals(BatchStatus.COMPLETED, executions[0].getBatchStatus()); } @Deployment(testable = false) @OverProtocol("Servlet 2.5") // to use a custom web.xml public static Archive<?> war() { return ShrinkWrap.create(WebArchive.class, "batchee-gui.war") // GUI .addPackages(true, JBatchResourceImpl.class.getPackage()) .addPackages(true, JBatchResource.class.getPackage()) .addAsWebInfResource(new StringAsset(Descriptors.create(WebAppDescriptor.class) .metadataComplete(false).createServlet().servletName("CXF") .servletClass("org.apache.cxf.jaxrs.servlet.CXFNonSpringJaxrsServlet").createInitParam() .paramName("jaxrs.serviceClasses").paramValue(JBatchResourceImpl.class.getName()).up() .createInitParam().paramName("jaxrs.providers") .paramValue("com.fasterxml.jackson.jaxrs.json.JacksonJsonProvider," + JBatchExceptionMapper.class.getName()) .up().createInitParam().paramName("jaxrs.outInterceptors") .paramValue(LoggingOutInterceptor.class.getName()).up().up().createServletMapping() .servletName("CXF").urlPattern("/api/*").up().exportAsString()), "web.xml") // test data to create some job things to do this test .addPackage(CreateSomeJobs.class.getPackage()) .addAsWebInfResource("META-INF/batch-jobs/init.xml", "classes/META-INF/batch-jobs/init.xml"); } private WebClient newClient() { return WebClient.create(base.toExternalForm() + "api/batchee", Arrays.asList(new JacksonJsonProvider())) .accept(MediaType.APPLICATION_JSON_TYPE); } }