Package org.drools.guvnor.server.files

Source Code of org.drools.guvnor.server.files.RestAPIServletTest

/**
* Copyright 2010 JBoss Inc
*
* Licensed under the Apache 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://www.apache.org/licenses/LICENSE-2.0
*
* 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.drools.guvnor.server.files;

import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.util.HashMap;
import java.util.Map;

import javax.servlet.http.HttpServletResponse;
import javax.jcr.Session;

import junit.framework.TestCase;

import org.apache.util.Base64;
import org.drools.guvnor.server.util.TestEnvironmentSessionHelper;
import org.drools.repository.AssetItem;
import org.drools.repository.AssetItemIterator;
import org.drools.repository.PackageItem;
import org.drools.repository.RulesRepository;

public class RestAPIServletTest extends TestCase {


  public void testUnpack() {
    String b42 = "BASIC " + new String( Base64.encode("user:pass".getBytes()) );
    RestAPIServlet serv = new RestAPIServlet();
    String[] d = serv.unpack(b42);
    assertEquals("user", d[0]);
    assertEquals("pass", d[1]);

  }

  public void testAllowUser() {
    RestAPIServlet serv = new RestAPIServlet();
    assertFalse(serv.allowUser(null));
    assertFalse(serv.allowUser(""));
    assertFalse(serv.allowUser("bgoo"));
    String b42 = "BASIC " + new String( Base64.encode("user:pass".getBytes()) );
    assertFalse(serv.allowUser(b42));
    b42 = "BASIC " + new String( Base64.encode("test:password".getBytes()) );
    assertTrue(serv.allowUser(b42));
  }



  public void testGet() throws Exception {
    RulesRepository repo = new RulesRepository( TestEnvironmentSessionHelper.getSession( true ) );
    PackageItem pkg = repo.createPackage("testGetRestServlet", "");
    AssetItem ass = pkg.addAsset("asset1", "");
    ass.updateFormat("drl");
    ass.updateContent("some content");
    ass.checkin("hey ho");



    RestAPIServlet serv = new RestAPIServlet();
    assertNotNull(serv.getAPI());
    Map<String, String> headers = new HashMap<String, String>() {
      {
        put("Irrelevant", "garbage");
      }
    };
    String uri = "http://loser/api/packages/testGetRestServlet/asset1.drl";
    MockHTTPRequest req = new MockHTTPRequest(uri, headers);

    MockHTTPResponse res = new MockHTTPResponse(new ByteArrayOutputStream());

    //try with no password
    serv.doGet(req, res);
    assertEquals(HttpServletResponse.SC_UNAUTHORIZED, res.errorCode);
    assertTrue(res.headers.containsKey("WWW-Authenticate"));


    //try again with bad password
    headers = new HashMap<String, String>() {
      {
        put("Authorization", new String(Base64.encode("foo:bar".getBytes())));
      }
    };
    req = new MockHTTPRequest(uri, headers);
    res = new MockHTTPResponse(new ByteArrayOutputStream());
    serv.doGet(req, res);
    assertEquals(HttpServletResponse.SC_UNAUTHORIZED, res.errorCode);
    assertTrue(res.headers.containsKey("WWW-Authenticate"));

    //finally, making it work
    headers = new HashMap<String, String>() {
      {
        put("Authorization", "BASIC " + new String(Base64.encode("test:password".getBytes())));
      }
    };

    ByteArrayOutputStream out = new ByteArrayOutputStream();
    req = new MockHTTPRequest(uri, headers);
    res = new MockHTTPResponse(out);
    serv.doGet(req, res);

    assertEquals(0, res.errorCode);
    String data = out.toString();
    assertEquals("some content", data);

    assertEquals("application/x-download", res.contentType);
    assertEquals(true, res.containsHeader("Content-Disposition"));

    //now try getting some version listings
    out = new ByteArrayOutputStream();
    req = new MockHTTPRequest(uri, headers);
    req.queryString = "version=all";
    res = new MockHTTPResponse(out);
    serv.doGet(req, res);

    assertEquals(0, res.errorCode);
    data = out.toString();
    assertFalse("some content".equals(data));
    assertNotNull(data);

  }

  public void testPost() throws Exception {
    RulesRepository repo = new RulesRepository( TestEnvironmentSessionHelper.getSession() );
    PackageItem pkg = repo.createPackage("testPostRestServlet", "");

    HashMap<String, String> headers = new HashMap<String, String>() {
      {
        put("Authorization", "BASIC " + new String(Base64.encode("test:password".getBytes())));
      }
    };

    ByteArrayInputStream in = new ByteArrayInputStream("some new content".getBytes());
    RestAPIServlet serv = new RestAPIServlet();
    MockHTTPRequest req = new MockHTTPRequest("http://foo/api/packages/testPostRestServlet/asset1.drl", headers, in);

    MockHTTPResponse res = new MockHTTPResponse(null);
    serv.doPost(req, res);

    assertEquals("OK", res.stringWriter.toString());

    AssetItemIterator it = pkg.listAssetsByFormat(new String[] {"drl"});
    AssetItem ass = it.next();
    assertEquals("asset1", ass.getName());
    assertEquals("drl", ass.getFormat());
    assertFalse(ass.isBinary());
    assertEquals("some new content", ass.getContent());


    in = new ByteArrayInputStream("more content".getBytes());
    req = new MockHTTPRequest("http://foo/api/packages/testPostRestServlet/asset2.xls", headers, in);
    res = new MockHTTPResponse(null);
    serv.doPost(req, res);
    assertEquals("OK", res.stringWriter.toString());

    AssetItem ass2 = pkg.loadAsset("asset2");
    assertEquals("xls", ass2.getFormat());
    assertTrue(ass2.isBinary());


    String out = new String(ass2.getBinaryContentAsBytes());
    assertEquals("more content", out);

        repo.logout();

  }

  public void testPut() throws Exception {

    RulesRepository repo = new RulesRepository( TestEnvironmentSessionHelper.getSession() );
    PackageItem pkg = repo.createPackage("testPutRestServlet", "");
    AssetItem ass = pkg.addAsset("asset1", "abc");
    ass.updateFormat("drl");
    ass.checkin("");
    long ver = ass.getVersionNumber();

    HashMap<String, String> headers = new HashMap<String, String>() {
      {
        put("Authorization", "BASIC " + new String(Base64.encode("test:password".getBytes())));
        put("Checkin-Comment", "hey ho");
      }
    };

    ByteArrayInputStream in = new ByteArrayInputStream("some new content".getBytes());
    RestAPIServlet serv = new RestAPIServlet();
    MockHTTPRequest req = new MockHTTPRequest("http://foo/api/packages/testPutRestServlet/asset1.drl", headers, in);


    MockHTTPResponse res = new MockHTTPResponse(null);
    serv.doPut(req, res);

    assertEquals("OK", res.stringWriter.toString());

    ass = pkg.loadAsset("asset1");
    assertEquals("some new content", ass.getContent());
    assertEquals(ver + 1, ass.getVersionNumber());
    assertEquals("hey ho", ass.getCheckinComment());

        repo.logout();
  }


  public void testDelete() throws Exception {
    RulesRepository repo = new RulesRepository( TestEnvironmentSessionHelper.getSession() );
    PackageItem pkg = repo.createPackage("testDeleteRestServlet", "");
    AssetItem ass = pkg.addAsset("asset1", "abc");
    ass.updateFormat("drl");
    ass.checkin("");

    HashMap<String, String> headers = new HashMap<String, String>() {
      {
        put("Authorization", "BASIC " + new String(Base64.encode("test:password".getBytes())));
      }
    };

    ByteArrayInputStream in = new ByteArrayInputStream("some new content".getBytes());
    RestAPIServlet serv = new RestAPIServlet();
    MockHTTPRequest req = new MockHTTPRequest("http://foo/api/packages/testDeleteRestServlet/asset1.drl", headers, in);

    MockHTTPResponse res = new MockHTTPResponse(null);
    serv.doDelete(req, res);

    assertEquals("OK", res.stringWriter.toString());



    pkg = repo.loadPackage("testDeleteRestServlet");
    assertFalse(pkg.listAssetsByFormat(new String[] {"drl"}).hasNext());

        repo.logout();

  }
}
TOP

Related Classes of org.drools.guvnor.server.files.RestAPIServletTest

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.