File 9334-Remove-the-old-test-framework.patch of Package erlang

From 46cdb1f5b20a3522bffe392efaaf629645ef9ef5 Mon Sep 17 00:00:00 2001
From: Raimo Niskanen <raimo@erlang.org>
Date: Mon, 23 Feb 2026 17:27:36 +0100
Subject: [PATCH 4/4] Remove the old test framework

---
 lib/tftp/test/tftp_SUITE.erl    | 468 ++++++++++++++++----------------
 lib/tftp/test/tftp_test_lib.erl | 266 +-----------------
 lib/tftp/test/tftp_test_lib.hrl |  33 +--
 3 files changed, 256 insertions(+), 511 deletions(-)

diff --git a/lib/tftp/test/tftp_SUITE.erl b/lib/tftp/test/tftp_SUITE.erl
index 5b14c52734..d0581e2a65 100644
--- a/lib/tftp/test/tftp_SUITE.erl
+++ b/lib/tftp/test/tftp_SUITE.erl
@@ -33,38 +33,25 @@
 
 -define(START_DAEMON(Options),
         begin
-            {{ok, Pid}} = ?VERIFY({ok, _Pid}, tftp:start([{port, 0} | Options])),
-            {{ok, ActualOptions}} = ?IGNORE(tftp:info(Pid)),
+            {{ok, Pid}} = ?TRY(tftp:start([{port, 0} | Options])),
+            {{ok, ActualOptions}} = ?TRY(tftp:info(Pid)),
             {value, {port, ActualPort}} =
                 lists:keysearch(port, 1, ActualOptions),
             {ActualPort, Pid}
         end).
 
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%% API
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-t() -> 
-    tftp_test_lib:t([{?MODULE, all}]).
-
-t(Cases) ->
-    tftp_test_lib:t(Cases, default_config()).
-
-t(Cases, Config) ->
-    tftp_test_lib:t(Cases, Config).
-
-default_config() ->
-    [].
-
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 %% Test server callbacks
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 
 init_per_testcase(Case, Config) ->
-    tftp_test_lib:init_per_testcase(Case, Config).
+    io:format("\n ", []),
+    ?TRY(application:stop(tftp)),
+    Config.
 
 end_per_testcase(Case, Config) when is_list(Config) ->
-    tftp_test_lib:end_per_testcase(Case, Config).
+    ?TRY(application:stop(tftp)),
+    Config.
 
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 %% Top test case
@@ -122,9 +109,9 @@ simple(doc) ->
 simple(suite) ->
     [];
 simple(Config) when is_list(Config) ->
-    ?VERIFY(ok, application:start(tftp)),
+    {ok} = ?TRY(application:start(tftp)),
 
-    {{Port, DaemonPid}} = ?IGNORE(?START_DAEMON([{debug, brief}])),
+    {{Port, DaemonPid}} = ?TRY(?START_DAEMON([{debug, brief}])),
 
     %% Read fail
     RemoteFilename = "tftp_temporary_remote_test_file.txt",
@@ -132,22 +119,22 @@ simple(Config) when is_list(Config) ->
     Blob = list_to_binary(lists:duplicate(2000, $1)),
     %% Blob = <<"Some file contents\n">>,
     Size = size(Blob),
-    ?IGNORE(file:delete(RemoteFilename)),
-    ?VERIFY({error, {client_open, enoent, _}},
-            tftp:read_file(RemoteFilename, binary, [{port, Port}])),
-    
+    ?TRY(file:delete(RemoteFilename)),
+    {{error, {client_open, enoent, _}}} =
+            ?TRY(tftp:read_file(RemoteFilename, binary, [{port, Port}])),
+
     %% Write and read
-    ?VERIFY({ok, Size}, tftp:write_file(RemoteFilename, Blob, [{port, Port}])),
-    ?VERIFY({ok, Blob}, tftp:read_file(RemoteFilename, binary, [{port, Port}])),
-    ?IGNORE(file:delete(LocalFilename)),
-    ?VERIFY({ok, Size}, tftp:read_file(RemoteFilename, LocalFilename, [{port, Port}])),
+    {{ok, Size}} = ?TRY(tftp:write_file(RemoteFilename, Blob, [{port, Port}])),
+    {{ok, Blob}} = ?TRY(tftp:read_file(RemoteFilename, binary, [{port, Port}])),
+    ?TRY(file:delete(LocalFilename)),
+    {{ok, Size}} = ?TRY(tftp:read_file(RemoteFilename, LocalFilename, [{port, Port}])),
 
     %% Cleanup
     unlink(DaemonPid),
     exit(DaemonPid, kill),
-    ?VERIFY(ok, file:delete(LocalFilename)),
-    ?VERIFY(ok, file:delete(RemoteFilename)),
-    ?VERIFY(ok, application:stop(tftp)),
+    {ok} = ?TRY(file:delete(LocalFilename)),
+    {ok} = ?TRY(file:delete(RemoteFilename)),
+    {ok} = ?TRY(application:stop(tftp)),
     ok.
 
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
@@ -159,7 +146,7 @@ root_dir(doc) ->
 root_dir(suite) ->
     [];
 root_dir(Config) when is_list(Config) ->
-    ?VERIFY(ok, application:start(tftp)),
+    {ok} = ?TRY(application:start(tftp)),
     PrivDir = get_conf(priv_dir, Config),
     Root    = hd(filename:split(PrivDir)),
     Up      = "..",
@@ -167,52 +154,52 @@ root_dir(Config) when is_list(Config) ->
     Local   = "tftp_temporary_local_test_file.txt",
     SideDir = fn_jn(PrivDir,tftp_side),
     RootDir = fn_jn(PrivDir,tftp_root),
-    ?IGNORE(file:del_dir_r(RootDir)),
-    ?IGNORE(file:del_dir_r(SideDir)),
+    ?TRY(file:del_dir_r(RootDir)),
+    ?TRY(file:del_dir_r(SideDir)),
     ok = filelib:ensure_path(fn_jn(RootDir,sub)),
     ok = filelib:ensure_path(SideDir),
     Blob = binary:copy(<<$1>>, 2000),
     Size = byte_size(Blob),
     ok = file:write_file(fn_jn(SideDir,Remote), Blob),
     {{Port, DaemonPid}} =
-        ?IGNORE(?START_DAEMON([{debug, brief},
-                               {callback,
-                                {"", tftp_file, [{root_dir, RootDir}]}}])),
+        ?TRY(?START_DAEMON([{debug, brief},
+                            {callback,
+                             {"", tftp_file, [{root_dir, RootDir}]}}])),
     try
         %% Outside root_dir
-        ?VERIFY({error, {client_open, badop, _}},
-                 tftp:read_file(
+        {{error, {client_open, badop, _}}} =
+            ?TRY(tftp:read_file(
                    fn_jn([Up,tftp_side,Remote]), binary, [{port, Port}])),
-        ?VERIFY({error, {client_open, badop, _}},
-                tftp:write_file(
-                  fn_jn([Up,tftp_side,Remote]), Blob, [{port, Port}])),
+        {{error, {client_open, badop, _}}} =
+            ?TRY(tftp:write_file(
+                   fn_jn([Up,tftp_side,Remote]), Blob, [{port, Port}])),
         %% Nonexistent
-        ?VERIFY({error, {client_open, enoent, _}},
-                 tftp:read_file(
+        {{error, {client_open, enoent, _}}} =
+            ?TRY(tftp:read_file(
                    fn_jn(sub,Remote), binary, [{port, Port}])),
-        ?VERIFY({error, {client_open, enoent, _}},
-                tftp:write_file(
-                  fn_jn(nonexistent,Remote), Blob, [{port, Port}])),
+        {{error, {client_open, enoent, _}}} =
+            ?TRY(tftp:write_file(
+                   fn_jn(nonexistent,Remote), Blob, [{port, Port}])),
         %% Write and read
-        ?VERIFY({ok, Size},
-                tftp:write_file(
-                  fn_jn(sub,Remote), Blob, [{port, Port}])),
-        ?VERIFY({ok, Blob},
-                tftp:read_file(
-                  fn_jn([Root,sub,Remote]), binary, [{port, Port}])),
-        ?VERIFY({ok, Size},
-                tftp:read_file(
-                  fn_jn(sub,Remote), Local, [{port, Port}])),
-        ?VERIFY({ok, Blob}, file:read_file(Local)),
-        ?VERIFY(ok, file:delete(Local)),
-        ?VERIFY(ok, application:stop(tftp))
+        {{ok, Size}} =
+            ?TRY(tftp:write_file(
+                   fn_jn(sub,Remote), Blob, [{port, Port}])),
+        {{ok, Blob}} =
+            ?TRY(tftp:read_file(
+                   fn_jn([Root,sub,Remote]), binary, [{port, Port}])),
+        {{ok, Size}} =
+            ?TRY(tftp:read_file(
+                   fn_jn(sub,Remote), Local, [{port, Port}])),
+        {{ok, Blob}} = ?TRY(file:read_file(Local)),
+        {ok} = ?TRY(file:delete(Local)),
+        {ok} = ?TRY(application:stop(tftp))
     after
         %% Cleanup
         unlink(DaemonPid),
         exit(DaemonPid, kill),
-        ?IGNORE(file:del_dir_r(SideDir)),
-        ?IGNORE(file:del_dir_r(RootDir)),
-        ?IGNORE(application:stop(tftp))
+        ?TRY(file:del_dir_r(SideDir)),
+        ?TRY(file:del_dir_r(RootDir)),
+        ?TRY(application:stop(tftp))
     end,
     ok.
 
@@ -226,10 +213,10 @@ extra(doc) ->
 extra(suite) ->
     [];
 extra(Config) when is_list(Config) ->
-    ?VERIFY(exit, {badarg,{fake_key, fake_flag}},
-            tftp:start([{port, 0}, {fake_key, fake_flag}])),
+    {'EXIT', {badarg,{fake_key, fake_flag}}} =
+        ?TRY(tftp:start([{port, 0}, {fake_key, fake_flag}])),
 
-    {{Port, DaemonPid}} = ?IGNORE(?START_DAEMON([{debug, brief}])),
+    {{Port, DaemonPid}} = ?TRY(?START_DAEMON([{debug, brief}])),
 
     RemoteFilename = "tftp_extra_temporary_remote_test_file.txt",
     LocalFilename = "tftp_extra_temporary_local_test_file.txt",
@@ -250,19 +237,19 @@ extra(Config) when is_list(Config) ->
                {port, Port},
                %%{ debug,all},
                {callback, {".*", tftp_test_lib, Generic}}],
-    ?VERIFY(ok, file:write_file(LocalFilename, Blob)),
-    ?VERIFY({ok, [{count, Size}, Peer]},
-            tftp:write_file(RemoteFilename, LocalFilename, Options)),
-    ?VERIFY(ok, file:delete(LocalFilename)),
-    
-    ?VERIFY({ok,[{bin, Blob}, Peer]}, 
-            tftp:read_file(RemoteFilename, LocalFilename, Options)),
+    {ok} = ?TRY(file:write_file(LocalFilename, Blob)),
+    {{ok, [{count, Size}, Peer]}} =
+        ?TRY(tftp:write_file(RemoteFilename, LocalFilename, Options)),
+    {ok} = ?TRY(file:delete(LocalFilename)),
+
+    {{ok,[{bin, Blob}, Peer]}} =
+        ?TRY(tftp:read_file(RemoteFilename, LocalFilename, Options)),
 
     %% Cleanup
     unlink(DaemonPid),
     exit(DaemonPid, kill),
-    ?VERIFY(ok, file:delete(LocalFilename)),
-    ?VERIFY(ok, file:delete(RemoteFilename)),
+    {ok} = ?TRY(file:delete(LocalFilename)),
+    {ok} = ?TRY(file:delete(RemoteFilename)),
     ok.
 
 -record(extra_state,  {file, blksize, count, acc, peer}).
@@ -305,7 +292,7 @@ extra_open(_Peer, Access, LocalFilename, _Mode, NegotiatedOptions, #extra_state{
                         {ok, Bin} = file:read_file(LocalFilename),
                         {LocalFilename, Bin}
             end;
-            write -> 
+            write ->
                 {LocalFilename, []}
         end,
     %% Both sides
@@ -363,7 +350,7 @@ resend_client(suite) ->
     [];
 resend_client(Config) when is_list(Config) ->
     Host = {127, 0, 0, 1},
-    {{Port, DaemonPid}} = ?IGNORE(?START_DAEMON([{debug, all}])),
+    {{Port, DaemonPid}} = ?TRY(?START_DAEMON([{debug, all}])),
 
     try
 
@@ -391,13 +378,13 @@ resend_read_client(Host, Port, BlkSize) ->
     Block5 = lists:duplicate(BlkSize, $5),
     Blocks = [Block1, Block2, Block3, Block4, Block5],
     Blob = list_to_binary(Blocks),
-    ?VERIFY(ok, file:write_file(RemoteFilename, Blob)),
+    {ok} = ?TRY(file:write_file(RemoteFilename, Blob)),
 
     Timeout = timer:seconds(3),
-    ?VERIFY(timeout, recv(0)),
+    {timeout} = ?TRY(recv(0)),
 
     %% Open socket
-    {{ok, Socket}} = ?VERIFY({ok, _}, gen_udp:open(0, [binary, {reuseaddr, true}, {active, true}])),
+    {{ok, Socket}} = ?TRY(gen_udp:open(0, [binary, {reuseaddr, true}, {active, true}])),
 
     ReadList = [0, 1, RemoteFilename, 0, "octet", 0],
     Data1Bin = list_to_binary([0, 3, 0, 1 | Block1]),
@@ -406,95 +393,96 @@ resend_read_client(Host, Port, BlkSize) ->
             BlkSize =:= 512 ->
                 %% Send READ
                 ReadBin = list_to_binary(ReadList),
-                ?VERIFY(ok, gen_udp:send(Socket, Host, Port, ReadBin)),
+                {ok} = ?TRY(gen_udp:send(Socket, Host, Port, ReadBin)),
 
                 %% Sleep a while in order to provoke the server to re-send the packet
                 timer:sleep(Timeout + timer:seconds(1)),
 
                 %% Recv DATA #1 (the packet that the server think that we have lost)
-                {{udp, _, _, NewPort0, _}} = ?VERIFY({udp, Socket, Host, _, Data1Bin}, recv(Timeout)),
+                {{udp, Socket, Host, NewPort0, Data1Bin}} = ?TRY(recv(Timeout)),
                 NewPort0;
             true ->
                 %% Send READ
                 BlkSizeList = integer_to_list(BlkSize),
                 Options = ["blksize", 0, BlkSizeList, 0],
                 ReadBin = list_to_binary([ReadList | Options]),
-                ?VERIFY(ok, gen_udp:send(Socket, Host, Port, ReadBin)),
+                {ok} = ?TRY(gen_udp:send(Socket, Host, Port, ReadBin)),
 
                 %% Recv OACK
                 OptionAckBin = list_to_binary([0, 6 | Options]),
-                {{udp, _, _, NewPort0, _}} = ?VERIFY({udp, Socket, Host, _, OptionAckBin}, recv(Timeout)),
+                {{udp, Socket, Host, NewPort0, OptionAckBin}} =
+                    ?TRY(recv(Timeout)),
 
                 %% Send ACK #0
                 Ack0Bin = <<0, 4, 0, 0>>,
-                ?VERIFY(ok, gen_udp:send(Socket, Host, NewPort0, Ack0Bin)),
+                {ok} = ?TRY(gen_udp:send(Socket, Host, NewPort0, Ack0Bin)),
 
                 %% Send ACK #0 AGAIN (pretend that we timed out)
                 timer:sleep(timer:seconds(1)),
-                ?VERIFY(ok, gen_udp:send(Socket, Host, NewPort0, Ack0Bin)),
+                {ok} = ?TRY(gen_udp:send(Socket, Host, NewPort0, Ack0Bin)),
 
                 %% Recv DATA #1 (the packet that the server think that we have lost)
-                ?VERIFY({udp, Socket, Host, NewPort0, Data1Bin}, recv(Timeout)),
+                {{udp, Socket, Host, NewPort0, Data1Bin}} = ?TRY(recv(Timeout)),
                 NewPort0
         end,
 
     %% Recv DATA #1 AGAIN (the re-sent package)
-    ?VERIFY({udp, Socket, Host, NewPort, Data1Bin}, recv(Timeout)),
+    {{udp, Socket, Host, NewPort, Data1Bin}} = ?TRY(recv(Timeout)),
 
     %% Send ACK #1
     Ack1Bin = <<0, 4, 0, 1>>,
-    ?VERIFY(ok, gen_udp:send(Socket, Host, NewPort, Ack1Bin)),
+    {ok} = ?TRY(gen_udp:send(Socket, Host, NewPort, Ack1Bin)),
 
     %% Recv DATA #2
     Data2Bin = list_to_binary([0, 3, 0, 2 | Block2]),
-    ?VERIFY({udp, Socket, Host, NewPort, Data2Bin}, recv(Timeout)),
+    {{udp, Socket, Host, NewPort, Data2Bin}} = ?TRY(recv(Timeout)),
 
     %% Send ACK #2
     Ack2Bin = <<0, 4, 0, 2>>,
-    ?VERIFY(ok, gen_udp:send(Socket, Host, NewPort, Ack2Bin)),
+    {ok} = ?TRY(gen_udp:send(Socket, Host, NewPort, Ack2Bin)),
 
     %% Recv DATA #3
     Data3Bin = list_to_binary([0, 3, 0, 3 | Block3]),
-    ?VERIFY({udp, Socket, Host, NewPort, Data3Bin}, recv(Timeout)),
+    {{udp, Socket, Host, NewPort, Data3Bin}} = ?TRY(recv(Timeout)),
 
     %% Send ACK #3
     Ack3Bin = <<0, 4, 0, 3>>,
-    ?VERIFY(ok, gen_udp:send(Socket, Host, NewPort, Ack3Bin)),
+    {ok} = ?TRY(gen_udp:send(Socket, Host, NewPort, Ack3Bin)),
 
     %% Send ACK #3 AGAIN (pretend that we timed out)
     timer:sleep(timer:seconds(1)),
-    ?VERIFY(ok, gen_udp:send(Socket, Host, NewPort, Ack3Bin)),
+    {ok} = ?TRY(gen_udp:send(Socket, Host, NewPort, Ack3Bin)),
 
     %% Recv DATA #4 (the packet that the server think that we have lost)
     Data4Bin = list_to_binary([0, 3, 0, 4 | Block4]),
-    ?VERIFY({udp, Socket, Host, NewPort, Data4Bin}, recv(Timeout)),
+    {{udp, Socket, Host, NewPort, Data4Bin}} = ?TRY(recv(Timeout)),
 
     %% Recv DATA #4 AGAIN (the re-sent package)
-    ?VERIFY({udp, Socket, Host, NewPort, Data4Bin}, recv(Timeout)),
+    {{udp, Socket, Host, NewPort, Data4Bin}} = ?TRY(recv(Timeout)),
 
     %% Send ACK #2 which is out of range
-    ?VERIFY(ok, gen_udp:send(Socket, Host, NewPort, Ack2Bin)),
+    {ok} = ?TRY(gen_udp:send(Socket, Host, NewPort, Ack2Bin)),
 
     %% Send ACK #4
     Ack4Bin = <<0, 4, 0, 4>>,
-    ?VERIFY(ok, gen_udp:send(Socket, Host, NewPort, Ack4Bin)),
+    {ok} = ?TRY(gen_udp:send(Socket, Host, NewPort, Ack4Bin)),
 
     %% Recv DATA #5
     Data5Bin = list_to_binary([0, 3, 0, 5 | Block5]),
-    ?VERIFY({udp, Socket, Host, NewPort, Data5Bin}, recv(Timeout)),
+    {{udp, Socket, Host, NewPort, Data5Bin}} = ?TRY(recv(Timeout)),
 
     %% Send ACK #5
     Ack5Bin = <<0, 4, 0, 5>>,
-    ?VERIFY(ok, gen_udp:send(Socket, Host, NewPort, Ack5Bin)),
+    {ok} = ?TRY(gen_udp:send(Socket, Host, NewPort, Ack5Bin)),
 
     %% Recv ACK #6
-    ?VERIFY({udp, Socket, Host, NewPort, <<0,3,0,6>>}, recv(Timeout)),
+    {{udp, Socket, Host, NewPort, <<0,3,0,6>>}} = ?TRY(recv(Timeout)),
 
     %% Close socket
-    ?VERIFY(ok, gen_udp:close(Socket)),
+    {ok} = ?TRY(gen_udp:close(Socket)),
 
-    ?VERIFY(timeout, recv(Timeout)),
-    ?VERIFY(ok, file:delete(RemoteFilename)),
+    {timeout} = ?TRY(recv(Timeout)),
+    {ok} = ?TRY(file:delete(RemoteFilename)),
     ok.
 
 resend_write_client(Host, Port, BlkSize) ->
@@ -506,14 +494,15 @@ resend_write_client(Host, Port, BlkSize) ->
     Block5 = lists:duplicate(BlkSize, $5),
     Blocks = [Block1, Block2, Block3, Block4, Block5],
     Blob = list_to_binary(Blocks),
-    ?IGNORE(file:delete(RemoteFilename)),
-    ?VERIFY({error, enoent}, file:read_file(RemoteFilename)),
+    ?TRY(file:delete(RemoteFilename)),
+    {{error, enoent}} = ?TRY(file:read_file(RemoteFilename)),
 
     Timeout = timer:seconds(3),
-    ?VERIFY(timeout, recv(0)),
+    {timeout} = ?TRY(recv(0)),
 
     %% Open socket
-    {{ok, Socket}} = ?VERIFY({ok, _}, gen_udp:open(0, [binary, {reuseaddr, true}, {active, true}])),
+    {{ok, Socket}} =
+        ?TRY(gen_udp:open(0, [binary, {reuseaddr, true}, {active, true}])),
 
     WriteList = [0, 2, RemoteFilename, 0, "octet", 0],
     NewPort =
@@ -521,92 +510,93 @@ resend_write_client(Host, Port, BlkSize) ->
             BlkSize =:= 512 ->
                 %% Send WRITE
                 WriteBin = list_to_binary(WriteList),
-                ?VERIFY(ok,  gen_udp:send(Socket, Host, Port, WriteBin)),
+                {ok} = ?TRY(gen_udp:send(Socket, Host, Port, WriteBin)),
 
                 %% Sleep a while in order to provoke the server to re-send the packet
                 timer:sleep(Timeout + timer:seconds(1)),
 
                 %% Recv ACK #0 (the packet that the server think that we have lost)
                 Ack0Bin = <<0, 4, 0, 0>>,
-                ?VERIFY({udp, Socket, Host, _, Ack0Bin}, recv(Timeout)),
+                {{udp, Socket, Host, _, Ack0Bin}} = ?TRY(recv(Timeout)),
 
                 %% Recv ACK #0  AGAIN (the re-sent package)
-                {{udp, _, _, NewPort0, _}} = ?VERIFY({udp, Socket, Host, _, Ack0Bin}, recv(Timeout)),
+                {{udp, Socket, Host, NewPort0, Ack0Bin}} = ?TRY(recv(Timeout)),
                 NewPort0;
             true ->
                 %% Send WRITE
                 BlkSizeList = integer_to_list(BlkSize),
                 WriteBin = list_to_binary([WriteList, "blksize", 0, BlkSizeList, 0]),
-                ?VERIFY(ok,  gen_udp:send(Socket, Host, Port, WriteBin)),
+                {ok} = ?TRY(gen_udp:send(Socket, Host, Port, WriteBin)),
 
                 %% Sleep a while in order to provoke the server to re-send the packet
                 timer:sleep(timer:seconds(1)),
 
                 %% Recv OACK (the packet that the server think that we have lost)
                 OptionAckBin = list_to_binary([0, 6, "blksize",0, BlkSizeList, 0]),
-                ?VERIFY({udp, Socket, Host, _, OptionAckBin}, recv(Timeout)),
-                
+                {{udp, Socket, Host, _, OptionAckBin}} = ?TRY(recv(Timeout)),
+
                 %% Recv OACK AGAIN (the re-sent package)
-                {{udp, _, _, NewPort0, _}} = ?VERIFY({udp, Socket, Host, _, OptionAckBin}, recv(Timeout)),
+                {{udp, Socket, Host, NewPort0, OptionAckBin}} =
+                    ?TRY(recv(Timeout)),
                 NewPort0
         end,
 
     %% Send DATA #1
     Data1Bin = list_to_binary([0, 3, 0, 1 | Block1]),
-    ?VERIFY(ok, gen_udp:send(Socket, Host, NewPort, Data1Bin)),
+    {ok} = ?TRY(gen_udp:send(Socket, Host, NewPort, Data1Bin)),
 
-    %% Recv ACK #1 
+    %% Recv ACK #1
     Ack1Bin = <<0, 4, 0, 1>>,
-    ?VERIFY({udp, Socket, Host, NewPort, Ack1Bin}, recv(Timeout)),
+    {{udp, Socket, Host, NewPort, Ack1Bin}} = ?TRY(recv(Timeout)),
 
     %% Send DATA #2
     Data2Bin = list_to_binary([0, 3, 0, 2 | Block2]),
-    ?VERIFY(ok, gen_udp:send(Socket, Host, NewPort, Data2Bin)),
+    {ok} = ?TRY(gen_udp:send(Socket, Host, NewPort, Data2Bin)),
 
     %% Recv ACK #2
     Ack2Bin = <<0, 4, 0, 2>>,
-    ?VERIFY({udp, Socket, Host, NewPort, Ack2Bin}, recv(Timeout)),
+    {{udp, Socket, Host, NewPort, Ack2Bin}} = ?TRY(recv(Timeout)),
 
     %% Send DATA #3
     Data3Bin = list_to_binary([0, 3, 0, 3 | Block3]),
-    ?VERIFY(ok, gen_udp:send(Socket, Host, NewPort, Data3Bin)),
+    {ok} = ?TRY(gen_udp:send(Socket, Host, NewPort, Data3Bin)),
 
     %% Recv ACK #3
     Ack3Bin = <<0, 4, 0, 3>>,
-    ?VERIFY({udp, Socket, Host, NewPort, Ack3Bin}, recv(Timeout)),
+    {{udp, Socket, Host, NewPort, Ack3Bin}} = ?TRY(recv(Timeout)),
 
     %% Send DATA #3 AGAIN (pretend that we timed out)
     timer:sleep(timer:seconds(1)),
-    ?VERIFY(ok, gen_udp:send(Socket, Host, NewPort, Data3Bin)),
+    {ok} = ?TRY(gen_udp:send(Socket, Host, NewPort, Data3Bin)),
 
     %% Recv ACK #3 AGAIN (the packet that the server think that we have lost)
-    ?VERIFY({udp, Socket, Host, NewPort, Ack3Bin}, recv(Timeout)),
+    {{udp, Socket, Host, NewPort, Ack3Bin}} = ?TRY(recv(Timeout)),
 
     %% Send DATA #2 which is out of range
-    ?VERIFY(ok, gen_udp:send(Socket, Host, NewPort, Data2Bin)),
+    {ok} = ?TRY(gen_udp:send(Socket, Host, NewPort, Data2Bin)),
 
     %% Send DATA #4
     Data4Bin = list_to_binary([0, 3, 0, 4 | Block4]),
-    ?VERIFY(ok, gen_udp:send(Socket, Host, NewPort, Data4Bin)),
+    {ok} = ?TRY(gen_udp:send(Socket, Host, NewPort, Data4Bin)),
 
     %% Recv ACK #4
     Ack4Bin = <<0, 4, 0, 4>>,
-    ?VERIFY({udp, Socket, Host, NewPort, Ack4Bin}, recv(Timeout)),
+    {{udp, Socket, Host, NewPort, Ack4Bin}} = ?TRY(recv(Timeout)),
 
     %% Send DATA #5
     Data5Bin = list_to_binary([0, 3, 0, 5 | Block5]),
-    ?VERIFY(ok, gen_udp:send(Socket, Host, NewPort, Data5Bin)),
+    {ok} = ?TRY(gen_udp:send(Socket, Host, NewPort, Data5Bin)),
 
     %% Recv ACK #5
     Ack5Bin = <<0, 4, 0, 5>>,
-    ?VERIFY({udp, Socket, Host, NewPort, Ack5Bin}, recv(Timeout)),
+    {{udp, Socket, Host, NewPort, Ack5Bin}} = ?TRY(recv(Timeout)),
 
     %% Close socket
-    ?VERIFY(ok, gen_udp:close(Socket)),
+    {ok} = ?TRY(gen_udp:close(Socket)),
 
-    ?VERIFY(timeout, recv(Timeout)),
-    ?VERIFY({ok, Blob}, file:read_file(RemoteFilename)),
-    ?VERIFY(ok, file:delete(RemoteFilename)),
+    {timeout} = ?TRY(recv(Timeout)),
+    {{ok, Blob}} = ?TRY(file:read_file(RemoteFilename)),
+    {ok} = ?TRY(file:delete(RemoteFilename)),
     ok.
 
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
@@ -640,22 +630,25 @@ resend_read_server(Host, BlkSize) ->
     Blob = list_to_binary(Blocks),
 
     Timeout = timer:seconds(3),
-    ?VERIFY(timeout, recv(0)),
+    {timeout} = ?TRY(recv(0)),
 
     %% Open daemon socket
-    {{ok, DaemonSocket}} = ?VERIFY({ok, _}, gen_udp:open(0, [binary, {reuseaddr, true}, {active, true}])),
-    {{ok, DaemonPort}} = ?IGNORE(inet:port(DaemonSocket)),
+    {{ok, DaemonSocket}} =
+        ?TRY(gen_udp:open(0, [binary, {reuseaddr, true}, {active, true}])),
+    {{ok, DaemonPort}} = ?TRY(inet:port(DaemonSocket)),
 
     %% Open server socket
-    {{ok, ServerSocket}} = ?VERIFY({ok, _}, gen_udp:open(0, [binary, {reuseaddr, true}, {active, true}])),
-    ?IGNORE(inet:port(ServerSocket)),
+    {{ok, ServerSocket}} =
+        ?TRY(gen_udp:open(0, [binary, {reuseaddr, true}, {active, true}])),
+    ?TRY(inet:port(ServerSocket)),
 
     %% Prepare client process
     ReplyTo = self(),
     ClientFun =
         fun(Extra) ->
                 Options = [{port, DaemonPort}, {debug, brief}] ++ Extra,
-                {Res} = ?VERIFY({ok, Blob}, tftp:read_file(RemoteFilename, binary, Options)),
+                {{ok, Blob} = Res} =
+                    ?TRY(tftp:read_file(RemoteFilename, binary, Options)),
                 ReplyTo ! {self(), {tftp_client_reply, Res}},
                 exit(normal)
         end,
@@ -671,111 +664,116 @@ resend_read_server(Host, BlkSize) ->
 
                 %% Recv READ
                 ReadBin = list_to_binary(ReadList),
-                {{udp, _, _, ClientPort0, _}} = ?VERIFY({udp, DaemonSocket, Host, _, ReadBin}, recv(Timeout)),
+                {{udp, DaemonSocket, Host, ClientPort0, ReadBin}} =
+                    ?TRY(recv(Timeout)),
 
                 %% Send DATA #1
-                ?VERIFY(ok,  gen_udp:send(ServerSocket, Host, ClientPort0, Data1Bin)),
+                {ok} = ?TRY(gen_udp:send(ServerSocket, Host, ClientPort0, Data1Bin)),
 
                 %% Sleep a while in order to provoke the client to re-send the packet
                 timer:sleep(Timeout + timer:seconds(1)),
 
                 %% Recv ACK #1 (the packet that the server think that we have lost)
-                ?VERIFY({udp, ServerSocket, Host, ClientPort0, Ack1Bin}, recv(Timeout)),
+                {{udp, ServerSocket, Host, ClientPort0, Ack1Bin}} =
+                    ?TRY(recv(Timeout)),
 
                 %% Recv ACK #1 AGAIN (the re-sent package)
-                ?VERIFY({udp, ServerSocket, Host, _, Ack1Bin}, recv(Timeout)),
+                {{udp, ServerSocket, Host, _, Ack1Bin}} = ?TRY(recv(Timeout)),
                 {ClientPort0, ClientPid0};
             true ->
                 %% Start client process
                 BlkSizeList = integer_to_list(BlkSize),
                 ClientPid0 = spawn_link(fun() -> ClientFun([{"blksize", BlkSizeList}]) end),
-                
+
                 %% Recv READ
                 Options = ["blksize", 0, BlkSizeList, 0],
                 ReadBin = list_to_binary([ReadList | Options]),
-                {{udp, _, _, ClientPort0, _}} = ?VERIFY({udp, DaemonSocket, Host, _, ReadBin}, recv(Timeout)),
+                {{udp, DaemonSocket, Host, ClientPort0, ReadBin}} =
+                    ?TRY(recv(Timeout)),
 
                 %% Send OACK
                 BlkSizeList = integer_to_list(BlkSize),
                 OptionAckBin = list_to_binary([0, 6, "blksize",0, BlkSizeList, 0]),
-                ?VERIFY(ok, gen_udp:send(ServerSocket, Host, ClientPort0, OptionAckBin)),
+                {ok} = ?TRY(gen_udp:send(ServerSocket, Host, ClientPort0, OptionAckBin)),
 
                 %% Sleep a while in order to provoke the client to re-send the packet
                 timer:sleep(Timeout + timer:seconds(1)),
 
                 %% Recv ACK #0 (the packet that the server think that we have lost)
                 Ack0Bin = <<0, 4, 0, 0>>,
-                ?VERIFY({udp, ServerSocket, Host, ClientPort0, Ack0Bin}, recv(Timeout)),
+                {{udp, ServerSocket, Host, ClientPort0, Ack0Bin}} =
+                    ?TRY(recv(Timeout)),
 
                 %% Recv ACK #0 AGAIN (the re-sent package)
-                ?VERIFY({udp, ServerSocket, Host, ClientPort0, Ack0Bin}, recv(Timeout)),
+                {{udp, ServerSocket, Host, ClientPort0, Ack0Bin}} =
+                    ?TRY(recv(Timeout)),
 
                 %% Send DATA #1
-                ?VERIFY(ok, gen_udp:send(ServerSocket, Host, ClientPort0, Data1Bin)),
+                {ok} = ?TRY(gen_udp:send(ServerSocket, Host, ClientPort0, Data1Bin)),
 
                 %% Recv ACK #1
-                ?VERIFY({udp, ServerSocket, Host, _, Ack1Bin}, recv(Timeout)),
+                {{udp, ServerSocket, Host, _, Ack1Bin}} = ?TRY(recv(Timeout)),
                 {ClientPort0, ClientPid0}
         end,
 
     %% Send DATA #2
     Data2Bin = list_to_binary([0, 3, 0, 2 | Block2]),
-    ?VERIFY(ok, gen_udp:send(ServerSocket, Host, ClientPort, Data2Bin)),
+    {ok} = ?TRY(gen_udp:send(ServerSocket, Host, ClientPort, Data2Bin)),
 
     %% Recv ACK #2
     Ack2Bin = <<0, 4, 0, 2>>,
-    ?VERIFY({udp, ServerSocket, Host, ClientPort, Ack2Bin}, recv(Timeout)),
+    {{udp, ServerSocket, Host, ClientPort, Ack2Bin}} = ?TRY(recv(Timeout)),
 
     %% Send DATA #3
     Data3Bin = list_to_binary([0, 3, 0, 3 | Block3]),
-    ?VERIFY(ok, gen_udp:send(ServerSocket, Host, ClientPort, Data3Bin)),
+    {ok} = ?TRY(gen_udp:send(ServerSocket, Host, ClientPort, Data3Bin)),
 
     %% Recv ACK #3
     Ack3Bin = <<0, 4, 0, 3>>,
-    ?VERIFY({udp, ServerSocket, Host, ClientPort, Ack3Bin}, recv(Timeout)),
+    {{udp, ServerSocket, Host, ClientPort, Ack3Bin}} = ?TRY(recv(Timeout)),
 
     %% Send DATA #3 AGAIN (pretend that we timed out)
     timer:sleep(timer:seconds(1)),
-    ?VERIFY(ok, gen_udp:send(ServerSocket, Host, ClientPort, Data3Bin)),
+    {ok} = ?TRY(gen_udp:send(ServerSocket, Host, ClientPort, Data3Bin)),
 
     %% Recv ACK #3 AGAIN (the packet that the server think that we have lost)
-    ?VERIFY({udp, ServerSocket, Host, ClientPort, Ack3Bin}, recv(Timeout)),
+    {{udp, ServerSocket, Host, ClientPort, Ack3Bin}} = ?TRY(recv(Timeout)),
 
     %% Send DATA #4
     Data4Bin = list_to_binary([0, 3, 0, 4 | Block4]),
-    ?VERIFY(ok, gen_udp:send(ServerSocket, Host, ClientPort, Data4Bin)),
+    {ok} = ?TRY(gen_udp:send(ServerSocket, Host, ClientPort, Data4Bin)),
 
     %% Recv ACK #4
     Ack4Bin = <<0, 4, 0, 4>>,
-    ?VERIFY({udp, ServerSocket, Host, ClientPort, Ack4Bin}, recv(Timeout)),
+    {{udp, ServerSocket, Host, ClientPort, Ack4Bin}} = ?TRY(recv(Timeout)),
 
     %% Send DATA #3 which is out of range
-    ?VERIFY(ok, gen_udp:send(ServerSocket, Host, ClientPort, Data3Bin)),
+    {ok} = ?TRY(gen_udp:send(ServerSocket, Host, ClientPort, Data3Bin)),
 
     %% Send DATA #5
     Data5Bin = list_to_binary([0, 3, 0, 5 | Block5]),
-    ?VERIFY(ok, gen_udp:send(ServerSocket, Host, ClientPort, Data5Bin)),
+    {ok} = ?TRY(gen_udp:send(ServerSocket, Host, ClientPort, Data5Bin)),
 
     %% Recv ACK #5
     Ack5Bin = <<0, 4, 0, 5>>,
-    ?VERIFY({udp, ServerSocket, Host, ClientPort, Ack5Bin}, recv(Timeout)),
+    {{udp, ServerSocket, Host, ClientPort, Ack5Bin}} = ?TRY(recv(Timeout)),
 
     %% Send DATA #6
     Data6Bin = list_to_binary([0, 3, 0, 6 | Block6]),
-    ?VERIFY(ok, gen_udp:send(ServerSocket, Host, ClientPort, Data6Bin)),
+    {ok} = ?TRY(gen_udp:send(ServerSocket, Host, ClientPort, Data6Bin)),
 
     %% Recv ACK #6
     Ack6Bin = <<0, 4, 0, 6>>,
-    ?VERIFY({udp, ServerSocket, Host, ClientPort, Ack6Bin}, recv(Timeout)),
+    {{udp, ServerSocket, Host, ClientPort, Ack6Bin}} = ?TRY(recv(Timeout)),
 
     %% Close daemon and server sockets
-    ?VERIFY(ok, gen_udp:close(ServerSocket)),
-    ?VERIFY(ok, gen_udp:close(DaemonSocket)),
+    {ok} = ?TRY(gen_udp:close(ServerSocket)),
+    {ok} = ?TRY(gen_udp:close(DaemonSocket)),
 
-    ?VERIFY({ClientPid, {tftp_client_reply, {ok, Blob}}},
-            recv(2 * (Timeout + timer:seconds(1)))),
+    {{ClientPid, {tftp_client_reply, {ok, Blob}}}} =
+        ?TRY(recv(2 * (Timeout + timer:seconds(1)))),
 
-    ?VERIFY(timeout, recv(Timeout)),
+    {timeout} = ?TRY(recv(Timeout)),
     ok.
 
 resend_write_server(Host, BlkSize) ->
@@ -791,22 +789,25 @@ resend_write_server(Host, BlkSize) ->
     Size = size(Blob),
 
     Timeout = timer:seconds(3),
-    ?VERIFY(timeout, recv(0)),
+    {timeout} = ?TRY(recv(0)),
 
     %% Open daemon socket
-    {{ok, DaemonSocket}} = ?VERIFY({ok, _}, gen_udp:open(0, [binary, {reuseaddr, true}, {active, true}])),
-    {{ok, DaemonPort}} = ?IGNORE(inet:port(DaemonSocket)),
+    {{ok, DaemonSocket}} =
+        ?TRY(gen_udp:open(0, [binary, {reuseaddr, true}, {active, true}])),
+    {{ok, DaemonPort}} = ?TRY(inet:port(DaemonSocket)),
 
     %% Open server socket
-    {{ok, ServerSocket}} = ?VERIFY({ok, _}, gen_udp:open(0, [binary, {reuseaddr, true}, {active, true}])),
-    ?IGNORE(inet:port(ServerSocket)),
+    {{ok, ServerSocket}} =
+        ?TRY(gen_udp:open(0, [binary, {reuseaddr, true}, {active, true}])),
+    ?TRY(inet:port(ServerSocket)),
 
     %% Prepare client process
     ReplyTo = self(),
     ClientFun =
         fun(Extra) ->
                 Options = [{port, DaemonPort}, {debug, brief}] ++ Extra,
-                {Res} = ?VERIFY({ok, Size}, tftp:write_file(RemoteFilename, Blob, Options)),
+                {{ok, Size} = Res} =
+                    ?TRY(tftp:write_file(RemoteFilename, Blob, Options)),
                 ReplyTo ! {self(), {tftp_client_reply, Res}},
                 exit(normal)
         end,
@@ -822,108 +823,113 @@ resend_write_server(Host, BlkSize) ->
                 %% Recv WRITE
                 WriteBin = list_to_binary(WriteList),
                 io:format("WriteBin ~p\n", [WriteBin]),
-                {{udp, _, _, ClientPort0, _}} = ?VERIFY({udp, DaemonSocket, Host, _, WriteBin}, recv(Timeout)),
+                {{udp, DaemonSocket, Host, ClientPort0, WriteBin}} =
+                    ?TRY(recv(Timeout)),
 
                 %% Send ACK #1
                 Ack0Bin = <<0, 4, 0, 0>>,
-                ?VERIFY(ok,  gen_udp:send(ServerSocket, Host, ClientPort0, Ack0Bin)),
+                {ok} = ?TRY(gen_udp:send(ServerSocket, Host, ClientPort0, Ack0Bin)),
 
                 %% Sleep a while in order to provoke the client to re-send the packet
                 timer:sleep(Timeout + timer:seconds(1)),
 
                 %% Recv DATA #1 (the packet that the server think that we have lost)
-                ?VERIFY({udp, ServerSocket, Host, ClientPort0, Data1Bin}, recv(Timeout)),
+                {{udp, ServerSocket, Host, ClientPort0, Data1Bin}} =
+                    ?TRY(recv(Timeout)),
 
                 %% Recv DATA #1 AGAIN (the re-sent package)
-                ?VERIFY({udp, ServerSocket, Host, _, Data1Bin}, recv(Timeout)),
+                {{udp, ServerSocket, Host, _, Data1Bin}} = ?TRY(recv(Timeout)),
                 {ClientPort0, ClientPid0};
             true ->
                 %% Start client process
                 BlkSizeList = integer_to_list(BlkSize),
                 ClientPid0 = spawn_link(fun() -> ClientFun([{"blksize", BlkSizeList}]) end),
-                
+
                 %% Recv WRITE
                 Options = ["blksize", 0, BlkSizeList, 0],
                 WriteBin = list_to_binary([WriteList | Options]),
-                {{udp, _, _, ClientPort0, _}} = ?VERIFY({udp, DaemonSocket, Host, _, WriteBin}, recv(Timeout)),
+                {{udp, DaemonSocket, Host, ClientPort0, WriteBin}} =
+                    ?TRY(recv(Timeout)),
 
                 %% Send OACK
                 BlkSizeList = integer_to_list(BlkSize),
                 OptionAckBin = list_to_binary([0, 6, "blksize",0, BlkSizeList, 0]),
-                ?VERIFY(ok, gen_udp:send(ServerSocket, Host, ClientPort0, OptionAckBin)),
+                {ok} = ?TRY(gen_udp:send(ServerSocket, Host, ClientPort0, OptionAckBin)),
 
                 %% Sleep a while in order to provoke the client to re-send the packet
                 timer:sleep(Timeout + timer:seconds(1)),
 
                 %% Recv DATA #1 (the packet that the server think that we have lost)
-                ?VERIFY({udp, ServerSocket, Host, ClientPort0, Data1Bin}, recv(Timeout)),
+                {{udp, ServerSocket, Host, ClientPort0, Data1Bin}} =
+                    ?TRY(recv(Timeout)),
 
                 %% Recv DATA #1 AGAIN (the re-sent package)
-                ?VERIFY({udp, ServerSocket, Host, ClientPort0, Data1Bin}, recv(Timeout)),
+                {{udp, ServerSocket, Host, ClientPort0, Data1Bin}} =
+                    ?TRY(recv(Timeout)),
                 {ClientPort0, ClientPid0}
         end,
 
     %% Send ACK #1
     Ack1Bin = <<0, 4, 0, 1>>,
-    ?VERIFY(ok, gen_udp:send(ServerSocket, Host, ClientPort, Ack1Bin)),
+    {ok} = ?TRY(gen_udp:send(ServerSocket, Host, ClientPort, Ack1Bin)),
 
     %% Recv DATA #2
     Data2Bin = list_to_binary([0, 3, 0, 2 | Block2]),
-    ?VERIFY({udp, ServerSocket, Host, ClientPort, Data2Bin}, recv(Timeout)),
+    {{udp, ServerSocket, Host, ClientPort, Data2Bin}} = ?TRY(recv(Timeout)),
 
     %% Send ACK #2
     Ack2Bin = <<0, 4, 0, 2>>,
-    ?VERIFY(ok, gen_udp:send(ServerSocket, Host, ClientPort, Ack2Bin)),
+    {ok} = ?TRY(gen_udp:send(ServerSocket, Host, ClientPort, Ack2Bin)),
 
     %% Recv DATA #3
     Data3Bin = list_to_binary([0, 3, 0, 3 | Block3]),
-    ?VERIFY({udp, ServerSocket, Host, ClientPort, Data3Bin}, recv(Timeout)),
+    {{udp, ServerSocket, Host, ClientPort, Data3Bin}} = ?TRY(recv(Timeout)),
 
     %% Send ACK #3
     Ack3Bin = <<0, 4, 0, 3>>,
-    ?VERIFY(ok, gen_udp:send(ServerSocket, Host, ClientPort, Ack3Bin)),
+    {ok} = ?TRY(gen_udp:send(ServerSocket, Host, ClientPort, Ack3Bin)),
 
     %% Send ACK #3 AGAIN (pretend that we timed out)
     timer:sleep(timer:seconds(1)),
-    ?VERIFY(ok, gen_udp:send(ServerSocket, Host, ClientPort, Ack3Bin)),
+    {ok} = ?TRY(gen_udp:send(ServerSocket, Host, ClientPort, Ack3Bin)),
 
     %% Recv DATA #4 (the packet that the server think that we have lost)
     Data4Bin = list_to_binary([0, 3, 0, 4 | Block4]),
-    ?VERIFY({udp, ServerSocket, Host, ClientPort, Data4Bin}, recv(Timeout)),
+    {{udp, ServerSocket, Host, ClientPort, Data4Bin}} = ?TRY(recv(Timeout)),
 
     %% Recv DATA #4 AGAIN (the re-sent package)
-    ?VERIFY({udp, ServerSocket, Host, ClientPort, Data4Bin}, recv(Timeout)),
+    {{udp, ServerSocket, Host, ClientPort, Data4Bin}} = ?TRY(recv(Timeout)),
 
     %% Send ACK #4
     Ack4Bin = <<0, 4, 0, 4>>,
-    ?VERIFY(ok, gen_udp:send(ServerSocket, Host, ClientPort, Ack4Bin)),
+    {ok} = ?TRY(gen_udp:send(ServerSocket, Host, ClientPort, Ack4Bin)),
 
     %% Recv DATA #5
     Data5Bin = list_to_binary([0, 3, 0, 5 | Block5]),
-    ?VERIFY({udp, ServerSocket, Host, ClientPort, Data5Bin}, recv(Timeout)),
+    {{udp, ServerSocket, Host, ClientPort, Data5Bin}} = ?TRY(recv(Timeout)),
 
     %% Send ACK #3 which is out of range
-    ?VERIFY(ok, gen_udp:send(ServerSocket, Host, ClientPort, Ack3Bin)),
+    {ok} = ?TRY(gen_udp:send(ServerSocket, Host, ClientPort, Ack3Bin)),
 
     %% Send ACK #5
     Ack5Bin = <<0, 4, 0, 5>>,
-    ?VERIFY(ok, gen_udp:send(ServerSocket, Host, ClientPort, Ack5Bin)),
+    {ok} = ?TRY(gen_udp:send(ServerSocket, Host, ClientPort, Ack5Bin)),
 
     %% Recv DATA #6
     Data6Bin = list_to_binary([0, 3, 0, 6 | Block6]),
-    ?VERIFY({udp, ServerSocket, Host, ClientPort, Data6Bin}, recv(Timeout)),
+    {{udp, ServerSocket, Host, ClientPort, Data6Bin}} = ?TRY(recv(Timeout)),
 
     %% Send ACK #6
     Ack6Bin = <<0, 4, 0, 6>>,
-    ?VERIFY(ok, gen_udp:send(ServerSocket, Host, ClientPort, Ack6Bin)),
+    {ok} = ?TRY(gen_udp:send(ServerSocket, Host, ClientPort, Ack6Bin)),
 
     %% Close daemon and server sockets
-    ?VERIFY(ok, gen_udp:close(ServerSocket)),
-    ?VERIFY(ok, gen_udp:close(DaemonSocket)),
+    {ok} = ?TRY(gen_udp:close(ServerSocket)),
+    {ok} = ?TRY(gen_udp:close(DaemonSocket)),
 
-    ?VERIFY({ClientPid, {tftp_client_reply, {ok, Size}}}, recv(Timeout)),
+    {{ClientPid, {tftp_client_reply, {ok, Size}}}} = ?TRY(recv(Timeout)),
 
-    ?VERIFY(timeout, recv(Timeout)),
+    {timeout} = ?TRY(recv(Timeout)),
     ok.
 
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
@@ -935,7 +941,7 @@ reuse_connection(suite) ->
     [];
 reuse_connection(Config) when is_list(Config) ->
     Host = {127, 0, 0, 1},
-    {{Port, DaemonPid}} = ?IGNORE(?START_DAEMON([{debug, all}])),
+    {{Port, DaemonPid}} = ?TRY(?START_DAEMON([{debug, all}])),
 
     RemoteFilename = "reuse_connection.tmp",
     BlkSize = 512,
@@ -943,55 +949,56 @@ reuse_connection(Config) when is_list(Config) ->
     Block2 = lists:duplicate(BlkSize div 2, $2),
     Blocks = [Block1, Block2],
     Blob = list_to_binary(Blocks),
-    ?VERIFY(ok, file:write_file(RemoteFilename, Blob)),
-    
+    {ok} = ?TRY(file:write_file(RemoteFilename, Blob)),
+
     Seconds = 3,
     Timeout = timer:seconds(Seconds),
-    ?VERIFY(timeout, recv(0)),
-    
+    {timeout} = ?TRY(recv(0)),
+
     %% Open socket
-    {{ok, Socket}} = ?VERIFY({ok, _}, gen_udp:open(0, [binary, {reuseaddr, true}, {active, true}])),
-    
+    {{ok, Socket}} =
+        ?TRY(gen_udp:open(0, [binary, {reuseaddr, true}, {active, true}])),
+
     ReadList = [0, 1, RemoteFilename, 0, "octet", 0],
     Data1Bin = list_to_binary([0, 3, 0, 1 | Block1]),
-    
+
     %% Send READ
     TimeoutList = integer_to_list(Seconds),
     Options = ["timeout", 0, TimeoutList, 0],
     ReadBin = list_to_binary([ReadList | Options]),
-    ?VERIFY(ok, gen_udp:send(Socket, Host, Port, ReadBin)),
+    {ok} = ?TRY(gen_udp:send(Socket, Host, Port, ReadBin)),
 
     %% Send yet another READ for same file
-    ?VERIFY(ok, gen_udp:send(Socket, Host, Port, ReadBin)),
+    {ok} = ?TRY(gen_udp:send(Socket, Host, Port, ReadBin)),
 
     %% Recv OACK
     OptionAckBin = list_to_binary([0, 6 | Options]),
-    {{udp, _, _, NewPort, _}} = ?VERIFY({udp, Socket, Host, _, OptionAckBin}, recv(Timeout)),
+    {{udp, Socket, Host, NewPort, OptionAckBin}} = ?TRY(recv(Timeout)),
 
     %% Send ACK #0
     Ack0Bin = <<0, 4, 0, 0>>,
-    ?VERIFY(ok, gen_udp:send(Socket, Host, NewPort, Ack0Bin)),
+    {ok} = ?TRY(gen_udp:send(Socket, Host, NewPort, Ack0Bin)),
 
     %% Recv DATA #1
-    ?VERIFY({udp, Socket, Host, NewPort, Data1Bin}, recv(Timeout)),
+    {{udp, Socket, Host, NewPort, Data1Bin}} = ?TRY(recv(Timeout)),
 
     %% Send ACK #1
     Ack1Bin = <<0, 4, 0, 1>>,
-    ?VERIFY(ok, gen_udp:send(Socket, Host, NewPort, Ack1Bin)),
+    {ok} = ?TRY(gen_udp:send(Socket, Host, NewPort, Ack1Bin)),
 
     %% Recv DATA #2
     Data2Bin = list_to_binary([0, 3, 0, 2 | Block2]),
-    ?VERIFY({udp, Socket, Host, NewPort, Data2Bin}, recv(Timeout)),
+    {{udp, Socket, Host, NewPort, Data2Bin}} = ?TRY(recv(Timeout)),
 
     %% Send ACK #2
     Ack2Bin = <<0, 4, 0, 2>>,
-    ?VERIFY(ok, gen_udp:send(Socket, Host, NewPort, Ack2Bin)),
+    {ok} = ?TRY(gen_udp:send(Socket, Host, NewPort, Ack2Bin)),
 
     %% Close socket
-    ?VERIFY(ok, gen_udp:close(Socket)),
+    {ok} = ?TRY(gen_udp:close(Socket)),
 
-    ?VERIFY(timeout, recv(Timeout)),
-    ?VERIFY(ok, file:delete(RemoteFilename)),
+    {timeout} = ?TRY(recv(Timeout)),
+    {ok} = ?TRY(file:delete(RemoteFilename)),
 
     %% Cleanup
     unlink(DaemonPid),
@@ -1007,9 +1014,9 @@ large_file(doc) ->
 large_file(suite) ->
     [];
 large_file(Config) when is_list(Config) ->
-    ?VERIFY(ok, application:start(tftp)),
+    {ok} = ?TRY(application:start(tftp)),
 
-    {{Port, DaemonPid}} = ?IGNORE(?START_DAEMON([{debug, brief}])),
+    {{Port, DaemonPid}} = ?TRY(?START_DAEMON([{debug, brief}])),
 
     %% Read fail
     RemoteFilename = "tftp_temporary_large_file_remote_test_file.txt",
@@ -1018,19 +1025,20 @@ large_file(Config) when is_list(Config) ->
     {ok, FH} = file:open(LocalFilename, [write,exclusive]),
     {ok, Size} = file:position(FH, {eof, 2*512*65535}),
     ok = file:truncate(FH),
-    ?IGNORE(file:close(FH)),
+    ?TRY(file:close(FH)),
 
     %% Write and read
-    ?VERIFY({ok, Size}, tftp:write_file(RemoteFilename, LocalFilename, [{port, Port}])),
-    ?IGNORE(file:delete(LocalFilename)),
-    ?VERIFY({ok, Size}, tftp:read_file(RemoteFilename, LocalFilename, [{port, Port}])),
+    {{ok, Size}} =
+        ?TRY(tftp:write_file(RemoteFilename, LocalFilename, [{port, Port}])),
+    ?TRY(file:delete(LocalFilename)),
+    {{ok, Size}} = ?TRY(tftp:read_file(RemoteFilename, LocalFilename, [{port, Port}])),
 
     %% Cleanup
     unlink(DaemonPid),
     exit(DaemonPid, kill),
-    ?VERIFY(ok, file:delete(LocalFilename)),
-    ?VERIFY(ok, file:delete(RemoteFilename)),
-    ?VERIFY(ok, application:stop(tftp)),
+    {ok} = ?TRY(file:delete(LocalFilename)),
+    {ok} = ?TRY(file:delete(RemoteFilename)),
+    {ok} = ?TRY(application:stop(tftp)),
     ok.
 
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
diff --git a/lib/tftp/test/tftp_test_lib.erl b/lib/tftp/test/tftp_test_lib.erl
index f1913960ef..1cdbc032fe 100644
--- a/lib/tftp/test/tftp_test_lib.erl
+++ b/lib/tftp/test/tftp_test_lib.erl
@@ -20,274 +20,38 @@
 %% %CopyrightEnd%
 %%
 
-%% ---------------------------------------------------------------------
-%% et
-%% The 'et' app is used to report "events".
-%% But its possible to build otp *without* 'et' (--without-et').
-%% If that is the case, we cannot report event. We therefor have
-%% a wrapper function, report_event, which first tests if the 'et'
-%% module actually exists (by attempting to load the module).
-%% ---------------------------------------------------------------------
-
 -module(tftp_test_lib).
 
 -compile([export_all, nowarn_export_all]).
 
--include("tftp_test_lib.hrl").
-
-
-%%
-%% -----
-%%
-
-init_per_testcase(_Case, Config) when is_list(Config) ->
-    io:format("\n ", []),
-    ?IGNORE(application:stop(tftp)),
-    Config.
-
-end_per_testcase(_Case, Config) when is_list(Config) ->
-    ?IGNORE(application:stop(tftp)),
-    Config.
-
 
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 %% Infrastructure for test suite
+%%
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 
-verify(MatchFun, Fun, Mod, Line) ->
-    try Fun() of
-        Result ->
-            case MatchFun({Result}) of
-                true ->
-                    log("Ok, ~p~n", [Result], Mod, Line),
-                    {Result};
-                false ->
-                    log("<ERROR> Bad result: ~p\n", [Result], Mod, Line),
-                    erlang:error({Mod, Line, Result})
-            end
-    catch Class : Reason : Stacktrace ->
-            case MatchFun({Class, Reason}) of
-                true ->
-                    log("Expected exception, ~w : ~w : ~p~n",
-                        [Class, Reason, Stacktrace],
-                        Mod, Line),
-                    {Class, Reason, Stacktrace};
-                false ->
-                    log("Exception, ~w : ~w : ~p~n",
-                        [Class, Reason, Stacktrace],
-                        Mod, Line),
-                    erlang:error({Mod, Line, Class, Reason, Stacktrace})
-            end
-    end.
-
-ignore(Fun, Mod, Line) ->
+try_catch(Fun, Module, Line, FunctionName) ->
     try Fun() of
         Result ->
-            log("Ok, ~p~n", [Result], Mod, Line),
+            log("~p~n", [Result],
+                Module, Line, FunctionName),
             {Result}
     catch Class : Reason : Stacktrace ->
-            log("Ignored exception, ~w : ~w : ~p~n",
-                [Class, Reason, Stacktrace],
-                Mod, Line),
-            {Class, Reason, Stacktrace}
+            CLASS = 'CLASS'(Class),
+            log("~w : ~w~n    ~p~n", [CLASS, Reason, Stacktrace],
+                Module, Line, FunctionName),
+            {CLASS, Reason}
     end.
 
-error(Actual, Mod, Line) ->
-    log("<ERROR> Bad result: ~p\n", [Actual], Mod, Line),
-    erlang:error({Mod, Line, Actual}).
-
-log(Format, Args, Mod, Line) ->
-    io:format(user, "~p(~p): " ++ Format, [Mod, Line] ++ Args).
-
-
-default_config() ->
-    [].
-
-t() -> 
-    t([{?MODULE, all}]).
-
-t(Cases) ->
-    t(Cases, default_config()).
-
-t(Cases, Config) ->
-    process_flag(trap_exit, true),
-    Res = lists:flatten(do_test(Cases, Config)),
-    io:format("Res: ~p\n", [Res]),
-    display_result(Res),
-    Res.
-
-do_test({Mod, Fun}, Config) when is_atom(Mod), is_atom(Fun) ->
-    try apply(Mod, Fun, [suite]) of
-	[] ->
-	    io:format("Eval:   ~p:", [{Mod, Fun}]),
-	    Res = eval(Mod, Fun, Config),
-	    {R, _, _} = Res,
-	    io:format(" ~p\n", [R]),
-	    Res;
-
-	Cases when is_list(Cases) ->
-	    io:format("Expand: ~p ...\n", [{Mod, Fun}]),
-	    Map = fun(Case) when is_atom(Case)-> {Mod, Case};
-		     (Case) -> Case
-		  end,
-	    do_test(lists:map(Map, Cases), Config);
-
-        {req, _, {conf, Init, Cases, Finish}} ->
-	    try apply(Mod, Init, [Config]) of
-		Conf when is_list(Conf) ->
-		    io:format("Expand: ~p ...\n", [{Mod, Fun}]),
-		    Map = fun(Case) when is_atom(Case)-> {Mod, Case};
-			     (Case) -> Case
-			  end,
-		    Res = do_test(lists:map(Map, Cases), Conf),
-		    try apply(Mod, Finish, [Conf]) catch _ : _ -> ok end,
-		    Res;
-
-		Error ->
-		    io:format(" => failed: ~p\n", [Error]),
-		    [{failed, {Mod, Fun}, Error}]
-
-            catch throw : {skipped, Reason} ->
-		    io:format(" => skipping: ~p\n", [Reason]),
-		    [{skipped, {Mod, Fun}, Reason}]
-            end;
-
-        Error ->
-	    io:format("Ignoring:   ~p: ~p\n", [{Mod, Fun}, Error]),
-	    [{failed, {Mod, Fun}, Error}]
-
-    catch error : undef : Stacktrace ->
-	    io:format("Undefined:   ~p~n~p~n", [{Mod, Fun}, Stacktrace]),
-	    [{nyi, {Mod, Fun}, ok}]
-    end;
-do_test(Mod, Config) when is_atom(Mod) ->
-    Res = do_test({Mod, all}, Config),
-    Res;
-do_test(Cases, Config) when is_list(Cases) ->
-    [do_test(Case, Config) || Case <- Cases];
-do_test(Bad, _Config) ->
-    [{badarg, Bad, ok}].
-
-eval(Mod, Fun, Config) ->
-    TestCase = {?MODULE, Mod, Fun},
-    Label = lists:concat(["TEST CASE: ", Fun]),
-    report_event(40, ?MODULE, Mod, Label ++ " started",
-                 [TestCase, Config]),
-    global:register_name(tftp_test_case_sup, self()),
-    Flag = process_flag(trap_exit, true),
-    Config2 = Mod:init_per_testcase(Fun, Config),
-    Pid = spawn_link(?MODULE, do_eval, [self(), Mod, Fun, Config2]),
-    R = wait_for_evaluator(Pid, Mod, Fun, Config2, []),
-    Mod:end_per_testcase(Fun, Config2),
-    global:unregister_name(tftp_test_case_sup),
-    process_flag(trap_exit, Flag),
-    R.
-
-wait_for_evaluator(Pid, Mod, Fun, Config, Errors) ->
-    TestCase = {?MODULE, Mod, Fun},
-    Label = lists:concat(["TEST CASE: ", Fun]),
-    receive
-	{done, Pid, ok} when Errors == [] ->
-	    report_event(40, Mod, ?MODULE, Label ++ " ok",
-                         [TestCase, Config]),
-	    {ok, {Mod, Fun}, Errors};
-	{done, Pid, {ok, _}} when Errors == [] ->
-	    report_event(40, Mod, ?MODULE, Label ++ " ok",
-                         [TestCase, Config]),
-	    {ok, {Mod, Fun}, Errors};
-	{done, Pid, Fail} ->
-	    report_event(20, Mod, ?MODULE, Label ++ " failed",
-                         [TestCase, Config, {return, Fail}, Errors]),
-	    {failed, {Mod,Fun}, Fail};
-	{'EXIT', Pid, {skipped, Reason}} -> 
-	    report_event(20, Mod, ?MODULE, Label ++ " skipped",
-                         [TestCase, Config, {skipped, Reason}]),
-	    {skipped, {Mod, Fun}, Errors};
-	{'EXIT', Pid, Reason} -> 
-	    report_event(20, Mod, ?MODULE, Label ++ " crashed",
-                         [TestCase, Config, {'EXIT', Reason}]),
-	    {crashed, {Mod, Fun}, [{'EXIT', Reason} | Errors]};
-	{fail, Pid, Reason} ->
-	    wait_for_evaluator(Pid, Mod, Fun, Config, Errors ++ [Reason])
-    end.
-
-do_eval(ReplyTo, Mod, Fun, Config) ->
-    try apply(Mod, Fun, [Config]) of
-	Other ->
-	    ReplyTo ! {done, self(), Other}
-    catch throw : {skipped, Reason} ->
-	    ReplyTo ! {'EXIT', self(), {skipped, Reason}}
-    end,
-    unlink(ReplyTo),
-    exit(shutdown).
-
-display_result([]) ->    
-    io:format("OK\n", []);
-display_result(Res) when is_list(Res) ->
-    Ok      = [MF || {ok, MF, _}  <- Res],
-    Nyi     = [MF || {nyi, MF, _} <- Res],
-    Skipped = [{MF, Reason} || {skipped, MF, Reason} <- Res],
-    Failed  = [{MF, Reason} || {failed, MF, Reason} <- Res],
-    Crashed = [{MF, Reason} || {crashed, MF, Reason} <- Res],
-    display_summary(Ok, Nyi, Skipped, Failed, Crashed),
-    display_skipped(Skipped),
-    display_failed(Failed),
-    display_crashed(Crashed).
-
-display_summary(Ok, Nyi, Skipped, Failed, Crashed) ->
-    io:format("\nTest case summary:\n", []),
-    display_summary(Ok,      "successful"),
-    display_summary(Nyi,     "not yet implemented"),
-    display_summary(Skipped, "skipped"),
-    display_summary(Failed,  "failed"),
-    display_summary(Crashed, "crashed"),
-    io:format("\n", []).
-   
-display_summary(Res, Info) ->
-    io:format("  ~w test cases ~s\n", [length(Res), Info]).
-    
-display_skipped([]) ->
-    ok;
-display_skipped(Skipped) ->
-    io:format("Skipped test cases:\n", []),
-    F = fun({MF, Reason}) -> io:format("  ~p => ~p\n", [MF, Reason]) end,
-    lists:foreach(F, Skipped),
-    io:format("\n", []).
-    
-
-display_failed([]) ->
-    ok;
-display_failed(Failed) ->
-    io:format("Failed test cases:\n", []),
-    F = fun({MF, Reason}) -> io:format("  ~p => ~p\n", [MF, Reason]) end,
-    lists:foreach(F, Failed),
-    io:format("\n", []).
-
-display_crashed([]) ->
-    ok;
-display_crashed(Crashed) ->
-    io:format("Crashed test cases:\n", []),
-    F = fun({MF, Reason}) -> io:format("  ~p => ~p\n", [MF, Reason]) end,
-    lists:foreach(F, Crashed),
-    io:format("\n", []).
-
-
-report_event(DetailLevel, From, To, Label, Contents) ->
-    case code:ensure_loaded(et) of
-        {module, _} ->
-            et:report_event(DetailLevel, From, To, Label, Contents);
-        {error, _} ->
-            io:format(user,
-                      "EVENT: "
-                      "~n   Level:   ~p"
-                      "~n   From:    ~p"
-                      "~n   To:      ~p"
-                      "~n   Label:   ~p"
-                      "~n   Content: ~p",
-                      [DetailLevel, From, To, Label, Contents]),
-            ok
+'CLASS'(Class) ->
+    case Class of
+        exit  -> 'EXIT';
+        error -> 'ERROR';
+        throw -> 'THROW'
     end.
 
+log(Format, Args, Mod, Line, FunctionName) ->
+    io:format(user, "~w:~w:~w: " ++ Format, [Mod, FunctionName, Line] ++ Args).
 
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 %% generic callback
diff --git a/lib/tftp/test/tftp_test_lib.hrl b/lib/tftp/test/tftp_test_lib.hrl
index 727838df8d..ef39a6a391 100644
--- a/lib/tftp/test/tftp_test_lib.hrl
+++ b/lib/tftp/test/tftp_test_lib.hrl
@@ -20,35 +20,8 @@
 %% %CopyrightEnd%
 %%
 
--define(VERIFY(Expected, Expr),
+-define(TRY(Expr),
         begin
-            tftp_test_lib:verify(
-              fun (_ExPr_ReSuLt) ->
-                      case _ExPr_ReSuLt of
-                          {Expected} -> true;
-                          _          -> false
-                      end
-              end,
-              fun () -> begin Expr end end,
-              ?MODULE, ?LINE)
-        end).
-
--define(VERIFY(Class, Reason, Expr),
-        begin
-            tftp_test_lib:verify(
-              fun (_ExCePtIoN_TuPlE) ->
-                      case _ExCePtIoN_TuPlE of
-                          {(Class), (Reason)} -> true;
-                          _                   -> false
-                      end
-              end,
-              fun () -> begin Expr end end,
-              ?MODULE, ?LINE)
-        end).
-
--define(IGNORE(Expr),
-        begin
-            tftp_test_lib:ignore(
-              fun () -> begin Expr end end,
-              ?MODULE, ?LINE)
+            tftp_test_lib:try_catch(fun () -> begin Expr end end,
+                                    ?MODULE, ?LINE, ?FUNCTION_NAME)
         end).
-- 
2.51.0

openSUSE Build Service is sponsored by