-
Notifications
You must be signed in to change notification settings - Fork 8
/
Copy pathlib.rs
118 lines (107 loc) · 2.83 KB
/
lib.rs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
#[macro_use]
extern crate serde_json;
extern crate sidekiq;
use std::default::Default;
use std::time::{SystemTime, UNIX_EPOCH};
use serde_json::value::Value;
use sidekiq::{create_redis_pool, Client, ClientOpts, Job};
use time::{Duration, OffsetDateTime};
fn args() -> Vec<Value> {
let value = json!({
"code": 200,
"success": true,
"payload": {
"features": [
"serde",
"json"
]
}
});
let args: Vec<Value> = vec![value];
args
}
fn get_client() -> Client {
let ns = "test";
let client_opts = ClientOpts {
namespace: Some(ns.to_string()),
};
let pool = create_redis_pool().unwrap();
Client::new(pool, client_opts)
}
fn time_ok(time: u64) -> bool {
let now = SystemTime::now()
.duration_since(UNIX_EPOCH)
.unwrap()
.as_secs() as u64;
now >= time
}
#[test]
fn test_job_format_with_default() {
let class = "Maman".to_string();
let job = Job::new(class.clone(), args(), Default::default());
assert_eq!(job.class, class);
assert_eq!(job.retry, 25);
assert_eq!(job.jid.len(), 24);
assert_eq!(job.queue, "default".to_string());
assert!(time_ok(job.created_at));
assert!(time_ok(job.enqueued_at));
}
#[test]
fn test_client_push_single() {
let class = "Maman".to_string();
let job = Job::new(class, args(), Default::default());
let client = get_client();
match client.push(job) {
Ok(_) => {}
Err(err) => {
println!("Sidekiq push failed: {}", err);
unreachable!()
}
}
}
#[test]
fn test_client_push_bulk() {
let class = "Maman".to_string();
let jobs = &vec![
Job::new(class.clone(), args(), Default::default()),
Job::new(class, args(), Default::default()),
];
let client = get_client();
match client.push_bulk(jobs) {
Ok(_) => {}
Err(err) => {
println!("Sidekiq push failed: {}", err);
unreachable!()
}
};
}
#[test]
fn test_client_perform_in() {
let class = "Maman".to_string();
let job = Job::new(class, args(), Default::default());
let client = get_client();
let interval = Duration::minutes(1);
match client.perform_in(interval, job) {
Ok(_) => {}
Err(err) => {
println!("Sidekiq push failed: {}", err);
unreachable!()
}
}
}
#[test]
fn test_client_perform_at() {
let class = "Maman".to_string();
let job = Job::new(class, args(), Default::default());
let client = get_client();
let start_at = OffsetDateTime::now_utc()
.checked_add(Duration::MINUTE)
.unwrap();
match client.perform_at(start_at, job) {
Ok(_) => {}
Err(err) => {
println!("Sidekiq push failed: {}", err);
unreachable!()
}
}
}