/**
* Copyright (c) 2009-2011 VMware, Inc. All Rights Reserved.
*
* 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 com.springsource.insight.plugin.jaxrs;
import java.util.Date;
import java.util.List;
import javax.ws.rs.GET;
import javax.ws.rs.PathParam;
import org.junit.Test;
import com.springsource.insight.collection.test.OperationCollectionAspectTestSupport;
import com.springsource.insight.intercept.application.ApplicationName;
import com.springsource.insight.intercept.operation.Operation;
import com.springsource.insight.intercept.operation.OperationList;
import com.springsource.insight.intercept.operation.OperationMap;
import com.springsource.insight.intercept.topology.ExternalResourceDescriptor;
import com.springsource.insight.intercept.topology.ExternalResourceType;
import com.springsource.insight.intercept.topology.MD5NameGenerator;
import com.springsource.insight.intercept.trace.Frame;
import com.springsource.insight.intercept.trace.SimpleFrameBuilder;
import com.springsource.insight.intercept.trace.Trace;
import com.springsource.insight.intercept.trace.TraceId;
/**
*/
public class JaxrsOperationCollectionAspectTest extends OperationCollectionAspectTestSupport {
private final RestServiceInstance _testService;
public JaxrsOperationCollectionAspectTest() {
_testService = new RestServiceInstance();
}
@Test
public void testRootPath() {
runTestRestService(_testService, RestServiceDefinitions.ROOT_PATH);
}
@Test
public void testYesterdayPath() {
runTestRestService(_testService, RestServiceDefinitions.YESTERDAY_PATH);
}
@Test
public void testTomorrowPath() {
runTestRestService(_testService, RestServiceDefinitions.TOMORROW_PATH);
}
private Operation runTestRestService(final RestServiceInstance testService, final String pathDefinition) {
testService.initialize();
try {
final Date expDate, actDate;
final long now = System.currentTimeMillis();
if (RestServiceDefinitions.ROOT_PATH.equals(pathDefinition)) {
expDate = testService.getCurrentDate();
actDate = new Date(now);
} else if (RestServiceDefinitions.YESTERDAY_PATH.equals(pathDefinition)) {
expDate = testService.getYesterdayDate(now, true);
actDate = new Date(now - 86400000L);
} else if (RestServiceDefinitions.TOMORROW_PATH.equals(pathDefinition)) {
expDate = testService.getTomorrowDate(now, false);
actDate = new Date(now + 86400000L);
} else {
fail("Unknown path definition: " + pathDefinition);
return null;
}
final Operation op = getLastEntered();
assertNotNull("No operation extracted", op);
assertEquals("Mismatched operation type(s)", JaxrsDefinitions.TYPE, op.getType());
assertEquals("Mismatched retrieval method", GET.class.getSimpleName(), op.get("method", String.class));
if (op.isFinalizable()) {
op.finalizeConstruction();
}
final long valsDiff = Math.abs(expDate.getTime() - actDate.getTime());
assertTrue("Mismatched call return values", valsDiff < 5000L);
final String expTemplate = RestServiceDefinitions.ROOT_PATH.equals(pathDefinition)
? RestServiceDefinitions.ROOT_PATH
: RestServiceDefinitions.ROOT_PATH + "/" + pathDefinition;
final String actTemplate = op.get("requestTemplate", String.class);
assertEquals("Mismatched request template", expTemplate, actTemplate);
if (!RestServiceDefinitions.ROOT_PATH.equals(pathDefinition)) {
final OperationList opList = op.get("pathParams", OperationList.class);
assertNotNull("Missing path parameters list", opList);
assertEquals("Unexpected number of path parameters", 1, opList.size());
final OperationMap opMap = opList.get(0, OperationMap.class);
assertNotNull("Missing path parameters map", opMap);
assertEquals("Unexpected number of mapped path parameters", 3, opMap.size());
final String paramName = opMap.get("name", String.class);
assertEquals("Mismatched path param name", RestServiceDefinitions.NOW_PARAM_NAME, paramName);
final Long paramValue = opMap.get("value", Long.class);
assertNotNull("Missing path parameter value", paramValue);
assertEquals("Mismatched path parameter value", now, paramValue.longValue());
final String paramType = opMap.get("type", String.class);
assertEquals("Mismatched path param type", PathParam.class.getSimpleName(), paramType);
final JaxrsParamType enumType = JaxrsParamType.fromTypeName(paramType);
assertEquals("Mismatched path param enum", JaxrsParamType.PATH, enumType);
}
return op;
} finally {
testService.destroy();
}
}
@Override // co-variant return
public JaxrsOperationCollectionAspect getAspect() {
return JaxrsOperationCollectionAspect.aspectOf();
}
}