Move FLU client 'verify checksums' code from prototype/demo-day-hack
This commit is contained in:
parent
5c20ee6337
commit
76fcd4d931
2 changed files with 91 additions and 6 deletions
|
@ -27,13 +27,38 @@
|
|||
|
||||
-include("machi.hrl").
|
||||
|
||||
verify_file_checksums_remote(Sock, File) ->
|
||||
verify_file_checksums_remote2(Sock, Sock, File).
|
||||
-define(FLU_C, machi_flu1_client).
|
||||
|
||||
verify_file_checksums_remote(_Host, _TcpPort, File) ->
|
||||
verify_file_checksums_remote2(todo, todo, File).
|
||||
verify_file_checksums_remote(Sock1, File) when is_port(Sock1) ->
|
||||
verify_file_checksums_remote2(Sock1, File).
|
||||
|
||||
verify_file_checksums_remote(Host, TcpPort, File) ->
|
||||
Sock1 = machi_util:connect(Host, TcpPort),
|
||||
verify_file_checksums_remote2(Sock1, File).
|
||||
|
||||
%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
||||
|
||||
verify_file_checksums_remote2(Sock, Sock, File) ->
|
||||
todo.
|
||||
verify_file_checksums_remote2(Sock1, File) ->
|
||||
try
|
||||
{ok, Info} = ?FLU_C:checksum_list(Sock1, File),
|
||||
Res = lists:foldl(verify_chunk_checksum(Sock1, File), [], Info),
|
||||
{ok, Res}
|
||||
catch
|
||||
What:Why ->
|
||||
{error, {What, Why, erlang:get_stacktrace()}}
|
||||
end.
|
||||
|
||||
verify_chunk_checksum(Sock1, File) ->
|
||||
fun({Offset, Size, CSum}, Acc) ->
|
||||
case ?FLU_C:read_chunk(Sock1, File, Offset, Size) of
|
||||
{ok, Chunk} ->
|
||||
CSum2 = machi_util:checksum(Chunk),
|
||||
if CSum == CSum2 ->
|
||||
Acc;
|
||||
true ->
|
||||
[{Offset, Size, File, CSum, now, CSum2}|Acc]
|
||||
end;
|
||||
_Else ->
|
||||
[{Offset, Size, File, CSum, now, read_failure}|Acc]
|
||||
end
|
||||
end.
|
||||
|
|
60
test/machi_admin_util_test.erl
Normal file
60
test/machi_admin_util_test.erl
Normal file
|
@ -0,0 +1,60 @@
|
|||
%% -------------------------------------------------------------------
|
||||
%%
|
||||
%% Copyright (c) 2007-2015 Basho Technologies, Inc. All Rights Reserved.
|
||||
%%
|
||||
%% 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.
|
||||
%%
|
||||
%% -------------------------------------------------------------------
|
||||
|
||||
-module(machi_admin_util_test).
|
||||
-compile(export_all).
|
||||
|
||||
-ifdef(TEST).
|
||||
|
||||
-include("machi.hrl").
|
||||
|
||||
-define(FLU, machi_flu1).
|
||||
-define(FLU_C, machi_flu1_client).
|
||||
|
||||
verify_file_checksums_remote_test() ->
|
||||
Host = "localhost",
|
||||
TcpPort = 32958,
|
||||
DataDir = "./data",
|
||||
FLU1 = machi_flu1_test:setup_test_flu(verify1_flu, TcpPort, DataDir),
|
||||
Sock1 = machi_util:connect(Host, TcpPort),
|
||||
try
|
||||
Prefix = <<"verify_prefix">>,
|
||||
[{ok, _} = ?FLU_C:append_chunk(Sock1, Prefix, <<X:(X*8)/big>>) ||
|
||||
X <- lists:seq(1,10)],
|
||||
{ok, [{_FileSize,File}]} = ?FLU_C:list_files(Sock1),
|
||||
{ok, []} = machi_admin_util:verify_file_checksums_remote(
|
||||
Host, TcpPort, File),
|
||||
|
||||
Path = DataDir ++ "/" ++ binary_to_list(File),
|
||||
{ok, FH} = file:open(Path, [read,write]),
|
||||
{ok, _} = file:position(FH, ?MINIMUM_OFFSET),
|
||||
ok = file:write(FH, "y"),
|
||||
ok = file:write(FH, "yo"),
|
||||
ok = file:write(FH, "yo!"),
|
||||
ok = file:close(FH),
|
||||
{ok, [_,_,_]} = machi_admin_util:verify_file_checksums_remote(
|
||||
Host, TcpPort, File)
|
||||
after
|
||||
catch ?FLU_C:quick(Sock1),
|
||||
ok = ?FLU:stop(FLU1)
|
||||
end.
|
||||
|
||||
-endif. % TEST
|
||||
|
Loading…
Reference in a new issue