/** * Licensed to The Apereo Foundation under one or more contributor license * agreements. See the NOTICE file distributed with this work for additional * information regarding copyright ownership. * * * The Apereo Foundation licenses this file to you under the Educational * Community 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://opensource.org/licenses/ecl2.txt * * 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.opencastproject.mediapackage.track; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertTrue; import static org.junit.Assert.fail; import org.opencastproject.mediapackage.DefaultMediaPackageSerializerImpl; import org.opencastproject.mediapackage.MediaPackage; import org.opencastproject.mediapackage.MediaPackageElementBuilderFactory; import org.opencastproject.mediapackage.MediaPackageElementParser; import org.opencastproject.mediapackage.MediaPackageElements; import org.opencastproject.mediapackage.Track; import org.opencastproject.mediapackage.elementbuilder.TrackBuilderPlugin; import org.opencastproject.util.IoSupport; import org.apache.commons.io.IOUtils; import org.junit.Before; import org.junit.Ignore; import org.junit.Test; import org.w3c.dom.Document; import java.io.InputStream; import java.io.StringWriter; import java.net.URI; import javax.xml.bind.JAXBContext; import javax.xml.bind.Marshaller; import javax.xml.bind.Unmarshaller; import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.DocumentBuilderFactory; import javax.xml.transform.stream.StreamSource; import junit.framework.Assert; /** * Test case to Test the implementation of {@link TrackImpl}. */ public class TrackTest { /** The track to test */ private TrackImpl track = null; /** HTTP track url */ private URI httpUrl = null; /** RTMP track url */ private URI rtmpUrl = null; /** * @throws java.lang.Exception */ @Before public void setUp() throws Exception { httpUrl = new URI("http://downloads.opencastproject.org/media/movie.m4v"); rtmpUrl = new URI("rtmp://downloads.opencastproject.org/media/movie.m4v"); track = TrackImpl.fromURI(httpUrl); } /** * Test method for {@link org.opencastproject.mediapackage.track.TrackImpl#fromURI(URI)}. */ @Test public void testFromURL() { // track = TrackImpl.fromURL(httpUrl); // track = TrackImpl.fromURL(rtmpUrl); } /** * Test method for {@link org.opencastproject.mediapackage.track.TrackImpl#setDuration(long)}. */ @Test public void testSetDuration() { track.setDuration(null); track.setDuration(new Long(10)); } /** * Test method for {@link org.opencastproject.mediapackage.track.TrackImpl#getDuration()}. */ @Test public void testGetDuration() { assertEquals(null, track.getDuration()); } /** * Test method for * {@link PresenterTrackBuilderPlugin#accept(URI, org.opencastproject.mediapackage.MediaPackageElement.Type, org.opencastproject.mediapackage.MediaPackageElementFlavor)} * * @throws Exception */ @Test public void testPresenterTrackAccept() throws Exception { assertTrue(new TrackBuilderPlugin().accept(new URI("uri"), Track.TYPE, MediaPackageElements.PRESENTER_SOURCE)); } /** * Test method for {@link org.opencastproject.mediapackage.track.TrackImpl#getStreams()}. */ @Test @Ignore public void testGetStreams() { fail("Not yet implemented"); // TODO } /** * Test method for * {@link org.opencastproject.mediapackage.track.TrackImpl#addStream(org.opencastproject.mediapackage.track.AbstractStreamImpl)} * . */ @Test @Ignore public void testAddStream() { fail("Not yet implemented"); // TODO } /** * Test method for {@link org.opencastproject.mediapackage.track.TrackImpl#getDescription()}. */ @Test @Ignore public void testGetDescription() { fail("Not yet implemented"); // TODO } @Test public void testFlavorMarshalling() throws Exception { track.setFlavor(MediaPackageElements.PRESENTATION_SOURCE); JAXBContext context = JAXBContext.newInstance( "org.opencastproject.mediapackage:org.opencastproject.mediapackage.track", MediaPackage.class.getClassLoader()); Marshaller marshaller = context.createMarshaller(); StringWriter writer = new StringWriter(); marshaller.marshal(track, writer); Unmarshaller unmarshaller = context.createUnmarshaller(); InputStream inputStream = IOUtils.toInputStream(writer.toString(), "UTF-8"); try { TrackImpl t1 = unmarshaller.unmarshal(new StreamSource(inputStream), TrackImpl.class).getValue(); Assert.assertEquals(MediaPackageElements.PRESENTATION_SOURCE, t1.getFlavor()); } finally { IoSupport.closeQuietly(inputStream); } // Now again without namespaces String xml = "<oc:track xmlns:oc=\"http://mediapackage.opencastproject.org\" type=\"presentation/source\"><oc:tags/><oc:url>http://downloads.opencastproject.org/media/movie.m4v</oc:url><oc:duration>-1</oc:duration></oc:track>"; inputStream = IOUtils.toInputStream(xml); try { TrackImpl t2 = unmarshaller.unmarshal(new StreamSource(inputStream), TrackImpl.class).getValue(); Assert.assertEquals(MediaPackageElements.PRESENTATION_SOURCE, t2.getFlavor()); Assert.assertEquals("http://downloads.opencastproject.org/media/movie.m4v", t2.getURI().toString()); } finally { IoSupport.closeQuietly(inputStream); } // Get the xml from the object itself String xmlFromTrack = MediaPackageElementParser.getAsXml(track); Assert.assertTrue(xmlFromTrack.contains(MediaPackageElements.PRESENTATION_SOURCE.toString())); // And finally, using the element builder DocumentBuilder docBuilder = DocumentBuilderFactory.newInstance().newDocumentBuilder(); Document doc = docBuilder.parse(IOUtils.toInputStream(xml)); Track t3 = (Track) MediaPackageElementBuilderFactory.newInstance().newElementBuilder() .elementFromManifest(doc.getDocumentElement(), new DefaultMediaPackageSerializerImpl()); Assert.assertEquals(MediaPackageElements.PRESENTATION_SOURCE, t3.getFlavor()); Assert.assertEquals("http://downloads.opencastproject.org/media/movie.m4v", t3.getURI().toURL().toExternalForm()); } }