irctest/irctest/controllers/sopel.py

72 lines
2.0 KiB
Python
Raw Normal View History

import os
import tempfile
import subprocess
from irctest.basecontrollers import BaseClientController
from irctest.basecontrollers import NotImplementedByController
TEMPLATE_CONFIG = """
[core]
nick = Sopel
host = {hostname}
use_ssl = false
port = {port}
owner = me
channels =
timeout = 5
2015-12-19 16:52:38 +00:00
auth_username = {username}
auth_password = {password}
{auth_method}
"""
2021-02-22 18:02:13 +00:00
class SopelController(BaseClientController):
2021-02-22 18:02:13 +00:00
software_name = "Sopel"
supported_sasl_mechanisms = {
2021-02-22 18:02:13 +00:00
"PLAIN",
}
2021-02-14 21:22:01 +00:00
supported_capabilities = set() # Not exhaustive
2019-12-08 20:26:21 +00:00
def __init__(self, test_config):
super().__init__(test_config)
2021-02-22 18:02:13 +00:00
self.filename = next(tempfile._get_candidate_names()) + ".cfg"
self.proc = None
2021-02-22 18:02:13 +00:00
2015-12-19 16:52:38 +00:00
def kill(self):
if self.proc:
self.proc.kill()
if self.filename:
try:
2021-02-22 18:02:13 +00:00
os.unlink(os.path.join(os.path.expanduser("~/.sopel/"), self.filename))
except OSError: #  File does not exist
pass
2021-02-22 18:02:13 +00:00
def open_file(self, filename, mode="a"):
return open(os.path.join(os.path.expanduser("~/.sopel/"), filename), mode)
def create_config(self):
with self.open_file(self.filename) as fd:
pass
def run(self, hostname, port, auth, tls_config):
# Runs a client with the config given as arguments
if tls_config is not None:
2021-02-22 18:02:13 +00:00
raise NotImplementedByController("TLS configuration")
2015-12-19 16:52:38 +00:00
assert self.proc is None
self.create_config()
with self.open_file(self.filename) as fd:
2021-02-22 18:02:13 +00:00
fd.write(
TEMPLATE_CONFIG.format(
hostname=hostname,
port=port,
username=auth.username if auth else "",
password=auth.password if auth else "",
auth_method="auth_method = sasl" if auth else "",
)
)
self.proc = subprocess.Popen(["sopel", "--quiet", "-c", self.filename])
def get_irctest_controller_class():
return SopelController