K2V: Fix end parameter and add tests (fix #305)

This commit is contained in:
Alex Auvolat 2022-05-17 11:50:23 +02:00
parent 7b474855e3
commit c692f55d5c
No known key found for this signature in database
GPG Key ID: 0E496D15096376BE
2 changed files with 93 additions and 2 deletions

View File

@ -74,7 +74,11 @@ where
} }
} }
if let Some(e) = end { if let Some(e) = end {
if entry.sort_key() == e { let is_finished = match enumeration_order {
EnumerationOrder::Forward => entry.sort_key() >= e,
EnumerationOrder::Reverse => entry.sort_key() <= e,
};
if is_finished {
return Ok((entries, false, None)); return Ok((entries, false, None));
} }
} }

View File

@ -92,7 +92,9 @@ async fn test_batch() {
br#"[ br#"[
{"partitionKey": "root"}, {"partitionKey": "root"},
{"partitionKey": "root", "start": "c"}, {"partitionKey": "root", "start": "c"},
{"partitionKey": "root", "start": "c", "end": "dynamite"},
{"partitionKey": "root", "start": "c", "reverse": true, "end": "a"}, {"partitionKey": "root", "start": "c", "reverse": true, "end": "a"},
{"partitionKey": "root", "start": "c", "reverse": true, "end": "azerty"},
{"partitionKey": "root", "limit": 1}, {"partitionKey": "root", "limit": 1},
{"partitionKey": "root", "prefix": "d"} {"partitionKey": "root", "prefix": "d"}
]"# ]"#
@ -147,6 +149,24 @@ async fn test_batch() {
"more": false, "more": false,
"nextStart": null, "nextStart": null,
}, },
{
"partitionKey": "root",
"prefix": null,
"start": "c",
"end": "dynamite",
"limit": null,
"reverse": false,
"conflictsOnly": false,
"tombstones": false,
"singleItem": false,
"items": [
{"sk": "c", "ct": ct.get("c").unwrap(), "v": [base64::encode(values.get("c").unwrap())]},
{"sk": "d.1", "ct": ct.get("d.1").unwrap(), "v": [base64::encode(values.get("d.1").unwrap())]},
{"sk": "d.2", "ct": ct.get("d.2").unwrap(), "v": [base64::encode(values.get("d.2").unwrap())]},
],
"more": false,
"nextStart": null,
},
{ {
"partitionKey": "root", "partitionKey": "root",
"prefix": null, "prefix": null,
@ -164,6 +184,23 @@ async fn test_batch() {
"more": false, "more": false,
"nextStart": null, "nextStart": null,
}, },
{
"partitionKey": "root",
"prefix": null,
"start": "c",
"end": "azerty",
"limit": null,
"reverse": true,
"conflictsOnly": false,
"tombstones": false,
"singleItem": false,
"items": [
{"sk": "c", "ct": ct.get("c").unwrap(), "v": [base64::encode(values.get("c").unwrap())]},
{"sk": "b", "ct": ct.get("b").unwrap(), "v": [base64::encode(values.get("b").unwrap())]},
],
"more": false,
"nextStart": null,
},
{ {
"partitionKey": "root", "partitionKey": "root",
"prefix": null, "prefix": null,
@ -465,6 +502,34 @@ async fn test_batch() {
]) ])
); );
// update our known tombstones
for sk in ["a", "b", "d.1", "d.2"] {
let res = ctx
.k2v
.request
.builder(bucket.clone())
.path("root")
.query_param("sort_key", Some(sk))
.signed_header("accept", "application/octet-stream")
.send()
.await
.unwrap();
assert_eq!(res.status(), 204);
assert_eq!(
res.headers().get("content-type").unwrap().to_str().unwrap(),
"application/octet-stream"
);
ct.insert(
sk,
res.headers()
.get("x-garage-causality-token")
.unwrap()
.to_str()
.unwrap()
.to_string(),
);
}
let res = ctx let res = ctx
.k2v .k2v
.request .request
@ -473,7 +538,8 @@ async fn test_batch() {
.body( .body(
br#"[ br#"[
{"partitionKey": "root"}, {"partitionKey": "root"},
{"partitionKey": "root", "reverse": true} {"partitionKey": "root", "reverse": true},
{"partitionKey": "root", "tombstones": true}
]"# ]"#
.to_vec(), .to_vec(),
) )
@ -520,6 +586,27 @@ async fn test_batch() {
"more": false, "more": false,
"nextStart": null, "nextStart": null,
}, },
{
"partitionKey": "root",
"prefix": null,
"start": null,
"end": null,
"limit": null,
"reverse": false,
"conflictsOnly": false,
"tombstones": true,
"singleItem": false,
"items": [
{"sk": "a", "ct": ct.get("a").unwrap(), "v": [null]},
{"sk": "b", "ct": ct.get("b").unwrap(), "v": [null]},
{"sk": "c", "ct": ct.get("c").unwrap(), "v": [base64::encode(values.get("c").unwrap()), base64::encode(values.get("c'").unwrap())]},
{"sk": "d.1", "ct": ct.get("d.1").unwrap(), "v": [null]},
{"sk": "d.2", "ct": ct.get("d.2").unwrap(), "v": [null]},
{"sk": "e", "ct": ct.get("e").unwrap(), "v": [base64::encode(values.get("e").unwrap())]},
],
"more": false,
"nextStart": null,
},
]) ])
); );
} }