From: Serge Petrenko <sergepetrenko@tarantool.org> To: Vladimir Davydov <vdavydov.dev@gmail.com> Cc: kostja@tarantool.org, tarantool-patches@freelists.org Subject: Re: [PATCH v2] tarantoolctl: return an error on enter to a dead socket. Date: Tue, 21 Aug 2018 15:51:57 +0300 [thread overview] Message-ID: <17F09AB8-AD92-46D6-BB41-6FF109C336CA@tarantool.org> (raw) In-Reply-To: <20180821122835.6w3kyvlznpxjxhij@esperanza> > 21 авг. 2018 г., в 15:28, Vladimir Davydov <vdavydov.dev@gmail.com> написал(а): > > On Tue, Aug 21, 2018 at 09:56:21AM +0300, Serge Petrenko wrote: >> +-- check enter >> +do >> + local dir = fio.tempdir() >> + >> + local code = [[ box.cfg{} ]] >> + create_script(dir, 'script.lua', code) >> + >> + local status, err = pcall(function() >> + test:test("check error codes in case of enter", function(test_i) >> + test_i:plan(10) >> + check_ok(test_i, dir, 'enter', 'script', 1, nil, "Can't connect to") >> + local console_sock = 'script.control' >> + console_sock = fio.pathjoin(dir, console_sock) >> + test_i:is(fio.path.exists(console_sock), false, "directory clean") >> + check_ok(test_i, dir, 'start', 'script', 0) >> + tctl_wait_start(dir, 'script') >> + test_i:is(fio.path.exists(console_sock), true, >> + "unix socket created") >> + check_ok(test_i, dir, 'stop', 'script', 0) >> + wait_delete(console_sock) > > There's tctl_wait_stop() for this. Yes, fixed. New diff is below. > > Anyway, why do you need to start/stop instance before trying to enter > it? AFAIU you just want to check that 'tarantoolctl enter' returns an > error when called on a closed socket so the code below should be enough. I wanted to stress that I’m using a correct path to socket. Not just creating some Random file at some random place and then expecting `tarantoolctl enter` to fail. Also test that there is no socket after `tarantoolctl stop` was a request by Kostja For previous patch, but it is irrelevant now. We can remove it, if you want, but I believe it’s some extra coverage, nothing wrong with that. >> + test_i:is(fio.path.exists(console_sock), false, >> + "remove unix socket upon exit") >> + fio.open(console_sock, 'O_CREAT') >> + test_i:is(fio.path.exists(console_sock), true, "file created") >> + check_ok(test_i, dir, 'enter', 'script', 1, nil, "Can't connect to") >> + fio.unlink(console_sock) >> + end) >> + end) >> + >> + cleanup_instance(dir, 'script') >> + recursive_rmdir(dir) >> + >> + if status == false then >> + print(("Error: %s"):format(err)) >> + os.exit() >> + end >> +end >> + extra/dist/tarantoolctl.in | 19 +++++++++++------- test/app-tap/tarantoolctl.test.lua | 40 +++++++++++++++++++++++++++++++++++++- 2 files changed, 51 insertions(+), 8 deletions(-) diff --git a/extra/dist/tarantoolctl.in b/extra/dist/tarantoolctl.in index 70747bd0c..6b6e78cd2 100755 --- a/extra/dist/tarantoolctl.in +++ b/extra/dist/tarantoolctl.in @@ -638,15 +638,20 @@ local function enter() end return 1 end - - local cmd = string.format( - "require('console').connect('%s', { connect_timeout = %s })", - console_sock, TIMEOUT_INFINITY - ) - - console.on_start(function(self) self:eval(cmd) end) + local status, ret + console.on_start(function(self) + status, ret = pcall(console.connect, console_sock, + {connect_timeout = TIMEOUT_INFINITY}) + if not status then + log.error("Can't connect to %s (%s)", console_sock_path, ret) + self.running = false + end + end) console.on_client_disconnect(function(self) self.running = false end) console.start() + if not status then + return 1 + end return 0 end diff --git a/test/app-tap/tarantoolctl.test.lua b/test/app-tap/tarantoolctl.test.lua index ac9a208ca..64f2aa7e7 100755 --- a/test/app-tap/tarantoolctl.test.lua +++ b/test/app-tap/tarantoolctl.test.lua @@ -157,7 +157,7 @@ local function check_ok(test, dir, cmd, args, e_res, e_stdout, e_stderr) end local test = tap.test('tarantoolctl') -test:plan(6) +test:plan(7) -- basic start/stop test -- must be stopped afterwards @@ -258,6 +258,44 @@ do end end +-- check enter +do + local dir = fio.tempdir() + + local code = [[ box.cfg{} ]] + create_script(dir, 'script.lua', code) + + local status, err = pcall(function() + test:test("check error codes in case of enter", function(test_i) + test_i:plan(10) + check_ok(test_i, dir, 'enter', 'script', 1, nil, "Can't connect to") + local console_sock = 'script.control' + console_sock = fio.pathjoin(dir, console_sock) + test_i:is(fio.path.exists(console_sock), false, "directory clean") + check_ok(test_i, dir, 'start', 'script', 0) + tctl_wait_start(dir, 'script') + test_i:is(fio.path.exists(console_sock), true, + "unix socket created") + check_ok(test_i, dir, 'stop', 'script', 0) + tctl_wait_stop(dir, 'script') + test_i:is(fio.path.exists(console_sock), false, + "remove unix socket upon exit") + fio.open(console_sock, 'O_CREAT') + test_i:is(fio.path.exists(console_sock), true, "file created") + check_ok(test_i, dir, 'enter', 'script', 1, nil, "Can't connect to") + fio.unlink(console_sock) + end) + end) + + cleanup_instance(dir, 'script') + recursive_rmdir(dir) + + if status == false then + print(("Error: %s"):format(err)) + os.exit() + end +end + -- check basic help do local dir = fio.tempdir() -- 2.15.2 (Apple Git-101.1)
next prev parent reply other threads:[~2018-08-21 12:51 UTC|newest] Thread overview: 4+ messages / expand[flat|nested] mbox.gz Atom feed top 2018-08-21 6:56 Serge Petrenko 2018-08-21 12:28 ` Vladimir Davydov 2018-08-21 12:51 ` Serge Petrenko [this message] 2018-08-21 13:26 ` Vladimir Davydov
Reply instructions: You may reply publicly to this message via plain-text email using any one of the following methods: * Save the following mbox file, import it into your mail client, and reply-to-all from there: mbox Avoid top-posting and favor interleaved quoting: https://en.wikipedia.org/wiki/Posting_style#Interleaved_style * Reply using the --to, --cc, and --in-reply-to switches of git-send-email(1): git send-email \ --in-reply-to=17F09AB8-AD92-46D6-BB41-6FF109C336CA@tarantool.org \ --to=sergepetrenko@tarantool.org \ --cc=kostja@tarantool.org \ --cc=tarantool-patches@freelists.org \ --cc=vdavydov.dev@gmail.com \ --subject='Re: [PATCH v2] tarantoolctl: return an error on enter to a dead socket.' \ /path/to/YOUR_REPLY https://kernel.org/pub/software/scm/git/docs/git-send-email.html * If your mail client supports setting the In-Reply-To header via mailto: links, try the mailto: link
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox