% Licensed under the Apache License, Version 2.0 (the "License"); you may not
% use this file except in compliance with the License. You may obtain a copy of
% the License at
%
%   http://www.apache.org/licenses/LICENSE-2.0
%
% Unless required by applicable law or agreed to in writing, software
% distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
% WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
% License for the specific language governing permissions and limitations under
% the License.

[
    {kernel, [{error_logger, silent}]},
    {sasl, [{sasl_error_logger, false}]},

    % When fabric is configured with eunit_run=true it will ask erlfdb for a
    % test database. The default behavior for erlfdb in this case is start a
    % new fdbserver process for the test. If you would rather have erlfdb
    % connect to an existing FoundationDB cluster, you can supply the path
    % to the cluster file as a binary string here.
    %
    % NOTE: the unit tests will erase all the data in the cluster!
    %
    % The docker-compose configuration in the .devcontainer activates this
    % application setting using ERL_ZFLAGS in the container environment, so
    % any tests will use the fdbserver running in the fdb container.
    % {erlfdb, [{test_cluster_file, <<"/usr/local/etc/foundationdb/fdb.cluster">>}]},
    {fabric, [{eunit_run, true}]}
].
