From 3218ffcc9d300a92c840a2025624cba51a0e3c20 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Erik=20Hedenstro=CC=88m?= <erik@hedenstroem.com> Date: Mon, 26 Sep 2016 17:12:59 +0200 Subject: [PATCH] Improved cleanup --- src/dockerl.erl | 6 ++++++ test/dockerl_test.erl | 46 +++++++++++++++++++++++++++++++------------ 2 files changed, 39 insertions(+), 13 deletions(-) diff --git a/src/dockerl.erl b/src/dockerl.erl index 09b9520..47f7d14 100644 --- a/src/dockerl.erl +++ b/src/dockerl.erl @@ -9,6 +9,7 @@ list_images/1, list_images/2, pull_image/2, pull_image/3, + pull_image_async/2, pull_image_async/3, inspect_image/2, image_history/2, remove_image/2, remove_image/3, @@ -73,6 +74,11 @@ pull_image(ServerRef, Name) -> pull_image(ServerRef, Name, Tag) -> gen_server:call(ServerRef, {post, <<"/images/create?fromImage=", Name/binary, "&tag=", Tag/binary>>}, 600000). +pull_image_async(ServerRef, Name) -> + gen_server:call(ServerRef, {stream, post, <<"/images/create?fromImage=", Name/binary>>}, 600000). +pull_image_async(ServerRef, Name, Tag) -> + gen_server:call(ServerRef, {stream, post, <<"/images/create?fromImage=", Name/binary, "&tag=", Tag/binary>>}, 600000). + inspect_image(ServerRef, Name) -> gen_server:call(ServerRef, {get, <<"/images/", Name/binary, "/json">>}). diff --git a/test/dockerl_test.erl b/test/dockerl_test.erl index 620f766..d4cb64a 100644 --- a/test/dockerl_test.erl +++ b/test/dockerl_test.erl @@ -22,20 +22,24 @@ start() -> lager:set_loglevel(lager_console_backend, debug), hackney:start(), {ok, Pid} = dockerl:start_link(socket, <<"/var/run/docker.sock">>), - Pid. + {Pid, random_name(16)}. -stop(Pid) -> +stop({Pid, _}) -> MRef = erlang:monitor(process, Pid), gen_server:cast(Pid, stop), receive {'DOWN', MRef, _, _, _} -> ok end. -instantiator(Pid) -> +instantiator({Pid, Name}) -> [ info(Pid), version(Pid), {timeout, 60, pull_image(Pid)}, - {timeout, 60, start_container(Pid)}, - {timeout, 60, remove_image(Pid)} + create_container(Pid, Name), + start_container(Pid, Name), + {timeout, 20, query_container(Pid, Name)}, + stop_container(Pid, Name), + remove_container(Pid, Name), + remove_image(Pid) ]. %%%==================================================================== @@ -50,21 +54,29 @@ version(Pid) -> pull_image(Pid) -> ?_assertMatch({ok, _}, dockerl:pull_image(Pid, <<"nginx:alpine">>)). -remove_image(Pid) -> - ?_assertMatch({ok, _}, dockerl:remove_image(Pid, <<"nginx:alpine">>)). +create_container(Pid, Name) -> + ?_assertMatch({ok, _}, dockerl:create_container(Pid, <<"nginx:alpine">>, Name, #{'PublishAllPorts' => true, 'Tty' => true})). + +start_container(Pid, Name) -> + ?_assertMatch(ok, dockerl:start_container(Pid, Name)). -start_container(Pid) -> +query_container(Pid, Id) -> fun() -> - {ok, Id} = dockerl:create_container(Pid, <<"nginx:alpine">>, #{'PublishAllPorts' => true, 'Tty' => true}), - ?assertMatch(ok, dockerl:start_container(Pid, Id)), {ok, #{<<"80/tcp">> := [{_Address, Port}]}} = dockerl_utils:get_ports(Pid, Id), spawn(fun() -> send_request(Port) end), {ok, Stream} = dockerl:container_logs(Pid, Id), - ?assertEqual(ok, match_logs(Stream, <<"eunit">>, 1)), - ?assertMatch(ok, dockerl:stop_container(Pid, Id)), - ?assertMatch(ok, dockerl:remove_container(Pid, Id)) + ?assertEqual(ok, match_logs(Stream, <<"eunit">>, 1)) end. +stop_container(Pid, Name) -> + ?_assertMatch(ok, dockerl:stop_container(Pid, Name)). + +remove_container(Pid, Name) -> + ?_assertMatch(ok, dockerl:remove_container(Pid, Name)). + +remove_image(Pid) -> + ?_assertMatch({ok, _}, dockerl:remove_image(Pid, <<"nginx:alpine">>)). + %%%=================================================================== %%% Internal functions %%%=================================================================== @@ -95,3 +107,11 @@ match_logs(Stream, Pattern, Count) -> Stream ! stop, {error, timeout} end. + +random_name(Length) -> + random_name(Length, "abcdefghijklmnopqrstuvwyz"). +random_name(Length, AllowedChars) -> + list_to_binary(lists:foldl( + fun(_, Acc) -> + [lists:nth(rand:uniform(length(AllowedChars)), AllowedChars) | Acc] + end, [], lists:seq(1, Length))). -- GitLab