[coverage] Conformance findings: SESSION-018

Abierto
#950 0 comentarios 0 reacciones 0 asignados Ver en GitHub

Nadie ha tomado este issue todavía.

Evaluación

Dificultad
3/5
Tiempo estimado
1-2 días
Aptitud para principiantes
58/100
Tipo de issue
Error
Claridad
Bastante claro
Estado de actividad
Activo
Stack tecnológico
python
Área
api, backend

Línea de trabajo

Start by locating the Python session path and its thrift_backend hostname handling, then compare it with the named test_server_hostname_url_scheme_parsed_case_insensitively in the coverage PR. Verify the existing lower-case behavior and reproduce the upper-case and mixed-case scheme cases. Done means explicit schemes are handled case-insensitively, while a prefix without the ':' delimiter preserves the full hostname in the error.

Escrito por el modelo de indexación a partir del texto del issue.

Descripción

Summary

Surfaced by the multi-language coverage fan-out while conformance-testing these SPEC-IDs against databricks/databricks-sql-python. Each finding is committed as an expected-failure (xfail) test in the coverage PR — the test asserts the CORRECT (post-fix) behavior and stays red until THIS driver (databricks/databricks-sql-python) is fixed, then flips green as a tripwire.

Findings

  • SESSION-018 [thrift]: An explicit server_hostname URL scheme is matched case-sensitively: HTTPS://<host> is not recognized/stripped, so thrift_backend re-prefixes to https://HTTPS://<host> and the driver dials hostname https instead of the workspace
    • failing test: test_server_hostname_url_scheme_parsed_case_insensitively (see the coverage PR diff under tests/)
  • SESSION-018 [sea]: The Rust kernel's config.rs::normalise_host matches the scheme with lowercase-only starts_with("https://"), so HTTPS://<host> is treated as scheme-less and re-prefixed into the unreachable https://https//<host>/api/2.0/sql/sessions
    • failing test: test_server_hostname_url_scheme_parsed_case_insensitively (see the coverage PR diff under tests/)
  • SESSION-018: An explicit server_hostname URL scheme is matched case-sensitively: HTTPS://<host> / HtTpS://<host> are not recognized or stripped, so thrift_backend re-prefixes to https://HTTPS://<host> and the driver dials hostname https instead of the workspace (RFC 3986 §3.1 requires case-insensitive schemes; the connector's own url_utils.normalize_host_with_protocol already does this but the session path bypasses it)

Reproduce & Expected

SESSION-018 — Validates how the driver parses an explicit URL scheme on its server-hostname input.

Reproduce:

SELECT 1 AS test_value
SELECT 1 AS test_value
SELECT 1 AS test_value

Expected (per the shared spec):

  • completes without an exception
  • result has exactly 1 row(s)
  • completes without an exception
  • result has exactly 1 row(s)
  • completes without an exception
  • result has exactly 1 row(s)
  • full assertion contract:
result:
- label: lower_case_scheme
  no_exception: true
  description: "APPLICABILITY GATE, not the behavior under test. If this phase fails,\
    \ the\ndriver's host input does not accept an explicit URL scheme at all \u2014\
    \ report\na capability skip citing that absent capability, NOT a driver bug, and\
    \ do\nnot run the case-folding phases.\n"
- label: lower_case_scheme
  row_count: 1
- label: upper_case_scheme
  no_exception: true
  description: 'The upper-case scheme was recognized and stripped. A driver that matched
    the

    scheme case-sensitively would carry `HTTPS://` into the hostname and fail to

    reach the workspace.

    '
- label: upper_case_scheme
  row_count: 1
- label: mixed_case_scheme
  no_exception: true
- label: mixed_case_scheme
  row_count: 1
- label: prefix_without_delimiter
  error:
    contains:
    - httpbin.invalid
  description: 'The failure names the FULL, unmodified hostname. A driver that treated
    the

    leading `http` as a scheme without requiring the `:` delimiter would report

    the mangled `bin.invalid` instead, so the full string would be absent.

    '

Context

Lenguaje dominante
Python
Estrellas
233
Forks
152
Merge medio
21 h 5 min
PR fusionados (30 d)
10

Guía de contribución

Abrir la guía de contribución

Primeros pasos

  1. Lee el issue completo y luego la guía de contribución del proyecto.
  2. Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
  3. Haz un fork del repositorio y trabaja en una rama.
  4. Abre un pull request que haga referencia al número del issue.

Más de databricks/databricks-sql-python

Todos los issues de databricks/databricks-sql-python

Issues similares

Más issues de Python

Recibe los nuevos issues en tu correo

Un resumen breve de issues de GitHub para principiantes.