@Test
  public void testStreamURL() throws Exception {
    boolean ok = false;
    String url = "http://www.apache.org/dist/lucene/solr/";
    String txt = null;
    try {
      URLConnection connection = new URL(url).openConnection();
      connection.setConnectTimeout(5000);
      connection.setReadTimeout(5000);
      connection.connect();
      txt = IOUtils.toString(connection.getInputStream());
    } catch (Exception ex) {
      // TODO - should it fail/skip?
      fail("this test only works if you have a network connection.");
      return;
    }

    SolrCore core = h.getCore();

    Map<String, String[]> args = new HashMap<String, String[]>();
    args.put(CommonParams.STREAM_URL, new String[] {url});

    // Make sure it got a single stream in and out ok
    List<ContentStream> streams = new ArrayList<ContentStream>();
    parser.buildRequestFrom(core, new MultiMapSolrParams(args), streams);
    assertEquals(1, streams.size());
    assertEquals(txt, IOUtils.toString(streams.get(0).getStream()));
  }
  @Test
  public void testStreamBody() throws Exception {
    String body1 = "AMANAPLANPANAMA";
    String body2 = "qwertasdfgzxcvb";
    String body3 = "1234567890";

    SolrCore core = h.getCore();

    Map<String, String[]> args = new HashMap<String, String[]>();
    args.put(CommonParams.STREAM_BODY, new String[] {body1});

    // Make sure it got a single stream in and out ok
    List<ContentStream> streams = new ArrayList<ContentStream>();
    parser.buildRequestFrom(core, new MultiMapSolrParams(args), streams);
    assertEquals(1, streams.size());
    assertEquals(body1, IOUtils.toString(streams.get(0).getStream()));

    // Now add three and make sure they come out ok
    streams = new ArrayList<ContentStream>();
    args.put(CommonParams.STREAM_BODY, new String[] {body1, body2, body3});
    parser.buildRequestFrom(core, new MultiMapSolrParams(args), streams);
    assertEquals(3, streams.size());
    ArrayList<String> input = new ArrayList<String>();
    ArrayList<String> output = new ArrayList<String>();
    input.add(body1);
    input.add(body2);
    input.add(body3);
    output.add(IOUtils.toString(streams.get(0).getStream()));
    output.add(IOUtils.toString(streams.get(1).getStream()));
    output.add(IOUtils.toString(streams.get(2).getStream()));
    // sort them so the output is consistent
    Collections.sort(input);
    Collections.sort(output);
    assertEquals(input.toString(), output.toString());

    // set the contentType and make sure tat gets set
    String ctype = "text/xxx";
    streams = new ArrayList<ContentStream>();
    args.put(CommonParams.STREAM_CONTENTTYPE, new String[] {ctype});
    parser.buildRequestFrom(core, new MultiMapSolrParams(args), streams);
    for (ContentStream s : streams) {
      assertEquals(ctype, s.getContentType());
    }
  }
  @Test
  public void testUrlParamParsing() {
    String[][] teststr =
        new String[][] {
          {"this is simple", "this%20is%20simple"},
          {"this is simple", "this+is+simple"},
          {"\u00FC", "%C3%BC"}, // lower-case "u" with diaeresis/umlaut
          {"\u0026", "%26"}, // &
          {"\u20AC", "%E2%82%AC"} // euro
        };

    for (String[] tst : teststr) {
      MultiMapSolrParams params = SolrRequestParsers.parseQueryString("val=" + tst[1]);
      assertEquals(tst[0], params.get("val"));
    }
  }