44 Commits
Author SHA1 Message Date
f929d68ba6 test: clear the ruff baseline in tests/ so the lint gate reflects the PR under review (#52115)
issue: #52114

Makes `ruff check` and `ruff format --check` pass over all of `tests/`,
so the `Ruff (changed files only)` job stops failing PRs for violations
they did not introduce (most recently #51903, which got 69 errors from
an 8-line change).

Almost all of this is mechanical. The behavioural changes are called out
individually below: one `NameError` fix, three shadowed duplicate
definitions, 13 assertion gaps, and two undefined names that only became
visible once star imports were expanded.

### Layout

Seven reviewable commits:

| commit | what | files |
|---|---|---|
| 1 | `ruff format` | 170 |
| 2 | `ruff check --fix` (safe fixes only, no `--unsafe-fixes`) | 156 |
| 3 | F821 fix + `tests/ruff.toml` | 4 |
| 4 | three shadowed duplicate definitions | 4 |
| 5 | close 13 assertion gaps behind F841 | 7 |
| 6 | expand star imports, re-enable F403/F405/F821 | 33 |
| 7 | enable E402, E712, E722 | 16 |

1745 violations → 0. Only `tests/` is touched.

### The undefined-name bug

`chaos/test_chaos_memory_stress.py`:
`TestMemoryStressReplica.prepare_collection` referenced bare `nb` and
`dim`. Those are class attributes, never module-level names, so the
fixture raised `NameError` the moment it ran — and the line directly
above it already used `self.dim`. Changed to `self.nb` / `self.dim`.
This was the only F821 in `tests/`; **the rule stays enabled**.

### Three shadowed duplicate definitions

Three places define the same name twice in the same scope. Python keeps
the later one, so the earlier definition is dead while still reading as
live code — a test that looks like it exists and never runs.

**`restful_client/testcases/test_vector_operations.py` —
`TestDeleteVector`**

```python
@pytest.mark.L0
class TestDeleteVector(TestBase):          # line 778 — shadowed, never ran
    def test_delete_vector_default(...)    # 2x2 parametrized

@pytest.mark.L1
class TestDeleteVector(TestBase):          # line 838 — wins
    def test_delete_vector_with_invalid_api_key(...)
    def test_delete_vector_with_invalid_collection_name(...)
    def test_delete_vector_with_non_primary_key(...)
```

The second holds only negative cases, and the file already uses
`TestInsertVectorNegative` / `TestSearchVectorNegative`, so this is a
copy whose class name was never updated. Renamed it to
`TestDeleteVectorNegative`.

**This is the one to look at:** it brings back an `L0` case, so 4
parametrizations of `test_delete_vector_default` start running in PR CI.
They have never executed, so if the restful delete path has drifted
since they were written, this is where it surfaces.

**`python_client/testcases/test_compaction.py` —
`test_compact_after_delete`**

Defined twice in `TestCompactionParams`, covering different things: the
shadowed one (L3, `@parametrize("delete_pos", [1, tmp_nb // 2])`) covers
*partial* deletes plus a compaction-plan check; the surviving one (L2)
deletes everything. There is already a separate
`test_compact_after_delete_all`, so partial-delete coverage existed only
in the shadowed case and was not running. Renamed it to
`test_compact_after_delete_partial`; the surviving definition is
untouched.

**`python_client/utils/util_pymilvus.py` — `add_vector_field`**

Defined twice with different signatures:

```python
def add_vector_field(entities, is_normal=False):     # line 455 — shadowed
    ...
    entities.append(field)
    return entities

def add_vector_field(nb, dimension=default_dim):     # line 527 — wins
    field_name = gen_unique_str()
    field = {...}          # built, then discarded
    return field_name      # returns only the name
```

Removed the second — both the broken one and the one that was winning.
Grepped the whole repo: **neither definition has a caller**; every
`add_vector_field` hit is something else
(`test_milvus_client_add_vector_field` test methods, the
`Op.add_vector_field` enum member in `chaos/checker.py`, a `Checker`
method of the same name). Dead-code removal, not an API change.

**Net effect on what executes:** `test_delete_vector_default` ×4
(**L0**) and `test_compact_after_delete_partial` ×2 (L3) start running;
nothing stops running; the 3 negative cases keep running under the new
class name. Computed by parsing each file before and after and resolving
shadowing the way Python does, not by reading the diff.

F811 is now clean across `tests/` with no per-file suppressions.

### Star imports expanded, F403/F405/F821 re-enabled

33 of 307 files used `from utils.util_pymilvus import *` and friends.
Inside those, pyflakes cannot tell a typo from a star-imported name — it
downgrades everything unresolved to F405, and **F821 never fires**. The
`NameError` fixed in commit 3 was only catchable because that file
happens not to use a star import.

The 379 F405 hits were only **58 distinct names**. All are now explicit,
resolved by walking the star modules in source order (later import wins,
matching Python). Names that `util_pymilvus` merely re-exports come from
their real source now — `DataType` from `pymilvus`, `np` from `numpy`,
`log` from `utils.util_log` — rather than being laundered through it.

Turning F821 on immediately caught **two real undefined names**, both in
`rate_limit/test_rate_limit.py` (L3, so it has never run in CI):

```python
for collection_num in range(collectionRateLimit):   # no such name
#                          ^ the parametrize arg is `collection_rate_limit`, and it is
#                            a string ("10"/"500"), so range() needs int().
#                            The same test uses the correct name 30 lines below.

mil.uninstall(release_name, namespace=NAMESPACE)    # no such name
#  ^ MilvusOperator.uninstall has exactly this signature, and other suites do the
#    same under `mic`/`milvus_op` — the instantiation was just missing.
```

Both fixed. `test_milvus_client_data_integrity_new.py` needed 15 `noqa`
markers instead: its `prepare_data` fixture injects those names via
`globals()[field] = ...`, which no static analysis can follow. That
block has other problems — a `float is None` check against the builtin,
an always-true `if "is null" or "IS NULL" in expression`, leftover
`binbin_debug1` logging — but rewriting fixture logic does not belong
here; noted in #52116.

### 13 assertion gaps closed

Of ~80 F841 hits, most are harmless scratch values. 13 were a call whose
result was bound and then never checked. Highlights:

- `test_milvus_client_database.py`: two tests apply a non-existent
property key (`data.replica.number`, note `data.` not `database.`),
describe the database, and drop it without checking anything. Their
docstrings say `actual: run successfully` / `nothing changed` — the
intent was to prove nothing changed. Now asserted.
- `test_milvus_client_alias.py`: two assertions were commented out,
**and they were commented out for a reason** — `list_aliases()[0]`
returns a dict, so `assert alias in aliases` would have tested dict
keys. Rewritten against `[0]["aliases"]` (how the rest of the file does
it) and re-enabled. In the skipped `alias_default` test the calls were
also missing the required `collection_name` argument.

The remaining ~65 F841 stay, and the rule stays off.

### E402, E712, E722 also enabled

**E722** (37 sites): mechanical `except:` → `except Exception:`. Checked
the two ways this could change behaviour, both empty: no bare-except
try-block can raise `SystemExit`/`KeyboardInterrupt`, and **none calls
`pytest.skip`/`fail`/`xfail`**. That second one matters — pytest's
`Skipped` derives from `BaseException`, so a bare except silently eats
it while `except Exception` would not. 0 of 37, so behaviour is
unchanged.

**E402** (5 sites): imports that were just in the wrong place — `import
re` sat 70 lines into `check/param_check.py`, and the two
`resource_group` modules imported `rich` after their module-level
constants. Nothing to do with `sys.path`, which is what an earlier
version of this description wrongly claimed.

**E712** (5 sites), gone through one at a time rather than
bulk-rewritten:

| site | value | change |
|---|---|---|
| `test_milvus_client_partition.py` | `has_partition()` | → `is False` —
stricter than `not result`, which would pass on `None` |
| `test_restart.py` | JSON status flag | → `is True` |
| `test_restart.py` | local `break_flag` | → plain truth test, it is a
real bool |
| `test_query.py` | wrapper `check_result` | → `is True` |
| `test_milvus_client_ttl.py` | `hit.get(bool_field)` | **kept as `==
False` + noqa** |

That last one is the reason this rule cannot be bulk-fixed: `.get()`
returns `None` for a missing field, so `not ...` would pass exactly
where the assertion should fail, and `is False` would break on a numpy
bool.

### What ruff.toml still disables

| rule | n | reason |
|---|---|---|
| F841 | ~65 | tests deliberately keep call results; the 13 that were
genuine assertion gaps are fixed above |
| UP031 | 95 | pure style rewrite that catches no bugs, and 27 sites use
`% (...)` tuples where it is not equivalent |

Everything else pyflakes/pycodestyle checks is on, including `F401`,
`F811` and `F821`, so new code cannot introduce dead, duplicate or
undefined names. Tracked in #52116.

### Verification

Not just "ruff is green" — the mechanical passes were checked for
semantic drift:

- **Format pass:** parsed all 307 files before and after and compared
ASTs with string constants normalized away → **zero structural
differences**. The only AST-visible deltas are 146 string-constant
changes, every one whitespace-only (docstring indentation / trailing
whitespace); zero non-whitespace string changes.
- **Import removals:** 142 imports were dropped. For each, checked
whether the bound name still appears anywhere in its file. 115 have no
remaining reference at all. The 27 that still matched textually were
each read by hand and are all comments (`# pdb.set_trace()`, the
commented-out checker dict in `test_load_with_checker.py`), docstring
prose (`"input random collection name"`, `"Tuple[List[Dict]]"`), string
literals (`"Collection ID"`, the `"config"` dict key), a different
binding (`from time import sleep`), or attribute access through another
module (`ct.CaseLabel`, `np.random`). **No real reference was removed.**
- **Python version:** the pyupgrade rewrites emit `datetime.UTC` (3.11+)
and `X | None` (3.10+). `tests/.python-version` is 3.12,
`tests/scripts/python-env.sh` defaults to 3.12, and
`tests/docker/Dockerfile` is `python:3.12-bullseye`.
- **`compileall`** over all 307 files under Python 3.12 passes.
- No external reference to `TestDeleteVector`,
`test_compact_after_delete`, or `add_vector_field` exists anywhere in
the repo (`*.py`, `*.sh`, `*.yaml`, `*.json`).

### Conflict surface

Of the 100 currently-open PRs, 9 touch `tests/*.py` and only **2**
overlap with this change: #51903 (3 of its 5 files) and #51856 (1 file).
The other 7 touch files that were already format-clean. Worth merging
promptly to keep that number small.

`.pre-commit-config.yaml` needs no change — it already runs with
`--config=tests/ruff.toml`, so local hooks and CI stay in sync.

---------

Signed-off-by: xiaofanluan <[email protected]>
Co-authored-by: xiaofanluan <[email protected]>
Co-authored-by: Claude Opus 5 (1M context) <[email protected]>
2026-08-03 14:54:18 +08:00
zhuwenxing 3336b91ce6 test: add channel exclusive balance test and resource group test (#33093)
Signed-off-by: zhuwenxing <[email protected]>
2024-05-31 13:55:52 +08:00
yanliang567 8b5b33fce0 Update simd compatibility test (#27880)
Signed-off-by: yanliang567 <[email protected]>
2023-10-25 17:20:14 +08:00
ThreadDao 19f2971e11 [test] Upgrade milvus scale test and Change k8s client config (#18404)
Signed-off-by: ThreadDao <[email protected]>
2022-07-26 09:00:33 +08:00
Jenny Li 4ac5ebc9f1 [skip e2e]Move milvus-dev to milvus (#17941)
Signed-off-by: Jenny Li <[email protected]>
2022-06-30 15:20:22 +08:00
ThreadDao 8945b80a64 [test][skip-e2e] Add counter decorater and scale query multi replicas test (#16845)
Signed-off-by: ThreadDao <[email protected]>
2022-05-09 14:51:52 +08:00
ThreadDao a62e2ef05f [skip e2e] Update milvus operator pulsar default image 2.8 (#15419)
Signed-off-by: ThreadDao <[email protected]>
2022-01-27 20:53:40 +08:00
ThreadDao 39070ed341 [skip e2e] Comment out the response log of cus get (#14990)
Signed-off-by: ThreadDao <[email protected]>
2022-01-07 13:55:21 +08:00
yanliang567 95eae52b19 [skip ci]Enable customize segment size test (#12092)
Signed-off-by: yanliang567 <[email protected]>
2021-11-19 10:21:13 +08:00
ThreadDao 5ad4f084c7 [skip ci] Pretty log milvus operator config (#12082)
Signed-off-by: ThreadDao <[email protected]>
2021-11-18 19:17:40 +08:00
ThreadDao e225268b8d [skip ci] Fix case skip (#12068)
Signed-off-by: ThreadDao <[email protected]>
2021-11-18 13:19:12 +08:00
yanliang567 d68444e984 [skip ci]Add customize segment size test (#12005)
Signed-off-by: yanliang567 <[email protected]>
2021-11-18 10:35:37 +08:00
zhuwenxing 9c9123cca1 [skip ci]Fix assert for test simd compatibility (#11738)
Signed-off-by: zhuwenxing <[email protected]>
2021-11-12 19:11:12 +08:00
zhuwenxing b1e7bbd36f [skip ci]Fix teardown and timeout for testing simd compatibility (#11631)
Signed-off-by: zhuwenxing <[email protected]>
2021-11-11 13:26:54 +08:00
zhuwenxing 5ab5698301 [skip ci]Add a minimum yaml template for operator (#11581)
Signed-off-by: zhuwenxing <[email protected]>
2021-11-10 20:19:18 +08:00
yanliang567 75d1293a76 [skip ci]Update milvus operator default yaml (#11420)
Signed-off-by: yanliang567 <[email protected]>
2021-11-08 16:01:05 +08:00
yanliang567 4757c7a037 [skip ci]Update simd test comments (#11360)
Signed-off-by: yanliang567 <[email protected]>
2021-11-08 10:19:13 +08:00
yanliang567 eac24979ff [skip ci]Remove useless requirements (#11256)
Signed-off-by: yanliang567 <[email protected]>
2021-11-05 14:53:43 +08:00
yanliang567 779c749af6 [skip ci]Update milvus template (#11254)
Signed-off-by: yanliang567 <[email protected]>
2021-11-05 14:51:51 +08:00
yanliang567 9895678fe7 [skip ci]Update simd compat test (#11253)
Signed-off-by: yanliang567 <[email protected]>
2021-11-05 14:49:07 +08:00
yanliang567 dc7dd9b17a [skip ci]Add comments in milvus operator class (#11114)
Signed-off-by: yanliang567 <[email protected]>
2021-11-03 10:45:01 +08:00
yanliang567 9fa290ce7d [skip ci]Remove test code for milvus operator (#11002)
Signed-off-by: yanliang567 <[email protected]>
2021-11-01 18:18:16 +08:00
ThreadDao 19abf7cd70 [skip ci] Reformat milvus operator file (#10947)
Signed-off-by: ThreadDao <[email protected]>
2021-10-30 16:18:39 +08:00
yanliang567 88b4b17b56 [skip ci]Add comments for upgrade milvus (#10936)
Signed-off-by: yanliang567 <[email protected]>
2021-10-30 11:08:41 +08:00
yanliang567 db26127da5 [skip ci]Add comments for milvus operator (#10869)
Signed-off-by: yanliang567 <[email protected]>
2021-10-30 10:34:59 +08:00
yanliang567 10d6b96fe7 [skip ci]Update comments to install milvus (#10843)
Signed-off-by: yanliang567 <[email protected]>
2021-10-28 19:57:13 +08:00
yanliang567 8ba6f2e7f3 [skip ci]Improve test code for milvus operator class (#10733)
Signed-off-by: yanliang567 <[email protected]>
2021-10-27 20:28:50 +08:00
yanliang567 88dbd43bbd [skip ci]Update default template for milvus operator yaml (#10734)
Signed-off-by: yanliang567 <[email protected]>
2021-10-27 18:59:03 +08:00
yanliang567 e95b7a1466 [skip ci]Add todo in test_simd_compat test (#10632)
Signed-off-by: yanliang567 <[email protected]>
2021-10-26 10:42:19 +08:00
yanliang567 6b44484920 [skip ci]Refine comments in milvus operator class (#10630)
Signed-off-by: yanliang567 <[email protected]>
2021-10-26 10:40:30 +08:00
yanliang567 5387b9a20b [skip ci]Simpify lines of code (#10576)
Signed-off-by: yanliang567 <[email protected]>
2021-10-25 20:09:50 +08:00
yanliang567 30589e4169 [skip ci]Add comments in milvus operator class (#10571)
Signed-off-by: yanliang567 <[email protected]>
2021-10-25 19:50:39 +08:00
yanliang567 6d071ef0a1 [skip ci]Add comments in simd config test (#10491)
Signed-off-by: yanliang567 <[email protected]>
2021-10-23 10:05:10 +08:00
yanliang567 39e37bf2f4 [skip ci]Add comments for endpoint in milvus operator (#10490)
Signed-off-by: yanliang567 <[email protected]>
2021-10-23 10:03:17 +08:00
yanliang567 416a0e740d Update simd compatiblity test (#10427)
Signed-off-by: yanliang567 <[email protected]>
2021-10-22 14:37:21 +08:00
binbin b4064e6d76 [skip ci] Disable unused modules (#10398)
Signed-off-by: Binbin Lv <[email protected]>
2021-10-21 22:01:15 +08:00
binbin 5bcf1d2be9 [skip ci] Disable unused class (#10390)
Signed-off-by: Binbin Lv <[email protected]>
2021-10-21 20:49:12 +08:00
yanliang567 666764420b [skip ci]Implement simd config test (#10380)
Signed-off-by: yanliang567 <[email protected]>
2021-10-21 20:19:28 +08:00
yanliang567 199aff607a [skip ci]Add get endpoint for milvus operator class (#10301)
Signed-off-by: yanliang567 <[email protected]>
2021-10-20 20:38:35 +08:00
yanliang567 31d1322aaa [skip ci]Implement upgrade milvus with operator (#10260)
Signed-off-by: yanliang567 <[email protected]>
2021-10-20 16:24:35 +08:00
yanliang567 edf3377fe1 [skip ci]Update milvus operator class with python dict type (#10177)
Signed-off-by: yanliang567 <[email protected]>
2021-10-19 17:02:49 +08:00
yanliang567 e03a316772 [skip ci]Encapsulate functions for deploy miluvs (#10123)
Signed-off-by: yanliang567 <[email protected]>
2021-10-18 20:28:50 +08:00
yanliang567 3fe5a66ace [skip ci]Add test steps to config framework (#10073)
Signed-off-by: yanliang567 <[email protected]>
2021-10-18 11:38:36 +08:00
yanliang567 39a5e98651 Add customize config tests (#9965)
Signed-off-by: yanliang567 <[email protected]>
2021-10-15 17:48:42 +08:00