From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from firstgate.proxmox.com (firstgate.proxmox.com [212.224.123.68]) by lore.proxmox.com (Postfix) with ESMTPS id B23691FF38F for ; Tue, 21 May 2024 13:23:16 +0200 (CEST) Received: from firstgate.proxmox.com (localhost [127.0.0.1]) by firstgate.proxmox.com (Proxmox) with ESMTP id 6259E1704E; Tue, 21 May 2024 13:23:33 +0200 (CEST) Message-ID: <5726b631-c7e4-453b-be97-6e40c6d06dc8@proxmox.com> Date: Tue, 21 May 2024 13:23:30 +0200 MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Beta To: Proxmox Backup Server development discussion , Christian Ebner References: <20240514103421.289431-1-c.ebner@proxmox.com> <20240514103421.289431-65-c.ebner@proxmox.com> Content-Language: en-US From: Dominik Csapak In-Reply-To: <20240514103421.289431-65-c.ebner@proxmox.com> X-SPAM-LEVEL: Spam detection results: 0 AWL 0.016 Adjusted score from AWL reputation of From: address BAYES_00 -1.9 Bayes spam probability is 0 to 1% DMARC_MISSING 0.1 Missing DMARC policy KAM_DMARC_STATUS 0.01 Test Rule for DKIM or SPF Failure with Strict Alignment SPF_HELO_NONE 0.001 SPF: HELO does not publish an SPF Record SPF_PASS -0.001 SPF: sender matches SPF record Subject: Re: [pbs-devel] [PATCH v6 proxmox-backup 64/65] chunker: tests: add regression tests for payload chunker X-BeenThere: pbs-devel@lists.proxmox.com X-Mailman-Version: 2.1.29 Precedence: list List-Id: Proxmox Backup Server development discussion List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Reply-To: Proxmox Backup Server development discussion Content-Transfer-Encoding: 7bit Content-Type: text/plain; charset="us-ascii"; Format="flowed" Errors-To: pbs-devel-bounces@lists.proxmox.com Sender: "pbs-devel" these tests fail here with: ---- chunker::test_suggested_boundary stdout ---- Chunk at 1, total 32768 from base 0 Chunk at 1, total 143377 from base 0 Chunk at 1, total 405521 from base 0 Chunk at 1, total 667665 from base 0 Chunk at 1, total 929809 from base 0 thread 'chunker::test_suggested_boundary' panicked at 'attempt to subtract with overflow', pbs-datastore/src/chunker.rs:253:19 note: run with `RUST_BACKTRACE=1` environment variable to display a backtrace is there something wrong in the code or in the tests (or in my environment) ? On 5/14/24 12:34, Christian Ebner wrote: > Test chunking of a payload stream with suggested chunk boundaries. > > Signed-off-by: Christian Ebner > --- > pbs-datastore/src/chunker.rs | 92 ++++++++++++++++++++++++++++++++++++ > 1 file changed, 92 insertions(+) > > diff --git a/pbs-datastore/src/chunker.rs b/pbs-datastore/src/chunker.rs > index bfa1c8ca1..ad91a1599 100644 > --- a/pbs-datastore/src/chunker.rs > +++ b/pbs-datastore/src/chunker.rs > @@ -381,3 +381,95 @@ fn test_chunker1() { > panic!("got different chunks"); > } > } > + > +#[test] > +fn test_suggested_boundary() { > + let mut buffer = Vec::new(); > + > + for i in 0..(256 * 1024) { > + for j in 0..4 { > + let byte = ((i >> (j << 3)) & 0xff) as u8; > + buffer.push(byte); > + } > + } > + let (tx, rx) = std::sync::mpsc::channel(); > + let mut chunker = PayloadChunker::new(64 * 1024, rx); > + > + // Suggest chunk boundary within regular chunk > + tx.send(32 * 1024).unwrap(); > + // Suggest chunk boundary within regular chunk, resulting chunk being 0 > + tx.send(32 * 1024).unwrap(); > + // Suggest chunk boundary in the past, must be ignored > + tx.send(0).unwrap(); > + // Suggest chunk boundary aligned with regular boundary > + tx.send(405521).unwrap(); > + > + let mut pos = 0; > + let mut last = 0; > + > + let mut chunks1: Vec<(usize, usize)> = vec![]; > + let mut chunks2: Vec<(usize, usize)> = vec![]; > + let mut ctx = Context::default(); > + > + // test1: feed single bytes with suggeset boundary > + while pos < buffer.len() { > + ctx.total += 1; > + let k = chunker.scan(&buffer[pos..pos + 1], &ctx); > + pos += 1; > + if k != 0 { > + println!("Chunk at {k}, total {} from base {}", ctx.total, ctx.base); > + let prev = last; > + last = pos; > + chunks1.push((prev, pos - prev)); > + } > + } > + chunks1.push((last, buffer.len() - last)); > + > + let mut pos = 0; > + let mut ctx = Context::default(); > + // Suggest chunk boundary within regular chunk > + tx.send(32 * 1024).unwrap(); > + // Suggest chunk boundary within regular chunk, > + // resulting chunk being to small and therefore ignored > + tx.send(32 * 1024).unwrap(); > + // Suggest chunk boundary in the past, must be ignored > + tx.send(0).unwrap(); > + // Suggest chunk boundary aligned with regular boundary > + tx.send(405521).unwrap(); > + ctx.total = buffer.len() as u64; > + > + while pos < buffer.len() { > + let k = chunker.scan(&buffer[pos..], &ctx); > + if k != 0 { > + chunks2.push((pos, k)); > + pos += k; > + ctx.base += pos as u64; > + ctx.total -= pos as u64; > + } else { > + break; > + } > + } > + > + chunks2.push((pos, buffer.len() - pos)); > + > + if chunks1 != chunks2 { > + let mut size1 = 0; > + for (_offset, len) in &chunks1 { > + size1 += len; > + } > + println!("Chunks1: {size1}\n{chunks1:?}\n"); > + > + let mut size2 = 0; > + for (_offset, len) in &chunks2 { > + size2 += len; > + } > + println!("Chunks2: {size2}\n{chunks2:?}\n"); > + > + panic!("got different chunks"); > + } > + > + let expected_sizes = [32768, 110609, 262144, 262144, 262144, 118767]; > + for ((_, chunk_size), expected) in chunks1.iter().zip(expected_sizes.iter()) { > + assert_eq!(chunk_size, expected); > + } > +} _______________________________________________ pbs-devel mailing list pbs-devel@lists.proxmox.com https://lists.proxmox.com/cgi-bin/mailman/listinfo/pbs-devel