ebb9bc3f5a
* When repairing multiple chunks at once and any of its repair failed, the whole read request and repair work will fail * Rename read_repair3 and read_repair4 to do_repair_chunks and do_repair chunk in machi_file_proxy * This pull request changes return semantics of read_chunk(), that returns any chunk included in requested range * First and last chunk may be cut to fit the requested range * In machi_file_proxy, unwritten_bytes are removed and replaced by machi_csum_table
57 lines
2.4 KiB
Erlang
57 lines
2.4 KiB
Erlang
-module(machi_csum_table_test).
|
|
-compile(export_all).
|
|
|
|
-include_lib("eunit/include/eunit.hrl").
|
|
-define(HDR, {0, 1024, <<0>>}).
|
|
|
|
smoke_test() ->
|
|
Filename = "./temp-checksum-dumb-file",
|
|
_ = file:delete(Filename),
|
|
{ok, MC} = machi_csum_table:open(Filename, []),
|
|
[{1024, infinity}] = machi_csum_table:calc_unwritten_bytes(MC),
|
|
Entry = {Offset, Size, Checksum} = {1064, 34, <<"deadbeef">>},
|
|
[] = machi_csum_table:find(MC, Offset, Size),
|
|
ok = machi_csum_table:write(MC, Offset, Size, Checksum),
|
|
[{1024, 40}, {1098, infinity}] = machi_csum_table:calc_unwritten_bytes(MC),
|
|
[Entry] = machi_csum_table:find(MC, Offset, Size),
|
|
ok = machi_csum_table:trim(MC, Offset, Size),
|
|
[{Offset, Size, trimmed}] = machi_csum_table:find(MC, Offset, Size),
|
|
ok = machi_csum_table:close(MC),
|
|
ok = machi_csum_table:delete(MC).
|
|
|
|
close_test() ->
|
|
Filename = "./temp-checksum-dumb-file-2",
|
|
_ = file:delete(Filename),
|
|
{ok, MC} = machi_csum_table:open(Filename, []),
|
|
Entry = {Offset, Size, Checksum} = {1064, 34, <<"deadbeef">>},
|
|
[] = machi_csum_table:find(MC, Offset, Size),
|
|
ok = machi_csum_table:write(MC, Offset, Size, Checksum),
|
|
[Entry] = machi_csum_table:find(MC, Offset, Size),
|
|
ok = machi_csum_table:close(MC),
|
|
|
|
{ok, MC2} = machi_csum_table:open(Filename, []),
|
|
[Entry] = machi_csum_table:find(MC2, Offset, Size),
|
|
ok = machi_csum_table:trim(MC2, Offset, Size),
|
|
[{Offset, Size, trimmed}] = machi_csum_table:find(MC2, Offset, Size),
|
|
ok = machi_csum_table:delete(MC2).
|
|
|
|
smoke2_test() ->
|
|
Filename = "./temp-checksum-dumb-file-3",
|
|
_ = file:delete(Filename),
|
|
{ok, MC} = machi_csum_table:open(Filename, []),
|
|
Entry = {Offset, Size, Checksum} = {1025, 10, <<"deadbeef">>},
|
|
ok = machi_csum_table:write(MC, Offset, Size, Checksum),
|
|
[] = machi_csum_table:find(MC, 0, 0),
|
|
[?HDR] = machi_csum_table:find(MC, 0, 1),
|
|
[Entry] = machi_csum_table:find(MC, Offset, Size),
|
|
[?HDR] = machi_csum_table:find(MC, 1, 1024),
|
|
[?HDR, Entry] = machi_csum_table:find(MC, 1023, 1024),
|
|
[Entry] = machi_csum_table:find(MC, 1024, 1024),
|
|
[Entry] = machi_csum_table:find(MC, 1025, 1024),
|
|
|
|
ok = machi_csum_table:trim(MC, Offset, Size),
|
|
[{Offset, Size, trimmed}] = machi_csum_table:find(MC, Offset, Size),
|
|
ok = machi_csum_table:close(MC),
|
|
ok = machi_csum_table:delete(MC).
|
|
|
|
%% TODO: add quickcheck test here
|