/test/distfs_tests.erl
Erlang | 170 lines | 124 code | 16 blank | 30 comment | 0 complexity | 3e3c6c6f2660a6c5a95184a97d48ceef MD5 | raw file
- %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
- %%% Tests for DistFS. %%%
- %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
- %%% Copyright © 2014 Mariano Street. %%%
- %%% %%%
- %%% This file is part of DistFS. %%%
- %%% %%%
- %%% DistFS is free software: you can redistribute it and/or modify %%%
- %%% it under the terms of the GNU General Public License as published by %%%
- %%% the Free Software Foundation, either version 3 of the License, or %%%
- %%% (at your option) any later version. %%%
- %%% %%%
- %%% DistFS is distributed in the hope that it will be useful, %%%
- %%% but WITHOUT ANY WARRANTY; without even the implied warranty of %%%
- %%% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the %%%
- %%% GNU General Public License for more details. %%%
- %%% %%%
- %%% You should have received a copy of the GNU General Public License %%%
- %%% along with DistFS. If not, see <http://www.gnu.org/licenses/>. %%%
- %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
- -module(distfs_tests).
- -include_lib("eunit/include/eunit.hrl").
- %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
- %% Types %%
- %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
- % Private.
- -type setup(S) :: {setup, fun(() -> S), fun((S) -> _), fun((S) -> _)}.
- -type my_test() :: {string(), setup(port())}.
- %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
- %% API functions %%
- %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
- -spec empty_listing_test_() -> my_test().
- empty_listing_test_() ->
- {"There is no file at the beginning.",
- setup(fun (Socket) ->
- ?_assertEqual({ok, []}, distfs_client:list(Socket))
- end)}.
- -spec creation_test_() -> [my_test()].
- creation_test_() ->
- {"The listing returns only the names of the files created.",
- setup(fun (Socket) ->
- Res0 = distfs_client:create(Socket, "foo"),
- Res1 = distfs_client:create(Socket, "bar"),
- Res2 = distfs_client:list(Socket),
- [?_assertEqual(ok, Res0),
- ?_assertEqual(ok, Res1),
- ?_assertMatch({ok, _}, Res2),
- ?_assertEqual(["bar", "foo"],
- lists:sort(element(2, Res2)))]
- end)}.
- -spec deletion_test_() -> [my_test()].
- deletion_test_() ->
- [{"Created (and not deleted) files can be deleted.",
- setup(fun (Socket) ->
- distfs_client:create(Socket, "foo"),
- distfs_client:create(Socket, "bar"),
- Res0 = distfs_client:delete(Socket, "foo"),
- Res1 = distfs_client:list(Socket),
- [?_assertEqual(ok, Res0),
- ?_assertEqual({ok, ["bar"]}, Res1)]
- end)},
- {"Non-created files cannot be deleted.",
- setup(fun (Socket) ->
- Res = distfs_client:delete(Socket, "foo"),
- ?_assertMatch({error, _}, Res)
- end)},
- {"Already deleted files cannot be deleted.",
- setup(fun (Socket) ->
- distfs_client:create(Socket, "foo"),
- distfs_client:delete(Socket, "foo"),
- Res = distfs_client:delete(Socket, "foo"),
- ?_assertMatch({error, _}, Res)
- end)}].
- -spec opening_test_() -> [my_test()].
- opening_test_() ->
- [{"Created files can be opened.",
- setup(fun (Socket) ->
- distfs_client:create(Socket, "foo"),
- Res = distfs_client:open(Socket, "foo"),
- ?_assertMatch({ok, _}, Res)
- end)},
- {"Non-created files cannot be opened.",
- setup(fun (Socket) ->
- Res = distfs_client:open(Socket, "foo"),
- ?_assertMatch({error, _}, Res)
- end)},
- {"Deleted files cannot be opened.",
- setup(fun (Socket) ->
- distfs_client:create(Socket, "foo"),
- distfs_client:delete(Socket, "foo"),
- Res = distfs_client:open(Socket, "foo"),
- ?_assertMatch({error, _}, Res)
- end)}].
- -spec closing_test_() -> [my_test()].
- closing_test_() ->
- [{"Opened files can be closed.",
- setup(fun (Socket) ->
- distfs_client:create(Socket, "foo"),
- {ok, N} = distfs_client:open(Socket, "foo"),
- Res = distfs_client:close(Socket, N),
- ?_assertEqual(ok, Res)
- end)},
- {"Non-opened files cannot be closed.",
- setup(fun (Socket) ->
- Res = distfs_client:close(Socket, 0),
- ?_assertMatch({error, _}, Res)
- end)},
- {"Closed files cannot be closed.",
- setup(fun (Socket) ->
- distfs_client:create(Socket, "foo"),
- {ok, N} = distfs_client:open(Socket, "foo"),
- distfs_client:close(Socket, N),
- Res = distfs_client:close(Socket, N),
- ?_assertMatch({error, _}, Res)
- end)}].
- -spec writing_test_() -> [my_test()].
- writing_test_() ->
- [{"Opened files can be written to.",
- setup(fun (Socket) ->
- distfs_client:create(Socket, "foo"),
- {ok, N} = distfs_client:open(Socket, "foo"),
- Res = distfs_client:write(Socket, N, "hello"),
- ?_assertEqual({ok, 5}, Res)
- end)},
- {"Non-opened files cannot be written to.",
- setup(fun (Socket) ->
- Res = distfs_client:write(Socket, 0, "hello"),
- ?_assertMatch({error, _}, Res)
- end)},
- {"Closed files cannot be written to.",
- setup(fun (Socket) ->
- distfs_client:create(Socket, "foo"),
- {ok, N} = distfs_client:open(Socket, "foo"),
- distfs_client:close(Socket, N),
- Res = distfs_client:write(Socket, N, "hello"),
- ?_assertMatch({error, _}, Res)
- end)}].
- -spec reading_test_() -> [my_test()].
- reading_test_() ->
- [].
- %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
- %% Private function %%
- %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
- -spec setup(fun((S) -> _)) -> setup(S).
- setup(Instantiator) ->
- {setup,
- fun () ->
- error_logger:tty(false),
- application:start(distfs),
- {ok, Socket} = distfs_client:connect(localhost),
- Socket
- end,
- fun (_) -> application:stop(distfs) end,
- Instantiator}.