From 238f651a196b3d9b7298c3bc58dad3edca6423f5 Mon Sep 17 00:00:00 2001 From: Willem Pienaar Date: Fri, 5 Mar 2021 16:09:50 -0800 Subject: [PATCH] Remove base tests folder Signed-off-by: Willem Pienaar --- tests/__init__.py | 0 tests/load/hdr_plot.py | 118 ----------------------------------------- tests/load/ingest.py | 108 ------------------------------------- tests/pyproject.toml | 22 -------- tests/pytest.ini | 8 --- tests/requirements.txt | 13 ----- tests/setup.cfg | 17 ------ 7 files changed, 286 deletions(-) delete mode 100644 tests/__init__.py delete mode 100644 tests/load/hdr_plot.py delete mode 100644 tests/load/ingest.py delete mode 100644 tests/pyproject.toml delete mode 100644 tests/pytest.ini delete mode 100644 tests/requirements.txt delete mode 100644 tests/setup.cfg diff --git a/tests/__init__.py b/tests/__init__.py deleted file mode 100644 index e69de29bb2d..00000000000 diff --git a/tests/load/hdr_plot.py b/tests/load/hdr_plot.py deleted file mode 100644 index 8cfa30aa7b9..00000000000 --- a/tests/load/hdr_plot.py +++ /dev/null @@ -1,118 +0,0 @@ -# -# hdr-plot.py v0.2.0 - A simple HdrHistogram plotting script. -# Copyright © 2018 Bruno Bonacci - Distributed under the Apache License v 2.0 -# -# usage: hdr-plot.py [-h] [--output OUTPUT] [--title TITLE] [--nobox] files [files ...] -# -# A standalone plotting script for https://github.com/giltene/wrk2 and -# https://github.com/HdrHistogram/HdrHistogram. -# -# This is just a quick and unsophisticated script to quickly plot the -# HdrHistograms directly from the output of `wkr2` benchmarks. - -import argparse -import re -import pandas as pd -import matplotlib.pyplot as plt -import matplotlib.ticker as ticker - -regex = re.compile(r'\s+([0-9.]+)\s+([0-9.]+)\s+([0-9.]+)\s+([0-9.]+)') -filename = re.compile(r'(.*/)?([^.]*)(\.\w+\d+)?') - - -def parse_percentiles(file): - lines = [line for line in open(file) if re.match(regex, line)] - values = [re.findall(regex, line)[0] for line in lines] - pctles = [(float(v[0]), float(v[1]), int(v[2]), float(v[3])) for v in values] - percentiles = pd.DataFrame(pctles, columns=['Latency', 'Percentile', 'TotalCount', 'inv-pct']) - return percentiles - - -def parse_files(files): - return [parse_percentiles(file) for file in files] - - -def info_text(name, data): - textstr = '%-18s\n------------------\n%-6s = %6.2f ms\n%-6s = %6.2f ms\n%-6s = %6.2f ms\n' % ( - name, - "min", data['Latency'].min(), - "median", data[data["Percentile"] == 0.5]["Latency"], - "max", data['Latency'].max()) - return textstr - - -def info_box(ax, text): - props = dict(boxstyle='round', facecolor='lightcyan', alpha=0.5) - - # place a text box in upper left in axes coords - ax.text(0.05, 0.95, text, transform=ax.transAxes, - verticalalignment='top', bbox=props, fontname='monospace') - - -def plot_summarybox(ax, percentiles, labels): - # add info box to the side - textstr = '\n'.join([info_text(labels[i], percentiles[i]) for i in range(len(labels))]) - info_box(ax, textstr) - - -def plot_percentiles(percentiles, labels): - y_range = [0, 5, 10, 15, 20, 25, 30, 35, 40, 45, 50] - x_range = [0.25, 0.5, 0.9, 0.99, 0.999, 0.9999, 0.99999, 0.999999] - - fig, ax = plt.subplots(figsize=(24, 16)) - plt.ylim(0, 50) - # plot values - for data in percentiles: - ax.plot(data['Percentile'], data['Latency']) - - # set axis and legend - ax.grid() - ax.set(xlabel='Percentile', - ylabel='Latency (milliseconds)', - title='Latency Percentiles (lower is better)') - ax.set_xscale('logit') - plt.yticks(y_range) - plt.xticks(x_range) - majors = ["25%", "50%", "90%", "99%", "99.9%", "99.99%", "99.999%", "99.9999%"] - ax.xaxis.set_major_formatter(ticker.FixedFormatter(majors)) - ax.xaxis.set_minor_formatter(ticker.NullFormatter()) - plt.legend(bbox_to_anchor=(0., 1.02, 1., .102), - loc=3, ncol=2, borderaxespad=0., - labels=labels) - - return fig, ax - - -def arg_parse(): - parser = argparse.ArgumentParser(description='Plot HDRHistogram latencies.') - parser.add_argument('files', nargs='+', help='list HDR files to plot') - parser.add_argument('--output', default='latency.png', - help='Output file name (default: latency.png)') - parser.add_argument('--title', default='', help='The plot title.') - parser.add_argument("--nobox", help="Do not plot summary box", - action="store_true") - args = parser.parse_args() - return args - - -def main(): - # print command line arguments - args = arg_parse() - - # load the data and create the plot - pct_data = parse_files(args.files) - labels = [re.findall(filename, file)[0][1] for file in args.files] - # plotting data - fig, ax = plot_percentiles(pct_data, labels) - # plotting summary box - if not args.nobox: - plot_summarybox(ax, pct_data, labels) - # add title - plt.suptitle(args.title) - # save image - plt.savefig(args.output) - print("Wrote: " + args.output) - - -if __name__ == "__main__": - main() diff --git a/tests/load/ingest.py b/tests/load/ingest.py deleted file mode 100644 index 24100d044b3..00000000000 --- a/tests/load/ingest.py +++ /dev/null @@ -1,108 +0,0 @@ -import sys - -import pandas as pd -import numpy as np -import pytz -from feast.wait import wait_retry_backoff - -from feast import Client, Feature, FeatureSet, Entity, ValueType -from datetime import datetime - -feast_core_url = sys.argv[1] -feast_online_serving_url = sys.argv[2] - -number_of_entities = 100 - -df = pd.DataFrame( - { - "datetime": [ - datetime.utcnow().replace(tzinfo=pytz.utc) - for _ in range(number_of_entities) - ], - "user_id": [1000 + entity_id for entity_id in range(number_of_entities)], - "int32_feature": [np.int32(1) for _ in range(number_of_entities)], - "int64_feature": [np.int64(1) for _ in range(number_of_entities)], - "float_feature": [np.float(0.1) for _ in range(number_of_entities)], - "double_feature": [np.float64(0.1) for _ in range(number_of_entities)], - "string_feature": ["one" for _ in range(number_of_entities)], - "bytes_feature": [b"one" for _ in range(number_of_entities)], - "bool_feature": [True for _ in range(number_of_entities)], - "int32_list_feature": [ - np.array([1, 2, 3, 4], dtype=np.int32) for _ in range(number_of_entities) - ], - "int64_list_feature": [ - np.array([1, 2, 3, 4], dtype=np.int64) for _ in range(number_of_entities) - ], - "float_list_feature": [ - np.array([1.1, 1.2, 1.3, 1.4], dtype=np.float32) - for _ in range(number_of_entities) - ], - "double_list_feature": [ - np.array([1.1, 1.2, 1.3, 1.4], dtype=np.float64) - for _ in range(number_of_entities) - ], - "string_list_feature": [ - np.array(["one", "two", "three"]) for _ in range(number_of_entities) - ], - "bytes_list_feature": [ - np.array([b"one", b"two", b"three"]) for _ in range(number_of_entities) - ], - "bool_list_feature": [ - [True, False, True] for _ in range(number_of_entities) - ], - } -) - -all_types_fs_expected = FeatureSet( - name="all_types", - entities=[Entity(name="user_id", dtype=ValueType.INT64)], - features=[ - Feature(name="float_feature", dtype=ValueType.FLOAT), - Feature(name="int64_feature", dtype=ValueType.INT64), - Feature(name="int32_feature", dtype=ValueType.INT32), - Feature(name="string_feature", dtype=ValueType.STRING), - Feature(name="bytes_feature", dtype=ValueType.BYTES), - Feature(name="bool_feature", dtype=ValueType.BOOL), - Feature(name="double_feature", dtype=ValueType.DOUBLE), - Feature(name="double_list_feature", dtype=ValueType.DOUBLE_LIST), - Feature(name="float_list_feature", dtype=ValueType.FLOAT_LIST), - Feature(name="int64_list_feature", dtype=ValueType.INT64_LIST), - Feature(name="int32_list_feature", dtype=ValueType.INT32_LIST), - Feature(name="string_list_feature", dtype=ValueType.STRING_LIST), - Feature(name="bytes_list_feature", dtype=ValueType.BYTES_LIST), - Feature(name="bool_list_feature", dtype=ValueType.BOOL_LIST), - ], -) - -client = Client(core_url=feast_core_url, serving_url=feast_online_serving_url) - -# Register feature set -client.apply(all_types_fs_expected) - -df.info() -df.describe() -df.head() - -# Ingest tdata -client.ingest(all_types_fs_expected, df) - - -# Wait for data to be available -def try_get_features(): - online_request_entity = [{"user_id": 1001}] - online_request_features = ["float_feature"] - - response = client.get_online_features( - entity_rows=online_request_entity, feature_refs=online_request_features - ) - response_dict = response.to_dict() - if response_dict['float_feature'] == df.iloc[0]['float_feature']: - return response_dict, True - return response_dict, False - - -online_features_actual = wait_retry_backoff( - retry_fn=try_get_features, - timeout_secs=90, - timeout_msg="Timed out trying to get online feature values", -) diff --git a/tests/pyproject.toml b/tests/pyproject.toml deleted file mode 100644 index e63ebc1f1ad..00000000000 --- a/tests/pyproject.toml +++ /dev/null @@ -1,22 +0,0 @@ -[tool.black] -line-length = 88 -target-version = ['py37'] -include = '\.pyi?$' -exclude = ''' -( - /( - \.eggs # exclude a few common directories in the - | \.git # root of the project - | \.hg - | \.mypy_cache - | \.tox - | \.venv - | _build - | buck-out - | build - | dist - | pb2.py - | \.pyi - )/ -) -''' \ No newline at end of file diff --git a/tests/pytest.ini b/tests/pytest.ini deleted file mode 100644 index 9adde5ec197..00000000000 --- a/tests/pytest.ini +++ /dev/null @@ -1,8 +0,0 @@ -[pytest] -timeout=600 - -filterwarnings = - ignore::DeprecationWarning - -markers = - env: Skip test if its required environment is different from passed option --env diff --git a/tests/requirements.txt b/tests/requirements.txt deleted file mode 100644 index 790432d4719..00000000000 --- a/tests/requirements.txt +++ /dev/null @@ -1,13 +0,0 @@ -pytest==6.0.0 -pytest-lazy-fixture==0.6.3 -pytest-timeout==1.4.2 -pytest-ordering==0.6.* -pytest-benchmark==3.2.2 -pytest-mock==1.10.4 -pytest-ordering==0.6.* -pytest-xdist==2.1.0 -pytest-postgresql==2.5.1 -pytest-redis==2.0.0 -pytest-kafka==0.4.0 -deepdiff==4.3.2 -kafka-python==2.0.2 \ No newline at end of file diff --git a/tests/setup.cfg b/tests/setup.cfg deleted file mode 100644 index 3026e38be12..00000000000 --- a/tests/setup.cfg +++ /dev/null @@ -1,17 +0,0 @@ -[isort] -multi_line_output=3 -include_trailing_comma=True -force_grid_wrap=0 -use_parentheses=True -line_length=88 -known_first_party=feast,feast_serving_server,feast_core_server -default_section=THIRDPARTY - -[flake8] -ignore = E203, E266, E501, W503 -max-line-length = 88 -max-complexity = 20 -select = B,C,E,F,W,T4 - -[mypy] -ignore_missing_imports=true \ No newline at end of file