#!/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
echo "$path/data"
}
-_queue_get_filedir() {
- local queue="$1"
-
- local path
-
- path=$(_queue_get_path "$queue")
- echo "$path/files"
-}
-
queue_init() {
local queue="$1"
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"
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"
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
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
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))
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
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
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
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
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
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))
return "$err"
}
- When call _test_queue_get_file_timeout_omitted
+ When call _test_queue_get_timeout_omitted
The status should equal 0
End
End
When call _test_queue_foreach_call_order
The status should equal 0
End
-
-
End