/* * Copyright (c) 2012 EMC Corporation * All Rights Reserved */ package com.emc.storageos.api.service; import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import java.io.OutputStream; import javax.ws.rs.WebApplicationException; import javax.ws.rs.core.MediaType; import javax.ws.rs.core.Response; import javax.ws.rs.core.Response.Status; import javax.ws.rs.core.StreamingOutput; import javax.xml.bind.JAXBContext; import javax.xml.bind.JAXBException; import javax.xml.bind.Unmarshaller; import org.junit.Assert; import org.codehaus.jackson.JsonParseException; import org.codehaus.jackson.map.AnnotationIntrospector; import org.codehaus.jackson.map.ObjectMapper; import org.codehaus.jackson.xc.JaxbAnnotationIntrospector; import org.junit.Test; import com.emc.storageos.api.service.impl.resource.MonitoringService; import com.emc.storageos.api.service.impl.resource.utils.EventRetriever; import com.emc.storageos.api.service.utils.DummyEventRetriever; import com.emc.storageos.api.service.utils.DummyHttpHeaders; import com.emc.storageos.api.service.utils.Events; public class MonitoringServiceTest { /** * test feed output files */ private static final String XmlTestOutputFile = "testEventRetriver.xml"; private static final String JsonTestOutputFile = "testEventRetriver.json"; @Test public void testEventRetriverXML() throws WebApplicationException, IOException, JAXBException { deleteIfExists(XmlTestOutputFile); EventRetriever eventRetriever = new DummyEventRetriever(); MonitoringService eventResource = new MonitoringService(); eventResource.setEventRetriever(eventRetriever); DummyHttpHeaders header = new DummyHttpHeaders( MediaType.APPLICATION_XML_TYPE); Response r = eventResource.getEvents("2012-05-05T00:00", header); Assert.assertNotNull(r); Assert.assertEquals(Status.OK.getStatusCode(), r.getStatus()); Assert.assertTrue(r.getEntity() instanceof StreamingOutput); StreamingOutput so = (StreamingOutput) r.getEntity(); File of = new File(XmlTestOutputFile); OutputStream os = new FileOutputStream(of); so.write(os); os.close(); JAXBContext context = null; Unmarshaller unmarshaller = null; context = JAXBContext.newInstance(Events.class); unmarshaller = context.createUnmarshaller(); Object o = unmarshaller.unmarshal(new File(XmlTestOutputFile)); Assert.assertTrue(o instanceof Events); Events events = (Events) o; // expected number of events unmarshaled Assert.assertEquals(100, events.events.size()); } @Test public void testEventRetriverJSON() throws WebApplicationException, IOException, JsonParseException { deleteIfExists(JsonTestOutputFile); EventRetriever eventRetriever = new DummyEventRetriever(); MonitoringService eventResource = new MonitoringService(); eventResource.setEventRetriever(eventRetriever); DummyHttpHeaders header = new DummyHttpHeaders( MediaType.APPLICATION_JSON_TYPE); Response r = eventResource.getEvents("2012-05-05T00", header); Assert.assertNotNull(r); Assert.assertEquals(Status.OK.getStatusCode(), r.getStatus()); Assert.assertTrue(r.getEntity() instanceof StreamingOutput); StreamingOutput so = (StreamingOutput) r.getEntity(); File of = new File(JsonTestOutputFile); OutputStream os = new FileOutputStream(of); try { so.write(os); } finally { os.close(); } ObjectMapper mapper = null; mapper = new ObjectMapper(); AnnotationIntrospector introspector = new JaxbAnnotationIntrospector(); mapper.getDeserializationConfig().withAnnotationIntrospector( introspector); Events events = mapper.readValue(new File(JsonTestOutputFile), Events.class); Assert.assertEquals(100, events.events.size()); } @Test public void testEventRetriverNonSupportedType() { EventRetriever eventRetriever = new DummyEventRetriever(); MonitoringService eventResource = new MonitoringService(); eventResource.setEventRetriever(eventRetriever); DummyHttpHeaders header = new DummyHttpHeaders(MediaType.TEXT_PLAIN_TYPE); Response r = eventResource .getEvents("2012-05-05T00", header); Assert.assertNotNull(r); Assert.assertEquals(Status.OK.getStatusCode(), r.getStatus(), r.getStatus()); } private void deleteIfExists(String fname) { File f = new File(fname); if (f.exists()) { f.delete(); } } }