package glaze;
import static glaze.Glaze.Delete;
import static glaze.Glaze.Get;
import static glaze.Glaze.Head;
import static glaze.Glaze.Options;
import static glaze.Glaze.Patch;
import static glaze.Glaze.Post;
import static glaze.Glaze.Put;
import static glaze.Glaze.Trace;
import static org.apache.http.entity.ContentType.APPLICATION_JSON;
import static org.apache.http.entity.ContentType.APPLICATION_XML;
import static org.testng.Assert.assertEquals;
import static org.testng.Assert.assertFalse;
import static org.testng.Assert.assertNotEquals;
import static org.testng.Assert.assertNotNull;
import static org.testng.Assert.assertNull;
import static org.testng.Assert.assertTrue;
import glaze.client.UriBuilder;
import glaze.func.Closures.Closure;
import glaze.test.data.Card;
import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.net.URI;
import java.net.URISyntaxException;
import java.text.SimpleDateFormat;
import java.util.Date;
import org.apache.http.Header;
import org.apache.http.HttpHeaders;
import org.apache.http.HttpHost;
import org.apache.http.HttpVersion;
import org.apache.http.ParseException;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.client.methods.HttpPut;
import org.apache.http.client.methods.HttpRequestBase;
import org.apache.http.client.methods.HttpUriRequest;
import org.apache.http.conn.params.ConnRoutePNames;
import org.apache.http.entity.StringEntity;
import org.apache.http.message.BasicHeader;
import org.apache.http.params.CoreConnectionPNames;
import org.apache.http.params.CoreProtocolPNames;
import org.apache.http.util.EntityUtils;
import org.testng.annotations.Test;
public class TestBasic
{
@Test(timeOut = 5000)
public void methods() throws URISyntaxException
{
URI uri = new URI("http://localhost");
assertNotNull(Trace("http://www.google.com").build());
assertNotNull(Options("http://www.google.com").build());
assertNotNull(Head("http://www.google.com").build());
assertNotNull(Patch("http://www.google.com").build());
assertNotNull(Delete("http://www.google.com").buildSendCall());
assertNotNull(Patch("http://www.google.com").buildMapCall(String.class));
assertNotNull(Trace(uri).build());
assertNotNull(Options(uri).build());
assertNotNull(Head(uri).build());
assertNotNull(Patch(uri).build());
assertNotNull(Delete(uri).buildSendCall());
assertNotNull(Patch(uri).buildMapCall(String.class));
}
@Test(timeOut = 5000)
public void otherEntityBuilds() throws UnsupportedEncodingException
{
assertNotNull(Get("http://localhost").entity(new StringEntity("blah")).build());
assertNotNull(Get("http://localhost").bean("blah").build());
assertNotNull(Post("http://localhost").bean("blah").as(null).build());
}
@Test(timeOut = 5000)
public void postMappings() throws ParseException, IOException
{
URI uri = UriBuilder.uriBuilderFrom("https://api.google.com/card").build();
Card card = new Card("Hello wiz", "xxx xxx", "4e77e2920441f7000045755f");
HttpPost post;
post = (HttpPost) Post(uri).bean(card).build();
assertEquals(EntityUtils.toString(post.getEntity()), "name=Hello+wiz&desc=xxx+xxx&idList=4e77e2920441f7000045755f");
post = (HttpPost) Post(uri, APPLICATION_JSON).bean(card).build();
assertEquals(EntityUtils.toString(post.getEntity()), "{\"name\":\"Hello wiz\",\"desc\":\"xxx xxx\",\"idList\":\"4e77e2920441f7000045755f\"}");
post = (HttpPost) Post(uri).bean(card).as(APPLICATION_XML).build();
assertEquals(EntityUtils.toString(post.getEntity()), "<Card xmlns=\"\"><name>Hello wiz</name><desc>xxx xxx</desc><idList>4e77e2920441f7000045755f</idList></Card>");
post = (HttpPost) Post(uri.toASCIIString()).bean(card).build();
assertEquals(EntityUtils.toString(post.getEntity()), "name=Hello+wiz&desc=xxx+xxx&idList=4e77e2920441f7000045755f");
}
@Test(timeOut = 5000)
public void putMappings() throws ParseException, IOException
{
URI uri = UriBuilder.uriBuilderFrom("https://api.google.com/card").build();
Card card = new Card("Hello wiz", "xxx xxx", "4e77e2920441f7000045755f");
HttpPut put;
put = (HttpPut) Put(uri).bean(card).build();
assertEquals(EntityUtils.toString(put.getEntity()), "name=Hello+wiz&desc=xxx+xxx&idList=4e77e2920441f7000045755f");
put = (HttpPut) Put(uri, APPLICATION_JSON).bean(card).build();
assertEquals(EntityUtils.toString(put.getEntity()), "{\"name\":\"Hello wiz\",\"desc\":\"xxx xxx\",\"idList\":\"4e77e2920441f7000045755f\"}");
put = (HttpPut) Put(uri).bean(card).as(APPLICATION_XML).build();
assertEquals(EntityUtils.toString(put.getEntity()), "<Card xmlns=\"\"><name>Hello wiz</name><desc>xxx xxx</desc><idList>4e77e2920441f7000045755f</idList></Card>");
put = (HttpPut) Put(uri.toASCIIString()).bean(card).build();
assertEquals(EntityUtils.toString(put.getEntity()), "name=Hello+wiz&desc=xxx+xxx&idList=4e77e2920441f7000045755f");
}
@Test(timeOut = 5000)
public void requestParameters()
{
HttpHost proxy = new HttpHost("localhost");
HttpUriRequest request = Get("http://www.google.com").userAgent("test").viaProxy(proxy).socketTimeout(10).addHeader(HttpHeaders.ACCEPT, "bla/bla").build();
assertEquals(request.getFirstHeader(HttpHeaders.ACCEPT).getValue(), "bla/bla");
assertEquals(request.getParams().getParameter(CoreProtocolPNames.USER_AGENT), "test");
assertEquals(request.getParams().getParameter(CoreConnectionPNames.SO_TIMEOUT), 10);
assertEquals(request.getParams().getParameter(ConnRoutePNames.DEFAULT_PROXY), proxy);
request = Get(UriBuilder.uriBuilderFrom("https://api.google.com/card").build()).addHeader(HttpHeaders.ACCEPT, "bla/bla").setCacheControl("xxx").version(HttpVersion.HTTP_1_0).config(CoreProtocolPNames.STRICT_TRANSFER_ENCODING, false).useExpectContinue().build();
assertEquals(request.getFirstHeader(HttpHeaders.ACCEPT).getValue(), "bla/bla");
assertEquals(request.getFirstHeader(HttpHeaders.CACHE_CONTROL).getValue(), "xxx");
assertNotEquals(request.getParams().getParameter(CoreProtocolPNames.USER_AGENT), "test");
assertEquals(request.getParams().getParameter(CoreProtocolPNames.PROTOCOL_VERSION).toString(), "HTTP/1.0");
assertTrue(request.getParams().getBooleanParameter(CoreProtocolPNames.USE_EXPECT_CONTINUE, false));
assertFalse((Boolean) request.getParams().getParameter(CoreProtocolPNames.STRICT_TRANSFER_ENCODING));
assertTrue(Head("http://www.google.com").config("hello", true).build().getParams().getBooleanParameter("hello", false));
assertTrue(Patch("http://www.google.com").staleConnectionCheck(true).build().getParams().getBooleanParameter(CoreConnectionPNames.STALE_CONNECTION_CHECK, false));
assertNull(Get("http://api.google.com").config("a", "abc").removeConfig("a").build().getParams().getParameter("a"));
request = Get("http://www.google.com").removeHeaders(HttpHeaders.ACCEPT).removeHeader(new BasicHeader(HttpHeaders.CACHE_CONTROL, "aaa")).build();
assertEquals(request.getHeaders(HttpHeaders.ACCEPT).length, 0);
assertEquals(request.getHeaders(HttpHeaders.CACHE_CONTROL).length, 0);
Date date = new Date(0);
request = Get("http://www.google.com").connectTimeout(10).elementCharset("UTF-8").setIfModifiedSince(date).setIfUnmodifiedSince(date).setDate(date).build();
assertEquals(request.getParams().getParameter(CoreConnectionPNames.CONNECTION_TIMEOUT), 10);
assertEquals(request.getParams().getParameter(CoreProtocolPNames.HTTP_ELEMENT_CHARSET), "UTF-8");
assertEquals(request.getLastHeader(HttpHeaders.DATE).getValue(), "Thu, 01 Jan 1970 00:00:00 GMT");
assertEquals(request.getLastHeader(HttpHeaders.IF_MODIFIED_SINCE).getValue(), "Thu, 01 Jan 1970 00:00:00 GMT");
assertEquals(request.getLastHeader(HttpHeaders.IF_UNMODIFIED_SINCE).getValue(), "Thu, 01 Jan 1970 00:00:00 GMT");
request = Get("http://www.google.com").setDateFormat(new SimpleDateFormat("yyyy")).setDate(date).build();
assertEquals(request.getLastHeader(HttpHeaders.DATE).getValue(), "1970");
request = Get("http://127.0.0.1").setHeaders(new Header[] { new BasicHeader("a", "b"), new BasicHeader("a", "c") }).build();
assertEquals(request.getHeaders("a").length, 2);
}
@Test(timeOut = 5000)
public void withClosure()
{
HttpUriRequest request = Get("http://127.0.0.1").decorate(new Closure<HttpRequestBase>()
{
@Override
public void on(HttpRequestBase value)
{
value.addHeader("custom", "custom");
}
}).build();
assertEquals(request.getLastHeader("custom").getValue(), "custom");
}
}