Skip to content

Commit a0ac2fb

Browse files
committed
try toxiproxy in CI
1 parent 539922b commit a0ac2fb

File tree

2 files changed

+53
-8
lines changed

2 files changed

+53
-8
lines changed

.github/workflows/ci.yml

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,8 @@ on:
88

99
env:
1010
CARGO_TERM_COLOR: always
11+
TOXIPROXY_URL: http://0.0.0.0:8474
12+
MEMCACHED_ADDR: 127.0.0.1:11211
1113

1214
jobs:
1315
lint:
@@ -33,12 +35,26 @@ jobs:
3335
image: memcached:latest
3436
ports:
3537
- 11211:11211
38+
# toxiproxy:
39+
# image: ghcr.io/shopify/toxiproxy:latest
40+
# ports:
41+
# - 8474:8474
42+
# - 40000:11211
43+
# - 40001:11211
44+
# - 40002:11211
3645
steps:
3746
- uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7
47+
- name: Try running toxiproxy directly in main container
48+
run: |
49+
wget -qO toxiproxy_2.9.0.deb https://github.com/Shopify/toxiproxy/releases/download/v2.9.0/toxiproxy_2.9.0_linux_amd64.deb
50+
sudo dpkg -i toxiproxy_2.9.0.deb
51+
toxiproxy-server &
3852
- name: Run parser and connection tests
3953
run: cargo test --all-features
4054
- name: Run integration tests
4155
run: cargo test --test integration_tests -- --test-threads=1 --ignored
56+
- name: Run resiliency tests
57+
run: cargo test --test resiliency_tests -- --test-threads=1 --ignored
4258
build:
4359
runs-on: ubuntu-latest
4460
steps:

tests/resiliency_tests.rs

Lines changed: 37 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,6 @@ fn create_proxies_and_configs() -> (Vec<ProxyDrop>, String) {
3535
Some(v) => v.into_string().unwrap(),
3636
None => "http://127.0.0.1:8474".to_string(),
3737
};
38-
3938
toxiproxy_url = toxiproxy_url.strip_prefix("http://").unwrap().to_string();
4039

4140
// Create toxiproxy client and populate proxies
@@ -50,7 +49,7 @@ fn create_proxies_and_configs() -> (Vec<ProxyDrop>, String) {
5049
TOXI_ADDR.get_or_init(|| toxi_addr);
5150
});
5251

53-
let local_url = match std::env::var_os("NODE_LOCAL_CACHE") {
52+
let local_url = match std::env::var_os("MEMCACHED_ADDR") {
5453
Some(v) => v.into_string().unwrap(),
5554
None => "127.0.0.1:11211".to_string(), // use IPV4 so that it resolves to a single Server
5655
};
@@ -127,12 +126,26 @@ mod tests {
127126
let values = vec!["value1", "value2", "value3"];
128127
let kv: Vec<(&str, &str)> = keys.clone().into_iter().zip(values).collect();
129128

129+
let mut clean_client = rt.block_on(async {
130+
async_memcached::Client::new("tcp://127.0.0.1:11211".to_string())
131+
.await
132+
.unwrap()
133+
});
134+
135+
println!("toxic_local_url in test 1: {}", toxic_local_addr);
130136
let mut toxic_client =
131137
rt.block_on(async { async_memcached::Client::new(toxic_local_url).await.unwrap() });
132138

139+
let response = rt.block_on(async { clean_client.version().await });
140+
println!("test 1 version response from clean client: {:?}", response);
141+
assert!(response.is_ok());
142+
let response = rt.block_on(async { toxic_client.version().await });
143+
println!("test 1 version response from toxic client: {:?}", response);
144+
assert!(response.is_ok());
145+
133146
for key in &keys {
134-
let _ = rt.block_on(async { toxic_client.delete(key).await });
135-
let result = rt.block_on(async { toxic_client.get(key).await });
147+
let _ = rt.block_on(async { clean_client.delete(key).await });
148+
let result = rt.block_on(async { clean_client.get(key).await });
136149
assert_eq!(result, Ok(None));
137150
}
138151

@@ -179,12 +192,13 @@ mod tests {
179192
.unwrap()
180193
});
181194

195+
println!("toxic_local_url in test 2: {}", toxic_local_addr);
182196
let mut toxic_client =
183197
rt.block_on(async { async_memcached::Client::new(toxic_local_url).await.unwrap() });
184198

185199
for key in &keys {
186-
let _ = rt.block_on(async { toxic_client.delete(key).await });
187-
let result = rt.block_on(async { toxic_client.get(key).await });
200+
let _ = rt.block_on(async { clean_client.delete(key).await });
201+
let result = rt.block_on(async { clean_client.get(key).await });
188202
assert_eq!(result, Ok(None));
189203
}
190204

@@ -193,6 +207,13 @@ mod tests {
193207

194208
let byte_limit = multiset_command.len() - 10; // First two commands should be intact, last one cut off
195209

210+
let response = rt.block_on(async { clean_client.version().await });
211+
println!("test 2 version response from clean client: {:?}", response);
212+
assert!(response.is_ok());
213+
let response = rt.block_on(async { toxic_client.version().await });
214+
println!("test 2 version response from toxic client: {:?}", response);
215+
assert!(response.is_ok());
216+
196217
let _ = toxic_proxy
197218
.with_limit_data("upstream".into(), byte_limit as u32, 1.0)
198219
.apply(|| {
@@ -260,12 +281,20 @@ mod tests {
260281
.unwrap()
261282
});
262283

284+
println!("toxic_local_url in test 3: {}", toxic_local_addr);
263285
let mut toxic_client =
264286
rt.block_on(async { async_memcached::Client::new(toxic_local_url).await.unwrap() });
265287

288+
let response = rt.block_on(async { clean_client.version().await });
289+
println!("test 3 version response from clean client: {:?}", response);
290+
assert!(response.is_ok());
291+
let response = rt.block_on(async { toxic_client.version().await });
292+
println!("test 3 version response from toxic client: {:?}", response);
293+
assert!(response.is_ok());
294+
266295
for key in &keys {
267-
let _ = rt.block_on(async { toxic_client.delete(key).await });
268-
let result = rt.block_on(async { toxic_client.get(key).await });
296+
let _ = rt.block_on(async { clean_client.delete(key).await });
297+
let result = rt.block_on(async { clean_client.get(key).await });
269298
assert_eq!(result, Ok(None));
270299
}
271300

0 commit comments

Comments
 (0)