server: add tests for publishing journal events

Currently there is a lot of state used to determine which events get
published to the journal. This is a baseline before changing behavor.
This commit is contained in:
Chris Peterson 2024-03-05 19:07:39 -08:00
parent 50dacee4a1
commit e0f02a74d7
1 changed files with 53 additions and 0 deletions

View File

@ -24,14 +24,17 @@ from subiquity.common.types import NonReportableError, PasswordKind
from subiquity.server.autoinstall import AutoinstallValidationError from subiquity.server.autoinstall import AutoinstallValidationError
from subiquity.server.nonreportable import NonReportableException from subiquity.server.nonreportable import NonReportableException
from subiquity.server.server import ( from subiquity.server.server import (
NOPROBERARG,
MetaController, MetaController,
SubiquityServer, SubiquityServer,
cloud_autoinstall_path, cloud_autoinstall_path,
iso_autoinstall_path, iso_autoinstall_path,
root_autoinstall_path, root_autoinstall_path,
) )
from subiquitycore.context import Context
from subiquitycore.tests import SubiTestCase from subiquitycore.tests import SubiTestCase
from subiquitycore.tests.mocks import make_app from subiquitycore.tests.mocks import make_app
from subiquitycore.tests.parameterized import parameterized
from subiquitycore.utils import run_command from subiquitycore.utils import run_command
@ -313,3 +316,53 @@ class TestExceptionHandling(SubiTestCase):
self.server.make_apport_report.assert_called() self.server.make_apport_report.assert_called()
self.assertIsNotNone(self.server.fatal_error) self.assertIsNotNone(self.server.fatal_error)
self.assertIsNone(self.server.nonreportable_error) self.assertIsNone(self.server.nonreportable_error)
class TestEventReporting(SubiTestCase):
async def asyncSetUp(self):
opts = Mock()
opts.dry_run = True
opts.output_base = self.tmp_dir()
opts.machine_config = NOPROBERARG
self.server = SubiquityServer(opts, None)
@parameterized.expand(
(
# A very incomprehensible truth table for testing code behavior
# This is probably collapsable, but I need a baseline
(True, True, None, None, True),
(True, False, None, None, True),
(True, None, None, None, True),
(False, True, None, None, False),
(False, True, True, True, False),
(False, True, True, False, True),
(False, False, False, None, True),
)
)
async def test_maybe_push_to_journal(
self,
is_install_context,
interactive,
from_controller,
controller_is_interactive,
expected_to_send,
):
context: Context = Context(
self.server, "MockContext", "description", None, "INFO"
)
context.set("is-install-context", is_install_context)
self.server.interactive = interactive
if from_controller:
controller = Mock()
controller.interactive = lambda: controller_is_interactive
context.set("controller", controller)
with patch("subiquity.server.server.journal.send") as journal_send_mock:
self.server._maybe_push_to_journal(
"event_type", context, context.description
)
if expected_to_send:
journal_send_mock.assert_called_once()
else:
journal_send_mock.assert_not_called()