File: s3_checksums_test_case_helper.h

package info (click to toggle)
aws-crt-python 0.20.4%2Bdfsg-1~bpo12%2B1
  • links: PTS, VCS
  • area: main
  • in suites: bookworm-backports
  • size: 72,656 kB
  • sloc: ansic: 381,805; python: 23,008; makefile: 6,251; sh: 4,536; cpp: 699; ruby: 208; java: 77; perl: 73; javascript: 46; xml: 11
file content (51 lines) | stat: -rw-r--r-- 1,790 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
/**
 * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
 * SPDX-License-Identifier: Apache-2.0.
 */
#include "aws/s3/private/s3_checksums.h"
#include <aws/testing/aws_test_harness.h>

typedef struct aws_s3_checksum *aws_checksum_new_fn(
    struct aws_allocator *allocator,
    enum aws_s3_checksum_algorithm algorithm);

static inline int s_verify_checksum_test_case(
    struct aws_allocator *allocator,
    struct aws_byte_cursor *input,
    struct aws_byte_cursor *expected,
    aws_checksum_new_fn *new_fn,
    enum aws_s3_checksum_algorithm algorithm) {

    aws_s3_library_init(allocator);

    /* test all possible segmentation lengths from 1 byte at a time to the entire
     * input. */
    for (size_t i = 1; i < input->len; ++i) {
        uint8_t output[128] = {0};
        struct aws_byte_buf output_buf = aws_byte_buf_from_array(output, expected->len);
        output_buf.len = 0;

        struct aws_s3_checksum *checksum = new_fn(allocator, algorithm);
        ASSERT_NOT_NULL(checksum);

        struct aws_byte_cursor input_cpy = *input;

        while (input_cpy.len) {
            size_t max_advance = input_cpy.len > i ? i : input_cpy.len;
            struct aws_byte_cursor segment = aws_byte_cursor_from_array(input_cpy.ptr, max_advance);
            ASSERT_SUCCESS(aws_checksum_update(checksum, &segment));
            aws_byte_cursor_advance(&input_cpy, max_advance);
        }

        size_t truncation_size = checksum->digest_size - expected->len;

        ASSERT_SUCCESS(aws_checksum_finalize(checksum, &output_buf, truncation_size));
        ASSERT_BIN_ARRAYS_EQUALS(expected->ptr, expected->len, output_buf.buffer, output_buf.len);

        aws_checksum_destroy(checksum);
    }

    aws_s3_library_clean_up();

    return AWS_OP_SUCCESS;
}