Package com.pugh.sockso.web

Source Code of com.pugh.sockso.web.ResponseStream

/*
* HttpResponseTest.java
*
* Created on Jul 23, 2007, 11:38:09 PM
*
* Tests the HttpResponse class
*
*/

package com.pugh.sockso.web;

import com.pugh.sockso.Constants;
import com.pugh.sockso.StringProperties;
import com.pugh.sockso.db.Database;
import com.pugh.sockso.tests.SocksoTestCase;
import com.pugh.sockso.tests.TestDatabase;

import org.jamon.Renderer;

import java.io.IOException;
import java.io.OutputStream;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.util.Date;
import java.util.List;

import static org.easymock.EasyMock.*;

public class HttpResponseTest extends SocksoTestCase {
   
    private ResponseStream out = null;
    private HttpResponse res;
    private StringProperties p;

    @Override
    public void setUp() {
        p = new StringProperties();
        out = new ResponseStream();
        res = new HttpResponse( out, null, p, null, null, false );
    }
   
    @Override
    public void tearDown() {
        out = null;
    }
   
    public void testConstructor() {
        assertNotNull( res );
    }
   
    public void testAddHeader() {
        res.addHeader( "foo", "bar" );
    }
   
    public void testSendHeaders() {
        res.addHeader( "foo", "bar" );
        res.addCookie( new HttpResponseCookie("foo","bar") );
        res.sendHeaders();
        assertTrue( out.getResponseSize() > 0 );
        final String data = out.getData();
        assertTrue( data.contains("foo:") );
        assertTrue( data.contains("Set-Cookie") );
    }

    public void testSendHeadersNoCookies() {
        res.addCookie( new HttpResponseCookie("foo","bar") );
        res.setCookiesEnabled( false );
        res.sendHeaders();
        final String data = out.getData();
        assertFalse( data.contains("Set-Cookie") );
    }
   
    public void testGetOutputStream() {
        assertNotNull( res.getOutputStream() );
    }

    public void testShowHtml() throws IOException {
        Renderer tpl = createMock( Renderer.class );
        res.showHtml( tpl );
        assertTrue( out.getResponseSize() > 0 );
    }

    public void testShowJson() throws IOException {
        Renderer tpl = createMock( Renderer.class );
        res.showJson( tpl );
        assertTrue( out.getResponseSize() > 0 );
    }

    public void testShowText() throws IOException {
        Renderer tpl = createMock( Renderer.class );
        res.showText( tpl );
        assertTrue( out.getResponseSize() > 0 );
    }

    public void testShowRss() throws IOException {
        Renderer tpl = createMock( Renderer.class );
        res.showRss( tpl );
        assertTrue( out.getResponseSize() > 0 );
    }

    public void testShowTemplateWithContentType() throws IOException {
        Renderer tpl = createMock( Renderer.class );
        res.showTemplate( tpl, "text/plain" );
        assertTrue( out.getResponseSize() > 0 );
    }

    public void testShowTemplate() throws IOException {
        Renderer tpl = getRenderer();
        res.showTemplate( tpl );
        // TODO: not sure how to test this...
        //assertTrue( out.getResponseSize() > 0 );
    }

    private Renderer getRenderer() {
       
        return new Renderer() {
            public String asString() { return ""; }
            public void renderTo( java.io.Writer r ) throws IOException {
                r.write('c');
            }
        };
       
    }
   
    public void testAddCookie() throws IOException {
       
        int count = res.cookies.size();
        HttpResponseCookie cookie = new HttpResponseCookie( "foo", "bar", new Date(), "/" );
       
        res.addCookie( cookie );
        assertEquals( res.cookies.size(), count + 1 );
       
        // add same cookie again, should overwrite old cookie
        res.addCookie( cookie );
        assertEquals( res.cookies.size(), count + 1 );
       
    }
   
    public void testSetStatus() {
        assertEquals( 200, res.status );
        res.setStatus( 300 );
        assertEquals( 300, res.status );
    }
   
    public void testRedirect() throws IOException {
       
        res.redirect( "/" );
       
        assertEquals( 302, res.status );
       
    }
   
    public void testResponseSent() throws IOException {

        assertEquals( false, res.responseSent() );
        res.showHtml( getRenderer() );
        assertEquals( true, res.responseSent() );

        HttpResponse res2 = new HttpResponse( out, null, p, null, null, false );
        assertEquals( false, res2.responseSent() );
        res2.redirect( "/" );
        assertEquals( true, res2.responseSent() );

    }

    public void testGetStatusText() {

        assertEquals( res.getStatusText(200), "Ok" );
        assertEquals( res.getStatusText(202), "Accepted" );

    }

    public void testGetRecentUsers() throws Exception {
       
        final User user = new User( 123, "asdasd" );
       
        final ResultSet rs = createMock( ResultSet.class );
        expect( rs.next() ).andReturn( true ).times( 1 );
        expect( rs.getInt("id") ).andReturn( user.getId() ).times( 1 );
        expect( rs.getString("name") ).andReturn( user.getName() ).times( 1 );
        expect( rs.next() ).andReturn( false ).times( 1 );
        rs.close();
        replay( rs );
       
        final PreparedStatement st = createNiceMock( PreparedStatement.class );
        expect( st.executeQuery() ).andReturn( rs ).times( 1 );
        st.close();
        replay( st );
       
        final Database db = createMock( Database.class );
        expect( db.prepare((String)anyObject()) ).andReturn( st ).times( 1 );
        replay( db );
       
        final HttpResponse res = new HttpResponse( null, db, null, null, null, false );
        final List<User> users = res.getRecentUsers();
       
        assertNotNull( users );
        assertEquals( 1, users.size() );
        assertEquals( user.getId(), users.get(0).getId() );
        assertEquals( user.getName(), users.get(0).getName() );
       
        verify( db );
        verify( st );
        verify( rs );
       
    }
   
    public void testGetUsersQuery() throws Exception {
        final Database db = new TestDatabase();
        final HttpResponse res = new HttpResponse( null, db, p, null, null, false );
        res.getRecentUsers();
    }

    public void testSendingStringTextViaTheResponse() throws IOException {
        StringOutputStream stream = new StringOutputStream();
        HttpResponse res = new HttpResponse( stream, null, p, null, null, false );
        res.showText( "SOME TEXT" );
        assertContains( stream.toString(), "SOME TEXT" );
    }
  
    public void testCrossDomainHeaderNotSentByDefault() {
        res.sendHeaders();
        assertNotContains( out.getData(), "Access-Control-Allow-Origin" );
    }

    public void testCrossDomainHeaderSentWhenEnabled() {
        p.set( Constants.WWW_CORS, "*" );
        res.sendHeaders();
        assertContains( out.getData(), "Access-Control-Allow-Origin: *" );
    }

    public void testCrossDomainHeaderCanBeLimitedToSpecificDomains() {
        p.set( Constants.WWW_CORS, "http://www.google.com http://www.fb.com" );
        res.sendHeaders();
        assertContains( out.getData(), "Access-Control-Allow-Origin: http://www.google.com http://www.fb.com" );
    }

}

class ResponseStream extends OutputStream {

    private StringBuffer sb;
    private int responseSize = 0;

    public ResponseStream() {
        sb = new StringBuffer();
    }

    public void write( int i ) {
        sb.append( (char) i );
        responseSize++;
    }
   
    public int getResponseSize() {
        return responseSize;
    }

    public String getData() {
        return sb.toString();
    }
   
}
TOP

Related Classes of com.pugh.sockso.web.ResponseStream

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.