Skip to content

Commit f92dbfc

Browse files
committed
test: add some handler tests
* gRPC: get_nodes, delete_node, set_alias, get_pools * BeeMsg: get_nodes, authenticate_channel
1 parent 1c3d647 commit f92dbfc

File tree

7 files changed

+277
-0
lines changed

7 files changed

+277
-0
lines changed

mgmtd/src/app/test.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
use super::*;
22
use crate::config::Config;
33
use shared::bee_msg::MsgId;
4+
pub use shared::conn::msg_dispatch::test::TestRequest;
45
use shared::nic::Nic;
56
use shared::types::{AuthSecret, NicType};
67
use sqlite::Connections;

mgmtd/src/bee_msg/authenticate_channel.rs

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,3 +22,24 @@ impl HandleNoResponse for AuthenticateChannel {
2222
Ok(())
2323
}
2424
}
25+
26+
#[cfg(test)]
27+
mod test {
28+
use super::*;
29+
use crate::app::test::*;
30+
31+
#[tokio::test]
32+
async fn authenticate_channel() {
33+
let app = TestApp::new().await;
34+
let mut req = TestRequest::new(AuthenticateChannel::ID);
35+
36+
AuthenticateChannel {
37+
auth_secret: AuthSecret::hash_from_bytes("secret"),
38+
}
39+
.handle(&app, &mut req)
40+
.await
41+
.unwrap();
42+
43+
assert!(req.authenticate_connection);
44+
}
45+
}

mgmtd/src/bee_msg/get_nodes.rs

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -56,3 +56,26 @@ impl HandleWithResponse for GetNodes {
5656
Ok(resp)
5757
}
5858
}
59+
60+
#[cfg(test)]
61+
mod test {
62+
use super::*;
63+
use crate::app::test::*;
64+
65+
#[tokio::test]
66+
async fn get_nodes() {
67+
let app = TestApp::new().await;
68+
let mut req = TestRequest::new(GetNodes::ID);
69+
70+
let resp = GetNodes {
71+
node_type: NodeType::Meta,
72+
}
73+
.handle(&app, &mut req)
74+
.await
75+
.unwrap();
76+
77+
assert_eq_db!(app, "SELECT COUNT(*) FROM meta_nodes", [], resp.nodes.len());
78+
assert_eq!(resp.root_num_id, 1);
79+
assert_eq!(resp.is_root_mirrored, 0);
80+
}
81+
}

mgmtd/src/grpc/delete_node.rs

Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -94,3 +94,50 @@ pub(crate) async fn delete_node(
9494
node: Some(node.into()),
9595
})
9696
}
97+
#[cfg(test)]
98+
mod test {
99+
use super::*;
100+
use crate::app::test::*;
101+
102+
#[tokio::test]
103+
async fn delete_node() {
104+
let h = TestApp::new().await;
105+
let mut req = pm::DeleteNodeRequest {
106+
node: Some(pb::EntityIdSet {
107+
uid: None,
108+
alias: None,
109+
legacy_id: Some(pb::LegacyId {
110+
num_id: 1,
111+
node_type: pb::NodeType::Management.into(),
112+
}),
113+
}),
114+
execute: Some(true),
115+
};
116+
117+
// Can't delete management node
118+
super::delete_node(&h, req.clone()).await.unwrap_err();
119+
120+
// Can't delete meta buddy group member target (which is on the node)
121+
req.node.as_mut().unwrap().uid = None;
122+
req.node.as_mut().unwrap().legacy_id = Some(pb::LegacyId {
123+
num_id: 1,
124+
node_type: pb::NodeType::Meta.into(),
125+
});
126+
super::delete_node(&h, req.clone()).await.unwrap_err();
127+
128+
// Delete empty node
129+
req.node.as_mut().unwrap().legacy_id = Some(pb::LegacyId {
130+
num_id: 99,
131+
node_type: pb::NodeType::Meta.into(),
132+
});
133+
let resp = super::delete_node(&h, req.clone()).await.unwrap();
134+
135+
assert_eq!(resp.node.unwrap().legacy_id.unwrap().num_id, 99);
136+
assert_eq_db!(
137+
h,
138+
"SELECT COUNT(*) FROM nodes WHERE node_id = ?1 AND node_type = ?2",
139+
[99, NodeType::Meta.sql_variant()],
140+
0
141+
);
142+
}
143+
}

mgmtd/src/grpc/get_nodes.rs

Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -159,3 +159,50 @@ pub(crate) async fn get_nodes(
159159
fs_uuid,
160160
})
161161
}
162+
#[cfg(test)]
163+
mod test {
164+
use super::*;
165+
use crate::app::test::*;
166+
167+
#[tokio::test]
168+
async fn get_nodes() {
169+
let app = TestApp::new().await;
170+
171+
let res = super::get_nodes(
172+
&app,
173+
pm::GetNodesRequest {
174+
include_nics: false,
175+
},
176+
)
177+
.await
178+
.unwrap();
179+
180+
assert_eq!(res.nodes.len(), 14);
181+
assert!(res.nodes.iter().all(|e| e.nics.is_empty()));
182+
183+
let res = super::get_nodes(&app, pm::GetNodesRequest { include_nics: true })
184+
.await
185+
.unwrap();
186+
187+
assert_eq!(res.nodes.len(), 14);
188+
assert_eq!(
189+
res.nodes
190+
.iter()
191+
.find(|e| e.id.as_ref().unwrap().uid() == 101001)
192+
.unwrap()
193+
.nics
194+
.len(),
195+
4
196+
);
197+
assert_eq!(
198+
res.nodes
199+
.iter()
200+
.find(|e| e.id.as_ref().unwrap().uid() == 103004)
201+
.unwrap()
202+
.nics
203+
.len(),
204+
2
205+
);
206+
assert_eq!(res.meta_root_node.unwrap().uid.unwrap(), 101001);
207+
}
208+
}

mgmtd/src/grpc/get_pools.rs

Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -131,3 +131,51 @@ pub(crate) async fn get_pools(
131131

132132
Ok(pm::GetPoolsResponse { pools })
133133
}
134+
135+
#[cfg(test)]
136+
mod test {
137+
use super::*;
138+
use crate::app::test::*;
139+
140+
#[tokio::test]
141+
async fn get_pools() {
142+
let app = TestApp::new().await;
143+
144+
let resp = super::get_pools(
145+
&app,
146+
pm::GetPoolsRequest {
147+
with_quota_limits: true,
148+
},
149+
)
150+
.await
151+
.unwrap();
152+
153+
assert_eq!(resp.pools.len(), 4);
154+
155+
let default_pool = resp
156+
.pools
157+
.iter()
158+
.find(|e| e.id.as_ref().unwrap().legacy_id.as_ref().unwrap().num_id == 1)
159+
.unwrap();
160+
161+
assert_eq!(default_pool.targets.len(), 5);
162+
assert_eq!(default_pool.buddy_groups.len(), 2);
163+
assert_eq!(default_pool.user_space_limit.unwrap(), 1000);
164+
assert_eq!(default_pool.user_inode_limit.unwrap(), 1000);
165+
assert_eq!(default_pool.group_space_limit.unwrap(), 1000);
166+
assert_eq!(default_pool.group_inode_limit.unwrap(), 1000);
167+
168+
let other_pool = resp
169+
.pools
170+
.iter()
171+
.find(|e| e.id.as_ref().unwrap().legacy_id.as_ref().unwrap().num_id == 2)
172+
.unwrap();
173+
174+
assert_eq!(other_pool.targets.len(), 4);
175+
assert_eq!(other_pool.buddy_groups.len(), 0);
176+
assert_eq!(other_pool.user_space_limit.unwrap(), -1);
177+
assert_eq!(other_pool.user_inode_limit.unwrap(), -1);
178+
assert_eq!(other_pool.group_space_limit.unwrap(), -1);
179+
assert_eq!(other_pool.group_inode_limit.unwrap(), -1);
180+
}
181+
}

mgmtd/src/grpc/set_alias.rs

Lines changed: 90 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -86,3 +86,93 @@ pub(crate) async fn set_alias(
8686

8787
Ok(pm::SetAliasResponse {})
8888
}
89+
90+
#[cfg(test)]
91+
mod test {
92+
use super::*;
93+
use crate::app::test::*;
94+
95+
#[tokio::test]
96+
async fn set_alias() {
97+
let app = TestApp::new().await;
98+
99+
// Nonexisting entity
100+
super::set_alias(
101+
&app,
102+
pm::SetAliasRequest {
103+
entity_id: Some(EntityId::Uid(99999999).into()),
104+
entity_type: pb::EntityType::Node.into(),
105+
new_alias: "new_alias".to_string(),
106+
},
107+
)
108+
.await
109+
.unwrap_err();
110+
111+
// Invalid entity_type / entity_id combination
112+
super::set_alias(
113+
&app,
114+
pm::SetAliasRequest {
115+
entity_id: Some(EntityId::Uid(101001).into()),
116+
entity_type: pb::EntityType::Target.into(),
117+
new_alias: "new_alias".to_string(),
118+
},
119+
)
120+
.await
121+
.unwrap_err();
122+
123+
// Alias already in use
124+
super::set_alias(
125+
&app,
126+
pm::SetAliasRequest {
127+
entity_id: Some(EntityId::Alias("meta_node_1".try_into().unwrap()).into()),
128+
entity_type: pb::EntityType::Node.into(),
129+
new_alias: "meta_node_2".to_string(),
130+
},
131+
)
132+
.await
133+
.unwrap_err();
134+
135+
// Deny setting client aliases
136+
super::set_alias(
137+
&app,
138+
pm::SetAliasRequest {
139+
entity_id: Some(
140+
EntityId::LegacyID(LegacyId {
141+
node_type: NodeType::Client,
142+
num_id: 1,
143+
})
144+
.into(),
145+
),
146+
entity_type: pb::EntityType::Node.into(),
147+
new_alias: "new_alias".to_string(),
148+
},
149+
)
150+
.await
151+
.unwrap_err();
152+
153+
// Success
154+
super::set_alias(
155+
&app,
156+
pm::SetAliasRequest {
157+
entity_id: Some(EntityId::Uid(101001).into()),
158+
entity_type: pb::EntityType::Node.into(),
159+
new_alias: "new_alias".to_string(),
160+
},
161+
)
162+
.await
163+
.unwrap();
164+
165+
assert!(app.has_sent_notification::<Heartbeat>(&[
166+
NodeType::Meta,
167+
NodeType::Storage,
168+
NodeType::Client,
169+
]));
170+
171+
assert_eq_db!(
172+
app,
173+
"SELECT alias FROM entities WHERE uid = ?1",
174+
[101001],
175+
"new_alias"
176+
);
177+
}
178+
}

0 commit comments

Comments
 (0)