riak_test/tests/client_python_verify.erl

76 lines
3.4 KiB
Erlang
Raw Normal View History

2012-11-18 23:08:48 +00:00
-module(client_python_verify).
-export([confirm/0]).
-include_lib("eunit/include/eunit.hrl").
%% @todo set this to 1.5.2 or greater, once that's released
-define(PYTHON_CLIENT_TAG, "1.5-stable").
2012-11-18 23:08:48 +00:00
-define(PYTHON_CHECKOUT, filename:join([rt:config(rt_scratch_dir), "riak-python-client"])).
-define(PYTHON_GIT_URL, "git://github.com/basho/riak-python-client.git").
confirm() ->
prereqs(),
Config = [{riak_search, [{enabled, true}]}],
[Node] = rt:deploy_nodes(1, Config),
rt:wait_for_service(Node, riak_search),
[{Node, ConnectionInfo}] = rt:connection_info([Node]),
{HTTP_Host, HTTP_Port} = orddict:fetch(http, ConnectionInfo),
{PB_Host, PB_Port} = orddict:fetch(pb, ConnectionInfo),
lager:info("Connection Info: http: ~p:~p pb: ~p:~p", [HTTP_Host, HTTP_Port, PB_Host, PB_Port]),
lager:info("Enabling search hook on 'searchbucket'"),
rt:enable_search_hook(Node, <<"searchbucket">>),
{ExitCode, PythonLog} = rt:stream_cmd("bin/python setup.py develop test",
2012-11-18 23:08:48 +00:00
[{cd, ?PYTHON_CHECKOUT},
{env,[{"RIAK_TEST_PB_HOST", PB_Host},
{"RIAK_TEST_PB_PORT", integer_to_list(PB_Port)},
{"RIAK_TEST_HTTP_HOST", HTTP_Host},
{"RIAK_TEST_HTTP_PORT", integer_to_list(HTTP_Port)},
{"SKIP_LUWAK", "1"}]}]),
?assertEqual(0, ExitCode),
lager:info(PythonLog),
?assertNot(rt:str(PythonLog, "FAIL")),
pass.
prereqs() ->
2012-12-04 16:54:35 +00:00
%% Cleanup from previous test runs as it causes a
%% virtualenv caremad explosion if it already exists
lager:info("[PREREQ] Cleaning up python scratch directory"),
CleanupCMD = io_lib:format("rm -rf ~s", [?PYTHON_CHECKOUT]),
os:cmd(CleanupCMD),
2012-11-18 23:08:48 +00:00
%% Need python, yo
lager:info("[PREREQ] Checking for presence of python"),
2012-11-18 23:08:48 +00:00
?assertNot(length(os:cmd("which python")) =:= 0),
%% Python should be at least 2.6, but not 3.x
lager:info("[PREREQ] Checking for python version >= 2.6, < 3.0"),
2012-11-18 23:08:48 +00:00
"Python 2." ++ [Minor|_] = os:cmd("python -V"),
?assert(Minor =:= $6 orelse Minor =:= $7),
%% Need setuptools too
lager:info("[PREREQ] Checking for presence of setuptools"),
2012-11-18 23:08:48 +00:00
?assertCmd("python -c 'import setuptools'"),
%% Virtualenv will isolate this so we don't have permissions issues.
lager:info("[PREREQ] Checking for presence of virtualenv"),
?assertCmd("virtualenv --help"),
2012-11-18 23:08:48 +00:00
%% Checkout the project and a specific tag.
lager:info("[PREREQ] Cloning riak-python-client from ~s", [?PYTHON_GIT_URL]),
Cmd = io_lib:format("git clone ~s ~s", [?PYTHON_GIT_URL, ?PYTHON_CHECKOUT]),
rt:stream_cmd(Cmd),
lager:info("[PREREQ] Resetting python client to tag '~s'", [?PYTHON_CLIENT_TAG]),
%% @todo below is how to reset to a tag, use that when 1.5.2 is available
%%TagCmd = io_lib:format("git reset --hard ~s", [?PYTHON_CLIENT_TAG]),
rt:stream_cmd("git reset --hard", [{cd, ?PYTHON_CHECKOUT}]),
TagCmd = io_lib:format("git checkout -b ~s", [?PYTHON_CLIENT_TAG]),
2012-11-18 23:08:48 +00:00
rt:stream_cmd(TagCmd, [{cd, ?PYTHON_CHECKOUT}]),
lager:info("[PREREQ] Installing an isolated environment with virtualenv in ~s", [?PYTHON_CHECKOUT]),
rt:stream_cmd("virtualenv --clear --no-site-packages .", [{cd, ?PYTHON_CHECKOUT}]),
2012-11-18 23:08:48 +00:00
ok.