From e676040f46e5b9217621116e95a5a37bc368a0f7 Mon Sep 17 00:00:00 2001 From: Roman Zeyde Date: Thu, 28 Aug 2014 17:20:14 +0300 Subject: [PATCH] add UT for ECC failure --- amodem/ecc.py | 3 +-- tests/test_ecc.py | 17 +++++++++++++++++ 2 files changed, 18 insertions(+), 2 deletions(-) diff --git a/amodem/ecc.py b/amodem/ecc.py index f69445c..a57a826 100644 --- a/amodem/ecc.py +++ b/amodem/ecc.py @@ -42,7 +42,6 @@ def decode(blocks, nsym=DEFAULT_NSYM): size = chunk[0] payload = chunk[1:] - if size > len(payload): - raise ValueError('Invalid chunk', size, len(payload), payload) + assert size <= len(payload) yield payload[:size] diff --git a/tests/test_ecc.py b/tests/test_ecc.py index c509f13..13ce26b 100644 --- a/tests/test_ecc.py +++ b/tests/test_ecc.py @@ -1,6 +1,7 @@ from amodem import ecc import random import itertools +import reedsolo def concat(chunks): @@ -13,3 +14,19 @@ def test_random(): y = ecc.encode(x) x_ = concat(ecc.decode(y)) assert x_ == x + + +def test_errors(): + data = bytearray(range(244)) + blocks = list(ecc.encode(data)) + assert len(blocks) == 2 + for i in range(ecc.DEFAULT_NSYM/2): + blocks[0][i] = blocks[0][i] ^ 0xFF + + i = ecc.DEFAULT_NSYM/2 + try: + blocks[0][i] = blocks[0][i] ^ 0xFF + concat(ecc.decode(blocks)) + assert False + except reedsolo.ReedSolomonError as e: + assert e.args == ('Too many errors to correct',)