irctest/irctest/controllers/sopel.py

72 lines
2.0 KiB
Python
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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
auth_username = {username}
auth_password = {password}
{auth_method}
"""
class SopelController(BaseClientController):
software_name = "Sopel"
supported_sasl_mechanisms = {
"PLAIN",
}
supported_capabilities = set() # Not exhaustive
def __init__(self, test_config):
super().__init__(test_config)
self.filename = next(tempfile._get_candidate_names()) + ".cfg"
self.proc = None
def kill(self):
if self.proc:
self.proc.kill()
if self.filename:
try:
os.unlink(os.path.join(os.path.expanduser("~/.sopel/"), self.filename))
except OSError: #  File does not exist
pass
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:
raise NotImplementedByController("TLS configuration")
assert self.proc is None
self.create_config()
with self.open_file(self.filename) as fd:
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