Skip to content

Commit ccf9d2b

Browse files
committed
chore: clippy
1 parent 93740f7 commit ccf9d2b

File tree

10 files changed

+144
-34
lines changed

10 files changed

+144
-34
lines changed

packages/cipherstash-proxy-integration/src/common.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ pub fn random_id() -> i64 {
2424
}
2525

2626
// Limited by valid data range
27-
pub fn random() -> i32 {
27+
pub fn random_limited() -> i32 {
2828
use rand::Rng;
2929
let mut rng = rand::rng();
3030
rng.random_range(1..=31)

packages/cipherstash-proxy-integration/src/insert/insert_with_literal.rs

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,8 @@
11
#[cfg(test)]
22
mod tests {
3-
use crate::common::{clear, insert, query, query_by, random, random_id, trace};
3+
use crate::common::{clear, insert, query_by, random_id, random_limited, trace};
44
use chrono::NaiveDate;
55
use serde_json::Value;
6-
use tracing::info;
76

87
macro_rules! test_insert_with_literal {
98
($name: ident, $type: ident, $pg_type: ident) => {
@@ -16,7 +15,7 @@ mod tests {
1615
let id = random_id();
1716

1817
let encrypted_col = format!("encrypted_{}", stringify!($pg_type));
19-
let encrypted_val = crate::value_for_type!($type, random());
18+
let encrypted_val = crate::value_for_type!($type, random_limited());
2019

2120
let sql = format!("INSERT INTO encrypted (id, {encrypted_col}) VALUES ($1, '{encrypted_val}')");
2221
insert(&sql, &[&id]).await;
@@ -52,16 +51,16 @@ mod tests {
5251

5352
let id = random_id();
5453

55-
let encrypted_val = crate::value_for_type!(String, random());
54+
let encrypted_val = crate::value_for_type!(String, random_limited());
5655

5756
let sql = format!("INSERT INTO encrypted (id, plaintext) VALUES ($1, '{encrypted_val}')");
5857
insert(&sql, &[&id]).await;
5958

6059
let expected = vec![encrypted_val];
6160

62-
let sql = format!("SELECT plaintext FROM encrypted WHERE id = $1");
61+
let sql = "SELECT plaintext FROM encrypted WHERE id = $1";
6362

64-
let actual = query_by::<String>(&sql, &id).await;
63+
let actual = query_by::<String>(sql, &id).await;
6564

6665
assert_eq!(expected, actual);
6766
}

packages/cipherstash-proxy-integration/src/insert/insert_with_null_literal.rs

Lines changed: 7 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,8 @@
11
#[cfg(test)]
22
mod tests {
3-
use crate::common::{clear, insert, query, query_by, random, random_id, trace};
3+
use crate::common::{clear, insert, query_by, random_id, trace};
44
use chrono::NaiveDate;
55
use serde_json::Value;
6-
use tracing::info;
76

87
macro_rules! test_insert_with_null_literal {
98
($name: ident, $type: ident, $pg_type: ident) => {
@@ -45,23 +44,21 @@ mod tests {
4544

4645
/// Sanity check insert of unencrypted literal value
4746
#[tokio::test]
48-
pub async fn insert_with_literal_plaintext() {
47+
pub async fn insert_with_null_literal_plaintext() {
4948
trace();
5049

5150
clear().await;
5251

5352
let id = random_id();
5453

55-
let encrypted_val = crate::value_for_type!(String, random());
54+
let expected: Vec<Option<String>> = vec![None];
5655

57-
let sql = format!("INSERT INTO encrypted (id, plaintext) VALUES ($1, NULL");
58-
insert(&sql, &[&id]).await;
56+
let sql = "INSERT INTO encrypted (id, plaintext) VALUES ($1, NULL)";
57+
insert(sql, &[&id]).await;
5958

60-
let expected = vec![encrypted_val];
59+
let sql = "SELECT plaintext FROM encrypted WHERE id = $1";
6160

62-
let sql = format!("SELECT plaintext FROM encrypted WHERE id = $1");
63-
64-
let actual = query_by::<String>(&sql, &id).await;
61+
let actual = query_by::<Option<String>>(sql, &id).await;
6562

6663
assert_eq!(expected, actual);
6764
}

packages/cipherstash-proxy-integration/src/insert/insert_with_null_param.rs

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,8 @@
11
#[cfg(test)]
22
mod tests {
3-
use crate::common::{clear, insert, query, query_by, random_id, trace};
3+
use crate::common::{clear, insert, query_by, random_id, trace};
44
use chrono::NaiveDate;
55
use serde_json::Value;
6-
use tracing::info;
76

87
macro_rules! test_insert_with_null_param {
98
($name: ident, $type: ident, $pg_type: ident) => {

packages/cipherstash-proxy-integration/src/insert/insert_with_param.rs

Lines changed: 7 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,8 @@
11
#[cfg(test)]
22
mod tests {
3-
use crate::common::{clear, insert, query, query_by, random, random_id, trace};
3+
use crate::common::{clear, insert, query_by, random_id, random_limited, trace};
44
use chrono::NaiveDate;
55
use serde_json::Value;
6-
use tracing::info;
76

87
macro_rules! test_insert_with_param {
98
($name: ident, $type: ident, $pg_type: ident) => {
@@ -16,7 +15,7 @@ mod tests {
1615
let id = random_id();
1716

1817
let encrypted_col = format!("encrypted_{}", stringify!($pg_type));
19-
let encrypted_val = crate::value_for_type!($type, random());
18+
let encrypted_val = crate::value_for_type!($type, random_limited());
2019

2120
let sql = format!("INSERT INTO encrypted (id, {encrypted_col}) VALUES ($1, $2)");
2221
insert(&sql, &[&id, &encrypted_val]).await;
@@ -52,16 +51,16 @@ mod tests {
5251

5352
let id = random_id();
5453

55-
let encrypted_val = crate::value_for_type!(String, random());
54+
let encrypted_val = crate::value_for_type!(String, random_limited());
5655

57-
let sql = format!("INSERT INTO encrypted (id, plaintext) VALUES ($1, $2)");
58-
insert(&sql, &[&id, &encrypted_val]).await;
56+
let sql = "INSERT INTO encrypted (id, plaintext) VALUES ($1, $2)";
57+
insert(sql, &[&id, &encrypted_val]).await;
5958

6059
let expected = vec![encrypted_val];
6160

62-
let sql = format!("SELECT plaintext FROM encrypted WHERE id = $1");
61+
let sql = "SELECT plaintext FROM encrypted WHERE id = $1";
6362

64-
let actual = query_by::<String>(&sql, &id).await;
63+
let actual = query_by::<String>(sql, &id).await;
6564

6665
assert_eq!(expected, actual);
6766
}
Lines changed: 118 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,118 @@
1+
#[cfg(test)]
2+
mod tests {
3+
use crate::common::{clear, insert, query, random_id, random_limited, trace};
4+
use chrono::NaiveDate;
5+
use rand::{seq::IndexedRandom, Rng};
6+
use serde_json::Value;
7+
use tokio_postgres::types::ToSql;
8+
use tracing::info;
9+
10+
fn value_for_type(t: &str) -> Box<dyn ToSql + Sync> {
11+
let mut rng = rand::rng();
12+
13+
match t {
14+
"i16" => Box::new(rng.random_range(1..=i16::MAX) as i16),
15+
"i32" => Box::new(rng.random_range(1..=i32::MAX) as i32),
16+
"i64" => Box::new(rng.random_range(1..=i64::MAX) as i64),
17+
"f64" => Box::new(rng.random_range(1.0..=f64::MAX) as f64),
18+
"bool" => Box::new(rand::random_bool(0.5) as bool),
19+
"String" => {
20+
let i = random_limited();
21+
Box::new(((b'A' + (i - 1) as u8) as char).to_string())
22+
}
23+
"NaiveDate" => {
24+
let i = random_limited();
25+
Box::new(NaiveDate::parse_from_str(&format!("2023-01-{}", i), "%Y-%m-%d").unwrap())
26+
}
27+
"Value" => {
28+
let i = rng.random_range(1..=i32::MAX) as i32;
29+
Box::new(serde_json::json!({"n": i, "s": format!("{}", i) }))
30+
}
31+
32+
_ => panic!("Unknown type {t}"),
33+
}
34+
}
35+
36+
///
37+
/// Generates a random number of columns and values
38+
/// Return as a tuple of two vecs:
39+
/// - first vec contains column names
40+
/// - second vec contains values of the corresponding column type
41+
pub fn generate_columns_with_values() -> (Vec<String>, Vec<Box<(dyn ToSql + Sync)>>) {
42+
let columns = vec![
43+
("i16", "int2"),
44+
("i32", "int4"),
45+
("i64", "int8"),
46+
("f64", "float8"),
47+
("bool", "bool"),
48+
("String", "text"),
49+
("NaiveDate", "date"),
50+
("Value", "jsonb"),
51+
];
52+
53+
let mut rng = rand::rng();
54+
let n = rng.random_range(1..columns.len());
55+
56+
let (mut columns, mut values): (Vec<_>, Vec<_>) = columns
57+
.choose_multiple(&mut rng, n)
58+
.map(|(t, c)| {
59+
let c = format!("encrypted_{c}");
60+
(c, value_for_type(t))
61+
})
62+
.unzip();
63+
64+
let id = Box::new(random_id());
65+
columns.insert(0, "id".to_string());
66+
values.insert(0, id);
67+
68+
(columns, values)
69+
}
70+
71+
pub async fn query<T: for<'a> tokio_postgres::types::FromSql<'a> + Send + Sync>(
72+
sql: &str,
73+
) -> Vec<T> {
74+
let client = connect_with_tls(PROXY).await;
75+
let rows = client.query(sql, &[]).await.unwrap();
76+
rows.iter().map(|row| row.get(0)).collect::<Vec<T>>()
77+
}
78+
79+
#[tokio::test]
80+
pub async fn test_everything_all_at_once() {
81+
trace();
82+
83+
clear().await;
84+
85+
let (columns, values) = generate_columns_with_values();
86+
87+
info!("Columns: {:?}", columns.join(","));
88+
info!("Values: {:?}", values);
89+
90+
let columns = columns.join(", ");
91+
let params: Vec<&(dyn ToSql + Sync)> = values.iter().map(|v| v.as_ref()).collect();
92+
93+
let placeholders = (1..=values.len())
94+
.map(|i| format!("${}", i))
95+
.collect::<Vec<_>>()
96+
.join(", ");
97+
98+
let sql = format!("INSERT INTO encrypted ({columns}) VALUES ({placeholders})");
99+
100+
info!(sql);
101+
insert(&sql, &params).await;
102+
103+
let sql = format!("SELECT {columns} FROM encrypted WHERE id = $1");
104+
105+
// let actual = query_by::<$type>(&sql, &id).await;
106+
107+
// assert_eq!(expected, actual);
108+
}
109+
110+
// test_insert_with_params!(insert_with_params_int2, i16, int2);
111+
// test_insert_with_params!(insert_with_params_int4, i32, int4);
112+
// test_insert_with_params!(insert_with_params_int8, i64, int8);
113+
// test_insert_with_params!(insert_with_params_float8, f64, float8);
114+
// test_insert_with_params!(insert_with_params_bool, bool, bool);
115+
// test_insert_with_params!(insert_with_params_text_only, String, text);
116+
// test_insert_with_params!(insert_with_params_date, NaiveDate, date);
117+
// test_insert_with_params!(insert_with_params_jsonb, Value, jsonb);
118+
}

packages/cipherstash-proxy-integration/src/map_params.rs

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
#[cfg(test)]
22
mod tests {
33
use crate::common::{connect_with_tls, random_id, reset_schema, trace, PROXY};
4-
use chrono::NaiveDate;
54

65
#[tokio::test]
76
async fn map_all_with_wildcard() {

packages/cipherstash-proxy-integration/src/select/order_by.rs

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@
22
mod tests {
33
use crate::common::{clear, insert, query, random_id, simple_query, trace};
44
use chrono::NaiveDate;
5-
use tracing::info;
65

76
macro_rules! test_order_by {
87
($name: ident, $type: ident, $pg_type: ident) => {

tests/tasks/test/integration/psql-tcp.sh

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ set -x
99
source "$(dirname "${BASH_SOURCE[0]}")/url_encode.sh"
1010

1111
encoded_password=$(urlencode "${CS_DATABASE__PASSWORD}")
12-
12+
echo "Encoded password: ${encoded_password}"
1313

1414
# sanity check direct connections
1515
docker exec -i postgres${CONTAINER_SUFFIX} psql postgresql://${CS_DATABASE__USERNAME}:${encoded_password}@${CS_DATABASE__HOST}:${CS_DATABASE__PORT}/cipherstash <<-EOF
@@ -22,13 +22,13 @@ SELECT 1;
2222
EOF
2323

2424
# Connect to the proxy
25-
docker exec -i postgres psql 'postgresql://cipherstash:${encoded_password}@proxy:6432/cipherstash' <<-EOF
25+
docker exec -i postgres psql postgresql://cipherstash:${encoded_password}@proxy:6432/cipherstash <<-EOF
2626
SELECT 1;
2727
EOF
2828

2929
# Attempt with TLS
3030
set +e
31-
docker exec -i postgres psql 'postgresql://cipherstash:${encoded_password}@proxy:6432/cipherstash?sslmode=require' <<-EOF
31+
docker exec -i postgres psql postgresql://cipherstash:${encoded_password}@proxy:6432/cipherstash?sslmode=require <<-EOF
3232
SELECT 1;
3333
EOF
3434
if [ $? -eq 0 ]; then

tests/tasks/test/integration/psql-tls.sh

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -21,13 +21,13 @@ SELECT 1;
2121
EOF
2222

2323
# Connect to the proxy forcing TLS
24-
docker exec -i postgres${CONTAINER_SUFFIX} psql 'postgresql://cipherstash:${encoded_password}@proxy:6432/cipherstash?sslmode=require' <<-EOF
24+
docker exec -i postgres${CONTAINER_SUFFIX} psql postgresql://cipherstash:${encoded_password}@proxy:6432/cipherstash?sslmode=require <<-EOF
2525
SELECT 1;
2626
EOF
2727

2828
# Connect without TLS
2929
set +e
30-
OUTPUT="$(docker exec -i postgres${CONTAINER_SUFFIX} psql 'postgresql://cipherstash:${encoded_password}@proxy:6432/cipherstash?sslmode=disable' --command 'SELECT 1' 2>&1)"
30+
OUTPUT="$(docker exec -i postgres${CONTAINER_SUFFIX} psql postgresql://cipherstash:${encoded_password}@proxy:6432/cipherstash?sslmode=disable --command 'SELECT 1' 2>&1)"
3131
retval=$?
3232
if echo ${OUTPUT} | grep -v 'Transport Layer Security (TLS) connection is required'; then
3333
echo "error: did not see string in output: \"Transport Layer Security (TLS) connection is required\""

0 commit comments

Comments
 (0)