summaryrefslogtreecommitdiffstats
path: root/python/mozperftest/mozperftest/tests/test_layers.py
blob: c29b9ef2c09baf8a695480e533eff569da29ace8 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
#!/usr/bin/env python
from unittest.mock import MagicMock

import mozunit
import pytest

from mozperftest.environment import MachEnvironment
from mozperftest.layers import Layer, Layers


class _TestLayer(Layer):
    name = "test"
    activated = True
    called = 0
    arguments = {"--arg1": {"type": str, "default": "xxx", "help": "arg1"}}

    def setup(self):
        self.called += 1

    def teardown(self):
        self.called += 1


class _TestLayer2(_TestLayer):
    name = "test2"
    activated = True
    arguments = {"arg2": {"type": str, "default": "xxx", "help": "arg2"}}


class _TestLayer3(_TestLayer):
    name = "test3"
    activated = True


def test_layer():
    mach = MagicMock()
    env = MachEnvironment(mach, test=True, test_arg1="ok")

    with _TestLayer(env, mach) as layer:
        layer.info("info")
        layer.warning("warning")
        layer.debug("debug")
        assert layer.get_arg("test")
        assert layer.get_arg("arg1") == "ok"
        assert layer.get_arg("test-arg1") == "ok"
        layer.set_arg("arg1", "two")
        assert layer.get_arg("test-arg1") == "two"
        layer.set_arg("test-arg1", 1)
        assert layer.get_arg("test-arg1") == 1
        with pytest.raises(KeyError):
            layer.set_arg("another", 1)

        layer(object())

    assert layer.called == 2


def test_layers():
    mach = MagicMock()
    factories = [_TestLayer, _TestLayer2, _TestLayer3]
    env = MachEnvironment(
        mach, no_test3=True, test_arg1="ok", test2=True, test2_arg2="2"
    )

    with Layers(env, mach, factories) as layers:
        # layer3 was deactivated with test3=False
        assert len(layers.layers) == 2
        layers.info("info")
        layers.debug("debug")
        layers.warning("warning")
        assert layers.get_arg("--test2")
        assert layers.get_arg("test-arg1") == "ok"
        layers.set_arg("test-arg1", "two")
        assert layers.get_arg("test-arg1") == "two"
        layers.set_arg("--test-arg1", 1)
        assert layers.get_arg("test-arg1") == 1
        assert layers.get_layer("test2").name == "test2"
        assert layers.get_layer("test3") is None
        assert layers.name == "test + test2"
        with pytest.raises(KeyError):
            layers.set_arg("another", 1)

    for layer in layers:
        assert layer.called == 2


if __name__ == "__main__":
    mozunit.main()