summaryrefslogtreecommitdiff
path: root/test/rabbit_confirms_SUITE.erl
blob: 331c3ca7c3cffd94c49eb69e04dfcb9609429e62 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
-module(rabbit_confirms_SUITE).

-compile(export_all).

-export([
         ]).

-include_lib("common_test/include/ct.hrl").
-include_lib("eunit/include/eunit.hrl").

%%%===================================================================
%%% Common Test callbacks
%%%===================================================================

all() ->
    [
     {group, tests}
    ].


all_tests() ->
    [
     confirm,
     reject,
     remove_queue
    ].

groups() ->
    [
     {tests, [], all_tests()}
    ].

init_per_suite(Config) ->
    Config.

end_per_suite(_Config) ->
    ok.

init_per_group(_Group, Config) ->
    Config.

end_per_group(_Group, _Config) ->
    ok.

init_per_testcase(_TestCase, Config) ->
    Config.

end_per_testcase(_TestCase, _Config) ->
    ok.

%%%===================================================================
%%% Test cases
%%%===================================================================

confirm(_Config) ->
    XName = rabbit_misc:r(<<"/">>, exchange, <<"X">>),
    QName = rabbit_misc:r(<<"/">>, queue, <<"Q">>),
    QName2 = rabbit_misc:r(<<"/">>, queue, <<"Q2">>),
    U0 = rabbit_confirms:init(),
    ?assertEqual(0, rabbit_confirms:size(U0)),
    ?assertEqual(undefined, rabbit_confirms:smallest(U0)),
    ?assertEqual(true, rabbit_confirms:is_empty(U0)),

    U1 = rabbit_confirms:insert(1, [QName], XName, U0),
    ?assertEqual(1, rabbit_confirms:size(U1)),
    ?assertEqual(1, rabbit_confirms:smallest(U1)),
    ?assertEqual(false, rabbit_confirms:is_empty(U1)),

    {[{1, XName}], U2} = rabbit_confirms:confirm([1], QName, U1),
    ?assertEqual(0, rabbit_confirms:size(U2)),
    ?assertEqual(undefined, rabbit_confirms:smallest(U2)),
    ?assertEqual(true, rabbit_confirms:is_empty(U2)),

    U3 = rabbit_confirms:insert(2, [QName], XName, U1),
    ?assertEqual(2, rabbit_confirms:size(U3)),
    ?assertEqual(1, rabbit_confirms:smallest(U3)),
    ?assertEqual(false, rabbit_confirms:is_empty(U3)),

    {[{1, XName}], U4} = rabbit_confirms:confirm([1], QName, U3),
    ?assertEqual(1, rabbit_confirms:size(U4)),
    ?assertEqual(2, rabbit_confirms:smallest(U4)),
    ?assertEqual(false, rabbit_confirms:is_empty(U4)),

    U5 = rabbit_confirms:insert(2, [QName, QName2], XName, U1),
    ?assertEqual(2, rabbit_confirms:size(U5)),
    ?assertEqual(1, rabbit_confirms:smallest(U5)),
    ?assertEqual(false, rabbit_confirms:is_empty(U5)),

    {[{1, XName}], U6} = rabbit_confirms:confirm([1, 2], QName, U5),
    ?assertEqual(2, rabbit_confirms:smallest(U6)),

    {[{2, XName}], U7} = rabbit_confirms:confirm([2], QName2, U6),
    ?assertEqual(0, rabbit_confirms:size(U7)),
    ?assertEqual(undefined, rabbit_confirms:smallest(U7)),


    U8 = rabbit_confirms:insert(2, [QName], XName, U1),
    {[{1, XName}, {2, XName}], _U9} = rabbit_confirms:confirm([1, 2], QName, U8),
    ok.


reject(_Config) ->
    XName = rabbit_misc:r(<<"/">>, exchange, <<"X">>),
    QName = rabbit_misc:r(<<"/">>, queue, <<"Q">>),
    QName2 = rabbit_misc:r(<<"/">>, queue, <<"Q2">>),
    U0 = rabbit_confirms:init(),
    ?assertEqual(0, rabbit_confirms:size(U0)),
    ?assertEqual(undefined, rabbit_confirms:smallest(U0)),
    ?assertEqual(true, rabbit_confirms:is_empty(U0)),

    U1 = rabbit_confirms:insert(1, [QName], XName, U0),

    {ok, {1, XName}, U2} = rabbit_confirms:reject(1, U1),
    {error, not_found} = rabbit_confirms:reject(1, U2),
    ?assertEqual(0, rabbit_confirms:size(U2)),
    ?assertEqual(undefined, rabbit_confirms:smallest(U2)),

    U3 = rabbit_confirms:insert(2, [QName, QName2], XName, U1),

    {ok, {1, XName}, U4} = rabbit_confirms:reject(1, U3),
    {error, not_found} = rabbit_confirms:reject(1, U4),
    ?assertEqual(1, rabbit_confirms:size(U4)),
    ?assertEqual(2, rabbit_confirms:smallest(U4)),

    {ok, {2, XName}, U5} = rabbit_confirms:reject(2, U3),
    {error, not_found} = rabbit_confirms:reject(2, U5),
    ?assertEqual(1, rabbit_confirms:size(U5)),
    ?assertEqual(1, rabbit_confirms:smallest(U5)),

    ok.

remove_queue(_Config) ->
    XName = rabbit_misc:r(<<"/">>, exchange, <<"X">>),
    QName = rabbit_misc:r(<<"/">>, queue, <<"Q">>),
    QName2 = rabbit_misc:r(<<"/">>, queue, <<"Q2">>),
    U0 = rabbit_confirms:init(),

    U1 = rabbit_confirms:insert(1, [QName, QName2], XName, U0),
    U2 = rabbit_confirms:insert(2, [QName2], XName, U1),
    {[{2, XName}], U3} = rabbit_confirms:remove_queue(QName2, U2),
    ?assertEqual(1, rabbit_confirms:size(U3)),
    ?assertEqual(1, rabbit_confirms:smallest(U3)),
    {[{1, XName}], U4} = rabbit_confirms:remove_queue(QName, U3),
    ?assertEqual(0, rabbit_confirms:size(U4)),
    ?assertEqual(undefined, rabbit_confirms:smallest(U4)),

    U5 = rabbit_confirms:insert(1, [QName], XName, U0),
    U6 = rabbit_confirms:insert(2, [QName], XName, U5),
    {[{1, XName}, {2, XName}], _U} = rabbit_confirms:remove_queue(QName, U6),

    ok.


%% Utility