105 lines
3.9 KiB
Erlang
105 lines
3.9 KiB
Erlang
%% This Source Code Form is subject to the terms of the Mozilla Public
|
|
%% License, v. 2.0. If a copy of the MPL was not distributed with this
|
|
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
|
|
%%
|
|
%% Copyright (c) 2024 Broadcom. All Rights Reserved.
|
|
%% The term “Broadcom” refers to Broadcom Inc. and/or its subsidiaries. All rights reserved.
|
|
%%
|
|
|
|
|
|
-module(rabbit_access_control_SUITE).
|
|
|
|
-compile(export_all).
|
|
|
|
-include_lib("eunit/include/eunit.hrl").
|
|
-include_lib("rabbit_common/include/rabbit.hrl").
|
|
|
|
%%%===================================================================
|
|
%%% Common Test callbacks
|
|
%%%===================================================================
|
|
|
|
|
|
all() ->
|
|
[{group, tests}].
|
|
|
|
%% replicate eunit like test resolution
|
|
all_tests() ->
|
|
[F
|
|
|| {F, _} <- ?MODULE:module_info(functions),
|
|
re:run(atom_to_list(F), "_test$") /= nomatch].
|
|
|
|
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) ->
|
|
meck:unload(),
|
|
ok.
|
|
|
|
expiry_timestamp_test(_) ->
|
|
%% test rabbit_access_control:expiry_timestamp/1 returns the earliest expiry time
|
|
Now = os:system_time(seconds),
|
|
BeforeNow = Now - 60,
|
|
%% returns now
|
|
ok = meck:new(rabbit_expiry_backend, [non_strict]),
|
|
meck:expect(rabbit_expiry_backend, expiry_timestamp, fun (_) -> Now end),
|
|
%% return a bit before now (so the earliest expiry time)
|
|
ok = meck:new(rabbit_earlier_expiry_backend, [non_strict]),
|
|
meck:expect(rabbit_earlier_expiry_backend, expiry_timestamp, fun (_) -> BeforeNow end),
|
|
%% return 'never' (no expiry)
|
|
ok = meck:new(rabbit_no_expiry_backend, [non_strict]),
|
|
meck:expect(rabbit_no_expiry_backend, expiry_timestamp, fun (_) -> never end),
|
|
|
|
%% never expires
|
|
User1 = #user{authz_backends = [{rabbit_no_expiry_backend, unused}]},
|
|
?assertEqual(never, rabbit_access_control:expiry_timestamp(User1)),
|
|
|
|
%% returns the result from the backend that expires
|
|
User2 = #user{authz_backends = [{rabbit_expiry_backend, unused},
|
|
{rabbit_no_expiry_backend, unused}]},
|
|
?assertEqual(Now, rabbit_access_control:expiry_timestamp(User2)),
|
|
|
|
%% returns earliest expiry time
|
|
User3 = #user{authz_backends = [{rabbit_expiry_backend, unused},
|
|
{rabbit_earlier_expiry_backend, unused},
|
|
{rabbit_no_expiry_backend, unused}]},
|
|
?assertEqual(BeforeNow, rabbit_access_control:expiry_timestamp(User3)),
|
|
|
|
%% returns earliest expiry time
|
|
User4 = #user{authz_backends = [{rabbit_earlier_expiry_backend, unused},
|
|
{rabbit_expiry_backend, unused},
|
|
{rabbit_no_expiry_backend, unused}]},
|
|
?assertEqual(BeforeNow, rabbit_access_control:expiry_timestamp(User4)),
|
|
|
|
%% returns earliest expiry time
|
|
User5 = #user{authz_backends = [{rabbit_no_expiry_backend, unused},
|
|
{rabbit_earlier_expiry_backend, unused},
|
|
{rabbit_expiry_backend, unused}]},
|
|
?assertEqual(BeforeNow, rabbit_access_control:expiry_timestamp(User5)),
|
|
|
|
%% returns earliest expiry time
|
|
User6 = #user{authz_backends = [{rabbit_no_expiry_backend, unused},
|
|
{rabbit_expiry_backend, unused},
|
|
{rabbit_earlier_expiry_backend, unused}]},
|
|
?assertEqual(BeforeNow, rabbit_access_control:expiry_timestamp(User6)),
|
|
|
|
%% returns the result from the backend that expires
|
|
User7 = #user{authz_backends = [{rabbit_no_expiry_backend, unused},
|
|
{rabbit_expiry_backend, unused}]},
|
|
?assertEqual(Now, rabbit_access_control:expiry_timestamp(User7)),
|
|
ok.
|