/*
* Copyright 2013 Red Hat Inc. and/or its affiliates and other contributors.
*
* 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.switchyard.quickstarts.rest.binding;
//import org.jboss.resteasy.client.ProxyFactory;
import org.junit.Assert;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.switchyard.test.BeforeDeploy;
import org.switchyard.test.SwitchYardRunner;
import org.switchyard.test.SwitchYardTestCaseConfig;
import org.switchyard.test.SwitchYardTestKit;
import org.switchyard.component.resteasy.resource.ResourcePublisherFactory;
import org.switchyard.component.test.mixins.cdi.CDIMixIn;
import org.switchyard.component.test.mixins.http.HTTPMixIn;
import org.switchyard.transform.config.model.TransformSwitchYardScanner;
/**
* Tests for RESTEasy binding.
*
* @author Magesh Kumar B <mageshbk@jboss.com> (C) 2012 Red Hat Inc.
*/
@SwitchYardTestCaseConfig(
config = SwitchYardTestCaseConfig.SWITCHYARD_XML,
mixins = {CDIMixIn.class, HTTPMixIn.class},
scanners = TransformSwitchYardScanner.class
)
@RunWith(SwitchYardRunner.class)
public class RESTEasyBindingTest {
private HTTPMixIn http;
@BeforeDeploy
public void setProperties() {
System.setProperty("org.switchyard.component.resteasy.standalone.port", "8081");
System.setProperty("org.switchyard.component.resteasy.standalone.path", "");
}
/**
* This Quickstart test exclusively uses Netty server due to buggy JDK HttpServer.
* See https://issues.jboss.org/browse/RESTEASY-734
*/
@Test
public void orderServiceRESTEndpoint() throws Exception {
// Create our inventory
String response = null;
response = http.sendString(BASE_URL + "/inventory/create", "", HTTPMixIn.HTTP_OPTIONS);
Assert.assertEquals(SUCCESS, response);
/* WarehouseResource warehouseProxy = ProxyFactory.create(WarehouseResource.class, BASE_URL);
warehouseProxy.addItem(new Item(1, "Hydrogen Atom - No, we are not kidding!"));
warehouseProxy.addItem(new Item(2, "Handcrafted Copper Plate"));
warehouseProxy.addItem(new Item(3, "Einstein's Bust - Talks about your future :)"));
warehouseProxy.addItem(new Item(4, "Time Machine"));*/
// Create an order
response = http.sendString(BASE_URL + "/order", "", HTTPMixIn.HTTP_POST);
SwitchYardTestKit.compareXMLToString(response, ORDER);
// Add a new item or update order
response = http.sendString(BASE_URL + "/order/item", ORDER1, HTTPMixIn.HTTP_PUT);
Assert.assertEquals(SUCCESS, response);
// Add some more items or update order
response = http.sendString(BASE_URL + "/order/item", ORDER2, HTTPMixIn.HTTP_PUT);
Assert.assertEquals(SUCCESS, response);
// Look at our order
response = http.sendString(BASE_URL + "/order/1", "", HTTPMixIn.HTTP_GET);
SwitchYardTestKit.compareXMLToString(response, ORDER3);
// Delete the first item
response = http.sendString(BASE_URL + "/order/1:1", "", HTTPMixIn.HTTP_DELETE);
Assert.assertEquals(SUCCESS, response);
// Look at our order
response = http.sendString(BASE_URL + "/order/1", "", HTTPMixIn.HTTP_GET);
SwitchYardTestKit.compareXMLToString(response, ORDER4);
// Update item descriptions in our inventory
response = http.sendString(BASE_URL + "/inventory/update", "", HTTPMixIn.HTTP_OPTIONS);
Assert.assertEquals(SUCCESS, response);
// Look at our order
response = http.sendString(BASE_URL + "/order/1", "", HTTPMixIn.HTTP_GET);
SwitchYardTestKit.compareXMLToString(response, ORDER5);
// Get item
int status = http.sendStringAndGetStatus(BASE_URL + "/warehouse/26", "", HTTPMixIn.HTTP_GET);
Assert.assertEquals(404, status);
// Destroy our inventory
response = http.sendString(BASE_URL + "/inventory/remove", "", HTTPMixIn.HTTP_OPTIONS);
Assert.assertEquals(SUCCESS, response);
}
private static String BASE_URL = "http://localhost:8081/rest-binding";
static {
if (ResourcePublisherFactory.ignoreContext()) {
// Context paths are irrelevant for NettyJaxrs server
BASE_URL = "http://localhost:8081";
}
}
private static final String SUCCESS = "SUCCESS";
private static final String ORDER = "<order>"
+ " <orderId>1</orderId>"
+ "</order>";
private static final String ORDER1 = "<order>"
+ " <orderId>1</orderId>"
+ " <orderItem>"
+ " <item>"
+ " <itemId>1</itemId>"
+ " </item>"
+ " <quantity>10</quantity>"
+ " </orderItem>"
+ "</order>";
private static final String ORDER2 = "<order>"
+ " <orderId>1</orderId>"
+ " <orderItem>"
+ " <item>"
+ " <itemId>3</itemId>"
+ " </item>"
+ " <quantity>5</quantity>"
+ " </orderItem>"
+ " <orderItem>"
+ " <item>"
+ " <itemId>4</itemId>"
+ " </item>"
+ " <quantity>3</quantity>"
+ " </orderItem>"
+ "</order>";
private static final String ORDER3 = "<order>"
+ " <orderId>1</orderId>"
+ " <orderItem>"
+ " <item>"
+ " <itemId>1</itemId>"
+ " <name>Hydrogen Atom - No, we are not kidding!</name>"
+ " </item>"
+ " <quantity>10</quantity>"
+ " </orderItem>"
+ " <orderItem>"
+ " <item>"
+ " <itemId>3</itemId>"
+ " <name>Einstein's Bust - Talks about your future :)</name>"
+ " </item>"
+ " <quantity>5</quantity>"
+ " </orderItem>"
+ " <orderItem>"
+ " <item>"
+ " <itemId>4</itemId>"
+ " <name>Time Machine</name>"
+ " </item>"
+ " <quantity>3</quantity>"
+ " </orderItem>"
+ "</order>";
private static final String ORDER4 = "<order>"
+ " <orderId>1</orderId>"
+ " <orderItem>"
+ " <item>"
+ " <itemId>3</itemId>"
+ " <name>Einstein's Bust - Talks about your future :)</name>"
+ " </item>"
+ " <quantity>5</quantity>"
+ " </orderItem>"
+ " <orderItem>"
+ " <item>"
+ " <itemId>4</itemId>"
+ " <name>Time Machine</name>"
+ " </item>"
+ " <quantity>3</quantity>"
+ " </orderItem>"
+ "</order>";
private static final String ORDER5 = "<order>"
+ " <orderId>1</orderId>"
+ " <orderItem>"
+ " <item>"
+ " <itemId>3</itemId>"
+ " <name>Theory of relativity</name>"
+ " </item>"
+ " <quantity>5</quantity>"
+ " </orderItem>"
+ " <orderItem>"
+ " <item>"
+ " <itemId>4</itemId>"
+ " <name>Coffee Maker</name>"
+ " </item>"
+ " <quantity>3</quantity>"
+ " </orderItem>"
+ "</order>";
}