-
Notifications
You must be signed in to change notification settings - Fork 11
/
leo_mnesia_tests.erl
109 lines (97 loc) · 3.36 KB
/
leo_mnesia_tests.erl
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
%%====================================================================
%%
%% Leo Commons
%%
%% Copyright (c) 2012-2014 Rakuten, Inc.
%%
%% This file is provided to you 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.
%%
%% -------------------------------------------------------------------
%% Mnesia Test
%% @doc
%% @end
%%====================================================================
-module(leo_mnesia_tests).
-author('Yosuke Hara').
-include("leo_commons.hrl").
-include_lib("stdlib/include/qlc.hrl").
-include_lib("eunit/include/eunit.hrl").
%%--------------------------------------------------------------------
%% TEST
%%--------------------------------------------------------------------
-ifdef(EUNIT).
-record(test_table, {id :: integer(),
text :: string()
}).
mnesia_test_() ->
[
fun suite_/0
].
suite_() ->
application:start(mnesia),
_ = mnesia:create_table(test_table,
[{ram_copies, [node()]},
{type, set},
{record_name, test_table},
{attributes, record_info(fields, test_table)},
{user_properties,
[{id, {integer, undefined}, false, undefined, undefined, undefined, integer},
{text, {varchar, undefined}, false, undefined, undefined, undefined, varchar}
]}
]),
%% WRITE
Val0 = #test_table{id = 1, text = "test0"},
F1 = fun()->
mnesia:write(test_table, Val0, write)
end,
ok = leo_mnesia:write(F1),
%% READ-1
F2 = fun() ->
Q1 = qlc:q([X || X <- mnesia:table(test_table)]),
Q2 = qlc:sort(Q1, [{order, descending}]),
qlc:e(Q2)
end,
{ok, [Res1|_]} = leo_mnesia:read(F2),
?assertEqual(Val0, Res1),
F3 = fun() ->
Q1 = qlc:q([X || X <- mnesia:table(test_table),
X#test_table.id =:= 3]),
Q2 = qlc:sort(Q1, [{order, descending}]),
qlc:e(Q2)
end,
not_found = leo_mnesia:read(F3),
%% DELETE
F4 = fun() ->
mnesia:delete_object(test_table, Val0, write)
end,
ok = leo_mnesia:delete(F4),
%% READ-2
F5 = fun() ->
Q1 = qlc:q([X || X <- mnesia:table(test_table)]),
Q2 = qlc:sort(Q1, [{order, descending}]),
qlc:e(Q2)
end,
not_found = leo_mnesia:read(F5),
%% Batch
F6 = fun() ->
Ret_1 = mnesia:write(test_table, Val0, write),
Ret_2 = mnesia:delete_object(test_table, Val0, write),
?assertEqual(ok, Ret_1),
?assertEqual(ok, Ret_2),
ok
end,
ok = leo_mnesia:batch(F6),
ok.
-endif.