aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/test
diff options
context:
space:
mode:
authorEgor Tensin <Egor.Tensin@gmail.com>2021-08-02 17:09:28 +0300
committerEgor Tensin <Egor.Tensin@gmail.com>2021-08-02 17:09:28 +0300
commitf482b972347631240a5e04a6d3450530517f3bd1 (patch)
treecc36ab5f8bce2bd40bf37d298f3bc52d82239088 /test
parentworkflows/ci: rename to "CI" (diff)
downloadvk-scripts-f482b972347631240a5e04a6d3450530517f3bd1.tar.gz
vk-scripts-f482b972347631240a5e04a6d3450530517f3bd1.zip
.ci/ -> test/
Diffstat (limited to 'test')
-rw-r--r--test/.gitattributes1
-rwxr-xr-xtest/bin/main.sh19
-rwxr-xr-xtest/bin/mutuals.sh23
-rwxr-xr-xtest/bin/sessions.sh69
-rwxr-xr-xtest/bin/status.sh60
-rwxr-xr-xtest/bin/status_once.sh22
-rwxr-xr-xtest/lib/test.sh27
-rw-r--r--test/share/test_db.csv45
8 files changed, 266 insertions, 0 deletions
diff --git a/test/.gitattributes b/test/.gitattributes
new file mode 100644
index 0000000..dfdb8b7
--- /dev/null
+++ b/test/.gitattributes
@@ -0,0 +1 @@
+*.sh text eol=lf
diff --git a/test/bin/main.sh b/test/bin/main.sh
new file mode 100755
index 0000000..6207677
--- /dev/null
+++ b/test/bin/main.sh
@@ -0,0 +1,19 @@
+#!/usr/bin/env bash
+
+# Copyright (c) 2019 Egor Tensin <Egor.Tensin@gmail.com>
+# This file is part of the "VK scripts" project.
+# For details, see https://github.com/egor-tensin/vk-scripts.
+# Distributed under the MIT License.
+
+set -o errexit -o nounset -o pipefail
+
+script_dir="$( dirname -- "${BASH_SOURCE[0]}" )"
+script_dir="$( cd -- "$script_dir" && pwd )"
+readonly script_dir
+
+"$script_dir/mutuals.sh"
+
+"$script_dir/sessions.sh"
+
+"$script_dir/status_once.sh"
+"$script_dir/status.sh"
diff --git a/test/bin/mutuals.sh b/test/bin/mutuals.sh
new file mode 100755
index 0000000..383dbdd
--- /dev/null
+++ b/test/bin/mutuals.sh
@@ -0,0 +1,23 @@
+#!/usr/bin/env bash
+
+# Copyright (c) 2019 Egor Tensin <Egor.Tensin@gmail.com>
+# This file is part of the "VK scripts" project.
+# For details, see https://github.com/egor-tensin/vk-scripts.
+# Distributed under the MIT License.
+
+set -o errexit -o nounset -o pipefail
+
+script_dir="$( dirname -- "${BASH_SOURCE[0]}" )"
+script_dir="$( cd -- "$script_dir" && pwd )"
+readonly script_dir
+
+test_users() {
+ "$script_dir/../lib/test.sh" vk.mutuals --format csv "$@"
+ "$script_dir/../lib/test.sh" vk.mutuals --format json "$@"
+}
+
+main() {
+ test_users kreed58 maxkorzh_official
+}
+
+main
diff --git a/test/bin/sessions.sh b/test/bin/sessions.sh
new file mode 100755
index 0000000..7a01dc3
--- /dev/null
+++ b/test/bin/sessions.sh
@@ -0,0 +1,69 @@
+#!/usr/bin/env bash
+
+# Copyright (c) 2019 Egor Tensin <Egor.Tensin@gmail.com>
+# This file is part of the "VK scripts" project.
+# For details, see https://github.com/egor-tensin/vk-scripts.
+# Distributed under the MIT License.
+
+set -o errexit -o nounset -o pipefail
+
+script_dir="$( dirname -- "${BASH_SOURCE[0]}" )"
+script_dir="$( cd -- "$script_dir" && pwd )"
+readonly script_dir
+script_name="$( basename -- "${BASH_SOURCE[0]}" )"
+readonly script_name
+
+readonly db_path="$script_dir/../share/test_db.csv"
+
+dump() {
+ local msg
+ for msg; do
+ echo "$script_name: $msg"
+ done
+}
+
+test_output() {
+ local output_path
+ output_path="$( mktemp --dry-run )"
+
+ local rm_aux_files
+ rm_aux_files="$( printf -- 'rm -f -- %q' "$output_path" )"
+
+ trap "$rm_aux_files" RETURN
+
+ "$script_dir/../lib/test.sh" vk.tracking.sessions "$@" "$db_path" "$output_path"
+
+ if file --brief --dereference --mime -- "$output_path" | grep --quiet -- 'charset=binary$'; then
+ dump 'Output is a binary file, not going to show that'
+ return 0
+ fi
+
+ cat "$output_path"
+}
+
+group_by() {
+ test_output --output-format csv --group-by "$@"
+ test_output --output-format json --group-by "$@"
+ test_output --output-format plot --group-by "$@"
+}
+
+online_sessions() {
+ group_by user
+ group_by hour
+ group_by date
+ group_by weekday
+}
+
+fix_matplotlib() {
+ # Get rid of:
+ # tkinter.TclError: no display name and no $DISPLAY environment variable
+ mkdir -p -- ~/.config/matplotlib
+ echo 'backend: Agg' > ~/.config/matplotlib/matplotlibrc
+}
+
+main() {
+ fix_matplotlib
+ online_sessions
+}
+
+main
diff --git a/test/bin/status.sh b/test/bin/status.sh
new file mode 100755
index 0000000..9ff5d6a
--- /dev/null
+++ b/test/bin/status.sh
@@ -0,0 +1,60 @@
+#!/usr/bin/env bash
+
+# Copyright (c) 2019 Egor Tensin <Egor.Tensin@gmail.com>
+# This file is part of the "VK scripts" project.
+# For details, see https://github.com/egor-tensin/vk-scripts.
+# Distributed under the MIT License.
+
+set -o errexit -o nounset -o pipefail
+
+script_dir="$( dirname -- "${BASH_SOURCE[0]}" )"
+script_dir="$( cd -- "$script_dir" && pwd )"
+readonly script_dir
+script_name="$( basename -- "${BASH_SOURCE[0]}" )"
+readonly script_name
+
+dump() {
+ local msg
+ for msg; do
+ echo "$script_name: $msg"
+ done
+}
+
+test_users() {
+ local log_path
+ log_path="$( mktemp )"
+ local db_path
+ db_path="$( mktemp --dry-run )"
+
+ local rm_aux_files
+ rm_aux_files="$( printf -- 'rm -f -- %q %q' "$log_path" "$db_path" )"
+ trap "$rm_aux_files" RETURN
+
+ "$script_dir/../lib/test.sh" vk.tracking.status "$@" --log "$log_path" --format csv --output "$db_path" &
+ local pid="$!"
+
+ sleep 3
+ dump "Log file path: $log_path"
+ dump "DB file path: $db_path"
+ dump "PID: $pid"
+
+ local timeout=10
+ dump "Sleeping for $timeout seconds..."
+ sleep "$timeout"
+
+ dump 'Terminating track_status.py...'
+ kill "$pid"
+ dump 'Waiting for track_status.py to terminate...'
+ wait "$pid" || true
+
+ dump "Log file:"
+ cat "$log_path"
+ dump "DB:"
+ cat "$db_path"
+}
+
+main() {
+ test_users egor.tensin
+}
+
+main "$@"
diff --git a/test/bin/status_once.sh b/test/bin/status_once.sh
new file mode 100755
index 0000000..890cc3d
--- /dev/null
+++ b/test/bin/status_once.sh
@@ -0,0 +1,22 @@
+#!/usr/bin/env bash
+
+# Copyright (c) 2019 Egor Tensin <Egor.Tensin@gmail.com>
+# This file is part of the "VK scripts" project.
+# For details, see https://github.com/egor-tensin/vk-scripts.
+# Distributed under the MIT License.
+
+set -o errexit -o nounset -o pipefail
+
+script_dir="$( dirname -- "${BASH_SOURCE[0]}" )"
+script_dir="$( cd -- "$script_dir" && pwd )"
+readonly script_dir
+
+test_users() {
+ "$script_dir/../lib/test.sh" vk.tracking.status --only-once "$@"
+}
+
+main() {
+ test_users egor.tensin
+}
+
+main
diff --git a/test/lib/test.sh b/test/lib/test.sh
new file mode 100755
index 0000000..0f6ee6c
--- /dev/null
+++ b/test/lib/test.sh
@@ -0,0 +1,27 @@
+#!/usr/bin/env bash
+
+# Copyright (c) 2020 Egor Tensin <Egor.Tensin@gmail.com>
+# This file is part of the "VK scripts" project.
+# For details, see https://github.com/egor-tensin/vk-scripts.
+# Distributed under the MIT License.
+
+set -o errexit -o nounset -o pipefail
+
+script_dir="$( dirname -- "${BASH_SOURCE[0]}" )"
+script_dir="$( cd -- "$script_dir" && pwd )"
+readonly script_dir
+
+run_test() {
+ local arg
+ echo
+ echo ======================================================================
+ for arg; do
+ echo -n "$arg "
+ done
+ echo
+ echo ======================================================================
+
+ PYTHONPATH="$script_dir/../.." python -m "$@"
+}
+
+run_test "$@"
diff --git a/test/share/test_db.csv b/test/share/test_db.csv
new file mode 100644
index 0000000..2b087a8
--- /dev/null
+++ b/test/share/test_db.csv
@@ -0,0 +1,45 @@
+2019-09-09T20:35:46Z,5245998,Egor,Tensin,egor.tensin,True,2019-09-09T20:35:01Z,7
+2019-09-09T20:35:46Z,80387804,David,Makeev,david.makeev,False,2019-09-09T17:44:23Z,7
+2019-09-09T20:35:46Z,1172984,Darya,Meluzova,dmeluzova,False,2019-09-09T11:56:03Z,2
+2019-09-09T20:35:46Z,1052036,Alisa,Bakaeva,alisa.bakaeva,False,2019-09-09T13:30:40Z,4
+2019-09-09T20:35:46Z,60534,Dina,Semenenko,dina_semenenko,False,2019-09-09T17:20:36Z,1
+2019-09-09T20:35:46Z,631289,Nikita,Fedorov,nicksarkozy,False,2019-09-09T19:56:54Z,2
+2019-09-09T20:40:55Z,5245998,Egor,Tensin,egor.tensin,False,2019-09-09T20:35:52Z,7
+2019-09-09T21:16:33Z,5245998,Egor,Tensin,egor.tensin,True,2019-09-09T21:16:31Z,7
+2019-09-09T21:23:13Z,5245998,Egor,Tensin,egor.tensin,False,2019-09-09T21:18:10Z,7
+2019-09-09T21:34:50Z,60534,Dina,Semenenko,dina_semenenko,True,2019-09-09T21:34:49Z,1
+2019-09-09T21:40:54Z,60534,Dina,Semenenko,dina_semenenko,False,2019-09-09T21:35:52Z,1
+2019-09-09T22:06:00Z,5245998,Egor,Tensin,egor.tensin,True,2019-09-09T22:05:57Z,7
+2019-09-09T22:11:29Z,5245998,Egor,Tensin,egor.tensin,False,2019-09-09T22:06:24Z,7
+2019-09-09T23:28:11Z,5245998,Egor,Tensin,egor.tensin,True,2019-09-09T23:28:06Z,7
+2019-09-09T23:33:10Z,5245998,Egor,Tensin,egor.tensin,False,2019-09-09T23:28:06Z,7
+2019-09-09T23:44:42Z,5245998,Egor,Tensin,egor.tensin,True,2019-09-09T23:44:37Z,7
+2019-09-09T23:49:40Z,5245998,Egor,Tensin,egor.tensin,False,2019-09-09T23:44:37Z,7
+2019-09-10T00:52:03Z,80387804,David,Makeev,david.makeev,True,2019-09-10T00:52:00Z,4
+2019-09-10T00:54:50Z,80387804,David,Makeev,david.makeev,False,2019-09-10T00:54:46Z,4
+2019-09-10T02:50:01Z,80387804,David,Makeev,david.makeev,True,2019-09-10T02:49:58Z,7
+2019-09-10T03:02:25Z,80387804,David,Makeev,david.makeev,False,2019-09-10T02:57:21Z,7
+2019-09-10T06:26:08Z,1172984,Darya,Meluzova,dmeluzova,True,2019-09-10T06:26:05Z,2
+2019-09-10T06:33:23Z,1172984,Darya,Meluzova,dmeluzova,False,2019-09-10T06:28:21Z,2
+2019-09-10T06:58:01Z,60534,Dina,Semenenko,dina_semenenko,True,2019-09-10T06:58:00Z,1
+2019-09-10T07:06:47Z,60534,Dina,Semenenko,dina_semenenko,False,2019-09-10T07:01:44Z,1
+2019-09-10T07:09:24Z,80387804,David,Makeev,david.makeev,True,2019-09-10T07:09:22Z,7
+2019-09-10T07:15:44Z,80387804,David,Makeev,david.makeev,False,2019-09-10T07:10:42Z,7
+2019-09-10T07:17:20Z,60534,Dina,Semenenko,dina_semenenko,True,2019-09-10T07:17:15Z,1
+2019-09-10T07:52:46Z,60534,Dina,Semenenko,dina_semenenko,False,2019-09-10T07:47:45Z,1
+2019-09-10T07:54:17Z,60534,Dina,Semenenko,dina_semenenko,True,2019-09-10T07:54:13Z,1
+2019-09-10T08:00:36Z,1172984,Darya,Meluzova,dmeluzova,True,2019-09-10T08:00:35Z,2
+2019-09-10T08:05:45Z,1172984,Darya,Meluzova,dmeluzova,False,2019-09-10T08:00:43Z,2
+2019-09-10T08:09:02Z,60534,Dina,Semenenko,dina_semenenko,False,2019-09-10T08:04:00Z,1
+2019-09-10T08:18:39Z,60534,Dina,Semenenko,dina_semenenko,True,2019-09-10T08:18:36Z,1
+2019-09-10T08:24:19Z,60534,Dina,Semenenko,dina_semenenko,False,2019-09-10T08:19:17Z,1
+2019-09-10T08:41:56Z,60534,Dina,Semenenko,dina_semenenko,True,2019-09-10T08:41:53Z,1
+2019-09-10T08:52:59Z,60534,Dina,Semenenko,dina_semenenko,False,2019-09-10T08:47:57Z,1
+2019-09-10T09:37:33Z,60534,Dina,Semenenko,dina_semenenko,True,2019-09-10T09:37:30Z,1
+2019-09-10T09:44:03Z,60534,Dina,Semenenko,dina_semenenko,False,2019-09-10T09:39:02Z,1
+2019-09-10T10:20:35Z,5245998,Egor,Tensin,egor.tensin,True,2019-09-10T10:20:29Z,7
+2019-09-10T10:25:34Z,5245998,Egor,Tensin,egor.tensin,False,2019-09-10T10:20:29Z,7
+2019-09-10T10:27:35Z,631289,Nikita,Fedorov,nicksarkozy,True,2019-09-10T10:27:30Z,7
+2019-09-10T10:33:14Z,631289,Nikita,Fedorov,nicksarkozy,False,2019-09-10T10:28:10Z,7
+2019-09-10T10:36:22Z,631289,Nikita,Fedorov,nicksarkozy,True,2019-09-10T10:36:17Z,7
+2019-09-10T10:41:21Z,631289,Nikita,Fedorov,nicksarkozy,False,2019-09-10T10:36:17Z,7