Package v7db.files.milton

Source Code of v7db.files.milton.MiltonServletTest

/**
* Copyright (c) 2012, Thilo Planz. All rights reserved.
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as
* published by the Free Software Foundation, either version 3 of the
* License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package v7db.files.milton;

import java.io.ByteArrayInputStream;
import java.io.IOException;
import java.util.Date;
import java.util.Hashtable;
import java.util.Properties;

import javax.servlet.http.HttpServletResponse;

import jmockmongo.MockMongoTestCaseSupport;

import org.bson.BasicBSONObject;
import org.bson.types.ObjectId;
import org.xml.sax.SAXException;

import v7db.files.UnitTestSupport;

import com.meterware.httpunit.GetMethodWebRequest;
import com.meterware.httpunit.HttpNotFoundException;
import com.meterware.httpunit.PutMethodWebRequest;
import com.meterware.httpunit.WebRequest;
import com.meterware.httpunit.WebResponse;
import com.meterware.servletunit.ServletRunner;
import com.meterware.servletunit.ServletUnitClient;

public class MiltonServletTest extends MockMongoTestCaseSupport {

  private ServletRunner sr;

  @Override
  protected void setUp() throws Exception {
    super.setUp();
    Properties props = UnitTestSupport.getDefaultProperties();
    props.put("auth.provider", "demo");
    props.put("acl.provider", "global");
    props.put("acl.read", "admins");
    props.put("acl.write", "admins");
    UnitTestSupport.initConfiguration(props);

    sr = new ServletRunner();
    Hashtable<String, String> initParams = new Hashtable<String, String>();
    initParams.put("webdav.endpoint", "webdav");
    initParams.put("resource.factory.factory.class",
        ResourceFactoryFactory.class.getName());
    sr.registerServlet("myServlet/*", MiltonServlet.class.getName(),
        initParams);

  }

  public void testSimpleScenario() throws IOException, SAXException {
    ServletUnitClient sc = sr.newClient();
    sc.setAuthentication("V7Files", "admin", "admin");
    {
      WebRequest request = new MkColWebRequest("http://test/myServlet/1");
      WebResponse resp = sc.getResponse(request);
      assertEquals(HttpServletResponse.SC_CREATED, resp.getResponseCode());
    }

    {
      WebRequest request = new PutMethodWebRequest(
          "http://test/myServlet/1/test.txt",
          new ByteArrayInputStream("testPUT".getBytes()),
          "text/plain");
      WebResponse resp = sc.getResponse(request);
      assertEquals(HttpServletResponse.SC_CREATED, resp.getResponseCode());
    }
    assertExists(sc, "http://test/myServlet/1/test.txt");

    {
      WebRequest request = new MoveWebRequest("http://test/myServlet/1",
          "/myServlet/2");
      WebResponse resp = sc.getResponse(request);
      assertEquals(HttpServletResponse.SC_CREATED, resp.getResponseCode());
    }

  }

  public void testGET() throws IOException, SAXException {
    ServletUnitClient sc = sr.newClient();
    sc.setAuthentication("V7Files", "admin", "admin");

    {
      WebRequest request = new GetMethodWebRequest(
          "http://test/myServlet/a.txt");
      try {
        sc.getResponse(request);
        fail("file not found => 404");
      } catch (HttpNotFoundException e) {
      }
    }

    prepareMockData("test.v7files.files", new BasicBSONObject("_id",
        new ObjectId()).append("filename", "a.txt").append("parent",
        "webdav").append("created_at", new Date()).append("in",
        "abcd".getBytes()));

    assertGET(sc, "http://test/myServlet/a.txt", "abcd");

    {
      WebRequest request = new GetMethodWebRequest(
          "http://test/myServlet/a.txt");
      WebResponse resp = sc.getResponse(request);
      String eTag = resp.getHeaderField("Etag");
      request.setHeaderField("If-None-Match", eTag);
      resp = sc.getResponse(request);
      assertEquals(HttpServletResponse.SC_NOT_MODIFIED, resp
          .getResponseCode());
      assertEquals("", resp.getText());
    }

  }

  private void assertExists(ServletUnitClient sc, String url)
      throws IOException, SAXException {
    WebRequest request = new GetMethodWebRequest(url);
    WebResponse resp = sc.getResponse(request);
    assertEquals(HttpServletResponse.SC_OK, resp.getResponseCode());
  }

  private void assertGET(ServletUnitClient sc, String url, String contents)
      throws IOException, SAXException {
    WebRequest request = new GetMethodWebRequest(url);
    WebResponse resp = sc.getResponse(request);
    assertEquals(contents, resp.getText());
    assertEquals(HttpServletResponse.SC_OK, resp.getResponseCode());
  }

  public void testCOPYFile() throws IOException, SAXException {
    ServletUnitClient sc = sr.newClient();
    sc.setAuthentication("V7Files", "admin", "admin");

    prepareMockData("test.v7files.files", new BasicBSONObject("_id",
        new ObjectId()).append("filename", "a.txt").append("parent",
        "webdav").append("in", "abcd".getBytes()));

    {
      WebRequest request = new CopyWebRequest(
          "http://test/myServlet/a.txt", "/myServlet/b.txt");
      WebResponse resp = sc.getResponse(request);
      assertEquals(HttpServletResponse.SC_CREATED, resp.getResponseCode());
    }
    assertGET(sc, "http://test/myServlet/a.txt", "abcd");
    assertGET(sc, "http://test/myServlet/b.txt", "abcd");

  }

  public void testCOPYFolder() throws IOException, SAXException {
    ServletUnitClient sc = sr.newClient();
    sc.setAuthentication("V7Files", "admin", "admin");

    {
      WebRequest request = new MkColWebRequest("http://test/myServlet/1");
      WebResponse resp = sc.getResponse(request);
      assertEquals(HttpServletResponse.SC_CREATED, resp.getResponseCode());
    }

    {
      WebRequest request = new PutMethodWebRequest(
          "http://test/myServlet/1/test.txt",
          new ByteArrayInputStream("testPUT".getBytes()),
          "text/plain");
      WebResponse resp = sc.getResponse(request);
      assertEquals(HttpServletResponse.SC_CREATED, resp.getResponseCode());
    }

    {
      WebRequest request = new CopyWebRequest("http://test/myServlet/1",
          "/myServlet/2");
      WebResponse resp = sc.getResponse(request);
      assertEquals(HttpServletResponse.SC_CREATED, resp.getResponseCode());
    }
    assertExists(sc, "http://test/myServlet/2/test.txt");
  }

}
TOP

Related Classes of v7db.files.milton.MiltonServletTest

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.