Fosi Fossil Service
Small teams. Open source. Built on Fossil.

CaaS / Lamina

Unified Management for Fossil Repositories

Public | Owner: CaaS | Default branch: trunk | Last update: 2026-10-25 00:41

Artifact 2ed3e0d4bbfd8d928304626ae062823f7d97c8876b77c58d6da9154ae0d6fb25:


-module(nova_session_prop_tests).
-include_lib("proper/include/proper.hrl").
-include_lib("eunit/include/eunit.hrl").

%%====================================================================
%% Properties
%%====================================================================

%% generate_session_id always returns {ok, Binary}
prop_generate_session_id_returns_ok_binary() ->
    ?FORALL(_, integer(),
            begin
                {ok, Id} = nova_session:generate_session_id(),
                is_binary(Id)
            end).

%% Session IDs are always valid base64
prop_session_id_is_valid_base64() ->
    ?FORALL(_, integer(),
            begin
                {ok, Id} = nova_session:generate_session_id(),
                %% base64:decode will crash if not valid base64
                Decoded = base64:decode(Id),
                is_binary(Decoded) andalso byte_size(Decoded) =:= 32
            end).

%%====================================================================
%% EUnit tests
%%====================================================================

%% Two calls never produce the same ID (statistical property)
session_id_uniqueness_test() ->
    Ids = [begin {ok, Id} = nova_session:generate_session_id(), Id end
           || _ <- lists:seq(1, 1000)],
    UniqueIds = lists:usort(Ids),
    ?assertEqual(length(Ids), length(UniqueIds)).

%%====================================================================
%% EUnit wrappers for PropEr
%%====================================================================

proper_test_() ->
    Opts = [{numtests, 100}, {to_file, user}],
    [
     {"generate_session_id returns {ok, binary()}",
      ?_assert(proper:quickcheck(prop_generate_session_id_returns_ok_binary(), Opts))},
     {"session ID is valid base64 of 32 bytes",
      ?_assert(proper:quickcheck(prop_session_id_is_valid_base64(), Opts))}
    ].

Clone

You can clone this repository with the following command:

fossil clone https://fosi.dev/CaaS/Lamina

Contribute

The best way to contribute is through e-mail. See the project documentation for more details.