PageRenderTime 47ms CodeModel.GetById 23ms RepoModel.GetById 0ms app.codeStats 1ms

/test/distfs_tests.erl

https://gitlab.com/mstreet_fceia/distfs
Erlang | 170 lines | 124 code | 16 blank | 30 comment | 0 complexity | 3e3c6c6f2660a6c5a95184a97d48ceef MD5 | raw file
  1. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  2. %%% Tests for DistFS. %%%
  3. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  4. %%% Copyright © 2014 Mariano Street. %%%
  5. %%% %%%
  6. %%% This file is part of DistFS. %%%
  7. %%% %%%
  8. %%% DistFS is free software: you can redistribute it and/or modify %%%
  9. %%% it under the terms of the GNU General Public License as published by %%%
  10. %%% the Free Software Foundation, either version 3 of the License, or %%%
  11. %%% (at your option) any later version. %%%
  12. %%% %%%
  13. %%% DistFS is distributed in the hope that it will be useful, %%%
  14. %%% but WITHOUT ANY WARRANTY; without even the implied warranty of %%%
  15. %%% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the %%%
  16. %%% GNU General Public License for more details. %%%
  17. %%% %%%
  18. %%% You should have received a copy of the GNU General Public License %%%
  19. %%% along with DistFS. If not, see <http://www.gnu.org/licenses/>. %%%
  20. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  21. -module(distfs_tests).
  22. -include_lib("eunit/include/eunit.hrl").
  23. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  24. %% Types %%
  25. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  26. % Private.
  27. -type setup(S) :: {setup, fun(() -> S), fun((S) -> _), fun((S) -> _)}.
  28. -type my_test() :: {string(), setup(port())}.
  29. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  30. %% API functions %%
  31. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  32. -spec empty_listing_test_() -> my_test().
  33. empty_listing_test_() ->
  34. {"There is no file at the beginning.",
  35. setup(fun (Socket) ->
  36. ?_assertEqual({ok, []}, distfs_client:list(Socket))
  37. end)}.
  38. -spec creation_test_() -> [my_test()].
  39. creation_test_() ->
  40. {"The listing returns only the names of the files created.",
  41. setup(fun (Socket) ->
  42. Res0 = distfs_client:create(Socket, "foo"),
  43. Res1 = distfs_client:create(Socket, "bar"),
  44. Res2 = distfs_client:list(Socket),
  45. [?_assertEqual(ok, Res0),
  46. ?_assertEqual(ok, Res1),
  47. ?_assertMatch({ok, _}, Res2),
  48. ?_assertEqual(["bar", "foo"],
  49. lists:sort(element(2, Res2)))]
  50. end)}.
  51. -spec deletion_test_() -> [my_test()].
  52. deletion_test_() ->
  53. [{"Created (and not deleted) files can be deleted.",
  54. setup(fun (Socket) ->
  55. distfs_client:create(Socket, "foo"),
  56. distfs_client:create(Socket, "bar"),
  57. Res0 = distfs_client:delete(Socket, "foo"),
  58. Res1 = distfs_client:list(Socket),
  59. [?_assertEqual(ok, Res0),
  60. ?_assertEqual({ok, ["bar"]}, Res1)]
  61. end)},
  62. {"Non-created files cannot be deleted.",
  63. setup(fun (Socket) ->
  64. Res = distfs_client:delete(Socket, "foo"),
  65. ?_assertMatch({error, _}, Res)
  66. end)},
  67. {"Already deleted files cannot be deleted.",
  68. setup(fun (Socket) ->
  69. distfs_client:create(Socket, "foo"),
  70. distfs_client:delete(Socket, "foo"),
  71. Res = distfs_client:delete(Socket, "foo"),
  72. ?_assertMatch({error, _}, Res)
  73. end)}].
  74. -spec opening_test_() -> [my_test()].
  75. opening_test_() ->
  76. [{"Created files can be opened.",
  77. setup(fun (Socket) ->
  78. distfs_client:create(Socket, "foo"),
  79. Res = distfs_client:open(Socket, "foo"),
  80. ?_assertMatch({ok, _}, Res)
  81. end)},
  82. {"Non-created files cannot be opened.",
  83. setup(fun (Socket) ->
  84. Res = distfs_client:open(Socket, "foo"),
  85. ?_assertMatch({error, _}, Res)
  86. end)},
  87. {"Deleted files cannot be opened.",
  88. setup(fun (Socket) ->
  89. distfs_client:create(Socket, "foo"),
  90. distfs_client:delete(Socket, "foo"),
  91. Res = distfs_client:open(Socket, "foo"),
  92. ?_assertMatch({error, _}, Res)
  93. end)}].
  94. -spec closing_test_() -> [my_test()].
  95. closing_test_() ->
  96. [{"Opened files can be closed.",
  97. setup(fun (Socket) ->
  98. distfs_client:create(Socket, "foo"),
  99. {ok, N} = distfs_client:open(Socket, "foo"),
  100. Res = distfs_client:close(Socket, N),
  101. ?_assertEqual(ok, Res)
  102. end)},
  103. {"Non-opened files cannot be closed.",
  104. setup(fun (Socket) ->
  105. Res = distfs_client:close(Socket, 0),
  106. ?_assertMatch({error, _}, Res)
  107. end)},
  108. {"Closed files cannot be closed.",
  109. setup(fun (Socket) ->
  110. distfs_client:create(Socket, "foo"),
  111. {ok, N} = distfs_client:open(Socket, "foo"),
  112. distfs_client:close(Socket, N),
  113. Res = distfs_client:close(Socket, N),
  114. ?_assertMatch({error, _}, Res)
  115. end)}].
  116. -spec writing_test_() -> [my_test()].
  117. writing_test_() ->
  118. [{"Opened files can be written to.",
  119. setup(fun (Socket) ->
  120. distfs_client:create(Socket, "foo"),
  121. {ok, N} = distfs_client:open(Socket, "foo"),
  122. Res = distfs_client:write(Socket, N, "hello"),
  123. ?_assertEqual({ok, 5}, Res)
  124. end)},
  125. {"Non-opened files cannot be written to.",
  126. setup(fun (Socket) ->
  127. Res = distfs_client:write(Socket, 0, "hello"),
  128. ?_assertMatch({error, _}, Res)
  129. end)},
  130. {"Closed files cannot be written to.",
  131. setup(fun (Socket) ->
  132. distfs_client:create(Socket, "foo"),
  133. {ok, N} = distfs_client:open(Socket, "foo"),
  134. distfs_client:close(Socket, N),
  135. Res = distfs_client:write(Socket, N, "hello"),
  136. ?_assertMatch({error, _}, Res)
  137. end)}].
  138. -spec reading_test_() -> [my_test()].
  139. reading_test_() ->
  140. [].
  141. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  142. %% Private function %%
  143. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  144. -spec setup(fun((S) -> _)) -> setup(S).
  145. setup(Instantiator) ->
  146. {setup,
  147. fun () ->
  148. error_logger:tty(false),
  149. application:start(distfs),
  150. {ok, Socket} = distfs_client:connect(localhost),
  151. Socket
  152. end,
  153. fun (_) -> application:stop(distfs) end,
  154. Instantiator}.