From: Matthias Kruk Date: Sat, 19 Nov 2022 10:38:00 +0000 (+0900) Subject: include/queue: Turn queue into a simple FIFO X-Git-Url: https://git.corax.cc/?a=commitdiff_plain;h=0d22cb2453a7c8306089cee8b39efbabe165f585;p=toolbox include/queue: Turn queue into a simple FIFO The queue module contains functions for file queues and queues with unique contents, which should be used into separate modules to keep modules simple and avoid mistakes such as using functions for normal queues on file-queues. This commit removes functions for file and unique queues from the queue module, turning queues into simple FIFO data structures. --- diff --git a/include/queue.sh b/include/queue.sh index 4bef0fa..dd592db 100644 --- a/include/queue.sh +++ b/include/queue.sh @@ -1,7 +1,7 @@ #!/bin/bash # queue.sh - Toolbox module for "thread"-safe queues -# Copyright (C) 2021 Matthias Kruk +# Copyright (C) 2021-2022 Matthias Kruk # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -137,15 +137,6 @@ _queue_get_data() { echo "$path/data" } -_queue_get_filedir() { - local queue="$1" - - local path - - path=$(_queue_get_path "$queue") - echo "$path/files" -} - queue_init() { local queue="$1" @@ -219,161 +210,6 @@ queue_put() { return "$err" } -_queue_contains() { - local queue="$1" - local item="$2" - - local data - local qitem - - data=$(_queue_get_data "$queue") - - if ! [ -f "$data" ]; then - return 1 - fi - - while read -r qitem; do - if [[ "$qitem" == "$item" ]]; then - return 0 - fi - done < "$data" - - return 1 -} - -queue_put_unique() { - local queue="$1" - local item="$2" - - local mutex - local sem - local data - local err - - # When this function returns success, the caller can be sure that - # the item is in the queue. However, this includes the case that - # it was already in the queue. Since the item is transient data, - # this behavior seems appropriate. Files are a different story. - - mutex=$(_queue_get_mutex "$queue") - sem=$(_queue_get_sem "$queue") - data=$(_queue_get_data "$queue") - - mutex_lock "$mutex" - - if _queue_contains "$queue" "$item"; then - err=-1 - else - if ! echo "$item" >> "$data"; then - err=1 - else - err=0 - fi - fi - - mutex_unlock "$mutex" - - if (( err == 0 )); then - if ! sem_post "$sem"; then - err=1 - fi - elif (( err < 0 )); then - err=0 - fi - - return "$err" -} - -_queue_move_to_q() { - local queue="$1" - local filepath="$2" - - local filename - local filedir - local data - local dest - - filedir=$(_queue_get_filedir "$queue") - data=$(_queue_get_data "$queue") - filename="${filepath##*/}" - dest="$filedir/$filename" - - if ! cp -a "$filepath" "$dest"; then - return 1 - fi - - if ! echo "$filename" >> "$data"; then - log_error "Could not append to queue: $data" - - if ! rm -rf "$dest"; then - log_error "Could not remove file from queue: $dest" - fi - - return 1 - fi - - if ! rm -rf "$filepath"; then - log_error "Could not remove source file: $filepath" - fi - - return 0 -} - -queue_put_file() { - local queue="$1" - local filepath="$2" - - local mutex - local sem - local filedir - local filename - local data - local err - - # Unlike queue_put_unique(), this function returns failure if the - # file was already in the queue. The file queue does not allow - # duplicates because files would be overwritten. - - filename="${filepath##*/}" - - mutex=$(_queue_get_mutex "$queue") - filedir=$(_queue_get_filedir "$queue") - sem=$(_queue_get_sem "$queue") - - mutex_lock "$mutex" - - if ! mkdir -p "$filedir" &> /dev/null; then - err=1 - else - local dest - - dest="$filedir/$filename" - - if [ -e "$filedir/$filename" ]; then - # Must not succeed if the file was already in the queue - err=1 - else - if _queue_move_to_q "$queue" "$filepath"; then - err=0 - else - err=1 - fi - fi - fi - - mutex_unlock "$mutex" - - if (( err == 0 )); then - if ! sem_post "$sem"; then - err=1 - fi - elif (( err < 0 )); then - err=0 - fi - - return "$err" -} - queue_get() { local queue="$1" local -i timeout="$2" @@ -418,94 +254,6 @@ queue_get() { return 0 } -queue_get_file() { - local queue="$1" - local destdir="$2" - local -i timeout="$3" - - local sem - local mutex - local data - local item - local dest - local err - - if (( $# < 3 )); then - timeout=-1 - fi - - if ! [ -d "$destdir" ]; then - log_error "Destination must be a directory" - return 1 - fi - - sem=$(_queue_get_sem "$queue") - mutex=$(_queue_get_mutex "$queue") - data=$(_queue_get_data "$queue") - - err=false - - if ! sem_wait "$sem" "$timeout"; then - return 1 - fi - - mutex_lock "$mutex" - - if ! item=$(head -n 1 "$data" 2>/dev/null); then - err=true - else - src="$(_queue_get_filedir "$queue")/$item" - dest="${destdir%/}/$item" - - # The reason we remove the item from the list first is that - # it is much cheaper to put it back in case the move failed - # than the other way around. - - if ! sed -i '1d' "$data" 2>/dev/null; then - log_error "Could not remove item from $data" - err=true - else - log_debug "Moving $src to $dest" - - if ! mv "$src" "$dest"; then - local tmpfile - local restored - - log_error "Could not move $src to $dest" - restored=true - - # Put the file back to the head of the list - if ! tmpfile=$(mktemp); then - restored=false - elif ! echo "$item" | cat - "$data" > "$tmpfile"; then - restored=false - rm "$tmpfile" - elif ! mv "$tmpfile" "$data"; then - restored=false - rm "$tmpfile" - fi - - if ! "$restored"; then - log_error "Could not restore queue $queue" - else - sem_post "$sem" - fi - - err=true - fi - fi - fi - - mutex_unlock "$mutex" - - if "$err"; then - return 1 - fi - - echo "$dest" - return 0 -} - queue_foreach() { local name="$1" local func="$2" diff --git a/test/queue_spec.sh b/test/queue_spec.sh index 0776ec1..a88ce3f 100644 --- a/test/queue_spec.sh +++ b/test/queue_spec.sh @@ -260,733 +260,50 @@ Describe "queue_put()" End End -Describe "queue_put_unique()" - It "adds an item to the queue" - _test_queue_put_unique_add() { - local tmpdir - local queue - - local items_before - local items_after - local item_new - local item - - if ! tmpdir=$(mktemp -d); then - return 1 - fi - - queue="$tmpdir/queue" - - if ! queue_init "$queue"; then - rm -rf "$tmpdir" - return 2 - fi - - items_before=() - while read -r item; do - items_before+=("$item") - done < <(queue_foreach "$queue" echo) - - item_new="$RANDOM.item.$RANDOM" - - if ! queue_put_unique "$queue" "$item_new"; then - rm -rf "$tmpdir" - return 3 - fi - - items_after=() - while read -r item; do - items_after+=("$item") - done < <(queue_foreach "$queue" echo) - - rm -rf "$tmpdir" - - items_before+=("$item_new") - - if ! array_same items_before items_after; then - return 4 - fi - - return 0 - } - - When call _test_queue_put_unique_add - The status should equal 0 - End - - It "adds an item to the end of the queue" - _test_queue_put_unique_append() { - local tmpdir - local queue - - local items_before - local items_after - local item_new - local item - - if ! tmpdir=$(mktemp -d); then - return 1 - fi - - queue="$tmpdir/queue" - - if ! queue_init "$queue"; then - rm -rf "$tmpdir" - return 2 - fi - - items_before=() - while read -r item; do - items_before+=("$item") - done < <(queue_foreach "$queue" echo) - - item_new="$RANDOM.item.$RANDOM" - - if ! queue_put_unique "$queue" "$item_new"; then - rm -rf "$tmpdir" - return 3 - fi - - items_after=() - while read -r item; do - items_after+=("$item") - done < <(queue_foreach "$queue" echo) - - rm -rf "$tmpdir" - - items_before+=("$item_new") - - if ! array_identical items_before items_after; then - return 4 - fi - - return 0 - } - - When call _test_queue_put_unique_append - The status should equal 0 - End - - It "does not add the same item twice" - _test_queue_put_unique_fail_not_unique() { - local tmpdir - local queue - local items - local item - local -i num_items - local err - - if ! tmpdir=$(mktemp -d); then - return 1 - fi - - err=0 - queue="$tmpdir/queue" - item="$RANDOM.item.$RANDOM" - - if ! queue_init "$queue"; then - err=2 - - elif ! queue_put_unique "$queue" "$item" || - ! queue_put_unique "$queue" "$item"; then - # If queue_put_unique() succeeds, that means the item - # is in the queue. It does not mean that it was added - # by this call. It may already have been there. Long - # story short, both calls must succeed. - err=3 - - elif ! items=$(queue_foreach "$queue" echo); then - err=4 - - elif [[ -z "$items" ]]; then - err=5 - - elif ! num_items=$(wc -l <<< "$items"); then - err=6 - - elif (( num_items != 1 )); then - err=7 - fi - - rm -rf "$tmpdir" - return "$err" - } - - When call _test_queue_put_unique_fail_not_unique - The status should equal 0 - End -End - -Describe "queue_put_file()" - It "adds a file to the queue" - _test_queue_put_file_add() { - local tmpdir - local queue - - local items_before - local items_after - local item_new - local item_data - local item_last - local enqueued_data - local item - - if ! tmpdir=$(mktemp -d); then - return 1 - fi - - if ! item_new=$(mktemp); then - rmdir "$tmpdir" - return 2 - fi - - queue="$tmpdir/queue" - - if ! queue_init "$queue"; then - rm -rf "$tmpdir" "$item_new" - return 3 - fi - - items_before=() - while read -r item; do - items_before+=("$item") - done < <(queue_foreach "$queue" echo) - - item_data="$RANDOM.item.$RANDOM" - if ! echo "$item_data" > "$item_new"; then - rm -rf "$tmpdir" "$item_new" - return 4 - fi - - if ! queue_put_file "$queue" "$item_new"; then - rm -rf "$tmpdir" "$item_new" - return 5 - fi - - items_after=() - item_last="" - while read -r item; do - items_after+=("$item") - item_last="$item" - done < <(queue_foreach "$queue" echo) - - if ! enqueued_data=$(< "$queue/files/${item_new##*/}"); then - rm -rf "$tmpdir" - return 6 - fi - - rm -rf "$tmpdir" - - if [[ "$enqueued_data" != "$item_data" ]]; then - return 7 - fi - - items_before+=("$item_last") - - if ! array_same items_before items_after; then - return 8 - fi - - return 0 - } - - When call _test_queue_put_file_add - The status should equal 0 - End - - It "adds an item to the end of the queue" - _test_queue_put_file_append() { - local tmpdir - local queue - - local items_before - local items_after - local item_new - local item_data - local item_last - local enqueued_data - local item - - if ! tmpdir=$(mktemp -d); then - return 1 - fi - - if ! item_new=$(mktemp); then - rmdir "$tmpdir" - return 2 - fi - - queue="$tmpdir/queue" - - if ! queue_init "$queue"; then - rm -rf "$tmpdir" "$item_new" - return 3 - fi - - items_before=() - while read -r item; do - items_before+=("$item") - done < <(queue_foreach "$queue" echo) - - item_data="$RANDOM.item.$RANDOM" - if ! echo "$item_data" > "$item_new"; then - rm -rf "$tmpdir" "$item_new" - return 4 - fi - - if ! queue_put_file "$queue" "$item_new"; then - rm -rf "$tmpdir" "$item_new" - return 5 - fi - - items_after=() - item_last="" - while read -r item; do - items_after+=("$item") - item_last="$item" - done < <(queue_foreach "$queue" echo) - - if ! enqueued_data=$(< "$queue/files/${item_new##*/}"); then - rm -rf "$tmpdir" - return 6 - fi - - rm -rf "$tmpdir" - - if [[ "$enqueued_data" != "$item_data" ]]; then - return 7 - fi - - items_before+=("$item_last") - - if ! array_identical items_before items_after; then - return 8 - fi - - return 0 - } - - When call _test_queue_put_file_append - The status should equal 0 - End - - It "does not add a file with the same name twice" - _test_queue_put_file_fail_not_unique() { - local tmpdir - local queue - local items - local item - local -i num_items - local err - - if ! tmpdir=$(mktemp -d); then - return 1 - fi - - err=0 - queue="$tmpdir/queue" - - if ! queue_init "$queue"; then - err=2 - - elif ! echo "$RANDOM.item.$RANDOM" > "$tmpdir/file"; then - err=3 - - elif ! queue_put_file "$queue" "$tmpdir/file"; then - err=4 - - elif ! echo "$RANDOM.item.$RANDOM" > "$tmpdir/file"; then - err=5 - - elif queue_put_file "$queue" "$tmpdir/file"; then - err=6 - - elif ! items=$(queue_foreach "$queue" echo); then - err=7 - - elif [[ -z "$items" ]]; then - err=8 - - elif ! num_items=$(wc -l <<< "$items"); then - err=9 - - elif (( num_items != 1 )); then - err=10 - fi - - rm -rf "$tmpdir" - return "$err" - } - - When call _test_queue_put_file_fail_not_unique - The status should equal 0 - End -End - -Describe "queue_get()" - It "gets an item from a queue" - _test_queue_get_simple() { - local tmpdir - local queue - local data_enqueued - local data_dequeued - local err - - if ! tmpdir=$(mktemp -d); then - return 1 - fi - - queue="$tmpdir/queue" - data_enqueued="$RANDOM.data.$RANDOM" - err=0 - - if ! queue_init "$queue"; then - err=2 - - elif ! queue_put "$queue" "$data_enqueued"; then - err=3 - - elif ! data_dequeued=$(queue_get "$queue" 0); then - err=4 - - elif [[ "$data_enqueued" != "$data_dequeued" ]]; then - err=5 - fi - - rm -rf "$tmpdir" - return "$err" - } - - When call _test_queue_get_simple - The status should equal 0 - End - - It "preserves the order of items" - _test_queue_get_order() { - local tmpdir - local queue - local data_enqueued - local data_dequeued - local err - - if ! tmpdir=$(mktemp -d); then - return 1 - fi - - queue="$tmpdir/queue" - data_enqueued=(1 2 3) - err=0 - - if ! queue_init "$queue"; then - err=2 - - elif ! queue_put "$queue" "${data_enqueued[0]}" || - ! queue_put "$queue" "${data_enqueued[1]}" || - ! queue_put "$queue" "${data_enqueued[2]}"; then - err=3 - - elif ! data_dequeued+=("$(queue_get "$queue")") || - ! data_dequeued+=("$(queue_get "$queue")") || - ! data_dequeued+=("$(queue_get "$queue")"); then - err=4 - - elif ! array_identical data_enqueued data_dequeued; then - err=5 - fi - - rm -rf "$tmpdir" - return "$err" - } - - When call _test_queue_get_order - The status should equal 0 - End - - It "blocks for specified amount of seconds if timeout > 0" - _test_queue_get_timeout_n() { - local timeout - local tmpdir - local queue - local err - - if ! tmpdir=$(mktemp -d); then - return 1 - fi - - queue="$tmpdir/queue" - timeout=5 - err=0 - - if ! queue_init "$queue"; then - err=2 - else - local time_before - local time_after - local time_waited - - time_before=$(date +"%s") - queue_get "$queue" "$timeout" - time_after=$(date +"%s") - - time_waited=$((time_after - time_before)) - if (( time_waited > (timeout + 1) )); then - err=3 - elif (( time_waited < timeout )); then - err=4 - fi - fi - - rm -rf "$tmpdir" - return "$err" - } - - When call _test_queue_get_timeout_n - The status should equal 0 - End - - It "does not block if timeout == 0" - _test_queue_get_timeout_zero() { - local tmpdir - local queue - local err - - if ! tmpdir=$(mktemp -d); then - return 1 - fi - - queue="$tmpdir/queue" - err=0 - - if ! queue_init "$queue"; then - err=2 - - else - local time_before - local time_after - - time_before=$(date +"%s") - queue_get "$queue" 0 - time_after=$(date +"%s") - - if (( (time_after - time_before) > 0 )); then - err=3 - fi - fi - - rm -rf "$tmpdir" - return "$err" - } - - When call _test_queue_get_timeout_zero - The status should equal 0 - End - - It "blocks until a message arrives if timeout == -1" - _test_queue_get_timeout_negative() { - local tmpdir - local queue - local err - - if ! tmpdir=$(mktemp -d); then - return 1 - fi - - queue="$tmpdir/queue" - err=0 - - if ! queue_init "$queue"; then - err=2 - - else - local delay - - for (( delay = 0; delay < 5; delay++ )); do - local time_before - local time_after - local time_waited - - ( sleep "$delay"; queue_put "$queue" "hello world" ) & - - time_before=$(date +"%s") - queue_get "$queue" -1 &> /dev/null - time_after=$(date +"%s") - - time_waited=$((time_after - time_before)) - - if (( time_waited < delay )); then - err=3 - break - fi - - # queue_put() and queue_get() may incur a delay of 1s each, - # add bad scheduler timing and we need 3 seconds tolerance - if (( (time_waited - delay) > 3 )); then - err=4 - break - fi - done - fi - - rm -rf "$tmpdir" - return "$err" - } - - When call _test_queue_get_timeout_negative - The status should equal 0 - End - - It "blocks until a message arrives if timeout is omitted" - _test_queue_get_timeout_omitted() { - local tmpdir - local queue - local err - - if ! tmpdir=$(mktemp -d); then - return 1 - fi - - queue="$tmpdir/queue" - err=0 - - if ! queue_init "$queue"; then - err=2 - - else - local delay - - for (( delay = 0; delay < 5; delay++ )); do - local time_before - local time_after - local time_waited - - ( sleep "$delay"; queue_put "$queue" "hello world" ) & - - time_before=$(date +"%s") - queue_get "$queue" &> /dev/null - time_after=$(date +"%s") - - time_waited=$((time_after - time_before)) - - if (( time_waited < delay )); then - err=3 - break - fi - - if (( (time_waited - delay) > 3 )); then - err=4 - break - fi - done - fi - - rm -rf "$tmpdir" - return "$err" - } - - When call _test_queue_get_timeout_omitted - The status should equal 0 - End - -End - -Describe "queue_get_file()" - It "retrieves a file from the queue" - _test_queue_get_file() { +Describe "queue_get()" + It "gets an item from a queue" + _test_queue_get_simple() { local tmpdir local queue - local file_sent - local file_received - local data_sent - local data_received + local data_enqueued + local data_dequeued local err if ! tmpdir=$(mktemp -d); then return 1 fi - data_sent="hello world" - file_sent="$tmpdir/file" queue="$tmpdir/queue" + data_enqueued="$RANDOM.data.$RANDOM" err=0 if ! queue_init "$queue"; then err=2 - elif ! echo "$data_sent" > "$file_sent"; then + elif ! queue_put "$queue" "$data_enqueued"; then err=3 - elif ! queue_put_file "$queue" "$file_sent"; then + elif ! data_dequeued=$(queue_get "$queue" 0); then err=4 - elif ! file_received=$(queue_get_file "$queue" "$tmpdir"); then + elif [[ "$data_enqueued" != "$data_dequeued" ]]; then err=5 - - elif ! data_received=$(< "$file_received"); then - err=6 - - elif [[ "$data_received" != "$data_sent" ]]; then - err=7 fi rm -rf "$tmpdir" return "$err" } - When call _test_queue_get_file + When call _test_queue_get_simple The status should equal 0 End - It "preserves the queue order" - _populate_queue() { - local queue="$1" - local tmpdir="$2" - local -i items="$3" - - local i - - for (( i = 0; i < items; i++ )); do - if ! echo "$i" > "$tmpdir/$i"; then - return 1 - fi - - if ! queue_put_file "$queue" "$tmpdir/$i"; then - return 1 - fi - done - - return 0 - } - - _depopulate_queue() { - local queue="$1" - local tmpdir="$2" - local -i items="$3" - - local i - - for (( i = 0; i < items; i++ )); do - local file - local data - - if ! file=$(queue_get_file "$queue" "$tmpdir"); then - return 1 - fi - - if ! data=$(< "$file"); then - return 1 - fi - - if [[ "$data" != "$i" ]]; then - return 1 - fi - done - - return 0 - } - - _test_queue_get_file_order() { + It "preserves the order of items" + _test_queue_get_order() { local tmpdir local queue + local data_enqueued + local data_dequeued local err if ! tmpdir=$(mktemp -d); then @@ -994,28 +311,36 @@ Describe "queue_get_file()" fi queue="$tmpdir/queue" + data_enqueued=(1 2 3) err=0 if ! queue_init "$queue"; then err=2 - elif ! _populate_queue "$queue" "$tmpdir" 10; then + elif ! queue_put "$queue" "${data_enqueued[0]}" || + ! queue_put "$queue" "${data_enqueued[1]}" || + ! queue_put "$queue" "${data_enqueued[2]}"; then err=3 - elif ! _depopulate_queue "$queue" "$tmpdir" 10; then + elif ! data_dequeued+=("$(queue_get "$queue")") || + ! data_dequeued+=("$(queue_get "$queue")") || + ! data_dequeued+=("$(queue_get "$queue")"); then err=4 + + elif ! array_identical data_enqueued data_dequeued; then + err=5 fi rm -rf "$tmpdir" return "$err" } - When call _test_queue_get_file_order + When call _test_queue_get_order The status should equal 0 End - It "blocks for the specified amount of seconds if timeout > 0" - _test_queue_get_file_timeout_n() { + It "blocks for specified amount of seconds if timeout > 0" + _test_queue_get_timeout_n() { local timeout local tmpdir local queue @@ -1037,7 +362,7 @@ Describe "queue_get_file()" local time_waited time_before=$(date +"%s") - queue_get_file "$queue" "$tmpdir" "$timeout" &> /dev/null + queue_get "$queue" "$timeout" time_after=$(date +"%s") time_waited=$((time_after - time_before)) @@ -1052,12 +377,12 @@ Describe "queue_get_file()" return "$err" } - When call _test_queue_get_file_timeout_n + When call _test_queue_get_timeout_n The status should equal 0 End It "does not block if timeout == 0" - _test_queue_get_file_timeout_zero() { + _test_queue_get_timeout_zero() { local tmpdir local queue local err @@ -1077,7 +402,7 @@ Describe "queue_get_file()" local time_after time_before=$(date +"%s") - queue_get_file "$queue" "$tmpdir" 0 &> /dev/null + queue_get "$queue" 0 time_after=$(date +"%s") if (( (time_after - time_before) > 0 )); then @@ -1089,12 +414,12 @@ Describe "queue_get_file()" return "$err" } - When call _test_queue_get_file_timeout_zero + When call _test_queue_get_timeout_zero The status should equal 0 End It "blocks until a message arrives if timeout == -1" - _test_queue_get_file_timeout_negative() { + _test_queue_get_timeout_negative() { local tmpdir local queue local err @@ -1117,26 +442,23 @@ Describe "queue_get_file()" local time_after local time_waited - if ! echo "hello world" > "$tmpdir/file"; then - err=3 - break - fi - - ( sleep "$delay"; queue_put_file "$queue" "$tmpdir/file" ) & + ( sleep "$delay"; queue_put "$queue" "hello world" ) & time_before=$(date +"%s") - queue_get_file "$queue" "$tmpdir" -1 &> /dev/null + queue_get "$queue" -1 &> /dev/null time_after=$(date +"%s") time_waited=$((time_after - time_before)) if (( time_waited < delay )); then - err=4 + err=3 break fi + # queue_put() and queue_get() may incur a delay of 1s each, + # add bad scheduler timing and we need 3 seconds tolerance if (( (time_waited - delay) > 3 )); then - err=5 + err=4 break fi done @@ -1146,12 +468,12 @@ Describe "queue_get_file()" return "$err" } - When call _test_queue_get_file_timeout_negative + When call _test_queue_get_timeout_negative The status should equal 0 End It "blocks until a message arrives if timeout is omitted" - _test_queue_get_file_timeout_omitted() { + _test_queue_get_timeout_omitted() { local tmpdir local queue local err @@ -1174,15 +496,10 @@ Describe "queue_get_file()" local time_after local time_waited - if ! echo "hello world" > "$tmpdir/file"; then - err=3 - break - fi - - ( sleep "$delay"; queue_put_file "$queue" "$tmpdir/file" ) & + ( sleep "$delay"; queue_put "$queue" "hello world" ) & time_before=$(date +"%s") - queue_get_file "$queue" "$tmpdir" &> /dev/null + queue_get "$queue" &> /dev/null time_after=$(date +"%s") time_waited=$((time_after - time_before)) @@ -1203,7 +520,7 @@ Describe "queue_get_file()" return "$err" } - When call _test_queue_get_file_timeout_omitted + When call _test_queue_get_timeout_omitted The status should equal 0 End End @@ -1333,6 +650,4 @@ Describe "queue_foreach()" When call _test_queue_foreach_call_order The status should equal 0 End - - End