CtrlK
BlogDocsLog inGet started
Tessl Logo

golikovichev/secure-log2test

Turn a Kibana JSON log export into a runnable pytest suite using the secure-log2test CLI. Use when the user has a Kibana or Elasticsearch JSON export of API traffic and wants a regression suite from production logs, when extracting test cases from staging traffic, when scrubbing auth headers or secret-looking body fields before logs leave the laptop, when bridging Kibana-captured requests into a pytest-based suite for CI, when the user mentions Kibana logs, Elasticsearch JSON export, log-to-test conversion, log replay tests, auth header redaction, PII in logs, or regression tests from production traffic.

92

1.00x
Quality

100%

Does it follow best practices?

Impact

93%

1.00x

Average score across 2 eval scenarios

SecuritybySnyk

Passed

No known issues

Overview
Quality
Evals
Security
Files

test_formats.pytests/

import json
import csv
from secure_log2test.core.parser import KibanaLogEntry
from secure_log2test.core.generator import KibanaTestGenerator


def test_write_json(tmp_path):
    entries = [
        KibanaLogEntry(
            method="POST",
            url="/api/login",
            status=200,
            headers={"Authorization": "Bearer secret"},
            body={"password": "123"},
        )
    ]
    output = tmp_path / "output.json"
    generator = KibanaTestGenerator(tmp_path)
    generator.write(entries, output, output_format="json")

    with open(output, encoding="utf-8") as f:
        data = json.load(f)

    assert len(data) == 1
    assert data[0]["method"] == "POST"
    assert data[0]["headers"]["Authorization"] == "***REDACTED***"
    assert data[0]["body"]["password"] == "***REDACTED***"


def test_write_csv(tmp_path):
    entries = [
        KibanaLogEntry(
            method="GET",
            url="/api/users",
            status=200,
            headers={"X-Auth": "key"},
            body=None,
        )
    ]
    output = tmp_path / "output.csv"
    generator = KibanaTestGenerator(tmp_path)
    generator.write(entries, output, output_format="csv")

    with open(output, encoding="utf-8", newline="") as f:
        reader = csv.DictReader(f)
        rows = list(reader)

    assert len(rows) == 1
    assert rows[0]["method"] == "GET"
    assert rows[0]["url"] == "/api/users"
    # CSV values are strings
    headers = json.loads(rows[0]["headers"])
    assert headers["X-Auth"] == "***REDACTED***"


def test_cyrillic_output_formats(tmp_path):
    entries = [
        KibanaLogEntry(
            method="POST",
            url="/api/v1/пользователи/профиль",
            status=200,
            headers={"X-User-Language": "русский"},
            body={"имя": "Михаил", "город": "Брайтон"},
        )
    ]

    # Test JSON output preserves Cyrillic characters without escaping to \uXXXX
    json_output = tmp_path / "cyrillic.json"
    generator = KibanaTestGenerator(tmp_path)
    generator.write(entries, json_output, output_format="json")

    json_text = json_output.read_text(encoding="utf-8")
    assert "пользователи" in json_text
    assert "Михаил" in json_text
    assert "\\u" not in json_text

    with open(json_output, encoding="utf-8") as f:
        data = json.load(f)
    assert data[0]["url"] == "/api/v1/пользователи/профиль"
    assert data[0]["headers"]["X-User-Language"] == "русский"
    assert data[0]["body"]["имя"] == "Михаил"

    # Test CSV output preserves Cyrillic characters without escaping to \uXXXX
    csv_output = tmp_path / "cyrillic.csv"
    generator.write(entries, csv_output, output_format="csv")

    csv_text = csv_output.read_text(encoding="utf-8")
    assert "пользователи" in csv_text
    assert "Михаил" in csv_text
    assert "\\u" not in csv_text

    with open(csv_output, encoding="utf-8", newline="") as f:
        reader = csv.DictReader(f)
        rows = list(reader)

    assert len(rows) == 1
    assert rows[0]["url"] == "/api/v1/пользователи/профиль"
    headers = json.loads(rows[0]["headers"])
    assert headers["X-User-Language"] == "русский"
    body = json.loads(rows[0]["body"])
    assert body["имя"] == "Михаил"


def test_bogus_format_raises_error(tmp_path):
    import pytest

    entries = []
    output = tmp_path / "output.bogus"
    generator = KibanaTestGenerator(tmp_path)
    with pytest.raises(ValueError, match="Unsupported output format: bogus"):
        generator.write(entries, output, output_format="bogus")

CHANGELOG.md

CONTRIBUTING.md

README.md

REFERENCE.md

RELEASING.md

requirements.txt

SECURITY.md

SKILL.md

tessl.json

tile.json