package org.jolokia.client.request;
/*
* Copyright 2009-2013 Roland Huss
*
* 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.
*/
import java.util.*;
import javax.management.MalformedObjectNameException;
import org.jolokia.client.BasicAuthenticator;
import org.jolokia.client.J4pClient;
import org.jolokia.client.exception.*;
import org.json.simple.JSONArray;
import org.json.simple.JSONObject;
import org.testng.annotations.Test;
import static org.testng.Assert.assertNull;
import static org.testng.Assert.fail;
import static org.testng.AssertJUnit.assertEquals;
import static org.testng.AssertJUnit.assertTrue;
/**
* @author roland
* @since Jun 9, 2010
*/
public class BulkRequestIntegrationTest extends AbstractJ4pIntegrationTest {
@Test
public void simpleBulkRequest() throws MalformedObjectNameException, J4pException {
J4pRequest req1 = new J4pExecRequest(itSetup.getOperationMBean(),"fetchNumber","inc");
J4pVersionRequest req2 = new J4pVersionRequest();
List resp = j4pClient.execute(req1,req2);
assertEquals(resp.size(),2);
assertTrue(resp.get(0) instanceof J4pExecResponse);
assertTrue(resp.get(1) instanceof J4pVersionResponse);
List<J4pResponse<J4pRequest>> typeSaveResp = j4pClient.execute(req1,req2);
for (J4pResponse<?> r : typeSaveResp) {
assertTrue(r instanceof J4pExecResponse || r instanceof J4pVersionResponse);
}
}
@Test
public void simpleBulkRequestWithOptions() throws MalformedObjectNameException, J4pException {
J4pRequest req1 = new J4pReadRequest(itSetup.getAttributeMBean(),"ComplexNestedValue");
J4pVersionRequest req2 = new J4pVersionRequest();
Map<J4pQueryParameter,String> params = new HashMap<J4pQueryParameter, String>();
params.put(J4pQueryParameter.MAX_DEPTH,"2");
List resps = j4pClient.execute(Arrays.asList(req1,req2),params);
assertEquals(resps.size(),2);
J4pReadResponse resp = (J4pReadResponse) resps.get(0);
JSONObject value = resp.getValue();
JSONArray inner = (JSONArray) value.get("Blub");
assertTrue(inner.get(1) instanceof String);
}
@Test
public void bulkRequestWithErrors() throws MalformedObjectNameException, J4pException {
List<J4pReadRequest> requests = createBulkRequests();
try {
j4pClient.execute(requests);
fail();
} catch (J4pBulkRemoteException e) {
List results = e.getResults();
assertEquals(3, results.size());
results = e.getResponses();
assertEquals(2, results.size());
assertTrue(results.get(0) instanceof J4pReadResponse);
assertEquals("Bla", ((J4pReadResponse) results.get(0)).<String>getValue());
assertTrue(results.get(1) instanceof J4pReadResponse);
results = e.getRemoteExceptions();
assertEquals(1, results.size());
assertTrue(results.get(0) instanceof J4pRemoteException);
J4pRemoteException exp = (J4pRemoteException) results.get(0);
assertEquals(404, exp.getStatus());
assertTrue(exp.getMessage().contains("InstanceNotFoundException"));
assertTrue(exp.getRemoteStackTrace().contains("InstanceNotFoundException"));
assertEquals(exp.getRequest(), requests.get(1));
}
}
private List<J4pReadRequest> createBulkRequests() throws MalformedObjectNameException {
J4pReadRequest req1 = new J4pReadRequest(itSetup.getAttributeMBean(),"ComplexNestedValue");
req1.setPath("Blub/0");
J4pReadRequest req2 = new J4pReadRequest("bla:type=blue","Sucks");
J4pReadRequest req3 = new J4pReadRequest("java.lang:type=Memory","HeapMemoryUsage");
return Arrays.asList(req1,req2,req3);
}
@Test
public void optionalBulkRequestsWithExtractorAsArgument() throws MalformedObjectNameException, J4pException {
List<J4pReadResponse> resp = j4pClient.execute(createBulkRequests(),null, ValidatingResponseExtractor.OPTIONAL);
verifyOptionalBulkResponses(resp);
}
@Test
public void optionalBulkRequestsWithExtractorAsDefault() throws MalformedObjectNameException, J4pException {
J4pClient c = J4pClient.url(j4pUrl)
.user("jolokia")
.password("jolokia")
.authenticator(new BasicAuthenticator().preemptive())
.responseExtractor(ValidatingResponseExtractor.OPTIONAL)
.build();
List<J4pReadResponse> resp = c.execute(createBulkRequests());
verifyOptionalBulkResponses(resp);
}
private void verifyOptionalBulkResponses(List<J4pReadResponse> resp) {
assertEquals(3, resp.size());
assertTrue(resp.get(0) instanceof J4pReadResponse);
assertEquals("Bla", ((J4pReadResponse) resp.get(0)).<String>getValue());
assertNull(resp.get(1));
assertTrue(resp.get(2) instanceof J4pReadResponse);
}
}