~ubuntu-branches/ubuntu/trusty/erlang/trusty

« back to all changes in this revision

Viewing changes to lib/compiler/test/receive_SUITE.erl

  • Committer: Bazaar Package Importer
  • Author(s): Clint Byrum
  • Date: 2011-05-05 15:48:43 UTC
  • mfrom: (3.5.13 sid)
  • Revision ID: james.westby@ubuntu.com-20110505154843-0om6ekzg6m7ugj27
Tags: 1:14.b.2-dfsg-3ubuntu1
* Merge from debian unstable.  Remaining changes:
  - Drop libwxgtk2.8-dev build dependency. Wx isn't in main, and not
    supposed to.
  - Drop erlang-wx binary.
  - Drop erlang-wx dependency from -megaco, -common-test, and -reltool, they
    do not really need wx. Also drop it from -debugger; the GUI needs wx,
    but it apparently has CLI bits as well, and is also needed by -megaco,
    so let's keep the package for now.
  - debian/patches/series: Do what I meant, and enable build-options.patch
    instead.
* Additional changes:
  - Drop erlang-wx from -et
* Dropped Changes:
  - patches/pcre-crash.patch: CVE-2008-2371: outer level option with
    alternatives caused crash. (Applied Upstream)
  - fix for ssl certificate verification in newSSL: 
    ssl_cacertfile_fix.patch (Applied Upstream)
  - debian/patches/series: Enable native.patch again, to get stripped beam
    files and reduce the package size again. (build-options is what
    actually accomplished this)
  - Remove build-options.patch on advice from upstream and because it caused
    odd build failures.

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
1
%%
2
2
%% %CopyrightBegin%
3
 
%% 
4
 
%% Copyright Ericsson AB 2004-2009. All Rights Reserved.
5
 
%% 
 
3
%%
 
4
%% Copyright Ericsson AB 2004-2011. All Rights Reserved.
 
5
%%
6
6
%% The contents of this file are subject to the Erlang Public License,
7
7
%% Version 1.1, (the "License"); you may not use this file except in
8
8
%% compliance with the License. You should have received a copy of the
9
9
%% Erlang Public License along with this software. If not, it can be
10
10
%% retrieved online at http://www.erlang.org/.
11
 
%% 
 
11
%%
12
12
%% Software distributed under the License is distributed on an "AS IS"
13
13
%% basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
14
14
%% the License for the specific language governing rights and limitations
15
15
%% under the License.
16
 
%% 
 
16
%%
17
17
%% %CopyrightEnd%
18
18
%%
19
19
%%% Purpose : Compiles various modules with tough code
20
20
 
21
21
-module(receive_SUITE).
22
22
 
23
 
-export([all/1,init_per_testcase/2,fin_per_testcase/2,
24
 
         recv/1,coverage/1,otp_7980/1]).
 
23
-export([all/0, suite/0,groups/0,init_per_suite/1, end_per_suite/1, 
 
24
         init_per_group/2,end_per_group/2,
 
25
         init_per_testcase/2,end_per_testcase/2,
 
26
         export/1,recv/1,coverage/1,otp_7980/1,ref_opt/1]).
25
27
 
26
 
-include("test_server.hrl").
 
28
-include_lib("test_server/include/test_server.hrl").
27
29
 
28
30
init_per_testcase(_Case, Config) ->
29
31
    ?line Dog = test_server:timetrap(test_server:minutes(2)),
30
32
    [{watchdog, Dog}|Config].
31
33
 
32
 
fin_per_testcase(_Case, Config) ->
 
34
end_per_testcase(_Case, Config) ->
33
35
    Dog=?config(watchdog, Config),
34
36
    test_server:timetrap_cancel(Dog),
35
37
    ok.
36
38
 
37
 
all(suite) ->
38
 
    test_lib:recompile(?MODULE),
39
 
    [recv,coverage,otp_7980].
 
39
suite() -> [{ct_hooks,[ts_install_cth]}].
 
40
 
 
41
all() -> 
 
42
    test_lib:recompile(receive_SUITE),
 
43
    [recv, coverage, otp_7980, ref_opt, export].
 
44
 
 
45
groups() -> 
 
46
    [].
 
47
 
 
48
init_per_suite(Config) ->
 
49
    Config.
 
50
 
 
51
end_per_suite(_Config) ->
 
52
    ok.
 
53
 
 
54
init_per_group(_GroupName, Config) ->
 
55
    Config.
 
56
 
 
57
end_per_group(_GroupName, Config) ->
 
58
    Config.
40
59
 
41
60
-record(state, {ena = true}).
42
61
 
157
176
                        end,
158
177
                        N - 1
159
178
                end, Count, [1,2,3]).
160
 
    
 
179
 
 
180
ref_opt(Config) when is_list(Config) ->
 
181
    case ?MODULE of
 
182
        receive_SUITE -> ref_opt_1(Config);
 
183
        _ -> {skip,"Enough to run this case once."}
 
184
    end.
 
185
 
 
186
ref_opt_1(Config) ->
 
187
    ?line DataDir = ?config(data_dir, Config),
 
188
    ?line PrivDir = ?config(priv_dir, Config),
 
189
    ?line Sources = filelib:wildcard(filename:join([DataDir,"ref_opt","*.erl"])),
 
190
    ?line test_lib:p_run(fun(Src) ->
 
191
                                 do_ref_opt(Src, PrivDir)
 
192
                         end, Sources),
 
193
    ok.
 
194
 
 
195
do_ref_opt(Source, PrivDir) ->
 
196
    try
 
197
        {ok,Mod} = c:c(Source, [{outdir,PrivDir}]),
 
198
        ok = Mod:Mod(),
 
199
        Base = filename:rootname(filename:basename(Source), ".erl"),
 
200
        BeamFile = filename:join(PrivDir, Base),
 
201
        {beam_file,Mod,_,_,_,Code} = beam_disasm:file(BeamFile),
 
202
        case Base of
 
203
            "no_"++_ ->
 
204
                [] = collect_recv_opt_instrs(Code);
 
205
            "yes_"++_ ->
 
206
                [{recv_mark,{f,L}},{recv_set,{f,L}}] =
 
207
                    collect_recv_opt_instrs(Code)
 
208
        end,
 
209
        ok
 
210
    catch Class:Error ->
 
211
            io:format("~s: ~p ~p\n~p\n",
 
212
                      [Source,Class,Error,erlang:get_stacktrace()]),
 
213
            error
 
214
    end.
 
215
 
 
216
collect_recv_opt_instrs(Code) ->
 
217
    L = [ [I || I <- Is,
 
218
                begin
 
219
                    case I of
 
220
                        {recv_mark,{f,_}} -> true;
 
221
                        {recv_set,{f,_}} -> true;
 
222
                        _ -> false
 
223
                    end
 
224
                end] || {function,_,_,_,Is} <- Code],
 
225
    lists:append(L).
 
226
 
 
227
export(Config) when is_list(Config) ->
 
228
    Ref = make_ref(),
 
229
    ?line self() ! {result,Ref,42},
 
230
    ?line 42 = export_1(Ref),
 
231
    ?line {error,timeout} = export_1(Ref),
 
232
    ok.
 
233
 
 
234
export_1(Reference) ->
 
235
    id(Reference),
 
236
    receive
 
237
        {result,Reference,Result} ->
 
238
            Result
 
239
    after 1 ->
 
240
            Result = {error,timeout}
 
241
    end,
 
242
    %% Result ({x,1}) is used, but not the return value ({x,0})
 
243
    %% of the receive. Used to be incorrectly optimized
 
244
    %% by beam_block.
 
245
    id({build,self()}),
 
246
    Result.
 
247
 
161
248
id(I) -> I.