From 278a7f95a9f50489f371b7137eff8a342b494fdf Mon Sep 17 00:00:00 2001 From: Přemysl Eric Janouch
Date: Mon, 6 Jan 2025 17:13:30 +0100 Subject: Port the integration test from expect to wdye --- CMakeLists.txt | 5 ++++ liberty | 2 +- test | 52 ------------------------------------------ test.lua | 72 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 4 files changed, 78 insertions(+), 53 deletions(-) delete mode 100755 test create mode 100644 test.lua diff --git a/CMakeLists.txt b/CMakeLists.txt index 2263af0..e49d6a2 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -210,6 +210,11 @@ if (BUILD_TESTING) add_test (NAME custom-static-analysis COMMAND ${PROJECT_SOURCE_DIR}/test-static) endif () +option (BUILD_TESTING_WDYE "..." OFF) +if (BUILD_TESTING_WDYE) + add_subdirectory (liberty/tools/wdye) + add_test (NAME integration COMMAND wdye "${PROJECT_SOURCE_DIR}/test.lua") +endif () # Various clang-based diagnostics, loads of fake positives and spam file (GLOB clang_tidy_sources *.c) diff --git a/liberty b/liberty index 1930f13..af889b7 160000 --- a/liberty +++ b/liberty @@ -1 +1 @@ -Subproject commit 1930f138d4836f8ed9613a17bfe09dc53441618a +Subproject commit af889b733e81fa40d7a7ff652386585115e186f5 diff --git a/test b/test deleted file mode 100755 index e8c2b53..0000000 --- a/test +++ /dev/null @@ -1,52 +0,0 @@ -#!/usr/bin/expect -f -# Very basic end-to-end testing for CI -set tempdir [exec mktemp -d] -set ::env(XDG_CONFIG_HOME) $tempdir - -# Run the daemon to test against -system ./xD --write-default-cfg -spawn ./xD -d - -# 10 seconds is a bit too much -set timeout 5 - -spawn ./xC - -# Fuck this Tcl shit, I want the exit code -expect_after { - eof { - puts "" - puts "Child exited prematurely" - exit 1 - } -} - -# Connect to the daemon -send "/server add localhost\n" -expect "]" -send "/set servers.localhost.addresses = \"localhost\"\n" -expect "Option changed" -send "/disconnect\n" -expect "]" -send "/connect\n" -expect "Welcome to" - -# Try some chatting -send "/join #test\n" -expect "has joined" -send "Hello\n" -expect "Hello" - -# Attributes -send "\x1bmbBold text! \x1bmc0,5And colors.\n" -expect "]" - -# Try basic commands -send "/set\n" -expect "]" -send "/help\n" -expect "]" - -# Quit -send "/quit\n" -expect "Shutting down" diff --git a/test.lua b/test.lua new file mode 100644 index 0000000..2edeca8 --- /dev/null +++ b/test.lua @@ -0,0 +1,72 @@ +#!/usr/bin/env wdye +-- Very basic end-to-end testing for CI +function exec (...) + local p = wdye.spawn(...) + local out = wdye.expect(p:eof {function (p) return p[0] end}) + if not out then + error "exec() timeout" + end + + local status = p:wait() + if status ~= 0 then + io.write(out, "\n") + error("exit status " .. status) + end + return out:gsub("%s+$", "") +end + +local temp = exec {"mktemp", "-d"} +local atexit = {} +setmetatable(atexit, {__gc = function () exec {"rm", "-rf", "--", temp} end}) + +local env = {XDG_CONFIG_HOME=temp, TERM="xterm"} +exec {"./xD", "--write-default-cfg", environ=env} + +-- Run the daemon to test against (assuming the default port 6667) +local xD = wdye.spawn {"./xD", "-d", environ=env} +local xC = wdye.spawn {"./xC", environ=env} + +function send (...) xC:send(...) end +function expect (string) + wdye.expect(xC:exact {string}, + wdye.timeout {5, function (p) error "xC timeout" end}, + xC:eof {function (p) error "xC exited prematurely" end}) +end + +-- Connect to the daemon +send "/server add localhost\n" +expect "]" +send "/set servers.localhost.addresses = \"localhost\"\n" +expect "Option changed" +send "/disconnect\n" +expect "]" +send "/connect\n" +expect "Welcome to" + +-- Try some chatting +send "/join #test\n" +expect "has joined" +send "Hello\n" +expect "Hello" + +-- Attributes +send "\x1bmbBold text! \x1bmc0,5And colors.\n" +expect "]" + +-- Try basic commands +send "/set\n" +expect "]" +send "/help\n" +expect "]" + +-- Quit +send "/quit\n" +expect "Shutting down" + +local s1 = xC:wait() +assert(s1 == 0, "xC exited abnormally: " .. s1) + +-- Send SIGINT (^C) +xD:send "\003" +local s2 = xD:wait() +assert(s2 == 0, "xD exited abnormally: " .. s2) -- cgit v1.2.3-70-g09d2