File: regression_test_extension_size.py

package info (click to toggle)
duckdb 1.5.1-2
  • links: PTS, VCS
  • area: main
  • in suites:
  • size: 299,196 kB
  • sloc: cpp: 865,414; ansic: 57,292; python: 18,871; sql: 12,663; lisp: 11,751; yacc: 7,412; lex: 1,682; sh: 747; makefile: 558
file content (80 lines) | stat: -rw-r--r-- 2,389 bytes parent folder | download | duplicates (3)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
import os
import argparse
import subprocess
import tempfile
from pathlib import Path

# the threshold at which we consider something a regression (percentage)
regression_threshold_percentage = 0.20

parser = argparse.ArgumentParser(description='Generate TPC-DS reference results from Postgres.')
parser.add_argument(
    '--old', dest='old_extension_dir', action='store', help='Path to the old extension dir', required=True
)
parser.add_argument(
    '--new', dest='new_extension_dir', action='store', help='Path to the new extension dir', required=True
)
parser.add_argument(
    '--expect',
    dest='expected_extensions_raw',
    action='store',
    help='Comma separated list of expected extensions',
    required=True,
)

args = parser.parse_args()


expected_extensions = args.expected_extensions_raw.split(',')

exit_code = 0


def parse_extensions(dir):
    result = {}

    for root, dirs, files in os.walk(dir):
        for filename in files:
            if filename.endswith(".duckdb_extension"):
                result[Path(filename).stem] = os.path.join(root, filename)

    # Check all expected extensions are there
    for expected_extension in expected_extensions:
        if expected_extension not in result.keys():
            print(f"Did not find expected extension {expected_extension} in {dir}")
            exit(1)

    return result


old_extensions = parse_extensions(args.old_extension_dir)
new_extensions = parse_extensions(args.new_extension_dir)

matching_extensions = []

for extension in old_extensions.keys():
    if extension in new_extensions:
        matching_extensions.append(extension)

check_passed = True
error_message = ""

for extension in matching_extensions:
    old_size = os.path.getsize(old_extensions[extension])
    new_size = os.path.getsize(new_extensions[extension])

    print(f" - checking '{extension}': old size={old_size}, new_size={new_size}")

    if new_size / (old_size + 0.1) > (1.0 + regression_threshold_percentage):
        check_passed = False
        error_message += f" - Extension '{extension}' was bigger than expected {new_size}\n"
        error_message += f"   - old size: {old_size}\n"
        error_message += f"   - new size: {new_size}\n"

print()
if not check_passed:
    print("Extension size regression check failed:\n")
    print(error_message)
    exit(1)
else:
    print(f"All extensions passed the check!")