Hacktoberfest 2026: le issue che i maintainer hanno segnato per ottobre, aperte e adatte ai principianti. Sfoglia le issue Hacktoberfest

Prove that an exported archive matches a network server

Aperta
#386 0 commenti 0 reazioni 0 assegnatari Vedi su GitHub

Nessuno ha ancora preso questa issue.

Valutazione

Difficoltà
4/5
Tempo stimato
3-5 giorni
Idoneità per principianti
55/100
Tipo di issue
Funzionalità
Chiarezza
Specificata chiaramente
Stato di attività
Attiva
Stack tecnologico
django, postgresql, python, sqlite
Ambito
databases, testing

Direzione di ricerca

Start with tests/testapp/tests/integration/test_disk_export.py and compare its setup with PushPullClientTestCase and LiveServer in tests/testapp/tests/integration/test_syncsession.py. Run python -O -m pytest tests/testapp/tests/integration/test_disk_export.py -v, then verify parity, archive contents, chunking results, failure cleanup, and the PostgreSQL integration suite with tox -e postgres -- tests/testapp/tests/integration.

Scritto dal modello di indicizzazione a partire dal testo della issue.

Descrizione

DEV: backend TAG: unit tests

Overview

Integration tests prove that a full export produces a complete archive with the same data as a network server that receives the same push. This issue is part of milestone M7 (verification).

Background & Motivation

The parity rule is the central promise of the design. An archive holds the same morango state as a server that receives the same push, plus a manifest. Future import (Phase 2) and incremental update (Phase 4) depend on this promise.

These tests also cover the full export flow through the public API, chunked transfers, and cleanup after a failure.

Design: spec. Plan: implementation plan, Task 25.

Description & Expected Outcomes

A parity test pushes the same facility data twice with the same filter. One push goes to the second-server test harness, and one push goes to a disk connection. The test compares the Store, RecordMaxCounter and DatabaseMaxCounter rows of the two receivers. The test ignores rows that use the instance ID of each receiver.

An end-to-end test runs a full export through the public API and reopens the archive. The archive must match every row of the "Archive contents at completion" table in spec §3.4.

A chunking test uses a small chunk size, so that the transfer takes more than one cycle. A failure test forces an error during the transfer. After the host closes the sync session and the connection, no archive file, partial file, lock file or archive alias remains.

Deliverables & Contracts

The feature delivers these capabilities:

  • A parity test against the second-server harness.
  • An end-to-end export test through create_disk_connection and the push client.
  • A chunking test and a failure-injection test.
Acceptance Criteria
  • The parity test finds equal Store, RecordMaxCounter and DatabaseMaxCounter rows in default2 and in the reopened archive.
  • The end-to-end test finds every row of the spec §3.4 contents table in the archive.
  • With chunk_size=2 and 5 records, the push transfer runs 3 times, with results PENDING, PENDING, COMPLETED.
  • If DiskSyncConnection.push_record_chunk raises OSError, run() raises MorangoError.
  • After the failure and a call to close_sync_session() and close(), no path, .partial or .lock file exists.
  • After the failure, no key that starts with ARCHIVE_ALIAS_PREFIX is in connections.databases.
  • All tests pass on SQLite and in the postgres tox environment.

Technical Pointers & Architecture

  • Target Components / Context: tests/testapp/tests/integration/test_disk_export.py.
  • Related Patterns: PushPullClientTestCase and LiveServer in tests/testapp/tests/integration/test_syncsession.py give the seed data and the second server.
  • Data Model & Schema Considerations: None.
  • Resilience & Failure Modes: The failure test covers the discard path of the archive.

Notes & Tradeoffs

  • Dependencies: Blocked by: #375 (deprecated network operation names and override order), #384 (disk Peer protocol). Blocks: #387.
  • Kolibri companion changes: See spec §3.9. Kolibri routers must allow morango migrations on aliases that start with morango_archive_. Kolibri settings overrides must list the Peer* operations.
  • Testing Requirements: Run python -O -m pytest tests/testapp/tests/integration/test_disk_export.py -v and tox -e postgres -- tests/testapp/tests/integration. With a PostgreSQL host, the archive stays SQLite.
  • Tradeoffs & Alternatives Considered: The tests read the server data from the default2 alias of the test settings.

Metadata

  • Complexity: Medium
  • Target Branch: release-v0.9.x

AI Usage

Drafted with Claude (Claude Code) from the approved design spec and implementation plan. The author reviewed the requirements, and the code references were checked against the release-v0.9.x codebase.

Lingua principale
Python
Stelle
15
Fork
23
Merge medio
1g 11h
PR unite (30g)
4

Preparare l'ambiente

Come iniziare

  1. Leggi tutta la issue e poi la guida ai contributi del progetto.
  2. Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
  3. Fai un fork del repository e lavora su un branch.
  4. Apri una pull request che faccia riferimento al numero della issue.

Altre issue di learningequality/morango

Tutte le issue di learningequality/morango

Issue simili

Altre issue su Python

Ricevi le nuove issue nella tua casella

Un breve riepilogo di issue GitHub adatte ai principianti.