mirror of
https://github.com/hibiken/asynq.git
synced 2024-12-26 07:42:17 +08:00
109 lines
2.3 KiB
Go
109 lines
2.3 KiB
Go
// Copyright 2020 Kentaro Hibino. All rights reserved.
|
|
// Use of this source code is governed by a MIT license
|
|
// that can be found in the LICENSE file.
|
|
|
|
package base
|
|
|
|
import (
|
|
"sync"
|
|
"testing"
|
|
"time"
|
|
)
|
|
|
|
func TestQueueKey(t *testing.T) {
|
|
tests := []struct {
|
|
qname string
|
|
want string
|
|
}{
|
|
{"custom", "asynq:queues:custom"},
|
|
}
|
|
|
|
for _, tc := range tests {
|
|
got := QueueKey(tc.qname)
|
|
if got != tc.want {
|
|
t.Errorf("QueueKey(%q) = %q, want %q", tc.qname, got, tc.want)
|
|
}
|
|
}
|
|
}
|
|
|
|
func TestProcessedKey(t *testing.T) {
|
|
tests := []struct {
|
|
input time.Time
|
|
want string
|
|
}{
|
|
{time.Date(2019, 11, 14, 10, 30, 1, 1, time.UTC), "asynq:processed:2019-11-14"},
|
|
{time.Date(2020, 12, 1, 1, 0, 1, 1, time.UTC), "asynq:processed:2020-12-01"},
|
|
{time.Date(2020, 1, 6, 15, 02, 1, 1, time.UTC), "asynq:processed:2020-01-06"},
|
|
}
|
|
|
|
for _, tc := range tests {
|
|
got := ProcessedKey(tc.input)
|
|
if got != tc.want {
|
|
t.Errorf("ProcessedKey(%v) = %q, want %q", tc.input, got, tc.want)
|
|
}
|
|
}
|
|
}
|
|
|
|
func TestFailureKey(t *testing.T) {
|
|
tests := []struct {
|
|
input time.Time
|
|
want string
|
|
}{
|
|
{time.Date(2019, 11, 14, 10, 30, 1, 1, time.UTC), "asynq:failure:2019-11-14"},
|
|
{time.Date(2020, 12, 1, 1, 0, 1, 1, time.UTC), "asynq:failure:2020-12-01"},
|
|
{time.Date(2020, 1, 6, 15, 02, 1, 1, time.UTC), "asynq:failure:2020-01-06"},
|
|
}
|
|
|
|
for _, tc := range tests {
|
|
got := FailureKey(tc.input)
|
|
if got != tc.want {
|
|
t.Errorf("FailureKey(%v) = %q, want %q", tc.input, got, tc.want)
|
|
}
|
|
}
|
|
}
|
|
|
|
func TestProcessInfoKey(t *testing.T) {
|
|
tests := []struct {
|
|
hostname string
|
|
pid int
|
|
want string
|
|
}{
|
|
{"localhost", 9876, "asynq:ps:localhost:9876"},
|
|
{"127.0.0.1", 1234, "asynq:ps:127.0.0.1:1234"},
|
|
}
|
|
|
|
for _, tc := range tests {
|
|
got := ProcessInfoKey(tc.hostname, tc.pid)
|
|
if got != tc.want {
|
|
t.Errorf("ProcessInfoKey(%s, %d) = %s, want %s", tc.hostname, tc.pid, got, tc.want)
|
|
}
|
|
}
|
|
}
|
|
|
|
// Note: Run this test with -race flag to check for data race.
|
|
func TestProcessInfoSetter(t *testing.T) {
|
|
pi := NewProcessInfo("localhost", 1234, 8, map[string]uint{"default": 1}, false)
|
|
|
|
var wg sync.WaitGroup
|
|
|
|
wg.Add(3)
|
|
|
|
go func() {
|
|
pi.SetState("runnning")
|
|
wg.Done()
|
|
}()
|
|
|
|
go func() {
|
|
pi.SetStarted(time.Now())
|
|
pi.IncrActiveWorkerCount(1)
|
|
wg.Done()
|
|
}()
|
|
|
|
go func() {
|
|
pi.SetState("stopped")
|
|
wg.Done()
|
|
}()
|
|
|
|
wg.Wait()
|
|
}
|