@Test
  public void testFindProtocolHandler() {
    IRTMPEventIOHandler ioHandler =
        new IRTMPEventIOHandler() {
          public Red5Message read() {
            return null;
          }

          public void write(Red5Message msg) {}
        };
    IRTMPEventIOHandler oldHandler = null;
    IURLProtocolHandler handler = null;
    int retval = -1;
    URLProtocolManager manager = null;
    ;
    Red5HandlerFactory factory = null;
    IURLProtocolHandlerFactory oldFactory = null;
    FfmpegIOHandle ffmpegHandle = new FfmpegIOHandle();

    manager = URLProtocolManager.getManager();
    assertTrue("could not find the protocol manager", manager != null);

    factory = new Red5HandlerFactory();
    oldFactory = manager.registerFactory(mRed5URLProtocol, factory);
    assertTrue("no previously registered factory", oldFactory == null);

    ISimpleMediaFile file = new SimpleMediaFile();
    file.setURL(mRed5URLProtocol + ":input");
    oldHandler = factory.registerStream(ioHandler, file);
    assertTrue("a buffer already registered", oldHandler == null);

    String goodUrl = mRed5URLProtocol + ":" + "input";
    String badUrl = mRed5URLProtocol + ":" + "shouldNotExist";

    handler = factory.getHandler(mRed5URLProtocol, goodUrl, IURLProtocolHandler.URL_RDONLY_MODE);
    assertTrue("Did not find handler for registered stream", handler != null);

    handler = factory.getHandler(mRed5URLProtocol, badUrl, IURLProtocolHandler.URL_RDONLY_MODE);
    assertTrue("Found unexpected handler for stream", handler == null);

    // Now, test that we can successfully trick Ffmpeg into opening the
    // file.
    retval = Helper.url_open(ffmpegHandle, goodUrl, IURLProtocolHandler.URL_RDONLY_MODE);
    assertTrue("Ffmpeg could not find the stream: " + goodUrl, retval >= 0);

    retval = Helper.url_open(ffmpegHandle, badUrl, IURLProtocolHandler.URL_RDONLY_MODE);
    assertTrue("Ffmpeg found the unexpected stream: " + badUrl, retval == -1);

    // and make sure we can't open the bad URL.

    // now delete the stream
    oldHandler = factory.deleteStream("input");
    assertTrue("did not get a buffer back when deleting a stream", oldHandler != null);
    assertTrue("did not get readbuffer back", oldHandler == ioHandler);

    handler = factory.getHandler(mRed5URLProtocol, goodUrl, IURLProtocolHandler.URL_RDONLY_MODE);
    assertTrue("found unexpected handler for delete stream", handler == null);
  }