Test: launch ZNC on a config created during --makeconf and connect.

This commit is contained in:
Alexey Sokolov
2015-09-04 22:35:43 +01:00
parent 0750e529c5
commit 8f598273f9
4 changed files with 110 additions and 47 deletions

View File

@@ -9,7 +9,10 @@ cache:
environment:
matrix:
- cygwin_url: https://cygwin.com/setup-x86_64.exe
do_test2: yes
- cygwin_url: https://cygwin.com/setup-x86.exe
# For some reason pexpect fails on 32bit cygwin very often on appveyor, I don't know why
do_test2: no
install:
- ps: Invoke-WebRequest $env:cygwin_url -OutFile c:\cygwin-setup.exe
# libcrypt-devel is needed only on x86_64 and only for modperl... probably some dependency problem.
@@ -32,4 +35,4 @@ build_script:
- c:\cygwin-root\bin\sh -lc "znc --version"
test_script:
- c:\cygwin-root\bin\sh -lc "cd $APPVEYOR_BUILD_FOLDER/build; make VERBOSE=1 test < /dev/null"
- c:\cygwin-root\bin\sh -lc "cd $APPVEYOR_BUILD_FOLDER/build; make VERBOSE=1 test2 < /dev/null"
- c:\cygwin-root\bin\sh -lc "cd $APPVEYOR_BUILD_FOLDER/build; if [[ $do_test2 == yes ]]; then make VERBOSE=1 test2 < /dev/null; else true; fi"

View File

@@ -227,6 +227,6 @@ test: unittest
test2:
# This test uses files at <prefix>/lib/znc, which is less than ideal, especially from build scripts of distros.
# That's why it's a separate make target.
$(Q)$(srcdir)/test/makeconf.py
$(Q)$(srcdir)/test/integration.py -v
-include $(wildcard .depend/*.dep)

105
test/integration.py Executable file
View File

@@ -0,0 +1,105 @@
#!/usr/bin/env python3
#
# Copyright (C) 2004-2015 ZNC, see the NOTICE file for details.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#
import pexpect
import subprocess
import sys
import tempfile
import unittest
from contextlib import contextmanager
def write_config(config_dir):
znc = pexpect.spawnu('./znc', ['--debug', '--datadir', config_dir, '--makeconf'])
znc.timeout = 180
try:
znc.logfile_read = sys.stdout
znc.expect_exact('Listen on port'); znc.sendline('12345')
znc.expect_exact('Listen using SSL'); znc.sendline()
znc.expect_exact('IPv6'); znc.sendline()
znc.expect_exact('Username'); znc.sendline('user')
znc.expect_exact('password'); znc.sendline('hunter2')
znc.expect_exact('Confirm'); znc.sendline('hunter2')
znc.expect_exact('Nick [user]'); znc.sendline()
znc.expect_exact('Alternate nick [user_]'); znc.sendline()
znc.expect_exact('Ident [user]'); znc.sendline()
znc.expect_exact('Real name'); znc.sendline()
znc.expect_exact('Bind host'); znc.sendline()
znc.expect_exact('Set up a network?'); znc.sendline()
znc.expect_exact('Name [freenode]'); znc.sendline('test')
znc.expect_exact('Server host (host only)'); znc.sendline('::1')
znc.expect_exact('Server uses SSL?'); znc.sendline()
znc.expect_exact('6667'); znc.sendline()
znc.expect_exact('password'); znc.sendline()
znc.expect_exact('channels'); znc.sendline()
znc.expect_exact('Launch ZNC now?'); znc.sendline('no')
znc.expect_exact(pexpect.EOF)
finally:
znc.terminate()
class TestZNC(unittest.TestCase):
def setUp(self):
config = tempfile.TemporaryDirectory()
self.addCleanup(config.cleanup)
write_config(config.name)
self.config = config.name
@contextmanager
def run_znc(self):
znc = subprocess.Popen(['./znc', '--debug', '--datadir', self.config])
yield
znc.terminate()
# TODO: bump python requirements to 3.3 and use znc.wait(timeout=30) instead.
# Ubuntu Precise on Travis has too old python.
self.assertEqual(0, znc.wait())
@contextmanager
def run_ircd(self):
ircd = pexpect.spawnu('socat', ['stdio', 'tcp6-listen:6667,reuseaddr'])
ircd.timeout = 180
yield ircd
ircd.terminate()
@contextmanager
def run_client(self):
# if server didn't start yet, try again, up to 30 times.
client = pexpect.spawnu('socat', ['stdio', 'tcp6:[::1]:12345,retry=30'])
client.timeout = 180
yield client
client.terminate()
def test_connect(self):
with self.run_ircd() as ircd:
with self.run_znc():
ircd.expect_exact('CAP LS')
with self.run_client() as client:
client.sendline('PASS :hunter2')
client.sendline('NICK :nick')
client.sendline('USER user/test x x :x')
client.expect_exact('Welcome')
if __name__ == '__main__':
unittest.main()

View File

@@ -1,45 +0,0 @@
#!/usr/bin/env python3
#
# Copyright (C) 2004-2015 ZNC, see the NOTICE file for details.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#
import pexpect
import sys
import tempfile
with tempfile.TemporaryDirectory() as config_dir:
znc = pexpect.spawnu('./znc', ['--debug', '--datadir', config_dir, '--makeconf'])
znc.logfile_read = sys.stdout
znc.expect_exact('Listen on port'); znc.sendline('12345')
znc.expect_exact('Listen using SSL'); znc.sendline()
znc.expect_exact('IPv6'); znc.sendline()
znc.expect_exact('Username'); znc.sendline('user')
znc.expect_exact('password'); znc.sendline('hunter2')
znc.expect_exact('Confirm'); znc.sendline('hunter2')
znc.expect_exact('Nick [user]'); znc.sendline()
znc.expect_exact('Alternate nick [user_]'); znc.sendline()
znc.expect_exact('Ident [user]'); znc.sendline()
znc.expect_exact('Real name'); znc.sendline()
znc.expect_exact('Bind host'); znc.sendline()
znc.expect_exact('Set up a network?'); znc.sendline()
znc.expect_exact('Name [freenode]'); znc.sendline('test')
znc.expect_exact('Server host (host only)'); znc.sendline('localhost')
znc.expect_exact('Server uses SSL?'); znc.sendline()
znc.expect_exact('6667'); znc.sendline()
znc.expect_exact('password'); znc.sendline()
znc.expect_exact('channels'); znc.sendline()
znc.expect_exact('Launch ZNC now?'); znc.sendline('no')
znc.expect_exact(pexpect.EOF)