Examples

## 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.3.4
Copyright © 1991-2008 Ericsson AB