/*
* Copyright 2015 Red Hat, Inc. and/or its affiliates.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
*
* 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.kie.server.client;
import org.hamcrest.BaseMatcher;
import org.hamcrest.Description;
import org.junit.Rule;
import org.junit.Test;
import org.junit.rules.ExpectedException;
import org.kie.server.api.exception.KieServicesException;
import org.kie.server.api.exception.KieServicesHttpException;
import org.kie.server.api.marshalling.MarshallingException;
import org.kie.server.api.marshalling.MarshallingFormat;
import org.kie.server.client.impl.KieServicesClientImpl;
import static com.github.tomakehurst.wiremock.client.WireMock.aResponse;
import static com.github.tomakehurst.wiremock.client.WireMock.equalTo;
import static com.github.tomakehurst.wiremock.client.WireMock.get;
import static com.github.tomakehurst.wiremock.client.WireMock.stubFor;
import static com.github.tomakehurst.wiremock.client.WireMock.urlEqualTo;
import static org.hamcrest.Matchers.hasProperty;
import static org.hamcrest.Matchers.is;
import static org.hamcrest.Matchers.endsWith;
public class KieServicesClientErrorHandlingTest extends BaseKieServicesClientTest {
private static BaseMatcher<MarshallingException> serializationExceptionMatcher =
new BaseMatcher<MarshallingException>() {
@Override
public boolean matches(Object o) {
return o instanceof MarshallingException;
}
@Override
public void describeTo(Description description) {
description.appendText( "SerializationException" );
}
};
@Rule
public ExpectedException expectedEx = ExpectedException.none();
@Test
public void testError404Handling() {
expectedEx.expect( KieServicesHttpException.class );
expectedEx.expectMessage( "Error code: 404" );
expectedEx.expect(hasProperty("httpCode", is(404)));
expectedEx.expect(hasProperty("url", endsWith("/containers")));
expectedEx.expect(hasProperty("responseBody", is("Resource not found!")));
stubFor(get(urlEqualTo("/"))
.withHeader("Accept", equalTo("application/xml"))
.willReturn(aResponse()
.withStatus(200)
.withHeader("Content-Type", "application/xml")
.withBody("<response type=\"SUCCESS\" msg=\"Kie Server info\">\n" +
" <kie-server-info>\n" +
" <version>1.2.3</version>\n" +
" </kie-server-info>\n" +
"</response>")));
stubFor(
get( urlEqualTo( "/containers" ) )
.withHeader( "Accept", equalTo( "application/xml" ) )
.willReturn(
aResponse()
.withStatus( 404 )
.withBody( "Resource not found!" )
) );
KieServicesClient client = new KieServicesClientImpl( config );
client.listContainers();
}
@Test
public void testError401Handling() {
expectedEx.expect( KieServicesHttpException.class );
expectedEx.expectMessage( "Error code: 401" );
expectedEx.expect(hasProperty("httpCode", is(401)));
expectedEx.expect(hasProperty("url", endsWith("/containers")));
expectedEx.expect(hasProperty("responseBody", is("Unauthorized!")));
stubFor(get(urlEqualTo("/"))
.withHeader("Accept", equalTo("application/xml"))
.willReturn(aResponse()
.withStatus(200)
.withHeader("Content-Type", "application/xml")
.withBody("<response type=\"SUCCESS\" msg=\"Kie Server info\">\n" +
" <kie-server-info>\n" +
" <version>1.2.3</version>\n" +
" </kie-server-info>\n" +
"</response>")));
stubFor(
get( urlEqualTo( "/containers" ) )
.withHeader( "Accept", equalTo( "application/xml" ) )
.willReturn(
aResponse()
.withStatus( 401 )
.withBody( "Unauthorized!" )
) );
KieServicesClient client = new KieServicesClientImpl( config );
client.listContainers();
}
@Test
public void testError500Handling() {
expectedEx.expect( KieServicesHttpException.class );
expectedEx.expectMessage( "Error code: 500");
expectedEx.expect(hasProperty("httpCode", is(500)));
expectedEx.expect(hasProperty("url", endsWith("/containers")));
expectedEx.expect(hasProperty("responseBody", is("Internal server error!")));
stubFor(get(urlEqualTo("/"))
.withHeader("Accept", equalTo("application/xml"))
.willReturn(aResponse()
.withStatus(200)
.withHeader("Content-Type", "application/xml")
.withBody("<response type=\"SUCCESS\" msg=\"Kie Server info\">\n" +
" <kie-server-info>\n" +
" <version>1.2.3</version>\n" +
" </kie-server-info>\n" +
"</response>")));
stubFor(get(urlEqualTo("/containers"))
.withHeader("Accept", equalTo("application/xml"))
.willReturn(aResponse()
.withStatus(500)
.withBody("Internal server error!")
));
KieServicesClient client = new KieServicesClientImpl(config);
client.listContainers();
}
@Test
public void testXmlDeserializationErrorHandling() {
expectedEx.expect(KieServicesException.class);
expectedEx.expectCause(serializationExceptionMatcher);
stubFor(get(urlEqualTo("/"))
.withHeader("Accept", equalTo("application/xml"))
.willReturn(aResponse()
.withStatus(200)
.withHeader("Content-Type", "application/xml")
.withBody("<response type=\"SUCCESS\" msg=\"Kie Server info\">\n" +
" <kie-server-info>\n" +
" <version>1.2.3</version>\n" +
" </kie-server-info>\n" +
"</response>")));
stubFor(get(urlEqualTo("/containers"))
.withHeader("Accept", equalTo("application/xml"))
.willReturn(aResponse()
.withStatus(200)
.withHeader("Content-Type", "application/xml")
.withBody("Some gibberish that can't be parsed by client!")
));
KieServicesClient client = new KieServicesClientImpl(config);
client.listContainers();
}
@Test
public void testJsonDeserializationErrorHandling() {
expectedEx.expect(KieServicesException.class);
expectedEx.expectCause(serializationExceptionMatcher);
stubFor(get(urlEqualTo("/"))
.withHeader("Accept", equalTo("application/json"))
.willReturn(aResponse()
.withStatus(200)
.withHeader("Content-Type", "application/json")
.withBody("{\n" +
" \"type\" : \"SUCCESS\",\n" +
" \"msg\" : \"Kie Server info\",\n" +
" \"result\" : {\n" +
" \"kie-server-info\" : {\n" +
" \"version\" : \"1.2.3\",\n" +
" }\n" +
" }\n" +
"}")));
stubFor(get(urlEqualTo("/containers"))
.withHeader("Accept", equalTo("application/json"))
.willReturn(aResponse()
.withStatus(200)
.withHeader("Content-Type", "application/json")
.withBody("Some gibberish that can't be parsed by client!")
));
KieServicesConfiguration configJSON = config.clone();
configJSON.setMarshallingFormat( MarshallingFormat.JSON );
KieServicesClient client = new KieServicesClientImpl(configJSON);
client.listContainers();
}
}