Best Python code snippet using autotest_python
test_config.py
Source:test_config.py  
1from __future__ import absolute_import2import copy3import os4from unittest import mock5import mozunit6import pytest7import conftest8from talos.config import (9    get_active_tests,10    get_test,11    get_config,12    get_browser_config,13    get_configs,14    ConfigurationError,15    DEFAULTS,16)17from talos.test import PageloaderTest18import six19ORIGINAL_DEFAULTS = copy.deepcopy(DEFAULTS)20class mock_test(PageloaderTest):21    keys = [22        "tpmanifest",23        "tpcycles",24        "tppagecycles",25        "tprender",26        "tpchrome",27        "tpmozafterpaint",28        "fnbpaint",29        "tploadnocache",30        "firstpaint",31        "userready",32        "testeventmap",33        "base_vs_ref",34        "mainthread",35        "resolution",36        "cycles",37        "gecko_profile",38        "gecko_profile_interval",39        "gecko_profile_entries",40        "tptimeout",41        "win_counters",42        "w7_counters",43        "linux_counters",44        "mac_counters",45        "tpscrolltest",46        "xperf_counters",47        "timeout",48        "shutdown",49        "responsiveness",50        "profile_path",51        "xperf_providers",52        "xperf_user_providers",53        "xperf_stackwalk",54        "format_pagename",55        "filters",56        "preferences",57        "extensions",58        "setup",59        "cleanup",60        "lower_is_better",61        "alert_threshold",62        "unit",63        "webextensions",64        "profile",65        "tpmozafterpaint",66        "url",67    ]68    tpmozafterpaint = "value"69    firstpaint = "value"70    userready = "value"71    fnbpaint = "value"72class Test_get_active_tests(object):73    def test_raises_exception_for_undefined_test(self):74        with pytest.raises(ConfigurationError):75            get_active_tests({"activeTests": "undefined_test"})76        with pytest.raises(ConfigurationError):77            get_active_tests({"activeTests": "  undefined_test     "})78        with pytest.raises(ConfigurationError):79            get_active_tests({"activeTests": "undef_test:undef_test2:undef_test3"})80class Test_get_test(object):81    global_overrides = {82        "tpmozafterpaint": "overriden",83        "firstpaint": "overriden",84        "userready": "overriden",85        "fnbpaint": "overriden",86    }87    config = {"webserver": "test_webserver"}88    def test_doesnt_override_specific_keys_unless_they_are_null(self):89        test_instance = mock_test()90        test_dict = get_test({}, self.global_overrides, [], test_instance)91        assert test_dict["tpmozafterpaint"] == "value"92        assert test_dict["firstpaint"] == "value"93        assert test_dict["userready"] == "value"94        assert test_dict["fnbpaint"] == "value"95        # nulls still get overriden96        test_instance = mock_test(97            tpmozafterpaint=None, firstpaint=None, userready=None, fnbpaint=None98        )99        test_dict = get_test({}, self.global_overrides, [], test_instance)100        assert test_dict["tpmozafterpaint"] == "overriden"101        assert test_dict["firstpaint"] == "overriden"102        assert test_dict["userready"] == "overriden"103        assert test_dict["fnbpaint"] == "overriden"104    @mock.patch("talos.config.open", create=True)105    def test_interpolate_keys(self, mock_open):106        mock_open.return_value = mock.MagicMock(readlines=lambda: [])107        test_instance = mock_test(108            url="${talos}/test_page.html", tpmanifest="${talos}/file.manifest"109        )110        test_dict = get_test(self.config, self.global_overrides, [], test_instance)111        assert test_dict["url"].startswith("http://test_webserver/")112        assert "${talos}" not in test_dict["url"]113        assert "${talos}" not in test_dict["tpmanifest"]114    def test_build_tpmanifest(self, tmpdir):115        manifest_file = tmpdir.join("file.manifest").ensure(file=True)116        test_instance = mock_test(url="test_page.html", tpmanifest=str(manifest_file))117        test_dict = get_test(self.config, self.global_overrides, [], test_instance)118        assert test_dict["tpmanifest"].endswith(".develop")119    def test_add_counters(self):120        test_instance = mock_test(121            linux_counters=None,122            mac_counters=[],123            win_counters=["counter_a"],124            w7_counters=["counter_a", "counter_b"],125            xperf_counters=["counter_a", "counter_extra"],126        )127        counters = ["counter_a", "counter_b", "counter_c"]128        test_dict = get_test(129            self.config, self.global_overrides, counters, test_instance130        )131        assert test_dict["linux_counters"] == counters132        assert test_dict["mac_counters"] == counters133        assert test_dict["win_counters"] == counters134        assert test_dict["w7_counters"] == counters135        assert set(test_dict["xperf_counters"]) == set(counters + ["counter_extra"])136class Test_get_browser_config(object):137    required = (138        "extensions",139        "browser_path",140        "browser_wait",141        "extra_args",142        "buildid",143        "env",144        "init_url",145        "webserver",146    )147    optional = [148        "bcontroller_config",149        "child_process",150        "debug",151        "debugger",152        "debugger_args",153        "develop",154        "e10s",155        "process",156        "framework",157        "repository",158        "sourcestamp",159        "symbols_path",160        "test_timeout",161        "xperf_path",162        "error_filename",163        "no_upload_results",164        "stylothreads",165        "subtests",166        "preferences",167    ]168    def test_that_contains_title(self):169        config_no_optionals = dict.fromkeys(self.required, "")170        config_no_optionals.update(title="is_mandatory")171        browser_config = get_browser_config(config_no_optionals)172        assert browser_config["title"] == "is_mandatory"173    def test_raises_keyerror_for_missing_title(self):174        config_missing_title = dict.fromkeys(self.required, "")175        with pytest.raises(KeyError):176            get_browser_config(config_missing_title)177    def test_raises_keyerror_for_required_keys(self):178        config_missing_required = dict.fromkeys(self.required, "")179        config_missing_required.update(title="is_mandatory")180        del config_missing_required["extensions"]181        with pytest.raises(KeyError):182            get_browser_config(config_missing_required)183    def test_doesnt_raise_on_missing_optionals(self):184        config_missing_optionals = dict.fromkeys(self.required, "")185        config_missing_optionals["title"] = "is_mandatory"186        try:187            get_browser_config(config_missing_optionals)188        except KeyError:189            pytest.fail("Must not raise exception on missing optional")190class Test_get_config(object):191    @classmethod192    def setup_class(cls):193        cls.argv = "--suite other-e10s --mainthread -e /some/random/path".split()194        cls.argv_unprovided_tests = "-e /some/random/path".split()195        cls.argv_unknown_suite = (196            "--suite random-unknown-suite -e /some/random/path".split()197        )198        cls.argv_overrides_defaults = """199        --suite other-e10s200        --executablePath /some/random/path201        --cycles 20202        --gecko-profile203        --gecko-profile-interval 1000204        --gecko-profile-entries 1000205        --mainthread206        --tpcycles 20207        --mozAfterPaint208        --firstPaint209        --firstNonBlankPaint210        --userReady211        --tppagecycles 20212        """.split()213        cls.argv_ts_paint = "--activeTests ts_paint -e /some/random/path".split()214        cls.argv_ts_paint_webext = (215            "--activeTests ts_paint_webext -e /some/random/path".split()216        )217        cls.argv_ts_paint_heavy = (218            "--activeTests ts_paint_heavy -e /some/random/path".split()219        )220        cls.argv_sessionrestore = (221            "--activeTests sessionrestore -e /some/random/path".split()222        )223        cls.argv_sessionrestore_no_auto_restore = (224            "--activeTests sessionrestore_no_auto_restore -e /some/random/path".split()225        )226        cls.argv_sessionrestore_many_windows = (227            "--activeTests sessionrestore_many_windows -e /some/random/path".split()228        )229        cls.argv_tresize = "--activeTests tresize -e /some/random/path".split()230        cls.argv_cpstartup = "--activeTests cpstartup -e /some/random/path".split()231        cls.argv_tabpaint = "--activeTests tabpaint -e /some/random/path".split()232        cls.argv_tabswitch = "--activeTests tabswitch -e /some/random/path".split()233        cls.argv_tart = "--activeTests tart -e /some/random/path".split()234        cls.argv_damp = "--activeTests damp -e /some/random/path".split()235        cls.argv_glterrain = "--activeTests glterrain -e /some/random/path".split()236        cls.argv_glvideo = "--activeTests glvideo -e /some/random/path".split()237        cls.argv_tp5n = "--activeTests tp5n -e /some/random/path".split()238        cls.argv_tp5o = "--activeTests tp5o -e /some/random/path".split()239        cls.argv_tp5o_webext = "--activeTests tp5o_webext -e /some/random/path".split()240        cls.argv_tp5o_scroll = "--activeTests tp5o_scroll -e /some/random/path".split()241        cls.argv_v8_7 = "--activeTests v8_7 -e /some/random/path".split()242        cls.argv_kraken = "--activeTests kraken -e /some/random/path".split()243        cls.argv_basic_compositor_video = (244            "--activeTests basic_compositor_video -e /some/random/path".split()245        )246        cls.argv_dromaeo_css = "--activeTests dromaeo_css -e /some/random/path".split()247        cls.argv_dromaeo_dom = "--activeTests dromaeo_dom -e /some/random/path".split()248        cls.argv_tsvgm = "--activeTests tsvgm -e /some/random/path".split()249        cls.argv_tsvgx = "--activeTests tsvgx -e /some/random/path".split()250        cls.argv_tsvg_static = "--activeTests tsvg_static -e /some/random/path".split()251        cls.argv_tsvgr_opacity = (252            "--activeTests tsvgr_opacity -e /some/random/path".split()253        )254        cls.argv_tscrollx = "--activeTests tscrollx -e /some/random/path".split()255        cls.argv_a11yr = "--activeTests a11yr -e /some/random/path".split()256        cls.argv_perf_reftest = (257            "--activeTests perf_reftest -e /some/random/path".split()258        )259        cls.argv_perf_reftest_singletons = (260            "--activeTests perf_reftest_singletons -e /some/random/path".split()261        )262    @classmethod263    def teardown_class(cls):264        conftest.remove_develop_files()265    def test_correctly_overrides_test_valus(self):266        config = get_config(self.argv)267        assert bool(config) is True268        # no null values269        null_keys = [key for key, val in six.iteritems(config) if val is None]270        assert len(null_keys) == 0271        # expected keys are there272        assert config["browser_path"] == "/some/random/path"273        assert config["suite"] == "other-e10s"274        assert config["mainthread"] is True275        # default values overriden276        config = get_config(self.argv_overrides_defaults)277        assert config["basetest"] == ORIGINAL_DEFAULTS["basetest"]278    def test_config_has_tests(self):279        config = get_config(self.argv)280        assert len(config["tests"]) > 0281    def test_global_variable_isnt_modified(self):282        get_config(self.argv)283        assert ORIGINAL_DEFAULTS == DEFAULTS284    def test_raises_except_if_unprovided_tests_on_cli(self):285        with pytest.raises(ConfigurationError):286            get_config(self.argv_unprovided_tests)287        with pytest.raises(ConfigurationError):288            get_config(self.argv_unknown_suite)289    def test_ts_paint_has_expected_attributes(self):290        config = get_config(self.argv_ts_paint)291        test_config = config["tests"][0]292        assert test_config["name"] == "ts_paint"293        assert test_config["cycles"] == 20294        assert test_config["timeout"] == 150295        assert test_config["gecko_profile_startup"] is True296        assert test_config["gecko_profile_entries"] == 10000000297        assert (298            test_config["url"] != "startup_test/tspaint_test.html"299        )  # interpolation was done300        assert test_config["xperf_counters"] == []301        # TODO: these don't work; is this a bug?302        # assert test_config['win7_counters'] == []303        assert test_config["filters"] is not None304        assert test_config["tpmozafterpaint"] is True305        # assert test_config['mainthread'] is False306        # assert test_config['responsiveness'] is False307        # assert test_config['unit'] == 'ms'308    def test_ts_paint_webext_has_expected_attributes(self):309        config = get_config(self.argv_ts_paint_webext)310        test_config = config["tests"][0]311        assert test_config["name"] == "ts_paint_webext"312        assert test_config["cycles"] == 20313        assert test_config["timeout"] == 150314        assert test_config["gecko_profile_startup"] is True315        assert test_config["gecko_profile_entries"] == 10000000316        assert (317            test_config["url"] != "startup_test/tspaint_test.html"318        )  # interpolation was done319        assert test_config["xperf_counters"] == []320        # TODO: these don't work; is this a bug?321        # assert test_config['win7_counters'] == []322        assert test_config["filters"] is not None323        assert test_config["tpmozafterpaint"] is True324        # assert test_config['mainthread'] is False325        # assert test_config['responsiveness'] is False326        # assert test_config['unit'] == 'ms'327        # TODO: this isn't overriden328        # assert test_config['webextensions'] != '${talos}/webextensions/dummy/dummy-signed.xpi'329        assert test_config["preferences"] == {"xpinstall.signatures.required": False}330    def test_ts_paint_heavy_has_expected_attributes(self):331        config = get_config(self.argv_ts_paint_heavy)332        test_config = config["tests"][0]333        assert test_config["name"] == "ts_paint_heavy"334        assert test_config["cycles"] == 20335        assert test_config["timeout"] == 150336        assert test_config["gecko_profile_startup"] is True337        assert test_config["gecko_profile_entries"] == 10000000338        assert (339            test_config["url"] != "startup_test/tspaint_test.html"340        )  # interpolation was done341        assert test_config["xperf_counters"] == []342        # TODO: this doesn't work; is this a bug?343        # assert test_config['win7_counters'] == []344        assert test_config["filters"] is not None345        assert test_config["tpmozafterpaint"] is True346        # assert test_config['mainthread'] is False347        # assert test_config['responsiveness'] is False348        # assert test_config['unit'] == 'ms'349        assert test_config["profile"] == "simple"350    def test_sessionrestore_has_expected_attributes(self):351        config = get_config(self.argv_sessionrestore)352        test_config = config["tests"][0]353        assert test_config["name"] == "sessionrestore"354        assert test_config["cycles"] == 10355        assert test_config["timeout"] == 900356        assert test_config["gecko_profile_startup"] is True357        assert test_config["gecko_profile_entries"] == 10000000358        assert test_config["reinstall"] == [359            "sessionstore.jsonlz4",360            "sessionstore.js",361            "sessionCheckpoints.json",362        ]363        assert test_config["url"] == "about:home"364        assert test_config["preferences"] == {"browser.startup.page": 3}365        # assert test_config['unit'] == 'ms'366    def test_sesssionrestore_no_auto_restore_has_expected_attributes(self):367        config = get_config(self.argv_sessionrestore_no_auto_restore)368        test_config = config["tests"][0]369        assert test_config["name"] == "sessionrestore_no_auto_restore"370        assert test_config["cycles"] == 10371        assert test_config["timeout"] == 900372        assert test_config["gecko_profile_startup"] is True373        assert test_config["gecko_profile_entries"] == 10000000374        assert test_config["reinstall"] == [375            "sessionstore.jsonlz4",376            "sessionstore.js",377            "sessionCheckpoints.json",378        ]379        assert test_config["url"] == "about:home"380        assert test_config["preferences"] == {"browser.startup.page": 1}381        # assert test_config['unit'] == 'ms'382    def test_sessionrestore_many_windows_has_expected_attributes(self):383        config = get_config(self.argv_sessionrestore_many_windows)384        test_config = config["tests"][0]385        assert test_config["name"] == "sessionrestore_many_windows"386        assert test_config["cycles"] == 10387        assert test_config["timeout"] == 900388        assert test_config["gecko_profile_startup"] is True389        assert test_config["gecko_profile_entries"] == 10000000390        assert test_config["reinstall"] == [391            "sessionstore.jsonlz4",392            "sessionstore.js",393            "sessionCheckpoints.json",394        ]395        assert test_config["url"] == "about:home"396        assert test_config["preferences"] == {"browser.startup.page": 3}397        # assert test_config['unit'] == 'ms'398    def test_tresize_has_expected_attributes(self):399        config = get_config(self.argv_tresize)400        test_config = config["tests"][0]401        assert test_config["name"] == "tresize"402        assert test_config["cycles"] == 20403        assert (404            test_config["url"] != "startup_test/tresize/addon/content/tresize-test.html"405        )406        assert test_config["timeout"] == 150407        assert test_config["gecko_profile_interval"] == 2408        assert test_config["gecko_profile_entries"] == 1000000409        assert test_config["tpmozafterpaint"] is True410        assert test_config["filters"] is not None411        # assert test_config['unit'] == 'ms'412    def test_cpstartup_has_expected_attributes(self):413        config = get_config(self.argv_cpstartup)414        test_config = config["tests"][0]415        assert test_config["name"] == "cpstartup"416        assert test_config["tpcycles"] == 1417        assert (418            test_config["tpmanifest"] != "${talos}/tests/cpstartup/cpstartup.manifest"419        )420        assert test_config["tppagecycles"] == 20421        assert test_config["gecko_profile_entries"] == 1000000422        assert test_config["tploadnocache"] is True423        assert test_config["unit"] == "ms"424        assert test_config["preferences"] == {425            "addon.test.cpstartup.webserver": "${webserver}",426            "browser.link.open_newwindow": 3,427            "browser.link.open_newwindow.restriction": 2,428        }429    def test_tabpaint_has_expected_attributes(self):430        config = get_config(self.argv_tabpaint)431        test_config = config["tests"][0]432        assert test_config["name"] == "tabpaint"433        assert test_config["tpcycles"] == 1434        assert test_config["tpmanifest"] != "${talos}/tests/tabpaint/tabpaint.manifest"435        assert test_config["tppagecycles"] == 20436        assert test_config["gecko_profile_entries"] == 1000000437        assert test_config["tploadnocache"] is True438        assert test_config["unit"] == "ms"439        assert test_config["preferences"] == {440            "browser.link.open_newwindow": 3,441            "browser.link.open_newwindow.restriction": 2,442        }443    def test_tabswitch_has_expected_attributes(self):444        config = get_config(self.argv_tabswitch)445        test_config = config["tests"][0]446        assert test_config["name"] == "tabswitch"447        assert test_config["tpcycles"] == 1448        assert (449            test_config["tpmanifest"] != "${talos}/tests/tabswitch/tabswitch.manifest"450        )451        assert test_config["tppagecycles"] == 5452        assert test_config["gecko_profile_entries"] == 5000000453        assert test_config["tploadnocache"] is True454        assert test_config["preferences"] == {455            "addon.test.tabswitch.urlfile": os.path.join(456                "${talos}", "tests", "tp5o.html"457            ),458            "addon.test.tabswitch.webserver": "${webserver}",459            "addon.test.tabswitch.maxurls": -1,460        }461        assert test_config["unit"] == "ms"462    def test_tart_has_expected_attributes(self):463        config = get_config(self.argv_tart)464        test_config = config["tests"][0]465        assert test_config["name"] == "tart"466        assert test_config["tpmanifest"] != "${talos}/tests/tart/tart.manifest"467        assert test_config["tpcycles"] == 1468        assert test_config["tppagecycles"] == 25469        assert test_config["tploadnocache"] is True470        assert test_config["tpmozafterpaint"] is False471        assert test_config["gecko_profile_interval"] == 10472        assert test_config["gecko_profile_entries"] == 1000000473        assert "win_counters" not in test_config474        assert "w7_counters" not in test_config475        assert "linux_counters" not in test_config476        assert "mac_counters" not in test_config477        assert test_config["preferences"] == {478            "layout.frame_rate": 0,479            "docshell.event_starvation_delay_hint": 1,480            "dom.send_after_paint_to_content": False,481        }482        assert test_config["filters"] is not None483        assert test_config["unit"] == "ms"484    def test_damp_has_expected_attributes(self):485        config = get_config(self.argv_damp)486        test_config = config["tests"][0]487        assert test_config["name"] == "damp"488        assert test_config["tpmanifest"] != "${talos}/tests/devtools/damp.manifest"489        assert test_config["cycles"] == 5490        assert test_config["tpcycles"] == 1491        assert test_config["tppagecycles"] == 5492        assert test_config["tploadnocache"] is True493        assert test_config["tpmozafterpaint"] is False494        assert test_config["gecko_profile_interval"] == 10495        assert test_config["gecko_profile_entries"] == 1000000496        assert "win_counters" not in test_config497        assert "w7_counters" not in test_config498        assert "linux_counters" not in test_config499        assert "mac_counters" not in test_config500        assert test_config["filters"] is not None501        assert test_config["preferences"] == {"devtools.memory.enabled": True}502        assert test_config["unit"] == "ms"503    def test_glterrain_has_expected_attributes(self):504        config = get_config(self.argv_glterrain)505        test_config = config["tests"][0]506        assert test_config["name"] == "glterrain"507        assert test_config["tpmanifest"] != "${talos}/tests/webgl/glterrain.manifest"508        assert test_config["tpcycles"] == 1509        assert test_config["tppagecycles"] == 25510        assert test_config["tploadnocache"] is True511        assert test_config["tpmozafterpaint"] is False512        assert test_config["tpchrome"] is False513        assert test_config["gecko_profile_interval"] == 10514        assert test_config["gecko_profile_entries"] == 2000000515        assert "win_counters" not in test_config516        assert "w7_counters" not in test_config517        assert "linux_counters" not in test_config518        assert "mac_counters" not in test_config519        assert test_config["preferences"] == {520            "layout.frame_rate": 0,521            "docshell.event_starvation_delay_hint": 1,522            "dom.send_after_paint_to_content": False,523        }524        assert test_config["filters"] is not None525        assert test_config["unit"] == "frame interval"526    def test_glvideo_has_expected_attributes(self):527        config = get_config(self.argv_glvideo)528        test_config = config["tests"][0]529        assert test_config["name"] == "glvideo"530        assert test_config["tpmanifest"] != "${talos}/tests/webgl/glvideo.manifest"531        assert test_config["tpcycles"] == 1532        assert test_config["tppagecycles"] == 5533        assert test_config["tploadnocache"] is True534        assert test_config["tpmozafterpaint"] is False535        assert test_config["tpchrome"] is False536        assert test_config["gecko_profile_interval"] == 2537        assert test_config["gecko_profile_entries"] == 2000000538        assert "win_counters" not in test_config539        assert "w7_counters" not in test_config540        assert "linux_counters" not in test_config541        assert "mac_counters" not in test_config542        assert test_config["filters"] is not None543        assert test_config["unit"] == "ms"544    @mock.patch("talos.config.build_manifest", conftest.patched_build_manifest)545    def test_tp5n_has_expected_attributes(self):546        config = get_config(self.argv_tp5n)547        test_config = config["tests"][0]548        assert test_config["name"] == "tp5n"549        assert test_config["resolution"] == 20550        assert test_config["tpmanifest"] != "${talos}/tests/tp5n/tp5n.manifest"551        assert test_config["tpcycles"] == 1552        assert test_config["tppagecycles"] == 1553        assert test_config["cycles"] == 1554        assert test_config["tpmozafterpaint"] is True555        assert test_config["tptimeout"] == 5000556        assert test_config["mainthread"] is True557        assert test_config["w7_counters"] == []558        assert test_config["win_counters"] == []559        assert test_config["linux_counters"] == []560        assert test_config["mac_counters"] == []561        assert test_config["xperf_counters"] == [562            "main_startup_fileio",563            "main_startup_netio",564            "main_normal_fileio",565            "main_normal_netio",566            "nonmain_startup_fileio",567            "nonmain_normal_fileio",568            "nonmain_normal_netio",569            "mainthread_readcount",570            "mainthread_readbytes",571            "mainthread_writecount",572            "mainthread_writebytes",573        ]574        assert test_config["xperf_providers"] == [575            "PROC_THREAD",576            "LOADER",577            "HARD_FAULTS",578            "FILENAME",579            "FILE_IO",580            "FILE_IO_INIT",581        ]582        assert test_config["xperf_user_providers"] == [583            "Mozilla Generic Provider",584            "Microsoft-Windows-TCPIP",585        ]586        assert test_config["xperf_stackwalk"] == [587            "FileCreate",588            "FileRead",589            "FileWrite",590            "FileFlush",591            "FileClose",592        ]593        assert test_config["filters"] is not None594        assert test_config["timeout"] == 1800595        assert test_config["preferences"] == {596            "extensions.enabledScopes": "",597            "talos.logfile": "browser_output.txt",598        }599        assert test_config["unit"] == "ms"600    @mock.patch("talos.config.build_manifest", conftest.patched_build_manifest)601    def test_tp5o_has_expected_attributes(self):602        config = get_config(self.argv_tp5o)603        test_config = config["tests"][0]604        assert test_config["name"] == "tp5o"605        assert test_config["tpcycles"] == 1606        assert test_config["tppagecycles"] == 25607        assert test_config["cycles"] == 1608        assert test_config["tpmozafterpaint"] is True609        assert test_config["tptimeout"] == 5000610        assert test_config["mainthread"] is False611        assert test_config["tpmanifest"] != "${talos}/tests/tp5n/tp5o.manifest"612        assert test_config["win_counters"] == ["% Processor Time"]613        assert test_config["w7_counters"] == ["% Processor Time"]614        assert test_config["linux_counters"] == ["XRes"]615        assert test_config["mac_counters"] == []616        assert test_config["responsiveness"] is True617        assert test_config["gecko_profile_interval"] == 2618        assert test_config["gecko_profile_entries"] == 4000000619        assert test_config["filters"] is not None620        assert test_config["timeout"] == 1800621        assert test_config["unit"] == "ms"622    @mock.patch("talos.config.build_manifest", conftest.patched_build_manifest)623    def test_tp5o_webext_has_expected_attributes(self):624        config = get_config(self.argv_tp5o_webext)625        test_config = config["tests"][0]626        assert test_config["name"] == "tp5o_webext"627        assert test_config["tpcycles"] == 1628        assert test_config["tppagecycles"] == 25629        assert test_config["cycles"] == 1630        assert test_config["tpmozafterpaint"] is True631        assert test_config["tptimeout"] == 5000632        assert test_config["mainthread"] is False633        assert test_config["tpmanifest"] != "${talos}/tests/tp5n/tp5o.manifest"634        assert test_config["win_counters"] == ["% Processor Time"]635        assert test_config["w7_counters"] == ["% Processor Time"]636        assert test_config["linux_counters"] == ["XRes"]637        assert test_config["mac_counters"] == []638        assert test_config["responsiveness"] is True639        assert test_config["gecko_profile_interval"] == 2640        assert test_config["gecko_profile_entries"] == 4000000641        assert test_config["filters"] is not None642        assert test_config["timeout"] == 1800643        assert test_config["unit"] == "ms"644        assert test_config["webextensions"] == "${talos}/webextensions/dummy/dummy.xpi"645        assert test_config["preferences"] == {"xpinstall.signatures.required": False}646    @mock.patch("talos.config.build_manifest", conftest.patched_build_manifest)647    def test_tp5o_scroll_has_expected_attributes(self):648        config = get_config(self.argv_tp5o_scroll)649        test_config = config["tests"][0]650        assert test_config["name"] == "tp5o_scroll"651        assert test_config["tpmanifest"] != "${talos}/tests/tp5n/tp5o.manifest"652        assert test_config["tpcycles"] == 1653        assert test_config["tppagecycles"] == 12654        assert test_config["gecko_profile_interval"] == 2655        assert test_config["gecko_profile_entries"] == 2000000656        assert test_config["tpscrolltest"] is True657        assert test_config["tpmozafterpaint"] is False658        assert test_config["preferences"] == {659            "layout.frame_rate": 0,660            "docshell.event_starvation_delay_hint": 1,661            "dom.send_after_paint_to_content": False,662            "layout.css.scroll-behavior.spring-constant": "'10'",663            "toolkit.framesRecording.bufferSize": 10000,664        }665        assert test_config["filters"] is not None666        assert test_config["unit"] == "1/FPS"667    def test_v8_7_has_expected_attributes(self):668        config = get_config(self.argv_v8_7)669        test_config = config["tests"][0]670        assert test_config["name"] == "v8_7"671        assert test_config["tpmanifest"] != "${talos}/tests/v8_7/v8.manifest"672        assert test_config["gecko_profile_interval"] == 1673        assert test_config["gecko_profile_entries"] == 1000000674        assert test_config["tpcycles"] == 1675        assert test_config["resolution"] == 20676        assert test_config["tpmozafterpaint"] is False677        assert test_config["preferences"] == {"dom.send_after_paint_to_content": False}678        assert test_config["filters"] is not None679        assert test_config["unit"] == "score"680        assert test_config["lower_is_better"] is False681    def test_kraken_has_expected_attributes(self):682        config = get_config(self.argv_kraken)683        test_config = config["tests"][0]684        assert test_config["name"] == "kraken"685        assert test_config["tpmanifest"] != "${talos}/tests/kraken/kraken.manifest"686        assert test_config["tpcycles"] == 1687        assert test_config["tppagecycles"] == 1688        assert test_config["gecko_profile_interval"] == 1689        assert test_config["gecko_profile_entries"] == 5000000690        assert test_config["tpmozafterpaint"] is False691        assert test_config["tpchrome"] is False692        assert test_config["preferences"] == {"dom.send_after_paint_to_content": False}693        assert test_config["filters"] is not None694        assert test_config["unit"] == "score"695    def test_basic_compositor_video_has_expected_attributes(self):696        config = get_config(self.argv_basic_compositor_video)697        test_config = config["tests"][0]698        assert test_config["name"] == "basic_compositor_video"699        assert test_config["tpmanifest"] != "${talos}/tests/video/video.manifest"700        assert test_config["tpcycles"] == 1701        assert test_config["tppagecycles"] == 12702        assert test_config["tpchrome"] is False703        assert test_config["timeout"] == 10000704        assert test_config["gecko_profile_interval"] == 1705        assert test_config["gecko_profile_entries"] == 2000000706        assert test_config["preferences"] == {707            "full-screen-api.allow-trusted-requests-only": False,708            "layers.acceleration.force-enabled": False,709            "layers.acceleration.disabled": True,710            "layout.frame_rate": 0,711            "docshell.event_starvation_delay_hint": 1,712            "full-screen-api.warning.timeout": 500,713            "media.ruin-av-sync.enabled": True,714        }715        assert test_config["filters"] is not None716        assert test_config["unit"] == "ms/frame"717        assert test_config["lower_is_better"] is True718    def test_dromaeo_css_has_expected_attributes(self):719        config = get_config(self.argv_dromaeo_css)720        test_config = config["tests"][0]721        assert test_config["name"] == "dromaeo_css"722        assert test_config["tpcycles"] == 1723        assert test_config["filters"] is not None724        assert test_config["lower_is_better"] is False725        assert test_config["alert_threshold"] == 5.0726        assert test_config["tpchrome"] is False727        assert test_config["gecko_profile_interval"] == 2728        assert test_config["gecko_profile_entries"] == 10000000729        assert test_config["tpmanifest"] != "${talos}/tests/dromaeo/css.manifest"730        assert test_config["unit"] == "score"731    def test_dromaeo_dom_has_expected_attributes(self):732        config = get_config(self.argv_dromaeo_dom)733        test_config = config["tests"][0]734        assert test_config["name"] == "dromaeo_dom"735        assert test_config["tpcycles"] == 1736        assert test_config["filters"] is not None737        assert test_config["lower_is_better"] is False738        assert test_config["alert_threshold"] == 5.0739        assert test_config["tpchrome"] is False740        assert test_config["gecko_profile_interval"] == 2741        assert test_config["gecko_profile_entries"] == 10000000742        assert test_config["tpmanifest"] != "${talos}/tests/dromaeo/dom.manifest"743        assert test_config["unit"] == "score"744    def test_tsvgm_has_expected_attributes(self):745        config = get_config(self.argv_tsvgm)746        test_config = config["tests"][0]747        assert test_config["name"] == "tsvgm"748        assert test_config["tpmanifest"] != "${talos}/tests/svgx/svgm.manifest"749        assert test_config["tpcycles"] == 1750        assert test_config["tppagecycles"] == 7751        assert test_config["tpmozafterpaint"] is False752        assert test_config["tpchrome"] is False753        assert test_config["gecko_profile_interval"] == 10754        assert test_config["gecko_profile_entries"] == 1000000755        assert test_config["preferences"] == {756            "layout.frame_rate": 0,757            "docshell.event_starvation_delay_hint": 1,758            "dom.send_after_paint_to_content": False,759        }760        assert test_config["filters"] is not None761        assert test_config["unit"] == "ms"762    def test_tsvgx_has_expected_attributes(self):763        config = get_config(self.argv_tsvgx)764        test_config = config["tests"][0]765        assert test_config["name"] == "tsvgx"766        assert test_config["tpmanifest"] != "${talos}/tests/svgx/svgx.manifest"767        assert test_config["tpcycles"] == 1768        assert test_config["tppagecycles"] == 25769        assert test_config["tpmozafterpaint"] is False770        assert test_config["tpchrome"] is False771        assert test_config["gecko_profile_interval"] == 10772        assert test_config["gecko_profile_entries"] == 1000000773        assert test_config["preferences"] == {774            "layout.frame_rate": 0,775            "docshell.event_starvation_delay_hint": 1,776            "dom.send_after_paint_to_content": False,777        }778        assert test_config["filters"] is not None779        assert test_config["unit"] == "ms"780    def test_tsvg_static_has_expected_attributes(self):781        config = get_config(self.argv_tsvg_static)782        test_config = config["tests"][0]783        assert test_config["name"] == "tsvg_static"784        assert (785            test_config["tpmanifest"] != "${talos}/tests/svg_static/svg_static.manifest"786        )787        assert test_config["tpcycles"] == 1788        assert test_config["tppagecycles"] == 25789        assert test_config["tpmozafterpaint"] is True790        assert test_config["tpchrome"] is False791        assert test_config["gecko_profile_interval"] == 1792        assert test_config["gecko_profile_entries"] == 10000000793        assert test_config["filters"] is not None794        assert test_config["unit"] == "ms"795    def test_tsvgr_opacity_has_expected_attributes(self):796        config = get_config(self.argv_tsvgr_opacity)797        test_config = config["tests"][0]798        assert test_config["name"] == "tsvgr_opacity"799        assert (800            test_config["tpmanifest"]801            != "${talos}/tests/svg_opacity/svg_opacity.manifest"802        )803        assert test_config["tpcycles"] == 1804        assert test_config["tppagecycles"] == 25805        assert test_config["tpmozafterpaint"] is True806        assert test_config["tpchrome"] is False807        assert test_config["gecko_profile_interval"] == 1808        assert test_config["gecko_profile_entries"] == 10000000809        assert test_config["filters"] is not None810        assert test_config["unit"] == "ms"811    def test_tscrollx_has_expected_attributes(self):812        config = get_config(self.argv_tscrollx)813        test_config = config["tests"][0]814        assert test_config["name"] == "tscrollx"815        assert test_config["tpmanifest"] != "${talos}/tests/scroll/scroll.manifest"816        assert test_config["tpcycles"] == 1817        assert test_config["tppagecycles"] == 25818        assert test_config["tpmozafterpaint"] is False819        assert test_config["tpchrome"] is False820        assert test_config["gecko_profile_interval"] == 1821        assert test_config["gecko_profile_entries"] == 1000000822        assert test_config["preferences"] == {823            "layout.frame_rate": 0,824            "docshell.event_starvation_delay_hint": 1,825            "dom.send_after_paint_to_content": False,826            "layout.css.scroll-behavior.spring-constant": "'10'",827            "toolkit.framesRecording.bufferSize": 10000,828        }829        assert test_config["filters"] is not None830        assert test_config["unit"] == "ms"831    def test_a11yr_has_expect_attributes(self):832        config = get_config(self.argv_a11yr)833        test_config = config["tests"][0]834        assert test_config["name"] == "a11yr"835        assert test_config["tpmanifest"] != "${talos}/tests/a11y/a11y.manifest"836        assert test_config["tpcycles"] == 1837        assert test_config["tppagecycles"] == 25838        assert test_config["tpmozafterpaint"] is True839        assert test_config["tpchrome"] is False840        assert test_config["preferences"] == {"dom.send_after_paint_to_content": False}841        assert test_config["unit"] == "ms"842        assert test_config["alert_threshold"] == 5.0843    def test_perf_reftest_has_expected_attributes(self):844        config = get_config(self.argv_perf_reftest)845        test_config = config["tests"][0]846        assert test_config["name"] == "perf_reftest"847        assert test_config["base_vs_ref"] is True848        assert (849            test_config["tpmanifest"]850            != "${talos}/tests/perf-reftest/perf_reftest.manifest"851        )852        assert test_config["tpcycles"] == 1853        assert test_config["tppagecycles"] == 10854        assert test_config["tptimeout"] == 30000855        assert test_config["gecko_profile_interval"] == 1856        assert test_config["gecko_profile_entries"] == 2000000857        assert test_config["filters"] is not None858        assert test_config["unit"] == "ms"859        assert test_config["lower_is_better"] is True860        assert test_config["alert_threshold"] == 5.0861    def test_perf_reftest_singletons_has_expected_attributes(self):862        config = get_config(self.argv_perf_reftest_singletons)863        test_config = config["tests"][0]864        assert test_config["name"] == "perf_reftest_singletons"865        assert (866            test_config["tpmanifest"]867            != "${talos}/tests/perf-reftest-singletons/perf_reftest_singletons.manifest"868        )869        assert test_config["tpcycles"] == 1870        assert test_config["tppagecycles"] == 15871        assert test_config["tptimeout"] == 30000872        assert test_config["gecko_profile_interval"] == 1873        assert test_config["gecko_profile_entries"] == 2000000874        assert test_config["filters"] is not None875        assert test_config["unit"] == "ms"876        assert test_config["lower_is_better"] is True877        assert test_config["alert_threshold"] == 5.0878@mock.patch("talos.config.get_browser_config")879@mock.patch("talos.config.get_config")880def test_get_configs(get_config_mock, get_browser_config_mock):881    # unpacks in right order882    get_config_mock.return_value = "first"883    get_browser_config_mock.return_value = "second"884    first, second = get_configs()885    assert (first, second) == ("first", "second")886if __name__ == "__main__":...tests.py
Source:tests.py  
1import os2import unittest3import yaml4from builder import Builder5from config import Config6import input_validator as iv7from testdata.data import aws_namespaces as ns_list8class TestBuilder(unittest.TestCase):9    def test_getRegionCode(self):10        test_config = Config('./testdata/test-config.yml')11        valid_ns = ["au", "ca", "eu", "nl", "uk", "wa"]12        for ns in valid_ns:13            self.assertEqual(test_config.getRegionCode(ns), f"-{ns}")14    def test_get_listener_url(self):15        test_config = Config('./testdata/test-config.yml')16        self.assertEqual(test_config.getListenerUrl(), 'https://listener.logz.io:8053')17        valid_ns = ["au", "ca", "eu", "nl", "uk", "wa"]18        for ns in valid_ns:19            test_config.otel['logzio_region'] = ns20            self.assertEqual(test_config.getListenerUrl(), f'https://listener-{ns}.logz.io:8053')21        test_config.otel['custom_listener'] = 'test'22        self.assertEqual(test_config.getListenerUrl(), test_config.otel['custom_listener'])23    def test_load_config(self):24        # otel25        test_config = Config('./testdata/test-config.yml')26        self.assertEqual(test_config.otel['logzio_region'], 'us')27        self.assertEqual(test_config.otel['custom_listener'], '')28        self.assertEqual(test_config.otel['p8s_logzio_name'], 'cloudwatch-metrics')29        self.assertEqual(test_config.otel['token'], 'fakeXamgZErKKkMhmzdVZDhuZcpGKXeo')30        self.assertEqual(test_config.otel['scrape_interval'], 300)31        self.assertEqual(test_config.otel['remote_timeout'], 120)32        self.assertEqual(test_config.otel['log_level'], 'debug')33        self.assertEqual(test_config.otel['logzio_log_level'], 'info')34        self.assertEqual(test_config.otel['AWS_ACCESS_KEY_ID'], 'fakeXamgZErKKkMhmzdVZDhuZcpGKXeo')35        self.assertEqual(test_config.otel['AWS_SECRET_ACCESS_KEY'], 'fakeXamgZErKKkMhmzdVZDhuZcpGKXeo')36        # cloudwatch37        self.assertEqual(test_config.cloudwatch['custom_config'], 'false')38        self.assertEqual(test_config.cloudwatch['region'], 'us-east-1')39        self.assertEqual(test_config.cloudwatch['role_arn'], '')40        self.assertEqual(test_config.cloudwatch['aws_namespaces'], ["AWS/Lambda", "AWS/EC2"])41        self.assertEqual(test_config.cloudwatch['set_timestamp'], 'false')42        self.assertEqual(test_config.cloudwatch['delay_seconds'], 600)43        self.assertEqual(test_config.cloudwatch['range_seconds'], 600)44        self.assertEqual(test_config.cloudwatch['period_seconds'], 300)45        # Success46        try:47            Config('./testdata/test-config.yml')48        except Exception as e:49            self.fail(f'Unexpected error {e}')50    def test_load_config_env_overwrite(self):51        # otel52        os.environ['LOGZIO_REGION'] = 'eu'53        os.environ['SCRAPE_INTERVAL'] = '600'54        os.environ['P8S_LOGZIO_NAME'] = 'test'55        os.environ['TOKEN'] = 'test'56        os.environ['CUSTOM_LISTENER'] = 'test'57        os.environ['REMOTE_TIMEOUT'] = '600'58        os.environ['LOG_LEVEL'] = 'info'59        os.environ['LOGZIO_LOG_LEVEL'] = 'debug'60        os.environ['AWS_ACCESS_KEY_ID'] = 'test'61        os.environ['AWS_SECRET_ACCESS_KEY'] = 'test'62        # cloudwatch63        os.environ['DELAY_SECONDS'] = '60'64        os.environ['RANGE_SECONDS'] = '60'65        os.environ['PERIOD_SECONDS'] = '60'66        os.environ['SET_TIMESTAMP'] = 'true'67        os.environ['AWS_REGION'] = 'us-east-2'68        os.environ['AWS_NAMESPACES'] = 'AWS/RDS,AWS/ELB'69        os.environ['CUSTOM_CONFIG'] = 'true'70        os.environ['AWS_ROLE_ARN'] = 'test'71        test_config = Config('./testdata/test-config.yml')72        os.environ.clear()73        # otel74        self.assertEqual(test_config.otel['logzio_region'], 'eu')75        self.assertEqual(test_config.otel['scrape_interval'], 600)76        self.assertEqual(test_config.otel['token'], 'test')77        self.assertEqual(test_config.otel['custom_listener'], 'test')78        self.assertEqual(test_config.otel['remote_timeout'], 600)79        self.assertEqual(test_config.otel['log_level'], 'info')80        self.assertEqual(test_config.otel['logzio_log_level'], 'debug')81        self.assertEqual(test_config.otel['AWS_ACCESS_KEY_ID'], 'test')82        self.assertEqual(test_config.otel['AWS_SECRET_ACCESS_KEY'], 'test')83        # cloudwatch84        self.assertEqual(test_config.cloudwatch['custom_config'], 'true')85        self.assertEqual(test_config.cloudwatch['region'], 'us-east-2')86        self.assertEqual(test_config.cloudwatch['role_arn'], 'test')87        self.assertEqual(test_config.cloudwatch['aws_namespaces'], 'AWS/RDS,AWS/ELB')88        self.assertEqual(test_config.cloudwatch['delay_seconds'], 60)89        self.assertEqual(test_config.cloudwatch['range_seconds'], 60)90        self.assertEqual(test_config.cloudwatch['period_seconds'], 60)91        self.assertEqual(test_config.cloudwatch['set_timestamp'], 'true')92    def test_add_all_cloudwatch_namespaces(self):93        try:94            builder = Builder('./testdata/test-config.yml', cloudwatchConfigPath='./testdata/cloudwatch-test.yml')95            builder.config.cloudwatch['aws_namespaces'] = ns_list96            builder.updateCloudwatchConfiguration('./cw_namespaces/')97            with open(builder.cloudwatchConfigPath, 'r+') as cw:98                builder.dumpAndCloseFile({'metrics': []}, cw)99        except Exception as e:100            self.fail(f'Unexpected error {e}')101    def test_cloudwatch_config(self):102        try:103            builder = Builder('./testdata/test-config.yml', cloudwatchConfigPath='./testdata/cloudwatch-test.yml')104            builder.config.cloudwatch['aws_namespaces'], remove = iv.is_valid_aws_namespaces('AWS/EC2,AWS/RDS')105            builder.updateCloudwatchConfiguration('./cw_namespaces/')106            with open(builder.cloudwatchConfigPath, 'r+') as cw:107                builder.dumpAndCloseFile({'metrics': []}, cw)108        except Exception as e:109            self.fail(f'Unexpected error {e}')110    def test_update_otel_collector(self):111        try:112            builder = Builder('./testdata/test-config.yml', otelConfigPath='./testdata/otel-test.yml')113            with open(builder.otelConfigPath, 'r+') as otel:114                builder.updateOtelConfiguration()115                values = yaml.safe_load(otel)116                self.assertEqual(values['receivers']['prometheus_exec']['scrape_interval'], '300s')117                self.assertEqual(values['receivers']['prometheus_exec']['scrape_timeout'], '300s')118                self.assertEqual(values['exporters']['prometheusremotewrite']['endpoint'],119                                 'https://listener.logz.io:8053')120                self.assertEqual(values['exporters']['prometheusremotewrite']['timeout'], '120s')121                self.assertEqual(values['exporters']['prometheusremotewrite']['external_labels']['p8s_logzio_name'],122                                 'cloudwatch-metrics')123                self.assertEqual(values['exporters']['prometheusremotewrite']['headers']['Authorization'],124                                 'Bearer fakeXamgZErKKkMhmzdVZDhuZcpGKXeo')125                self.assertEqual(values['service']['telemetry']['logs']['level'], 'debug')126                # reset config127                with open('./testdata/default-otel.yml', 'r+') as otel_def:128                    testing_otel_yaml = yaml.safe_load(otel_def)129                    builder.dumpAndCloseFile(testing_otel_yaml, otel)130        except Exception as e:131            self.fail(f'Unexpected error {e}')132class TestInput(unittest.TestCase):133    def test_is_valid_logzio_token(self):134        # Fail Type135        non_valid_types = [-2, None, 4j, ['string', 'string']]136        for t in non_valid_types:137            self.assertRaises(TypeError, iv.is_valid_logzio_token, t)138        # Fail Value139        non_valid_vals = ['12', 'quwyekclshyrflclhf', 'rDRJEidvpIbecUwshyCn4kuUjbymiHev']140        for v in non_valid_vals:141            self.assertRaises(ValueError, iv.is_valid_logzio_token, v)142        # Success143        try:144            iv.is_valid_logzio_token('rDRJEidvpIbecUwshyCnGkuUjbymiHev')145        except (TypeError, ValueError) as e:146            self.fail(f'Unexpected error {e}')147    def test_is_valid_logzio_region_code(self):148        # Fail Type149        non_valid_types = [-2, None, 4j, ['string', 'string']]150        for t in non_valid_types:151            self.assertRaises(TypeError, iv.is_valid_logzio_region_code, t)152        # Fail Value153        non_valid_vals = ['12', 'usa', 'au,ca']154        for v in non_valid_vals:155            self.assertRaises(ValueError, iv.is_valid_logzio_region_code, v)156        # Success157        try:158            iv.is_valid_logzio_region_code('ca')159        except (TypeError, ValueError) as e:160            self.fail(f'Unexpected error {e}')161        try:162            iv.is_valid_logzio_region_code('us')163        except (TypeError, ValueError) as e:164            self.fail(f'Unexpected error {e}')165    def test_is_valid_scrape_interval(self):166        # Fail type167        non_valid_types = ['12', None, False, ['string', 'string'], 4j]168        for t in non_valid_types:169            self.assertRaises(TypeError, iv.is_valid_interval, t)170        # Fail Value171        non_valid_vals = [-60, 55, 10, 306]172        for v in non_valid_vals:173            self.assertRaises(ValueError, iv.is_valid_interval, v)174        # Success175        try:176            iv.is_valid_interval(360000)177        except (TypeError, ValueError) as e:178            self.fail(f'Unexpected error {e}')179        try:180            iv.is_valid_interval(60)181        except (TypeError, ValueError) as e:182            self.fail(f'Unexpected error {e}')183    def test_is_valid_aws_namespaces(self):184        # Fail Value185        self.assertRaises(ValueError, iv.is_valid_aws_namespaces, '')186        self.assertRaises(ValueError, iv.is_valid_aws_namespaces, 'AWS/ec2,  aws/RDS, AWS/lambda, AWS/fdfdf')187        # Success188        self.assertTupleEqual(iv.is_valid_aws_namespaces('AWS/RDS,AWS/Lambda,AWS/CloudFront'),189                              (['AWS/CloudFront', 'AWS/Lambda', 'AWS/RDS'], []))190        self.assertTupleEqual(iv.is_valid_aws_namespaces('AWS/RDS,AWS/nosuch,AWS/Lambda,AWS/CloudFront'),191                              (['AWS/CloudFront', 'AWS/Lambda', 'AWS/RDS'], ['AWS/nosuch']))192        self.assertTupleEqual(iv.is_valid_aws_namespaces('AWS/RDS,AWS/Lambda,AWS/Cloudfront'),193                              (['AWS/Lambda', 'AWS/RDS'], ['AWS/Cloudfront']))194        self.assertTupleEqual(iv.is_valid_aws_namespaces('AWS/RDS, AWS/RDS,  AWS/Lambda,AWS/Lambda,AWS/Cloudfront'),195                              (['AWS/Lambda', 'AWS/RDS'], ['AWS/Cloudfront']))196    def test_is_valid_p8s_logzio_name(self):197        # Fail Type198        non_valid_types = [-2, None, 4j, ['string', 'string']]199        for t in non_valid_types:200            self.assertRaises(TypeError, iv.is_valid_p8s_logzio_name, t)201        # Success202        try:203            iv.is_valid_p8s_logzio_name('dev5')204        except (TypeError, ValueError) as e:205            self.fail(f'Unexpected error {e}')206    def test_is_valid_custom_listener(self):207        # Fail Type208        non_valid_types = [-2, None, 4j, ['string', 'string']]209        for t in non_valid_types:210            self.assertRaises(TypeError, iv.is_valid_custom_listener, t)211        # Fail Value212        non_valid_vals = ['12', 'www.custom.listener:3000', 'custom.listener:3000', 'htt://custom.listener:3000',213                          'https://custom.listener:', 'https://custom.']214        for v in non_valid_vals:215            self.assertRaises(ValueError, iv.is_valid_custom_listener, v)216        # Success217        try:218            iv.is_valid_custom_listener('http://custom.listener:3000')219        except (TypeError, ValueError) as e:220            self.fail(f'Unexpected error {e}')221        try:222            iv.is_valid_custom_listener('https://localhost:9200')223        except (TypeError, ValueError) as e:224            self.fail(f'Unexpected error {e}')225if __name__ == '__main__':...conf.py
Source:conf.py  
1"""2Unit tests for the stem.util.conf class and functions.3"""4import unittest5import stem.util.conf6import stem.util.enum7from stem.util.conf import parse_enum, parse_enum_csv8class TestConf(unittest.TestCase):9  def tearDown(self):10    # clears the config contents11    test_config = stem.util.conf.get_config('unit_testing')12    test_config.clear()13    test_config.clear_listeners()14  def test_config_dict(self):15    """16    Tests the config_dict function.17    """18    my_config = {19      'bool_value': False,20      'int_value': 5,21      'str_value': 'hello',22      'list_value': [],23    }24    test_config = stem.util.conf.get_config('unit_testing')25    # checks that sync causes existing contents to be applied26    test_config.set('bool_value', 'true')27    my_config = stem.util.conf.config_dict('unit_testing', my_config)28    self.assertEqual(True, my_config['bool_value'])29    # check a basic synchronize30    test_config.set('str_value', 'me')31    self.assertEqual('me', my_config['str_value'])32    # synchronize with a type mismatch, should keep the old value33    test_config.set('int_value', '7a')34    self.assertEqual(5, my_config['int_value'])35    # changes for a collection36    test_config.set('list_value', 'a', False)37    self.assertEqual(['a'], my_config['list_value'])38    test_config.set('list_value', 'b', False)39    self.assertEqual(['a', 'b'], my_config['list_value'])40    test_config.set('list_value', 'c', False)41    self.assertEqual(['a', 'b', 'c'], my_config['list_value'])42  def test_parse_enum(self):43    """44    Tests the parse_enum function.45    """46    Insects = stem.util.enum.Enum('BUTTERFLY', 'LADYBUG', 'CRICKET')47    self.assertEqual(Insects.LADYBUG, parse_enum('my_option', 'ladybug', Insects))48    self.assertRaises(ValueError, parse_enum, 'my_option', 'ugabuga', Insects)49    self.assertRaises(ValueError, parse_enum, 'my_option', 'ladybug, cricket', Insects)50  def test_parse_enum_csv(self):51    """52    Tests the parse_enum_csv function.53    """54    Insects = stem.util.enum.Enum('BUTTERFLY', 'LADYBUG', 'CRICKET')55    # check the case insensitivity56    self.assertEqual([Insects.LADYBUG], parse_enum_csv('my_option', 'ladybug', Insects))57    self.assertEqual([Insects.LADYBUG], parse_enum_csv('my_option', 'Ladybug', Insects))58    self.assertEqual([Insects.LADYBUG], parse_enum_csv('my_option', 'LaDyBuG', Insects))59    self.assertEqual([Insects.LADYBUG], parse_enum_csv('my_option', 'LADYBUG', Insects))60    # various number of values61    self.assertEqual([], parse_enum_csv('my_option', '', Insects))62    self.assertEqual([Insects.LADYBUG], parse_enum_csv('my_option', 'ladybug', Insects))63    self.assertEqual(64      [Insects.LADYBUG, Insects.BUTTERFLY],65      parse_enum_csv('my_option', 'ladybug, butterfly', Insects)66    )67    self.assertEqual(68      [Insects.LADYBUG, Insects.BUTTERFLY, Insects.CRICKET],69      parse_enum_csv('my_option', 'ladybug, butterfly, cricket', Insects)70    )71    # edge cases for count argument where things are ok72    self.assertEqual(73      [Insects.LADYBUG, Insects.BUTTERFLY],74      parse_enum_csv('my_option', 'ladybug, butterfly', Insects, 2)75    )76    self.assertEqual(77      [Insects.LADYBUG, Insects.BUTTERFLY],78      parse_enum_csv('my_option', 'ladybug, butterfly', Insects, (1, 2))79    )80    self.assertEqual(81      [Insects.LADYBUG, Insects.BUTTERFLY],82      parse_enum_csv('my_option', 'ladybug, butterfly', Insects, (2, 3))83    )84    self.assertEqual(85      [Insects.LADYBUG, Insects.BUTTERFLY],86      parse_enum_csv('my_option', 'ladybug, butterfly', Insects, (2, 2))87    )88    # failure cases89    self.assertRaises(ValueError, parse_enum_csv, 'my_option', 'ugabuga', Insects)90    self.assertRaises(ValueError, parse_enum_csv, 'my_option', 'ladybug, ugabuga', Insects)91    self.assertRaises(ValueError, parse_enum_csv, 'my_option', 'ladybug butterfly', Insects)  # no comma92    self.assertRaises(ValueError, parse_enum_csv, 'my_option', 'ladybug', Insects, 2)93    self.assertRaises(ValueError, parse_enum_csv, 'my_option', 'ladybug', Insects, (2, 3))94  def test_clear(self):95    """96    Tests the clear method.97    """98    test_config = stem.util.conf.get_config('unit_testing')99    self.assertEqual([], list(test_config.keys()))100    # tests clearing when we're already empty101    test_config.clear()102    self.assertEqual([], list(test_config.keys()))103    # tests clearing when we have contents104    test_config.set('hello', 'world')105    self.assertEqual(['hello'], list(test_config.keys()))106    test_config.clear()107    self.assertEqual([], list(test_config.keys()))108  def test_listeners(self):109    """110    Tests the add_listener and clear_listeners methods.111    """112    listener_received_keys = []113    def test_listener(config, key):114      self.assertEqual(config, stem.util.conf.get_config('unit_testing'))115      listener_received_keys.append(key)116    test_config = stem.util.conf.get_config('unit_testing')117    test_config.add_listener(test_listener)118    self.assertEqual([], listener_received_keys)119    test_config.set('hello', 'world')120    self.assertEqual(['hello'], listener_received_keys)121    test_config.clear_listeners()122    test_config.set('foo', 'bar')123    self.assertEqual(['hello'], listener_received_keys)124  def test_unused_keys(self):125    """126    Tests the unused_keys method.127    """128    test_config = stem.util.conf.get_config('unit_testing')129    test_config.set('hello', 'world')130    test_config.set('foo', 'bar')131    test_config.set('pw', '12345')132    test_config.get('hello')133    test_config.get_value('foo')134    self.assertEqual(set(['pw']), test_config.unused_keys())135    test_config.get('pw')136    self.assertEqual(set(), test_config.unused_keys())137  def test_get(self):138    """139    Tests the get and get_value methods.140    """141    test_config = stem.util.conf.get_config('unit_testing')142    test_config.set('bool_value', 'true')143    test_config.set('int_value', '11')144    test_config.set('float_value', '11.1')145    test_config.set('str_value', 'world')146    test_config.set('list_value', 'a', False)147    test_config.set('list_value', 'b', False)148    test_config.set('list_value', 'c', False)149    test_config.set('map_value', 'foo => bar')150    # check that we get the default for type mismatch or missing values151    self.assertEqual(5, test_config.get('foo', 5))152    self.assertEqual(5, test_config.get('bool_value', 5))153    # checks that we get a string when no default is supplied154    self.assertEqual('11', test_config.get('int_value'))155    # exercise type casting for each of the supported types156    self.assertEqual(True, test_config.get('bool_value', False))157    self.assertEqual(11, test_config.get('int_value', 0))158    self.assertEqual(11.1, test_config.get('float_value', 0.0))159    self.assertEqual('world', test_config.get('str_value', ''))160    self.assertEqual(['a', 'b', 'c'], test_config.get('list_value', []))161    self.assertEqual(('a', 'b', 'c'), test_config.get('list_value', ()))162    self.assertEqual({'foo': 'bar'}, test_config.get('map_value', {}))163    # the get_value is similar, though only provides back a string or list164    self.assertEqual('c', test_config.get_value('list_value'))165    self.assertEqual(['a', 'b', 'c'], test_config.get_value('list_value', multiple = True))166    self.assertEqual(None, test_config.get_value('foo'))...Learn to execute automation testing from scratch with LambdaTest Learning Hub. Right from setting up the prerequisites to run your first automation test, to following best practices and diving deeper into advanced test scenarios. LambdaTest Learning Hubs compile a list of step-by-step guides to help you be proficient with different test automation frameworks i.e. Selenium, Cypress, TestNG etc.
You could also refer to video tutorials over LambdaTest YouTube channel to get step by step demonstration from industry experts.
Get 100 minutes of automation test minutes FREE!!
