YA3ELS7AQZ2XCZZVNMZOM3TSVCWU7HSBVMDXFCIOFTXAYFZSRL2AC IBA3VK7OHBGLEYASI7JNTXPYVTNVFT4L4RRWLNF2VGPPCONDAWMQC 755UGKECZ3PFYEA2TFFOUZTF27CRQTBZWO7UYFU6WQDJMZDBVPRAC WHYWDNSL67TTB2AGAUACXERJ6X54YMNYVC32KJQFEXFFRYA4K3HQC CZG24QKIB45EL7PK4UA6XVG3VEVKI7OAQXN4YMFUKKI2MXLHRANQC OJ6KWAG7XUCYNQ6T3FRJK2QOP7DBO26PZEWDVH3Q2MJKIBMNWRPQC MMWEGAYYQ4CX3U6JJH4MNEZHTAYK6WQBGXIVQ7DL7MVSPGNS7V7AC hash_response_test() ->[{binary, Bin}, {obj, TestObj}] = examples:hash_response(),[{header, Header}, {ttl, 1}, {hashes, Hashes}] = wire:decode_hash_response(Bin),
post_request_test() ->[{binary, Bin}, {obj, TestObj}] = examples:post_request(),[{header, Header}, {ttl, 1}, {hashes, Hashes}] = wire:decode_post_request(Bin),
% TODO: is this one supposed to break?hash_response2_test() ->[{binary, Bin}, {obj, _TestObj}] = examples:hash_response2(),tryError = wire:decode_hash_response(Bin),?assert(Error)catcherror:Reason ->?assertEqual("invalid hash_count - expected 2 but got 32", Reason)end.
hash_response_test() ->[{binary, Bin}, {obj, TestObj}] = examples:hash_response(),Decoded = wire:decode_hash_response(Bin),[ {header, Header}, {hashes, Hashes}] = Decoded,?assertEqual(0, proplists:get_value(msgType, Header)),% TODO: assert Hash values?assertEqual(length(maps:get(<<"hashes">>, TestObj)), length(Hashes)),assert_header(Header, TestObj).
-export([decode_hash_response/1, decode_cancel_request/1, decode_channel_time_range_request/1, decode_channel_state_request/1, decode_channel_list_request/1, decode_post_response/1, decode_channel_list_response/1]).
-export([decode_post_request/1, decode_hash_response/1, decode_cancel_request/1, decode_channel_time_range_request/1, decode_channel_state_request/1, decode_channel_list_request/1, decode_post_response/1, decode_channel_list_response/1]).
Header = decode_response_header(Data),Payload = proplists:get_value(payload, Header),{HashCount, Rest} = decode_varint(Payload),Hashes = [Hash || <<Hash:32/binary>> <= Rest],case length(Hashes) =:= HashCount offalse ->ErrMsg = io_lib:format("invalid hash_count - stated ~p but got ~p", [HashCount, length(Hashes)]),erlang:error(lists:flatten(ErrMsg));true ->[ {header, proplists:delete(payload, Header)}, {hashes, Hashes}]end.decode_post_request(Data) ->
hash_response() ->D = <<"{\"name\":\"hash response\",\"type\":\"response\",\"id\":2,\"binary\":\"6b020000000095050429010320265674e8aac2dfddd78f86fe5a3dd68d976ca3f5ba23645ec7381480921d0d10705340e5528f2ef03a6797b72b1bb9f37f9009ad408247387c4bcc4d2a3371af700793dd51d4cb3c18a6df46f88bfe1665fba9b277487ddecd1e031441d69d\",\"obj\":{\"msgLen\":107,\"msgType\":2,\"reqid\":\"95050429\",\"ttl\":1,\"hashes\":[\"20265674e8aac2dfddd78f86fe5a3dd68d976ca3f5ba23645ec7381480921d0d\",\"10705340e5528f2ef03a6797b72b1bb9f37f9009ad408247387c4bcc4d2a3371\",\"af700793dd51d4cb3c18a6df46f88bfe1665fba9b277487ddecd1e031441d69d\"]}}">>,
post_request() ->D = <<"{\"name\":\"post request\",\"type\":\"request\",\"id\":2,\"binary\":\"6b020000000095050429010320265674e8aac2dfddd78f86fe5a3dd68d976ca3f5ba23645ec7381480921d0d10705340e5528f2ef03a6797b72b1bb9f37f9009ad408247387c4bcc4d2a3371af700793dd51d4cb3c18a6df46f88bfe1665fba9b277487ddecd1e031441d69d\",\"obj\":{\"msgLen\":107,\"msgType\":2,\"reqid\":\"95050429\",\"ttl\":1,\"hashes\":[\"20265674e8aac2dfddd78f86fe5a3dd68d976ca3f5ba23645ec7381480921d0d\",\"10705340e5528f2ef03a6797b72b1bb9f37f9009ad408247387c4bcc4d2a3371\",\"af700793dd51d4cb3c18a6df46f88bfe1665fba9b277487ddecd1e031441d69d\"]}}">>,