def test_invalid_user(self): def get_config(): return {"auth": {"password": "******", "username": "******"}} with mock.patch('common.CONFIG_STORE.get_config', new=get_config): response = REST.get("/pools") assert response.status_code == 401
def test_get_empty(self): response = REST.get("/apps") data = json.loads(response.data.decode('utf-8')) # assert 0 apps are returned assert response.status_code == 404 assert "No apps in config" in data["message"]
def test_put_mba_unsupported(self): with mock.patch('common.CONFIG_STORE.set_config') as func_mock: response = REST.put("/pools/0", {"mba": 30}) func_mock.assert_not_called() data = json.loads(response.data.decode('utf-8')) assert response.status_code == 400 assert "System does not support MBA" in data["message"]
def test_put_empty_config(self): with mock.patch('common.CONFIG_STORE.set_config') as func_mock: response = REST.put("/pools/1", {"cbm": "0xc"}) func_mock.assert_not_called() data = json.loads(response.data.decode('utf-8')) assert response.status_code == 404 assert "No pools in config" in data["message"]
def test_put_not_exist(self): with mock.patch('common.CONFIG_STORE.set_config') as func_mock: response = REST.put("/pools/10", {"cores": [2, 3, 11]}) func_mock.assert_not_called() data = json.loads(response.data.decode('utf-8')) assert response.status_code == 404 assert "not found in config" in data["message"]
def test_post_mba_bw_mba_bw_disabled(self, pool_config): with mock.patch('common.CONFIG_STORE.set_config') as func_mock,\ mock.patch('pid_ops.is_pid_valid', return_value=True): response = REST.post("/pools", pool_config) func_mock.assert_not_called() data = json.loads(response.data.decode('utf-8')) assert response.status_code == 400
def test_put_mba_mba_bw_enabled(self): with mock.patch('common.CONFIG_STORE.set_config') as func_mock: response = REST.put("/pools/0", {"mba": 50}) func_mock.assert_not_called() data = json.loads(response.data.decode('utf-8')) assert response.status_code == 400 assert "MBA RATE is disabled" in data["message"]
def test_put_duplicate_cores(self): with mock.patch('common.CONFIG_STORE.set_config') as func_mock: response = REST.put("/pools/2", {"cores": [1, 2, 3, 11]}) func_mock.assert_not_called() data = json.loads(response.data.decode('utf-8')) assert response.status_code == 400 assert "already assigned to another pool" in data["message"]
def test_delete_not_empty(self): with mock.patch('common.CONFIG_STORE.set_config') as func_mock: response = REST.delete("/pools/1") func_mock.assert_not_called() data = json.loads(response.data.decode('utf-8')) # assert 0 apps are returned assert response.status_code == 400 assert "POOL 1 is not empty" in data["message"]
def test_delete_invalid_id(self): with mock.patch('common.CONFIG_STORE.set_config') as func_mock: response = REST.delete("/apps/10") func_mock.assert_not_called() data = json.loads(response.data.decode('utf-8')) # assert 0 apps are returned assert response.status_code == 404 assert "APP 10 not found in config" in data["message"]
def test_post_unknown_param(self): with mock.patch('common.CONFIG_STORE.set_config') as func_mock: response = REST.post("/pools", { "cores": [20], "cbm": "0xf", "unknonw": 1 }) func_mock.assert_not_called() assert response.status_code == 400
def test_delete(self): def set_config(data): for pool in data['pools']: assert pool['id'] != 3 with mock.patch('common.CONFIG_STORE.set_config', side_effect=set_config) as func_mock: response = REST.delete("/pools/3") func_mock.assert_called_once() assert response.status_code == 200
def test_post_empty_config(self): with mock.patch('common.CONFIG_STORE.set_config') as func_mock: response = REST.post("/apps", { "pool_id": 2, "name": "hello", "cores": [50], "pids": [1] }) func_mock.assert_not_called() assert response.status_code == 404
def test_put_cores(self): def set_config(data): for app in data['apps']: if app['id'] == 2: assert app['cores'] == [3] with mock.patch('common.CONFIG_STORE.set_config', side_effect=set_config) as func_mock: response = REST.put("/apps/2", {"pool_id": 2, "cores": [3]}) func_mock.assert_called_once() assert response.status_code == 200
def test_delete(self): def set_config(data): for app in data['apps']: assert app['id'] != 2 for pool in data['pools']: assert ('apps' not in pool) or (2 not in pool['apps']) with mock.patch('common.CONFIG_STORE.set_config', side_effect=set_config) as func_mock: response = REST.delete("/apps/2") func_mock.assert_called_once() assert response.status_code == 200
def test_put_name(self): def set_config(data): for pool in data['pools']: if pool['id'] == 2: assert pool['name'] == "test" with mock.patch('common.CONFIG_STORE.set_config', side_effect=set_config) as func_mock,\ mock.patch('pid_ops.is_pid_valid', return_value=True): response = REST.put("/pools/2", {"name": "test"}) func_mock.assert_called_once() assert response.status_code == 200
def test_get(self): response = REST.get("/caps") data = json.loads(response.data.decode('utf-8')) # validate response schema schema, resolver = load_json_schema('get_caps_response.json') validate(data, schema, resolver=resolver) assert response.status_code == 200 assert 'cat' in data["capabilities"] assert 'mba' in data["capabilities"] assert 'power' in data["capabilities"]
def test_get(self): response = REST.get("/pools") data = json.loads(response.data.decode('utf-8')) assert response.status_code == 200 # validate get all pools response schema schema, resolver = load_json_schema('get_pool_all_response.json') validate(data, schema, resolver=resolver) # assert 4 pools are returned # structure, types and required fields are validated using schema assert len(data) == len(CONFIG['pools'])
def test_get(self): response = REST.get("/pools/3") data = json.loads(response.data.decode('utf-8')) assert response.status_code == 200 # validate get 1 pool response schema schema, resolver = load_json_schema('get_pool_response.json') validate(data, schema, resolver=resolver) # assert 1 pool is returned # structure, types and required fields are validated using schema assert data['id'] == 3
def test_put_pool(self): def set_config(data): for pool in data['pools']: if pool['id'] == 2: assert 2 in pool['apps'] else: assert ('apps' not in pool) or (2 not in pool['apps']) with mock.patch('common.CONFIG_STORE.set_config', side_effect=set_config) as func_mock: response = REST.put("/apps/2", {"pool_id": 2}) func_mock.assert_called_once() assert response.status_code == 200
def test_post(self, pool_config): with mock.patch('common.CONFIG_STORE.set_config') as func_mock,\ mock.patch('pid_ops.is_pid_valid', return_value=True): response = REST.post("/pools", pool_config) func_mock.assert_called_once() data = json.loads(response.data.decode('utf-8')) #validate add pool response schema schema, resolver = load_json_schema('add_pool_response.json') validate(data, schema, resolver=resolver) assert response.status_code == 201 assert data['id'] == 5
def test_put_mba_bw_mba_bw_disabled(self, mba_bw_supported): with mock.patch('common.CONFIG_STORE.set_config') as func_mock,\ mock.patch("caps.mba_bw_supported", return_value=mba_bw_supported): response = REST.put("/pools/0", {"mba_bw": 3000}) func_mock.assert_not_called() data = json.loads(response.data.decode('utf-8')) assert response.status_code == 400 if not mba_bw_supported: assert "MBA CTRL is not supported" in data["message"] else: assert "MBA CTRL is not enabled" in data["message"]
def test_get(self): def general_stats_get(get_stats_id): if get_stats_id == StatsStore.General.NUM_APPS_MOVES: return 1 if get_stats_id == StatsStore.General.NUM_ERR: return 2 with mock.patch("common.STATS_STORE.general_stats_get", side_effect=general_stats_get) as mock_func: response = REST.get("/stats") mock_func.assert_called() data = json.loads(response.data.decode('utf-8')) # validate response schema schema, resolver = load_json_schema('get_stats_response.json') validate(data, schema, resolver=resolver) assert response.status_code == 200 assert data["num_apps_moves"] == 1 assert data["num_err"] == 2
def test_get_empty(self): response = REST.get("/pools/5") data = json.loads(response.data.decode('utf-8')) assert response.status_code == 404 assert "No pools in config" in data["message"]
def test_get_invalid_id(self): response = REST.get("/apps/5") data = json.loads(response.data.decode('utf-8')) assert response.status_code == 404 assert "not found in config" in data["message"]
def test_post_no_req_fields(self, no_req_fields_json): with mock.patch('common.CONFIG_STORE.set_config') as func_mock: response = REST.post("/pools", no_req_fields_json) func_mock.assert_not_called() assert response.status_code == 400
def test_post_invalid_value(self, pool_config): with mock.patch('common.CONFIG_STORE.set_config') as func_mock: response = REST.post("/pools", pool_config) func_mock.assert_not_called() assert response.status_code == 400
def test_post_duplicate_core(self): with mock.patch('common.CONFIG_STORE.set_config') as func_mock: response = REST.post("/pools", {"cores": [1, 2, 3], "cbm": "0xf"}) func_mock.assert_not_called() assert response.status_code == 400
def test_post_exceed_max_number(self): with mock.patch('common.CONFIG_STORE.set_config') as func_mock: response = REST.post("/pools", {"cores": [11, 12], "cbm": "0xf"}) func_mock.assert_not_called() assert response.status_code == 500
def test_put_empty_cores(self): with mock.patch('common.CONFIG_STORE.set_config') as func_mock: response = REST.put("/pools/2", {"cores": []}) func_mock.assert_not_called() assert response.status_code == 400