package de.twenty11.skysail.server.ext.osgimonitor.test; import static org.hamcrest.MatcherAssert.assertThat; import static org.hamcrest.Matchers.is; import static org.junit.Assert.assertEquals; import static org.mockito.Mockito.mock; import java.io.IOException; import java.util.List; import org.codehaus.jackson.JsonGenerationException; import org.codehaus.jackson.map.JsonMappingException; import org.codehaus.jackson.map.ObjectMapper; import org.codehaus.jackson.type.TypeReference; import org.mockito.Mockito; import org.osgi.service.component.ComponentContext; import org.restlet.Application; import org.restlet.Request; import org.restlet.Restlet; import org.restlet.data.ChallengeResponse; import org.restlet.data.ChallengeScheme; import org.restlet.data.MediaType; import org.restlet.data.Method; import org.restlet.representation.Representation; import org.restlet.security.MapVerifier; import de.twenty11.skysail.common.ext.osgimonitor.domain.BundleDescriptor; import de.twenty11.skysail.common.responses.SkysailResponse; import de.twenty11.skysail.server.ext.osgimonitor.OsgiMonitorViewerApplication; import de.twenty11.skysail.server.ext.osgimonitor.domain.ServiceDescriptor; public class BaseTests { protected OsgiMonitorViewerApplication osgiMonitorViewerApplication; protected Restlet inboundRoot; protected ObjectMapper mapper = new ObjectMapper(); private ComponentContext componentContextMock = mock(ComponentContext.class); protected OsgiMonitorViewerApplication setUpRestletApplication() throws ClassNotFoundException { MapVerifier secretVerifier = new MapVerifier(); secretVerifier.getLocalSecrets().put("testadmin", "testpassword".toCharArray()); // OsgiMonitorComponent osgiMonitorComponent = new OsgiMonitorComponent(componentContextMock, secretVerifier); osgiMonitorViewerApplication = new OsgiMonitorViewerApplication(); // osgiMonitorViewerApplication.setVerifier(secretVerifier); OsgiMonitorViewerApplication spy = Mockito.spy(osgiMonitorViewerApplication); Application.setCurrent(spy); inboundRoot = osgiMonitorViewerApplication.getInboundRoot(); // addMappings(); return spy; } // private void addMappings() throws ClassNotFoundException { // Map<String, String> urlMapping = new OsgiMonitorUrlMapper().provideUrlMapping(); // for (Map.Entry<String, String> mapping : urlMapping.entrySet()) { // @SuppressWarnings("unchecked") // Class<? extends ServerResource> resourceClass = (Class<? extends ServerResource>) Class.forName(mapping // .getValue()); // osgiMonitorViewerApplication.attachToRouter("" + mapping.getKey(), resourceClass); // } // } protected List<BundleDescriptor> getBundles() throws Exception { org.restlet.Response response = get("bundles"); assertDefaults(response); Representation entity = response.getEntity(); SkysailResponse<List<BundleDescriptor>> skysailResponse = mapper.readValue(entity.getText(), new TypeReference<SkysailResponse<List<BundleDescriptor>>>() { }); assertThat(skysailResponse.getMessage(), skysailResponse.getSuccess(), is(true)); return skysailResponse.getData(); } protected List<ServiceDescriptor> getServices() throws Exception { org.restlet.Response response = get("services"); assertDefaults(response); Representation entity = response.getEntity(); SkysailResponse<List<ServiceDescriptor>> skysailResponse = mapper.readValue(entity.getText(), new TypeReference<SkysailResponse<List<ServiceDescriptor>>>() { }); assertThat(skysailResponse.getMessage(), skysailResponse.getSuccess(), is(true)); return skysailResponse.getData(); } private org.restlet.Response delete(String uri) { Request request = new Request(Method.DELETE, "/" + uri); return handleRequest(request); } protected org.restlet.Response get(String uri) { Request request = new Request(Method.GET, "/" + uri); return handleRequest(request); } protected org.restlet.Response put(String uri) { Request request = new Request(Method.PUT, "/" + uri); return handleRequest(request); } protected org.restlet.Response post(String uri, Object connection) throws JsonGenerationException, JsonMappingException, IOException { Request request = new Request(Method.POST, "/" + uri); String writeValueAsString = mapper.writeValueAsString(connection); request.setEntity(writeValueAsString, MediaType.APPLICATION_JSON); return handleRequest(request); } protected org.restlet.Response handleRequest(Request request) { ChallengeResponse authentication = new ChallengeResponse(ChallengeScheme.HTTP_BASIC, "testadmin", "testpassword"); request.setChallengeResponse(authentication); org.restlet.Response response = new org.restlet.Response(request); inboundRoot.handle(request, response); return response; } protected void assertDefaults(org.restlet.Response response) { assertEquals(200, response.getStatus().getCode()); assertThat(response.isEntityAvailable(), is(true)); // assertThat(response.getEntity().getMediaType(), is(MediaType.APPLICATION_JSON)); } }