[Ericsson AB]

5 Examples

5.1 Test suite

The example test suite shows some tests of an HTTP client that uses a proxy.

-module(httpc_proxy_SUITE).

%% Note: This directive should only be used in test suites.
-compile(export_all).

-include("ct.hrl").

-define(URL, "http://www.erlang.org").
-define(PROXY, "www-proxy.ericsson.se").
-define(PROXY_PORT, 8080).

%%--------------------------------------------------------------------
%% Test server callback functions
%%--------------------------------------------------------------------

%%--------------------------------------------------------------------
%% Function: suite() -> DefaultData
%% DefaultData: [tuple()]  
%% Description: Require variables and set default values for the suite
%%--------------------------------------------------------------------
suite() -> [{timetrap,{minutes,1}}].

%%--------------------------------------------------------------------
%% Function: init_per_suite(Config) -> Config
%% Config: [tuple()]
%%   A list of key/value pairs, holding the test case configuration.
%% Description: Initiation before the whole suite
%%
%% Note: This function is free to add any key/value pairs to the Config
%% variable, but should NOT alter/remove any existing entries.
%%--------------------------------------------------------------------
init_per_suite(Config) ->
    application:start(inets),
    http:set_options([{proxy, {{?PROXY, ?PROXY_PORT}, ["localhost"]}}]),
    Config.

%%--------------------------------------------------------------------
%% Function: end_per_suite(Config) -> _
%% Config: [tuple()]
%%   A list of key/value pairs, holding the test case configuration.
%% Description: Cleanup after the whole suite
%%--------------------------------------------------------------------
end_per_suite(_Config) ->
    application:stop(inets),
    ok.
%%--------------------------------------------------------------------
%% Function: all() -> TestCases
%% TestCases: [Case] 
%% Case: atom()
%%   Name of a test case.
%% Description: Returns a list of all test cases in this test suite
%%--------------------------------------------------------------------      
all() -> 
    [options, head, get, trace].

%%-------------------------------------------------------------------------
%% Test cases starts here.
%%-------------------------------------------------------------------------

options() ->
    [{userdata,[{doc,"Perform an OPTIONS request that goes through a proxy."}]}].

options(_Config) ->
    {ok, {{_,200,_}, Headers, _}} = 
        http:request(options, {?URL, []}, [], []),
    case lists:keysearch("allow", 1, Headers) of
        {value, {"allow", _}} ->
            ok;
        _ ->
            ct:fail(http_options_request_failed)
    end.

head() ->
     [{userdata,[{doc,"Perform a HEAD request that goes through a proxy."}]}].

head(_Config) ->
    {ok, {{_,200, _}, [_ | _], []}} =
        http:request(head, {?URL, []}, [], []).
   
get() ->
    [{userdata,[{doc, "Perform a GET request that goes through a proxy."}]}].

get(_Config) ->
    {ok, {{_,200,_}, [_ | _], Body = [_ | _]}} =
        http:request(get, {?URL, []}, [], []),
    check_body(Body).

trace() ->
    [{userdata,[{doc, "Perform a TRACE request that goes through a proxy."}]}].

trace(_Config) ->
    {ok, {{_,200,_}, [_ | _], "TRACE /" ++ _}} =
        http:request(trace, {?URL, []}, [], []),
    ok.

%%--------------------------------------------------------------------
%% Internal functions
%%--------------------------------------------------------------------

check_body(Body) ->
     case string:rstr(Body, "\html>") of
        0 ->
            ct:fail(did_not_receive_whole_body); 
        _ ->
            ok
    end.
  


common_test 1.4.5
Copyright © 1991-2009 Ericsson AB