Skip to content

Commit

Permalink
tests.setup: add builds and pulled_builds fixtures
Browse files Browse the repository at this point in the history
The builds fixture function uses BuildFactory.buncha_builds() to create
a builds fixture.

The pulled_builds uses the builds and publisher fixtures. It takes the
builds from the builds fixture and publishes them in the publisher
fixture.
  • Loading branch information
enku committed Jul 18, 2024
1 parent f031725 commit 0e480f3
Show file tree
Hide file tree
Showing 2 changed files with 38 additions and 12 deletions.
27 changes: 27 additions & 0 deletions tests/setup.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@
import copy
import datetime as dt
import importlib.metadata
import itertools
import os
import tempfile
from contextlib import contextmanager
Expand Down Expand Up @@ -181,6 +182,32 @@ def build(_options: SetupOptions, _fixtures: Fixtures) -> Build:
return BuildFactory()


def builds(
options: SetupOptions, _fixtures: Fixtures
) -> dict[str, list[Build]] | list[Build]:
builds_options = options.get("builds", {})
machines = builds_options.get("machines", ["babette"])
end_date = builds_options.get("end_time", now())
num_days = builds_options.get("num_days", 1)
per_day = builds_options.get("per_day", 1)
builds_map = BuildFactory.buncha_builds(machines, end_date, num_days, per_day)

if len(machines) == 1:
return builds_map[machines[0]]
return builds_map


@depends(builds, publisher)
def pulled_builds(_options: SetupOptions, fixtures: Fixtures) -> None:
if isinstance(fixtures.builds, dict):
builds_ = list(itertools.chain(*fixtures.builds.values()))
else:
builds_ = fixtures.builds

for build_ in builds_:
fixtures.publisher.pull(build_)


@depends(tmpdir)
def storage(_options: SetupOptions, fixtures: Fixtures) -> Storage:
root = fixtures.tmpdir / "root"
Expand Down
23 changes: 11 additions & 12 deletions tests/test_views.py
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,6 @@

from . import DjangoTestCase as BaseTestCase
from . import setup
from .factories import BuildFactory
from .setup_types import Fixtures, SetupOptions

now = partial(dt.datetime.now, tz=dt.UTC)
Expand All @@ -26,14 +25,7 @@ def lighthouse(_options: SetupOptions, fixtures: Fixtures) -> HttpResponse:
return response


@setup.depends("clock", "publisher")
def builds(_options: SetupOptions, fixtures: Fixtures) -> dict[str, list[Build]]:
machines = ["babette", "lighthouse", "web"]

return BuildFactory.buncha_builds(machines, fixtures.clock, 3, 2)


@setup.depends("publisher", builds)
@setup.depends("publisher", "builds")
def artifacts(_options: SetupOptions, fixtures: Fixtures) -> dict[str, Build]:
artifact_builder = fixtures.publisher.jenkins.artifact_builder
published = first_build(fixtures.builds, "lighthouse")
Expand All @@ -49,9 +41,16 @@ def artifacts(_options: SetupOptions, fixtures: Fixtures) -> dict[str, Build]:
return {"published": published, "latest": latest}


@setup.requires("tmpdir", "clock", "publisher", builds)
@setup.requires("publisher", "builds")
class TestCase(BaseTestCase):
options = {"records_backend": "memory"}
options = {
"records_backend": "memory",
"builds": {
"machines": ["babette", "lighthouse", "web"],
"num_days": 3,
"per_day": 2,
},
}


class DashboardTestCase(TestCase):
Expand Down Expand Up @@ -147,7 +146,7 @@ def test_tagged_builds_should_have_a_binrepos_dot_conf(self) -> None:
self.assertTrue(b"/binpkgs/lighthouse@prod/" in response.content)


@setup.requires("publisher", "client", builds, artifacts, lighthouse)
@setup.requires("publisher", "client", "builds", artifacts, lighthouse)
class MachineViewTests(TestCase):
"""Tests for the machine view"""

Expand Down

0 comments on commit 0e480f3

Please sign in to comment.