def test_report_add_meta(): report = Report("127.0.0.1:8545") assert report.meta == {} report.add_meta("test-key", "test-value") assert report.meta["test-key"] == "test-value" assert report.to_dict()["meta"]["test-key"] == "test-value"
def test_report_add_incomplete_issue(): report = Report("127.0.0.1:8545") assert report.issues == [] issue = Issue(title="test", description="test") # missing severity! with pytest.raises(ValueError): report.add_issue(issue)
def test_report_add_issue(): report = Report("127.0.0.1:8545") assert report.issues == [] issue = Issue(title="test", description="test", severity=Severity.NONE) report.add_issue(issue) assert report.issues == [issue] assert len(report.to_dict()["issues"])
def test_valid_report(): target = "127.0.0.1:8545" report = Report(target, issues=[]) assert report.issues == [] assert report.target == target assert isinstance(report.id, str) assert isinstance(report.timestamp, str) assert report.meta == {} assert sorted(report.to_dict().keys()) == [ "id", "issues", "meta", "ok", "target", "timestamp", ]
def assert_report(report: Report, target, meta): assert isinstance(report.timestamp, str) assert isinstance(report.id, str) report_dict = report.to_dict() assert report_dict.get("issues") == [] assert report_dict.get("meta") == meta assert isinstance(report_dict.get("timestamp"), str) assert report_dict.get("target") == target assert report_dict.get("ok") is True
def test_valid_context(): target = "127.0.0.1:8545" node_type = NodeType.GETH context = Context( target=target, report=Report(target=target), node_type=node_type, ) assert context.target == target assert context.node_type == node_type assert context.report.target == target assert context.report.issues == []
def test_run_plugin_exception(): plugin = SampleRPCPlugin() target = "127.0.0.1:8545" node_type = NodeType.GETH expected_meta = {"SampleRPCPlugin": True} context = Context( target=target, report=Report(target=target), node_type=node_type, ) plugin._check = MagicMock(side_effect=PluginException) plugin.run(context=context) plugin._check.assert_called_once() assert plugin.INTRUSIVE is True assert_context(context=context, target=target, node_type=node_type, meta=expected_meta) assert_report(report=context.report, target=target, meta=expected_meta)
def test_issues(plugin, node_type, rpc_results, endpoint, issues): context = Context( target=TARGET, report=Report(uuid=TEST_UUID, target=TARGET, issues=[]), node_type=node_type, ) with requests_mock.Mocker() as mock: mock.request( method=requests_mock.ANY, url=requests_mock.ANY, response_list=rpc_results, ) plugin.run(context=context) assert mock.call_count == len(rpc_results) for i, response in enumerate(rpc_results): # TODO: allow for endpoint list if multiple are hit mock.request_history[i].url.endswith(endpoint) assert context.report.meta == {plugin.__class__.__name__: True} assert len(context.report.issues) == len(issues) for i1, i2 in zip(context.report.issues, issues): # compare dict representations here for more verbose failure diffs assert i1.to_dict() == i2.to_dict()
def test_report_repr(): report = Report(target="127.0.0.1:8545", issues=[None, None]) assert report.target in str(report) assert str(len(report.issues)) in str(report)
assert report.meta["test-key"] == "test-value" assert report.to_dict()["meta"]["test-key"] == "test-value" def test_report_repr(): report = Report(target="127.0.0.1:8545", issues=[None, None]) assert report.target in str(report) assert str(len(report.issues)) in str(report) @pytest.mark.parametrize( "report_1,report_2,expected", ( pytest.param( Report(uuid=TEST_UUID, target="127.0.0.1:8545", issues=[None], timestamp="lol"), Report(uuid=TEST_UUID, target="127.0.0.1:8545", issues=[None], timestamp="lol"), True, id="equals", ), pytest.param( Report(uuid=TEST_UUID, target="127.0.0.1:8545", issues=[None]), Report(uuid=str(uuid4()), target="127.0.0.1:8545", issues=[None]), False, id="uuid different", ), pytest.param(