Exemplo n.º 1
0
    def test_operations_post_expert_mode_disable_put_del(self):
        response = Rest().get("/power_profiles")
        assert response.status_code == 200

        data = json.loads(response.data.decode('utf-8'))
        assert CONFIG['power_profiles'] == data

        profile_ids = []

        for profile in CONFIG['power_profiles']:
            response = Rest().get("/power_profiles/{}".format(profile['id']))
            assert response.status_code == 200

            data = json.loads(response.data.decode('utf-8'))
            assert profile == data

            profile_ids.append(profile['id'])

            with mock.patch("common.CONFIG_STORE.set_config") as mock_set_config,\
                mock.patch("common.CONFIG_STORE.validate") as mock_validate:
                response = Rest().put(
                    "/power_profiles/{}".format(profile['id']),
                    {"name": "Test_name"})
                assert response.status_code == 405
                mock_set_config.assert_not_called()
                mock_validate.assert_not_called()

        for id in profile_ids:
            with mock.patch("common.CONFIG_STORE.set_config") as mock_set_config,\
                mock.patch("common.CONFIG_STORE.validate") as mock_validate:
                response = Rest().delete("/power_profiles/{}".format(id))
                assert response.status_code == 405
                mock_set_config.assert_not_called()
                mock_validate.assert_not_called()
Exemplo n.º 2
0
    def test_operations_post(self):

        post_profile = {
            "min_freq": 1000,
            "max_freq": 2200,
            "epp": "performance",
            "name": "test_profile"
        }
        post_profile_id = 10

        def set_config(config):
            for profile in config['power_profiles']:
                if profile['id'] == post_profile_id:
                    temp_profile = deepcopy(post_profile)
                    temp_profile.update({"id": post_profile_id})
                    assert profile == temp_profile
                    break

        with mock.patch("common.CONFIG_STORE.set_config", side_effect=set_config) as mock_set_config,\
            mock.patch("common.CONFIG_STORE.get_new_power_profile_id", return_value=post_profile_id) as mock_get_id,\
            mock.patch("common.CONFIG_STORE.validate") as mock_validate:
            response = Rest().post("/power_profiles", post_profile)
            assert response.status_code == 201
            mock_set_config.assert_called()
            mock_validate.assert_called()
            mock_get_id.assert_called()

        with mock.patch("common.CONFIG_STORE.set_config") as mock_set_config,\
            mock.patch("common.CONFIG_STORE.get_new_power_profile_id", return_value=post_profile_id) as mock_get_id,\
            mock.patch("common.CONFIG_STORE.validate", side_effect = Exception('Test Exception!')) as mock_validate:
            response = Rest().post("/power_profiles", post_profile)
            assert response.status_code == 400
            mock_validate.assert_called()
            mock_set_config.assert_not_called()
Exemplo n.º 3
0
    def test_existing_profiles_operations_get_del(self):
        response = Rest().get("/power_profiles")
        assert response.status_code == 200

        data = json.loads(response.data.decode('utf-8'))
        assert CONFIG['power_profiles'] == data

        used_profiles_ids = []
        unused_profiles_id = None
        for pool in CONFIG['pools']:
            if 'power_profile' in pool:
                used_profiles_ids.append(pool['power_profile'])

        for profile in CONFIG['power_profiles']:
            response = Rest().get("/power_profiles/{}".format(profile['id']))
            assert response.status_code == 200

            data = json.loads(response.data.decode('utf-8'))
            assert profile == data

            if profile['id'] not in used_profiles_ids:
                unused_profiles_id = profile['id']

        for id in used_profiles_ids:
            response = Rest().delete("/power_profiles/{}".format(id))
            assert response.status_code == 400

        def mock_set_config(config):
            for profile in config['power_profiles']:
                assert profile['id'] != unused_profiles_id

        with mock.patch("common.CONFIG_STORE.set_config", new=mock_set_config):
            response = Rest().delete(
                "/power_profiles/{}".format(unused_profiles_id))
            assert response.status_code == 200
Exemplo n.º 4
0
    def test_caps_mba_put_post(self, mba_bw_enabled):

        with mock.patch("caps.mba_bw_enabled", return_value=mba_bw_enabled):
            response = Rest().put("/caps/mba", {"mba_enabled": True})
            assert response.status_code == 405

            response = Rest().post("/caps/mba", {"mba_bw_enabled": True})
            assert response.status_code == 405
Exemplo n.º 5
0
    def test_caps_mba_mba_not_supported_get_put_post(self):
        response = Rest().get("/caps/mba")
        assert response.status_code == 404

        response = Rest().put("/caps/mba", {"mba_enabled": True})
        assert response.status_code == 404

        response = Rest().post("/caps/mba", {"mba_bw_enabled": True})
        assert response.status_code == 404
Exemplo n.º 6
0
    def test_invalid_index(self, invalid_id):

        response = Rest().get("/power_profiles/{}".format(invalid_id))
        assert response.status_code == 404

        response = Rest().delete("/power_profiles/{}".format(invalid_id))
        assert response.status_code == 404

        response = Rest().put("/power_profiles/{}".format(invalid_id), {"name": "Test"})
        assert response.status_code == 404
Exemplo n.º 7
0
    def test_epp_unsupported_get_post(self):
        response = Rest().get("/power_profiles")
        assert response.status_code == 404

        response = Rest().post("/power_profiles", {
            "max_freq": 2000,
            "min_freq": 1000,
            "epp": "power"
        })
        assert response.status_code == 404
Exemplo n.º 8
0
    def test_get_epp_no_profiles_configured(self):
        response = Rest().get("/power_profiles")
        assert response.status_code == 404

        for id in range(5):
            response = Rest().get("/power_profiles/{}".format(id))
            assert response.status_code == 404

            response = Rest().delete("/power_profiles/{}".format(id))
            assert response.status_code == 404

            response = Rest().put("/power_profiles/{}".format(id), {"name": "Test"})
            assert response.status_code == 404
Exemplo n.º 9
0
    def test_caps_l2ca_get(self):
        info = {
            'cache_size': 20 * 2000,
            'cache_way_size': 2000,
            'cache_ways_num': 20,
            'clos_num': 14,
            'cdp_supported': True,
            'cdp_enabled': True
        }

        with mock.patch("caps.l2ca_info", return_value=info):
            response = Rest().get("/caps/l2cat")
            assert response.status_code == 200

            data = json.loads(response.data.decode('utf-8'))

            # Validate response schema
            schema, resolver = load_json_schema('get_caps_l2ca_response.json')
            validate(data, schema, resolver=resolver)

            params = [
                'cache_size', 'cw_size', 'cw_num', 'clos_num', 'cdp_supported',
                'cdp_enabled'
            ]
            assert len(data) == len(params)
            for param in params:
                assert param in data

            assert data['cache_size'] == 20 * 2000
            assert data['cw_size'] == 2000
            assert data['cw_num'] == 20
            assert data['clos_num'] == 14
            assert data['cdp_supported']
            assert data['cdp_enabled']
Exemplo n.º 10
0
    def test_existing_profiles_operations_put(self):

        put_profile = CONFIG['power_profiles'][-1]

        def set_config(config):
            for profile in config['power_profiles']:
                if profile['id'] == put_profile['id']:
                    assert profile != put_profile
                    break

        with mock.patch("common.CONFIG_STORE.set_config", side_effect=set_config) as mock_set_config,\
            mock.patch("common.CONFIG_STORE.validate"):
            for key, value in put_profile.items():

                if key in ["min_freq", "max_freq"]:
                    value += 100
                elif key in ["epp", "name"]:
                    value = value + "_test"

                response = Rest().put(
                    "/power_profiles/{}".format(put_profile['id']),
                    {key: value})
                if key == "id":
                    assert response.status_code == 400
                else:
                    assert response.status_code == 200
                    mock_set_config.assert_called()


        with mock.patch("common.CONFIG_STORE.validate", side_effect = Exception('Test Exception!')),\
            mock.patch("common.CONFIG_STORE.set_config") as mock_set_config:
            for key, value in put_profile.items():

                if key in ["min_freq", "max_freq"]:
                    value += 100
                elif key in ["epp", "name"]:
                    value = value + "_test"

                response = Rest().put(
                    "/power_profiles/{}".format(put_profile['id']),
                    {key: value})
                assert response.status_code == 400
                mock_set_config.assert_not_called()
Exemplo n.º 11
0
    def test_invalid_request(self, invalid_request):

        response = Rest().get("/power_profiles")
        assert response.status_code == 200

        data = json.loads(response.data.decode('utf-8'))
        assert CONFIG['power_profiles'] == data

        valid_id = None
        for profile in CONFIG['power_profiles']:
            valid_id = profile['id']
            break

        assert valid_id is not None

        response = Rest().put("/power_profiles/{}".format(valid_id), invalid_request)
        assert response.status_code == 400

        response = Rest().post("/power_profiles", invalid_request)
        assert response.status_code == 400
Exemplo n.º 12
0
    def test_nonexisting_profile_operations_get_del_put(self):
        response = Rest().get("/power_profiles")
        assert response.status_code == 200

        data = json.loads(response.data.decode('utf-8'))
        assert CONFIG['power_profiles'] == data

        ids = []
        for profile in CONFIG['power_profiles']:
            ids.append(profile['id'])

        assert ids

        response = Rest().get("/power_profiles/{}".format(sorted(ids)[-1] + 1))
        assert response.status_code == 404

        response = Rest().delete("/power_profiles/{}".format(sorted(ids)[-1] + 1))
        assert response.status_code == 404

        response = Rest().put("/power_profiles/{}".format(sorted(ids)[-1] + 1), {"name": "Test"})
        assert response.status_code == 404
Exemplo n.º 13
0
    def test_operations_post_expert_mode_disable_post(self):

        post_profile = {"min_freq": 1000, "max_freq": 2200, "epp": "performance", "name": "test_profile"}
        post_profile_id = 10

        with mock.patch("common.CONFIG_STORE.set_config") as mock_set_config,\
            mock.patch("common.CONFIG_STORE.get_new_power_profile_id", return_value=post_profile_id) as mock_get_id,\
            mock.patch("common.CONFIG_STORE.validate") as mock_validate:
                response = Rest().post("/power_profiles", post_profile)
                assert response.status_code == 405
                mock_set_config.assert_not_called()
                mock_validate.assert_not_called()
                mock_get_id.assert_not_called()
Exemplo n.º 14
0
    def test_caps_mba_ctrl_put(self, valid_request):
        called = False

        def set_config(data):
            nonlocal called
            called = True
            assert 'mba_ctrl' in data
            assert 'enabled' in data['mba_ctrl']
            assert data['mba_ctrl']['enabled'] == valid_request['enabled']

        with mock.patch("common.CONFIG_STORE.set_config", new=set_config) as mock_set_config:
            response = Rest().put("/caps/mba_ctrl", valid_request)
            # All OK, MBA BW/CTRL supported and no pool configured
            assert response.status_code == 200
            assert called
Exemplo n.º 15
0
    def test_caps_rdt_iface_put(self, iface):
        called = False

        def set_config(data):
            nonlocal called
            called = True
            assert 'rdt_iface' in data
            assert 'interface' in data['rdt_iface']
            assert data['rdt_iface']['interface'] == iface

        with mock.patch("common.CONFIG_STORE.set_config", new=set_config) as mock_set_config:
            response = Rest().put("/caps/rdt_iface", {"interface": iface})

            # All OK, Requested RDT interface supported and no pool configured
            assert response.status_code == 200
            assert called
Exemplo n.º 16
0
    def test_caps_rdt_iface_get(self, rdt_iface, rdt_iface_supported):

        with mock.patch("common.PQOS_API.current_iface", return_value=rdt_iface),\
                mock.patch("common.PQOS_API.supported_iface", return_value=rdt_iface_supported):
            response = Rest().get("/caps/rdt_iface")
            assert response.status_code == 200

            data = json.loads(response.data.decode('utf-8'))

            # validate response schema
            schema, resolver = load_json_schema('get_caps_rdt_iface_response.json')
            validate(data, schema, resolver=resolver)

            params = ['interface', 'interface_supported']
            assert len(data) == len(params)
            for param in params:
                assert param in data

            assert data['interface'] == rdt_iface
            assert data['interface_supported'] == rdt_iface_supported
Exemplo n.º 17
0
    def test_caps_mba_get(self, mba_bw_enabled):

        with mock.patch("caps.mba_bw_enabled", return_value=mba_bw_enabled):

            response = Rest().get("/caps/mba")
            assert response.status_code == 200

            data = json.loads(response.data.decode('utf-8'))

            # validate response schema
            schema, resolver = load_json_schema('get_caps_mba_response.json')
            validate(data, schema, resolver=resolver)

            params = ['mba_enabled', 'mba_bw_enabled']
            assert len(data) == len(params)
            for param in params:
                assert param in data

            assert not data['mba_enabled'] == mba_bw_enabled
            assert data['mba_bw_enabled'] == mba_bw_enabled
Exemplo n.º 18
0
    def test_get_sstbf(self):
        for ret_val in [True, False]:
            with mock.patch("sstbf.is_sstbf_configured", return_value=ret_val):
                response = Rest().get("/caps/sstbf")

                assert response.status_code == 200

                data = json.loads(response.data.decode('utf-8'))

                # validate response schema
                schema, resolver = load_json_schema('get_sstbf_response.json')
                validate(data, schema, resolver=resolver)

                params = ['configured', 'hp_cores', 'std_cores']

                assert len(data) == len(params)

                for param in params:
                    assert param in data

                assert data['configured'] == ret_val
                assert data['hp_cores'] == [0, 1, 2, 3]
                assert data['std_cores'] == [4, 5, 6, 7]
Exemplo n.º 19
0
 def test_caps_rdt_iface_not_supported_put(self):
     response = Rest().put("/caps/rdt_iface", {"interface": "os"})
     # No pool configured, but requested RDT interface not supported
     assert response.status_code == 400
Exemplo n.º 20
0
 def test_put_sstbf_invalid(self, invalid_fields_json):
     with mock.patch("sstbf.configure_sstbf", return_value=0) as func_mock:
         response = Rest().put("/caps/sstbf", invalid_fields_json)
         # expect 400 BAD REQUEST
         assert response.status_code == 400
         func_mock.assert_not_called()
Exemplo n.º 21
0
 def test_put_sstbf_enable_failed(self):
     with mock.patch("sstbf.configure_sstbf", return_value=-1) as func_mock:
         response = Rest().put("/caps/sstbf", {"configured": True})
         assert response.status_code == 500
         func_mock.assert_called()
Exemplo n.º 22
0
 def test_put_sstbf(self, configured_value):
     with mock.patch("sstbf.configure_sstbf", return_value=0) as func_mock:
         response = Rest().put("/caps/sstbf",
                               {"configured": configured_value})
         assert response.status_code == 200
         func_mock.called_once_with(configured_value)
Exemplo n.º 23
0
    def test_get_sstbf_unsupported(self):
        response = Rest().get("/caps/sstbf")
        assert response.status_code == 404

        response = Rest().put("/caps/sstbf", {"configured": True})
        assert response.status_code == 404
Exemplo n.º 24
0
 def test_caps_mba_ctrl_invalid_request_put(self, invalid_request):
     response = Rest().put("/caps/mba_ctrl", invalid_request)
     assert response.status_code == 400
Exemplo n.º 25
0
 def test_caps_mba_ctrl_mba_bw_not_supported_put(self, valid_request):
     response = Rest().put("/caps/mba_ctrl", valid_request)
     # MBA BW/CTRL not supported
     assert response.status_code == 409
Exemplo n.º 26
0
 def test_caps_mba_ctrl_pools_configured_put(self, valid_request):
     response = Rest().put("/caps/mba_ctrl", valid_request)
     # MBA BW/CTRL supported but Pools configured
     assert response.status_code == 409
Exemplo n.º 27
0
 def test_caps_rdt_iface_pools_configured_put(self, valid_request):
     response = Rest().put("/caps/rdt_iface", valid_request)
     # Requested RDT interface supported but Pools configured
     assert response.status_code == 409
Exemplo n.º 28
0
 def test_caps_rdt_iface_invalid_request_put(self, invalid_request):
     response = Rest().put("/caps/rdt_iface", invalid_request)
     assert response.status_code == 400