-module(plop_test). -include("plop.hrl"). -include_lib("eunit/include/eunit.hrl"). %% start_stop_test_() -> %% {"The server can be started, stopped and is regsitered", %% {setup, fun start/0, fun stop/1, fun is_registered/1}}. %% "Entries can be added and the STH changes." %% FIXME: This way, if a test fails, we don't stop plop. The tests %% must run and be validated in strict order though. adding_verifying_test() -> %%Pid = start(), Pubkey = plop:testing_get_pubkey(), add_sth_add_sth(Pubkey). %%stop(Pid). %% "Entries can be retrieved." get_entries_test_() -> Entries = plop:get(1, 2), [?_assertEqual(2, length(Entries)), ?_assertMatch(#mtl{}, hd(Entries))]. %%% Setup. %% start() -> %% {ok, Pid} = plop:start_link("../test/rsakey.pem", "sikrit"), %% Pid. %% stop(_) -> %% plop:stop(). %%% Tests. %% is_registered(Pid) -> %% [?_assert(erlang:is_process_alive(Pid)), %% ?_assertEqual(Pid, whereis(plop))]. %%% Helpers. add_sth_add_sth(Pubkey) -> add(0, Pubkey), STH0 = sth(Pubkey), add(1, Pubkey), STH1 = sth(Pubkey), ?assertNotEqual(STH0, STH1). add(0, Pubkey) -> Msg = crypto:rand_bytes(32), Entry = #timestamped_entry{ timestamp = 4711, entry = #plop_entry{ type = test, data = Msg}}, DataSigned = <<0:8, 0:8, 4711:64, 2:16, Msg/binary>>, #spt{ version = Version, timestamp = Timestamp, signature = #signature{signature = Signature} } = plop:add(Entry), ?assertEqual(0, Version), ?assertEqual(4711, Timestamp), ?assert(public_key:verify(DataSigned, sha256, Signature, Pubkey)); add(1, Pubkey) -> Msg = crypto:rand_bytes(32), Entry = #timestamped_entry{ timestamp = 4712, entry = #plop_entry{ type = test, data = Msg}}, DataSigned = <<0:8, 0:8, 4712:64, 2:16, Msg/binary>>, #spt{ version = Version, timestamp = Timestamp, signature = #signature{signature = Signature} } = plop:add(Entry), ?assertEqual(0, Version), ?assertEqual(4712, Timestamp), ?assert(public_key:verify(DataSigned, sha256, Signature, Pubkey)). %% TODO %% add(2) -> %% TestVector = <<>>, %% %% Same data as in 0, should not result in new database entry. sth(Pubkey) -> #sth{ treesize = Treesize, timestamp = Timestamp, roothash = Roothash, signature = #signature{signature = Signature} } = STH = plop:sth(), Data = list_to_binary([<<0:8, 1:8, Timestamp:64, Treesize:64>>, Roothash]), ?assert(public_key:verify(Data, sha256, Signature, Pubkey)), STH.