diff options
-rw-r--r-- | src/frontend.erl | 2 | ||||
-rw-r--r-- | src/tlv.erl | 34 | ||||
-rwxr-xr-x | test/check.erl | 13 |
3 files changed, 48 insertions, 1 deletions
diff --git a/src/frontend.erl b/src/frontend.erl index 0144041..89df7b8 100644 --- a/src/frontend.erl +++ b/src/frontend.erl @@ -253,7 +253,7 @@ check_entry(LeafHash, Index) -> check_entry_noreverse(LeafHash, Index) -> case db:entry_for_leafhash(LeafHash) of - notfound -> + noentry -> {notfound, Index}; Entry -> case verify_entry(Entry) of diff --git a/src/tlv.erl b/src/tlv.erl new file mode 100644 index 0000000..b1d3428 --- /dev/null +++ b/src/tlv.erl @@ -0,0 +1,34 @@ +%%% Copyright (c) 2015, NORDUnet A/S. +%%% See LICENSE for licensing information. + +-module(tlv). + +-export([encode/2, decode/1]). + +-spec encode(binary(), binary()) -> binary(). +encode(Type, Value) -> + 4 = byte_size(Type), % FIXME: make Type a 4 octet binary + Len = byte_size(Value) + 8, + <<Len:32, Type/binary, Value/binary>>. + +-spec decode(binary()) -> {binary(), binary(), binary()}. +decode(Data) -> + <<TotalLength:32, Rest1/binary>> = Data, + Length = TotalLength - 8, + <<Type:4/binary-unit:8, Rest2/binary>> = Rest1, + <<Value:Length/binary-unit:8, Rest3/binary>> = Rest2, + {Type, Value, Rest3}. + +%%%%%%%%%%%%%%%%%%%% + +-include_lib("eunit/include/eunit.hrl"). +-define(TESTDATA1, {<<"DATA">>, <<"some data">>}). +-define(TESTDATA2, {<<"DAT2">>, <<"some other data">>}). + +the_test_() -> + {setup, + fun() -> [?TESTDATA1, ?TESTDATA2] end, + fun(_) -> ok end, + fun(TestVectors) -> + [?_assertEqual({T, V, <<>>}, decode(encode(T, V))) || + {T, V} <- TestVectors] end}. diff --git a/test/check.erl b/test/check.erl new file mode 100755 index 0000000..f4fdb8d --- /dev/null +++ b/test/check.erl @@ -0,0 +1,13 @@ +#! /usr/bin/env escript +%% -*- erlang -*- mode +%%! -pa ebin -pa ../lager/ebin -pa ../lager/deps/goldrush/ebin -pa ../mochiweb/ebin -config test/check.config + +%% To enable logging, pass `-s lager' by adding it to the line above. +%% Tweak the amount of logging by changing `lager_console_backend' in +%% check.config. + +main(_) -> + ok = ht:test(), + ok = ts:test(), + ok = tlv:test(). + |