Skip to content

Commit 18b0f07

Browse files
committed
address PR review
* add unit tests for miner_db * use thiserror From
1 parent 52680cb commit 18b0f07

File tree

3 files changed

+95
-14
lines changed

3 files changed

+95
-14
lines changed

stacks-signer/src/client/stackerdb.rs

Lines changed: 12 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -171,8 +171,7 @@ impl<M: MessageSlotID + 'static> StackerDB<M> {
171171
loop {
172172
let slot_version = self
173173
.signer_db
174-
.get_latest_chunk_version(&signer_pk, slot_id.0)
175-
.map_err(ClientError::SignerDBError)?
174+
.get_latest_chunk_version(&signer_pk, slot_id.0)?
176175
.map(|x| x.saturating_add(1))
177176
.unwrap_or(0);
178177

@@ -194,8 +193,7 @@ impl<M: MessageSlotID + 'static> StackerDB<M> {
194193
if chunk_ack.accepted {
195194
debug!("Chunk accepted by stackerdb: {chunk_ack:?}");
196195
self.signer_db
197-
.set_latest_chunk_version(&signer_pk, slot_id.0, slot_version)
198-
.map_err(ClientError::SignerDBError)?;
196+
.set_latest_chunk_version(&signer_pk, slot_id.0, slot_version)?;
199197
return Ok(chunk_ack);
200198
} else {
201199
warn!("Chunk rejected by stackerdb: {chunk_ack:?}");
@@ -205,18 +203,18 @@ impl<M: MessageSlotID + 'static> StackerDB<M> {
205203
Some(StackerDBErrorCodes::DataAlreadyExists) => {
206204
if let Some(slot_metadata) = chunk_ack.metadata {
207205
warn!("Failed to send message to stackerdb due to wrong version number. Attempted {}. Expected {}. Retrying...", slot_version, slot_metadata.slot_version);
208-
self.signer_db
209-
.set_latest_chunk_version(
210-
&signer_pk,
211-
slot_id.0,
212-
slot_metadata.slot_version,
213-
)
214-
.map_err(ClientError::SignerDBError)?;
206+
self.signer_db.set_latest_chunk_version(
207+
&signer_pk,
208+
slot_id.0,
209+
slot_metadata.slot_version,
210+
)?;
215211
} else {
216212
warn!("Failed to send message to stackerdb due to wrong version number. Attempted {}. Expected unknown version number. Incrementing and retrying...", slot_version);
217-
self.signer_db
218-
.set_latest_chunk_version(&signer_pk, slot_id.0, slot_version)
219-
.map_err(ClientError::SignerDBError)?;
213+
self.signer_db.set_latest_chunk_version(
214+
&signer_pk,
215+
slot_id.0,
216+
slot_version,
217+
)?;
220218
}
221219
}
222220
_ => {

testnet/stacks-node/src/nakamoto_node.rs

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,9 @@ pub mod relayer;
4949
pub mod signer_coordinator;
5050
pub mod stackerdb_listener;
5151

52+
#[cfg(test)]
53+
mod tests;
54+
5255
use self::peer::PeerThread;
5356
use self::relayer::{RelayerDirective, RelayerThread};
5457

Lines changed: 80 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,80 @@
1+
// Copyright (C) 2025 Stacks Open Internet Foundation
2+
//
3+
// This program is free software: you can redistribute it and/or modify
4+
// it under the terms of the GNU General Public License as published by
5+
// the Free Software Foundation, either version 3 of the License, or
6+
// (at your option) any later version.
7+
//
8+
// This program is distributed in the hope that it will be useful,
9+
// but WITHOUT ANY WARRANTY; without even the implied warranty of
10+
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11+
// GNU General Public License for more details.
12+
//
13+
// You should have received a copy of the GNU General Public License
14+
// along with this program. If not, see <http://www.gnu.org/licenses/>.
15+
16+
use stacks::types::chainstate::{StacksPrivateKey, StacksPublicKey};
17+
18+
use super::miner_db::MinerDB;
19+
20+
#[test]
21+
fn miner_db_units() {
22+
let miner_db = MinerDB::open(":memory:").unwrap();
23+
let sk_0 = StacksPrivateKey::from_seed(&[0, 1, 2, 0]);
24+
let pk_0 = StacksPublicKey::from_private(&sk_0);
25+
let sk_1 = StacksPrivateKey::from_seed(&[1, 2, 0, 1]);
26+
let pk_1 = StacksPublicKey::from_private(&sk_1);
27+
assert_eq!(miner_db.get_latest_chunk_version(&pk_0, 0).unwrap(), None);
28+
assert_eq!(miner_db.get_latest_chunk_version(&pk_0, 1).unwrap(), None);
29+
assert_eq!(miner_db.get_latest_chunk_version(&pk_1, 0).unwrap(), None);
30+
assert_eq!(miner_db.get_latest_chunk_version(&pk_1, 1).unwrap(), None);
31+
32+
miner_db.set_latest_chunk_version(&pk_0, 0, 10).unwrap();
33+
miner_db.set_latest_chunk_version(&pk_0, 1, 20).unwrap();
34+
miner_db.set_latest_chunk_version(&pk_1, 0, 30).unwrap();
35+
miner_db.set_latest_chunk_version(&pk_1, 1, 40).unwrap();
36+
37+
assert_eq!(
38+
miner_db.get_latest_chunk_version(&pk_0, 0).unwrap(),
39+
Some(10)
40+
);
41+
assert_eq!(
42+
miner_db.get_latest_chunk_version(&pk_0, 1).unwrap(),
43+
Some(20)
44+
);
45+
assert_eq!(
46+
miner_db.get_latest_chunk_version(&pk_1, 0).unwrap(),
47+
Some(30)
48+
);
49+
assert_eq!(
50+
miner_db.get_latest_chunk_version(&pk_1, 1).unwrap(),
51+
Some(40)
52+
);
53+
54+
miner_db.set_latest_chunk_version(&pk_0, 0, 110).unwrap();
55+
miner_db.set_latest_chunk_version(&pk_0, 1, 120).unwrap();
56+
miner_db.set_latest_chunk_version(&pk_1, 0, 130).unwrap();
57+
miner_db.set_latest_chunk_version(&pk_1, 1, 140).unwrap();
58+
59+
assert_eq!(
60+
miner_db.get_latest_chunk_version(&pk_0, 0).unwrap(),
61+
Some(110)
62+
);
63+
assert_eq!(
64+
miner_db.get_latest_chunk_version(&pk_0, 1).unwrap(),
65+
Some(120)
66+
);
67+
assert_eq!(
68+
miner_db.get_latest_chunk_version(&pk_1, 0).unwrap(),
69+
Some(130)
70+
);
71+
assert_eq!(
72+
miner_db.get_latest_chunk_version(&pk_1, 1).unwrap(),
73+
Some(140)
74+
);
75+
76+
assert_eq!(miner_db.get_latest_chunk_version(&pk_0, 10).unwrap(), None);
77+
assert_eq!(miner_db.get_latest_chunk_version(&pk_0, 11).unwrap(), None);
78+
assert_eq!(miner_db.get_latest_chunk_version(&pk_1, 10).unwrap(), None);
79+
assert_eq!(miner_db.get_latest_chunk_version(&pk_1, 11).unwrap(), None);
80+
}

0 commit comments

Comments
 (0)