summaryrefslogtreecommitdiffstats
path: root/src/testdir/test_channel.vim
diff options
context:
space:
mode:
authorBram Moolenaar <Bram@vim.org>2020-04-12 17:53:12 +0200
committerBram Moolenaar <Bram@vim.org>2020-04-12 17:53:12 +0200
commitbfe13ccc58ccb96f243a58309800410db1ccb52c (patch)
tree9b11760d9a0a5bfbdfeda140c0f795e80844a556 /src/testdir/test_channel.vim
parentc5f1ef53c24cc0c9f7b2131609e916f913634feb (diff)
patch 8.2.0557: no IPv6 support for channelsv8.2.0557
Problem: No IPv6 support for channels. Solution: Add IPv6 support. (Ozaki Kiichi, closes #5893)
Diffstat (limited to 'src/testdir/test_channel.vim')
-rw-r--r--src/testdir/test_channel.vim138
1 files changed, 107 insertions, 31 deletions
diff --git a/src/testdir/test_channel.vim b/src/testdir/test_channel.vim
index 0cabd5c1af..11f33628d8 100644
--- a/src/testdir/test_channel.vim
+++ b/src/testdir/test_channel.vim
@@ -18,11 +18,21 @@ endif
" Add ch_log() calls where you want to see what happens.
" call ch_logfile('channellog', 'w')
-let s:chopt = {}
+func SetUp()
+ if g:testfunc =~ '_ipv6()$'
+ let s:localhost = '[::1]:'
+ let s:testscript = 'test_channel_6.py'
+ else
+ let s:localhost = 'localhost:'
+ let s:testscript = 'test_channel.py'
+ endif
+ let s:chopt = {}
+ call ch_log(g:testfunc)
+endfunc
" Run "testfunc" after starting the server and stop the server afterwards.
func s:run_server(testfunc, ...)
- call RunServer('test_channel.py', a:testfunc, a:000)
+ call RunServer(s:testscript, a:testfunc, a:000)
" communicating with a server can be flaky
let g:test_is_flaky = 1
@@ -54,9 +64,7 @@ func Ch_communicate(port)
let s:chopt.drop = 'never'
" Also add the noblock flag to try it out.
let s:chopt.noblock = 1
- let handle = ch_open('localhost:' . a:port, s:chopt)
- unlet s:chopt.drop
- unlet s:chopt.noblock
+ let handle = ch_open(s:localhost . a:port, s:chopt)
if ch_status(handle) == "fail"
call assert_report("Can't open channel")
return
@@ -224,13 +232,17 @@ func Ch_communicate(port)
endfunc
func Test_communicate()
- call ch_log('Test_communicate()')
call s:run_server('Ch_communicate')
endfunc
+func Test_communicate_ipv6()
+ CheckIPv6
+ call Test_communicate()
+endfunc
+
" Test that we can open two channels.
func Ch_two_channels(port)
- let handle = ch_open('localhost:' . a:port, s:chopt)
+ let handle = ch_open(s:localhost . a:port, s:chopt)
call assert_equal(v:t_channel, type(handle))
if handle->ch_status() == "fail"
call assert_report("Can't open channel")
@@ -239,7 +251,7 @@ func Ch_two_channels(port)
call assert_equal('got it', ch_evalexpr(handle, 'hello!'))
- let newhandle = ch_open('localhost:' . a:port, s:chopt)
+ let newhandle = ch_open(s:localhost . a:port, s:chopt)
if ch_status(newhandle) == "fail"
call assert_report("Can't open second channel")
return
@@ -259,9 +271,14 @@ func Test_two_channels()
call s:run_server('Ch_two_channels')
endfunc
+func Test_two_channels_ipv6()
+ CheckIPv6
+ call Test_two_channels()
+endfunc
+
" Test that a server crash is handled gracefully.
func Ch_server_crash(port)
- let handle = ch_open('localhost:' . a:port, s:chopt)
+ let handle = ch_open(s:localhost . a:port, s:chopt)
if ch_status(handle) == "fail"
call assert_report("Can't open channel")
return
@@ -273,10 +290,14 @@ func Ch_server_crash(port)
endfunc
func Test_server_crash()
- call ch_log('Test_server_crash()')
call s:run_server('Ch_server_crash')
endfunc
+func Test_server_crash_ipv6()
+ CheckIPv6
+ call Test_server_crash()
+endfunc
+
"""""""""
func Ch_handler(chan, msg)
@@ -286,7 +307,7 @@ func Ch_handler(chan, msg)
endfunc
func Ch_channel_handler(port)
- let handle = ch_open('localhost:' . a:port, s:chopt)
+ let handle = ch_open(s:localhost . a:port, s:chopt)
if ch_status(handle) == "fail"
call assert_report("Can't open channel")
return
@@ -302,14 +323,17 @@ func Ch_channel_handler(port)
endfunc
func Test_channel_handler()
- call ch_log('Test_channel_handler()')
let g:Ch_reply = ""
let s:chopt.callback = 'Ch_handler'
call s:run_server('Ch_channel_handler')
let g:Ch_reply = ""
let s:chopt.callback = function('Ch_handler')
call s:run_server('Ch_channel_handler')
- unlet s:chopt.callback
+endfunc
+
+func Test_channel_handler_ipv6()
+ CheckIPv6
+ call Test_channel_handler()
endfunc
"""""""""
@@ -327,7 +351,7 @@ func Ch_oneHandler(chan, msg)
endfunc
func Ch_channel_zero(port)
- let handle = ('localhost:' .. a:port)->ch_open(s:chopt)
+ let handle = (s:localhost .. a:port)->ch_open(s:chopt)
if ch_status(handle) == "fail"
call assert_report("Can't open channel")
return
@@ -359,7 +383,6 @@ func Ch_channel_zero(port)
endfunc
func Test_zero_reply()
- call ch_log('Test_zero_reply()')
" Run with channel handler
let s:has_handler = 1
let s:chopt.callback = 'Ch_zeroHandler'
@@ -371,6 +394,11 @@ func Test_zero_reply()
call s:run_server('Ch_channel_zero')
endfunc
+func Test_zero_reply_ipv6()
+ CheckIPv6
+ call Test_zero_reply()
+endfunc
+
"""""""""
let g:Ch_reply1 = ""
@@ -392,7 +420,7 @@ func Ch_handleRaw3(chan, msg)
endfunc
func Ch_raw_one_time_callback(port)
- let handle = ch_open('localhost:' . a:port, s:chopt)
+ let handle = ch_open(s:localhost . a:port, s:chopt)
if ch_status(handle) == "fail"
call assert_report("Can't open channel")
return
@@ -410,10 +438,14 @@ func Ch_raw_one_time_callback(port)
endfunc
func Test_raw_one_time_callback()
- call ch_log('Test_raw_one_time_callback()')
call s:run_server('Ch_raw_one_time_callback')
endfunc
+func Test_raw_one_time_callback_ipv6()
+ CheckIPv6
+ call Test_raw_one_time_callback()
+endfunc
+
"""""""""
" Test that trying to connect to a non-existing port fails quickly.
@@ -422,7 +454,6 @@ func Test_connect_waittime()
" this is timing sensitive
let g:test_is_flaky = 1
- call ch_log('Test_connect_waittime()')
let start = reltime()
let handle = ch_open('localhost:9876', s:chopt)
if ch_status(handle) != "fail"
@@ -752,7 +783,6 @@ func Test_close_output_buffer()
enew!
let test_lines = ['one', 'two']
call setline(1, test_lines)
- call ch_log('Test_close_output_buffer()')
let options = {'out_io': 'buffer'}
let options['out_name'] = 'buffer-output'
let options['out_msg'] = 0
@@ -924,17 +954,14 @@ func Run_pipe_through_sort(all, use_buffer)
endfunc
func Test_pipe_through_sort_all()
- call ch_log('Test_pipe_through_sort_all()')
call Run_pipe_through_sort(1, 1)
endfunc
func Test_pipe_through_sort_some()
- call ch_log('Test_pipe_through_sort_some()')
call Run_pipe_through_sort(0, 1)
endfunc
func Test_pipe_through_sort_feed()
- call ch_log('Test_pipe_through_sort_feed()')
call Run_pipe_through_sort(1, 0)
endfunc
@@ -1341,16 +1368,20 @@ endfunc
" Test that "unlet handle" in a handler doesn't crash Vim.
func Ch_unlet_handle(port)
- let s:channelfd = ch_open('localhost:' . a:port, s:chopt)
+ let s:channelfd = ch_open(s:localhost . a:port, s:chopt)
eval s:channelfd->ch_sendexpr("test", {'callback': function('s:UnletHandler')})
call WaitForAssert({-> assert_equal('what?', g:Ch_unletResponse)})
endfunc
func Test_unlet_handle()
- call ch_log('Test_unlet_handle()')
call s:run_server('Ch_unlet_handle')
endfunc
+func Test_unlet_handle_ipv6()
+ CheckIPv6
+ call Test_unlet_handle()
+endfunc
+
""""""""""
let g:Ch_unletResponse = ''
@@ -1361,7 +1392,7 @@ endfunc
" Test that "unlet handle" in a handler doesn't crash Vim.
func Ch_close_handle(port)
- let s:channelfd = ch_open('localhost:' . a:port, s:chopt)
+ let s:channelfd = ch_open(s:localhost . a:port, s:chopt)
call ch_sendexpr(s:channelfd, "test", {'callback': function('Ch_CloseHandler')})
call WaitForAssert({-> assert_equal('what?', g:Ch_unletResponse)})
endfunc
@@ -1370,6 +1401,23 @@ func Test_close_handle()
call s:run_server('Ch_close_handle')
endfunc
+func Test_close_handle_ipv6()
+ CheckIPv6
+ call Test_close_handle()
+endfunc
+
+""""""""""
+
+func Ch_open_ipv6(port)
+ let handle = ch_open('[::1]:' .. a:port, s:chopt)
+ call assert_notequal('fail', ch_status(handle))
+endfunc
+
+func Test_open_ipv6()
+ CheckIPv6
+ call s:run_server('Ch_open_ipv6')
+endfunc
+
""""""""""
func Test_open_fail()
@@ -1378,6 +1426,7 @@ func Test_open_fail()
let d = ch
call assert_fails("let ch = ch_open('noserver', 10)", 'E474:')
call assert_fails("let ch = ch_open('localhost:-1')", 'E475:')
+ call assert_fails("let ch = ch_open('localhost:65537')", 'E475:')
call assert_fails("let ch = ch_open('localhost:8765', {'timeout' : -1})",
\ 'E474:')
call assert_fails("let ch = ch_open('localhost:8765', {'axby' : 1})",
@@ -1386,6 +1435,9 @@ func Test_open_fail()
\ 'E475:')
call assert_fails("let ch = ch_open('localhost:8765', {'part' : 'out'})",
\ 'E475:')
+ call assert_fails("let ch = ch_open('[::]')", 'E475:')
+ call assert_fails("let ch = ch_open('[::.80')", 'E475:')
+ call assert_fails("let ch = ch_open('[::]8080')", 'E475:')
endfunc
func Test_ch_info_fail()
@@ -1397,8 +1449,7 @@ endfunc
func Ch_open_delay(port)
" Wait up to a second for the port to open.
let s:chopt.waittime = 1000
- let channel = ch_open('localhost:' . a:port, s:chopt)
- unlet s:chopt.waittime
+ let channel = ch_open(s:localhost . a:port, s:chopt)
if ch_status(channel) == "fail"
call assert_report("Can't open channel")
return
@@ -1412,6 +1463,11 @@ func Test_open_delay()
call s:run_server('Ch_open_delay', 'delay')
endfunc
+func Test_open_delay_ipv6()
+ CheckIPv6
+ call Test_open_delay()
+endfunc
+
"""""""""
function MyFunction(a,b,c)
@@ -1419,7 +1475,7 @@ function MyFunction(a,b,c)
endfunc
function Ch_test_call(port)
- let handle = ch_open('localhost:' . a:port, s:chopt)
+ let handle = ch_open(s:localhost . a:port, s:chopt)
if ch_status(handle) == "fail"
call assert_report("Can't open channel")
return
@@ -1438,6 +1494,11 @@ func Test_call()
call s:run_server('Ch_test_call')
endfunc
+func Test_call_ipv6()
+ CheckIPv6
+ call Test_call()
+endfunc
+
"""""""""
let g:Ch_job_exit_ret = 'not yet'
@@ -1513,7 +1574,7 @@ function MyCloseCb(ch)
endfunc
function Ch_test_close_callback(port)
- let handle = ch_open('localhost:' . a:port, s:chopt)
+ let handle = ch_open(s:localhost . a:port, s:chopt)
if ch_status(handle) == "fail"
call assert_report("Can't open channel")
return
@@ -1528,8 +1589,13 @@ func Test_close_callback()
call s:run_server('Ch_test_close_callback')
endfunc
+func Test_close_callback_ipv6()
+ CheckIPv6
+ call Test_close_callback()
+endfunc
+
function Ch_test_close_partial(port)
- let handle = ch_open('localhost:' . a:port, s:chopt)
+ let handle = ch_open(s:localhost . a:port, s:chopt)
if ch_status(handle) == "fail"
call assert_report("Can't open channel")
return
@@ -1549,6 +1615,11 @@ func Test_close_partial()
call s:run_server('Ch_test_close_partial')
endfunc
+func Test_close_partial_ipv6()
+ CheckIPv6
+ call Test_close_partial()
+endfunc
+
func Test_job_start_fails()
" this was leaking memory
call assert_fails("call job_start([''])", "E474:")
@@ -1808,7 +1879,7 @@ func Test_cwd()
endfunc
function Ch_test_close_lambda(port)
- let handle = ch_open('localhost:' . a:port, s:chopt)
+ let handle = ch_open(s:localhost . a:port, s:chopt)
if ch_status(handle) == "fail"
call assert_report("Can't open channel")
return
@@ -1824,6 +1895,11 @@ func Test_close_lambda()
call s:run_server('Ch_test_close_lambda')
endfunc
+func Test_close_lambda_ipv6()
+ CheckIPv6
+ call Test_close_lambda()
+endfunc
+
func s:test_list_args(cmd, out, remove_lf)
try
let g:out = ''