Esempio n. 1
0
def test_parsing(test_item: Test):
    flavors = ["compact"]
    if not test_item.disable_legacy:
        flavors += ["legacy"]
    for version, flavor in test_item.versions_with_flavors:
        test_file = os.path.join(
            TEST_ROOT, "compile",
            f"{test_item.test_file}-{version}-{flavor}.zip")
        expected_file = os.path.join(
            TEST_ROOT, "expected",
            f"{test_item.test_file}-{version}-{flavor}.json")

        cc = load_from_zip(test_file)[0]

        sl = Slither(
            cc,
            solc_force_legacy_json=flavor == "legacy",
            disallow_partial=True,
            skip_analyze=True,
        )

        actual = generate_output(sl)

        try:
            with open(expected_file, "r", encoding="utf8") as f:
                expected = json.load(f)
        except OSError:
            pytest.xfail("the file for this test was not generated")
            raise

        diff = DeepDiff(expected,
                        actual,
                        ignore_order=True,
                        verbose_level=2,
                        view="tree")

        if diff:
            for change in diff.get("values_changed", []):
                path_list = re.findall(r"\['(.*?)'\]", change.path())
                path = "_".join(path_list)
                with open(
                        f"test_artifacts/{test_item.test_file}_{path}_expected.dot",
                        "w",
                        encoding="utf8",
                ) as f:
                    f.write(change.t1)
                with open(
                        f"test_artifacts/{test_item.test_file}_{version}_{flavor}_{path}_actual.dot",
                        "w",
                        encoding="utf8",
                ) as f:
                    f.write(change.t2)

        assert not diff, diff.pretty()

        sl = Slither(cc,
                     solc_force_legacy_json=flavor == "legacy",
                     disallow_partial=True)
        sl.register_printer(Echidna)
        sl.run_printers()
Esempio n. 2
0
def main():

    args = parse_args()
    slither = Slither(args.filename, is_truffle=os.path.isdir(args.filename), solc=args.solc)

    slither.register_printer(PrinterCallGraphStateChange)

    slither.run_printers()
Esempio n. 3
0
def test_parsing(test_item: Item):
    flavor = "legacy" if test_item.is_legacy else "compact"
    test_file = os.path.join(
        TEST_ROOT, "compile",
        f"{test_item.test_id}-{test_item.solc_ver}-{flavor}.zip")
    expected_file = os.path.join(
        TEST_ROOT, "expected",
        f"{test_item.test_id}-{test_item.solc_ver}-{flavor}.json")

    if id_test(test_item) in XFAIL:
        pytest.xfail("this test needs to be fixed")

    # set_solc(test_item)

    cc = load_from_zip(test_file)[0]

    sl = Slither(
        cc,
        solc_force_legacy_json=test_item.is_legacy,
        disallow_partial=True,
        skip_analyze=True,
    )

    actual = generate_output(sl)

    try:
        with open(expected_file, "r") as f:
            expected = json.load(f)
    except OSError:
        pytest.xfail("the file for this test was not generated")
        raise

    diff = DeepDiff(expected,
                    actual,
                    ignore_order=True,
                    verbose_level=2,
                    view="tree")

    if diff:
        for change in diff.get("values_changed", []):
            path_list = re.findall(r"\['(.*?)'\]", change.path())
            path = "_".join(path_list)
            with open(
                    f"test_artifacts/{id_test(test_item)}_{path}_expected.dot",
                    "w") as f:
                f.write(change.t1)
            with open(f"test_artifacts/{id_test(test_item)}_{path}_actual.dot",
                      "w") as f:
                f.write(change.t2)

    assert not diff, diff.pretty()

    sl = Slither(cc,
                 solc_force_legacy_json=test_item.is_legacy,
                 disallow_partial=True)
    sl.register_printer(Echidna)
    sl.run_printers()