From: Cyrill Gorcunov <gorcunov@gmail.com> To: Alexander Turenko <alexander.turenko@tarantool.org> Cc: tml <tarantool-patches@dev.tarantool.org> Subject: Re: [Tarantool-patches] [PATCH 1/2] box/console: handle multireturn in lua mode Date: Tue, 14 Jan 2020 23:27:18 +0300 [thread overview] Message-ID: <20200114202718.GJ31598@uranus> (raw) In-Reply-To: <20200114005412.7zdb74fd5kn35l4v@tkn_work_nb> On Tue, Jan 14, 2020 at 03:54:12AM +0300, Alexander Turenko wrote: > > Cited from the previous review (see [1]) and your answer (to discuss it > here): > > >> BTW, it is a bit unusual to use `opts` for a string value: is it worth > >> to rename it to `mode`? > > > > Sasha, I left @opts variable untouched simply because we might > > extend it in future (while for now it is only a single string). > > I don't get the point, to be honest. This is the internal function and > we can change it as we wish when we wish. However it is better when each > incarnation corresponds to usual conventions. For `opts` I would expect > that it is a key-value table, but `mode` can be anything (I have no > assumptions for this name and so I'm motivated to look at the code). > > Since this is the internal function and it has quite small amount of > arguments I would not create a table and keep the argument being a > string. I just think that `opts` name may be a bit misleading. > > Anyway, it is quite minor thing considering that the function is easy > and small. Thanks, accounted. I'll rework the series, and address this name too. > > diff --git a/test/app-tap/console-lua.skipcond b/test/app-tap/console-lua.skipcond > > new file mode 100644 > > index 000000000..48e17903e > > --- /dev/null > > +++ b/test/app-tap/console-lua.skipcond > > @@ -0,0 +1,7 @@ > > +import platform > > + > > +# Disabled on FreeBSD due to flaky fail #4271. > > +if platform.system() == 'FreeBSD': > > + self.skip = 1 > > + > > +# vim: set ft=python: > > I would add the new test name to the issue to actually track it. However > I verified it on FreeBSD 12.1 (prerelease version, it is near to my > hands) and everything seems to be good. Let's remove this skipcond if > you don't see actual fail on it. OK > > diff --git a/test/app-tap/console-lua.test.lua b/test/app-tap/console-lua.test.lua > > new file mode 100755 > > index 000000000..d3271a369 > > --- /dev/null > > +++ b/test/app-tap/console-lua.test.lua > > As far as I see, our tests tend to use > gh-dddd-short-description.test.lua name pattern for issue-related cases > and name_with_several_words.test.lua for subsystem-related cases. So it > seems logical to name it console_lua.test.lua (with underscore). OK > > @@ -0,0 +1,62 @@ > > +#!/usr/bin/env tarantool > > +-- > > +-- vim: ts=4 sw=4 et > > + > > +local tap = require('tap') > > +local console = require('console') > > +local socket = require('socket') > > +local yaml = require('yaml') > > +local fiber = require('fiber') > > +local ffi = require('ffi') > > +local log = require('log') > > +local fio = require('fio') > > Some unused variables. Let's check the file with `luacheck -r $file`. OK, thanks! > > + > > +-- Suppress console log messages > > +log.level(4) > > We don't call box.cfg() and so have no logs. This call seems to be > unneeded. Thanks > > +local CONSOLE_SOCKET = fio.pathjoin(fio.cwd(), 'tarantool-test-console-lua.sock') > > It is better to avoid long names for Unix sockets, because of > UNIX_PATH_MAX limit (108 on Linux, while the full path can be quite > long). However here we can use basename and it will definitely fit 108 > symbols. It works like so (yep, I prefer a short name anyway): I took this code from another test case. Actually I wonder why we don't use relative names instead. > > | local CONSOLE_SOCKET = 'console-lua.sock' > | local server = console.listen('unix/:./' .. CONSOLE_SOCKET) > | local client = socket.tcp_connect('unix/', CONSOLE_SOCKET) > > > +os.remove(CONSOLE_SOCKET) > > Nit: We can use our own fio.unlink() just to show better style: prefer > fio, which is integrated to our event loop, when using tarantool. OK > > > + > > +local EOL = ";" > > + > > +test = tap.test("console-lua") > > test -> local test Thanks! > > It is not matter much when writing a test, but it is the rule of thumb > to avoid global variables where possible. > > > + > > +test:plan(7) > > + > > +-- > > +-- Start console and connect to it > > +local server = console.listen(CONSOLE_SOCKET) > > +test:ok(server ~= nil, "console.listen started") > > + > > +local client = socket.tcp_connect("unix/", CONSOLE_SOCKET) > > +local handshake = client:read{chunk = 128} > > Nit: We usually use explicit parentheses even when a functions receives > one table argument and the parentheses can be omitted. The only > exception is box.cfg{<...>} and similar functions (e.g. > json.cfg{<...>}). OK > > > +test:ok(string.match(handshake, '^Tarantool .*console') ~= nil, 'Handshake') > > +test:ok(client ~= nil, "connect to console") > > + > > +-- > > +-- Change output mode to Lua > > +client:write('\\set output lua\n') > > +test:is(client:read(EOL), 'true' .. EOL, "set lua output mode") > > I would split test preparation / clean up code from actual test cases. > It also seems logical to me to use assert() for the preparation / clean > up code and test:is() (test:ok() and so) for test cases itself. See > example below. > > Nit: single and double quotes are used inconsistently. Personally I > prefer to use single quotes, when I don't need to write a single quote > inside a string. OK > > > + > > +-- > > +-- Write mulireturn statement > > +client:write('a={1,2,3}\n') > > +test:is(client:read(EOL), EOL, "declare array") > > + > > +client:write('1,2,nil,a\n') > > +test:is(client:read(EOL), '1, 2, box.NULL, {1, 2, 3}' .. EOL, "multireturn numbers") > > I would write test cases in a declarative way. This allows to > concentrate on cases itself when reviewing or adding new cases. Look > below for example. > > From previous review (see [1]): > > > I propose to add a case with nils at the end as well as simple 1, 2, 3 > > multireturn. Ah, thanks! Seems I've got missed this point > > [1]: https://lists.tarantool.org/pipermail/tarantool-patches/2019-December/013326.html > > I meant '1, nil, nil, nil\n' or kinda. Your implementation (after the patch) > works correctly: it does not cut trailing nils. I don't sure whether it is part > of our contract, to be honest. But while we're tentative it is good to keep > this property and add the test case. Sure > > > + > > +-- > > +-- Disconect from console > > +client:shutdown() > > +client:close() > > + > > +-- > > +-- Stop console > > +server:shutdown() > > +server:close() > > +fiber.sleep(0) -- workaround for gh-712: console.test.lua fails in Fedora > > I don't understand why client:shutdown() and server:shutdown() are > needed: they seem to be redundant. Also I don't see how fiber.sleep(0) > affects the test. It seems it also don't needed here. Again, copy-pasted from another our test, I thought it is needed due to some specifics on our testing engine. > > > +-- Check that admin console has been stopped > > +test:isnil(socket.tcp_connect("unix/", CONSOLE_SOCKET), "console.listen stopped") > > + > > +test:check() > > +os.exit(0) > > Let's set non-zero exit status at failure: > > | os.exit(test:check() and 0 or 1) OK > > This way is more safe: even if a test harness will parse TAP13 output > incorrectly it will catch the process exit code. Thanks a huge for comments, Sasha! I'll rework the series and resend.
next prev parent reply other threads:[~2020-01-14 20:27 UTC|newest] Thread overview: 6+ messages / expand[flat|nested] mbox.gz Atom feed top 2019-12-25 16:08 [Tarantool-patches] [PATCH 0/2] box/console: Fixes for 2.3 series Cyrill Gorcunov 2019-12-25 16:08 ` [Tarantool-patches] [PATCH 1/2] box/console: handle multireturn in lua mode Cyrill Gorcunov 2020-01-14 0:54 ` Alexander Turenko 2020-01-14 20:27 ` Cyrill Gorcunov [this message] 2019-12-25 16:08 ` [Tarantool-patches] [PATCH 2/2] box/console: handle empty output format Cyrill Gorcunov 2020-01-09 9:36 ` [Tarantool-patches] [PATCH 0/2] box/console: Fixes for 2.3 series Cyrill Gorcunov
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=20200114202718.GJ31598@uranus \ --to=gorcunov@gmail.com \ --cc=alexander.turenko@tarantool.org \ --cc=tarantool-patches@dev.tarantool.org \ --subject='Re: [Tarantool-patches] [PATCH 1/2] box/console: handle multireturn in lua mode' \ /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