From 8e3f4fad465690ca623ff34c760fadbd2ee81a48 Mon Sep 17 00:00:00 2001 From: Mathieu Desnoyers Date: Sun, 16 Nov 2014 14:49:23 +0100 Subject: [PATCH] Add 2GB array stress test Signed-off-by: Mathieu Desnoyers --- .../1.8/stress/stream/pass/array-2GB/test.py | 89 +++++++++++++++++++ tests/1.8/stress/stream/pass/run.sh | 3 + tests/1.8/stress/stream/pass/test.sh | 44 +++++++++ tests/1.8/stress/stream/run.sh | 8 ++ 4 files changed, 144 insertions(+) create mode 100755 tests/1.8/stress/stream/pass/array-2GB/test.py create mode 100755 tests/1.8/stress/stream/pass/run.sh create mode 100755 tests/1.8/stress/stream/pass/test.sh create mode 100755 tests/1.8/stress/stream/run.sh diff --git a/tests/1.8/stress/stream/pass/array-2GB/test.py b/tests/1.8/stress/stream/pass/array-2GB/test.py new file mode 100755 index 0000000..c4431b4 --- /dev/null +++ b/tests/1.8/stress/stream/pass/array-2GB/test.py @@ -0,0 +1,89 @@ +#!/usr/bin/env python3 + +# Expects either "prepare" or "clean" argument + +import sys +import os + +output_metadata = './metadata' +output_stream = './stream' + +def arg_err(): + print('Please specify "prepare" or "clean" as first argument.') + sys.exit(-1) + +if (len(sys.argv) <= 1): + arg_err() +mode = sys.argv[1] + +metadata_str = \ +'/* CTF 1.8 */\n' \ +'\n' \ +'typealias integer { size = 8; align = 8; signed = false; base = 10; } := uint8_t;\n' \ +'typealias integer { size = 32; align = 32; signed = false; base = hex; } := uint32_t;\n' \ +'\n' \ +'trace {\n' \ +' major = 0;\n' \ +' minor = 0;\n' \ +' uuid = "2a6422d0-6cee-11e0-8c08-cb07d7b3a564";\n' \ +' byte_order = le;\n' \ +' packet.header := struct {\n' \ +' uint32_t magic;\n' \ +' uint8_t uuid[16];\n' \ +' };\n' \ +'};\n' \ +'\n' \ +'event {\n' \ +' name = seq;\n' \ +' fields := struct {\n' \ +' uint8_t field[2147483648]; /* 2GB array */\n' \ +' };\n' \ +'};\n' + +stream_packet_header = [ + 0xC1, 0x1F, 0xFC, 0xC1, # magic + 0x2A, 0x64, 0x22, 0xD0, 0x6C, 0xEE, 0x11, 0xE0, + 0x8C, 0x08, 0xCB, 0x07, 0xD7, 0xB3, 0xA5, 0x64, # uuid +] + +array_byte = [ 0x00, ] + +def write_binary(f, arr): + f.write(bytes(arr)) + +def generate_metadata(): + # Generate metadata + metadata_f = open(output_metadata, 'w') + metadata_f.write(metadata_str) + metadata_f.close() + +def generate_stream(): + # Generate stream + stream_f = open(output_stream, 'wb') + write_binary(stream_f, stream_packet_header) + # generate 2GB array as event content + os.ftruncate(stream_f.fileno(), 2147483648) + stream_f.close() + +def test_prepare(): + print('Preparing test') + generate_metadata() + generate_stream() + +def test_clean(): + print('Cleaning up test') + try: + os.remove(output_metadata) + except: + pass + try: + os.remove(output_stream) + except: + pass + +if (mode == "prepare"): + test_prepare() +elif (mode == "clean"): + test_clean() +else: + arg_err() diff --git a/tests/1.8/stress/stream/pass/run.sh b/tests/1.8/stress/stream/pass/run.sh new file mode 100755 index 0000000..f23416c --- /dev/null +++ b/tests/1.8/stress/stream/pass/run.sh @@ -0,0 +1,3 @@ +#!/bin/sh + +. ../../../../../utils/run.sh diff --git a/tests/1.8/stress/stream/pass/test.sh b/tests/1.8/stress/stream/pass/test.sh new file mode 100755 index 0000000..0b22645 --- /dev/null +++ b/tests/1.8/stress/stream/pass/test.sh @@ -0,0 +1,44 @@ +#!/bin/bash +# +# Copyright (C) - 2013 Christian Babeux +# +# This program is free software; you can redistribute it and/or modify it +# under the terms of the GNU General Public License, version 2 only, as +# published by the Free Software Foundation. +# +# This program is distributed in the hope that it will be useful, but WITHOUT +# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or +# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for +# more details. +# +# You should have received a copy of the GNU General Public License along with +# this program; if not, write to the Free Software Foundation, Inc., 51 +# Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + +CURDIR=$(dirname $0) +UTILS_DIR=$CURDIR/../../../../../utils/ + +source $UTILS_DIR/tap/tap.sh + +NUM_TESTS=3 + +plan_tests $NUM_TESTS + +if [ "x${CTF_READER_BIN}" == "x" ]; then + echo "Bail out! No CTF_READER_BIN specified" + exit 1 +fi + +cd $1 && ./test.py prepare +result=$? +is $result 0 $1 +cd .. + +$CTF_READER_BIN $CTF_READER_OPTS $1 >/dev/null 2>&1 +result=$? +echo $result > /tmp/blah +is $result 0 $1 # expect pass + +cd $1 && ./test.py clean +result=$? +is $result 0 $1 diff --git a/tests/1.8/stress/stream/run.sh b/tests/1.8/stress/stream/run.sh new file mode 100755 index 0000000..78e3be0 --- /dev/null +++ b/tests/1.8/stress/stream/run.sh @@ -0,0 +1,8 @@ +#!/bin/sh + +for dir in */; do + echo "Running ${dir} tests" + cd ${dir} + ./run.sh + cd .. +done -- 2.34.1