Skip to content

Commit 11d9ed7

Browse files
authored
feat(rust/signed-doc): *_wrong_role Catalyst Signed Documents integration tests (#381)
* more tests * fix spelling
1 parent 648ace3 commit 11d9ed7

File tree

3 files changed

+187
-3
lines changed

3 files changed

+187
-3
lines changed

rust/signed_doc/tests/comment.rs

Lines changed: 68 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,16 @@
55
use std::sync::LazyLock;
66

77
use catalyst_signed_doc::{
8-
doc_types::deprecated, providers::tests::TestCatalystSignedDocumentProvider, *,
8+
doc_types::deprecated,
9+
providers::tests::{TestCatalystSignedDocumentProvider, TestVerifyingKeyProvider},
10+
*,
911
};
12+
use catalyst_types::catalyst_id::role_index::RoleId;
13+
use ed25519_dalek::ed25519::signature::Signer;
14+
15+
use crate::common::create_dummy_key_pair;
16+
17+
mod common;
1018

1119
#[allow(clippy::unwrap_used)]
1220
static DUMMY_PROPOSAL_DOC: LazyLock<CatalystSignedDocument> = LazyLock::new(|| {
@@ -107,6 +115,10 @@ static COMMENT_REF_DOC: LazyLock<CatalystSignedDocument> = LazyLock::new(|| {
107115
// The rule requires that the `ref` field in `ref_doc` must match the `ref` field in `doc`
108116
#[tokio::test]
109117
async fn test_valid_comment_doc() {
118+
let (sk, pk, kid) = create_dummy_key_pair(RoleId::Role0).unwrap();
119+
let mut key_provider = TestVerifyingKeyProvider::default();
120+
key_provider.add_pk(kid.clone(), pk);
121+
110122
// Create a main comment doc, contain all fields mention in the document (except
111123
// revocations and section)
112124
let doc = Builder::new()
@@ -136,6 +148,8 @@ async fn test_valid_comment_doc() {
136148
.unwrap()
137149
.with_json_content(&serde_json::json!({}))
138150
.unwrap()
151+
.add_signature(|m| sk.sign(&m).to_vec(), kid)
152+
.unwrap()
139153
.build()
140154
.unwrap();
141155

@@ -147,6 +161,59 @@ async fn test_valid_comment_doc() {
147161

148162
let is_valid = validator::validate(&doc, &provider).await.unwrap();
149163
assert!(is_valid, "{:?}", doc.problem_report());
164+
165+
let is_valid = validator::validate_signatures(&doc, &key_provider)
166+
.await
167+
.unwrap();
168+
assert!(is_valid);
169+
}
170+
171+
#[tokio::test]
172+
async fn test_invalid_comment_doc_wrong_role() {
173+
let (sk, _pk, kid) = create_dummy_key_pair(RoleId::Proposer).unwrap();
174+
175+
// Create a main comment doc, contain all fields mention in the document (except
176+
// revocations and section)
177+
let doc = Builder::new()
178+
.with_json_metadata(serde_json::json!({
179+
"content-type": ContentType::Json.to_string(),
180+
"content-encoding": ContentEncoding::Brotli.to_string(),
181+
"type": doc_types::PROPOSAL_COMMENT.clone(),
182+
"id": UuidV7::new(),
183+
"ver": UuidV7::new(),
184+
"ref": {
185+
"id": DUMMY_PROPOSAL_DOC.doc_id().unwrap(),
186+
"ver": DUMMY_PROPOSAL_DOC.doc_ver().unwrap(),
187+
},
188+
"template": {
189+
"id": COMMENT_TEMPLATE_DOC.doc_id().unwrap(),
190+
"ver": COMMENT_TEMPLATE_DOC.doc_ver().unwrap(),
191+
},
192+
"reply": {
193+
"id": COMMENT_REF_DOC.doc_id().unwrap(),
194+
"ver": COMMENT_REF_DOC.doc_ver().unwrap()
195+
},
196+
"parameters": {
197+
"id": DUMMY_BRAND_DOC.doc_id().unwrap(),
198+
"ver": DUMMY_BRAND_DOC.doc_ver().unwrap(),
199+
}
200+
}))
201+
.unwrap()
202+
.with_json_content(&serde_json::json!({}))
203+
.unwrap()
204+
.add_signature(|m| sk.sign(&m).to_vec(), kid)
205+
.unwrap()
206+
.build()
207+
.unwrap();
208+
209+
let mut provider = TestCatalystSignedDocumentProvider::default();
210+
provider.add_document(None, &DUMMY_BRAND_DOC).unwrap();
211+
provider.add_document(None, &DUMMY_PROPOSAL_DOC).unwrap();
212+
provider.add_document(None, &COMMENT_REF_DOC).unwrap();
213+
provider.add_document(None, &COMMENT_TEMPLATE_DOC).unwrap();
214+
215+
let is_valid = validator::validate(&doc, &provider).await.unwrap();
216+
assert!(!is_valid, "{:?}", doc.problem_report());
150217
}
151218

152219
// The same as above but test with the old type

rust/signed_doc/tests/proposal.rs

Lines changed: 59 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,16 @@
55
use std::sync::LazyLock;
66

77
use catalyst_signed_doc::{
8-
doc_types::deprecated, providers::tests::TestCatalystSignedDocumentProvider, *,
8+
doc_types::deprecated,
9+
providers::tests::{TestCatalystSignedDocumentProvider, TestVerifyingKeyProvider},
10+
*,
911
};
12+
use catalyst_types::catalyst_id::role_index::RoleId;
13+
use ed25519_dalek::ed25519::signature::Signer;
14+
15+
use crate::common::create_dummy_key_pair;
16+
17+
mod common;
1018

1119
#[allow(clippy::unwrap_used)]
1220
static DUMMY_BRAND_DOC: LazyLock<CatalystSignedDocument> = LazyLock::new(|| {
@@ -59,6 +67,10 @@ static PROPOSAL_TEMPLATE_DOC: LazyLock<CatalystSignedDocument> = LazyLock::new(|
5967
// `parameters` value as `doc`.
6068
#[tokio::test]
6169
async fn test_valid_proposal_doc() {
70+
let (sk, pk, kid) = create_dummy_key_pair(RoleId::Proposer).unwrap();
71+
let mut key_provider = TestVerifyingKeyProvider::default();
72+
key_provider.add_pk(kid.clone(), pk);
73+
6274
// Create a main proposal doc, contain all fields mention in the document (except
6375
// collaborations and revocations)
6476
let doc = Builder::new()
@@ -80,6 +92,8 @@ async fn test_valid_proposal_doc() {
8092
.unwrap()
8193
.with_json_content(&serde_json::json!({}))
8294
.unwrap()
95+
.add_signature(|m| sk.sign(&m).to_vec(), kid)
96+
.unwrap()
8397
.build()
8498
.unwrap();
8599

@@ -90,6 +104,50 @@ async fn test_valid_proposal_doc() {
90104

91105
let is_valid = validator::validate(&doc, &provider).await.unwrap();
92106
assert!(is_valid);
107+
108+
let is_valid = validator::validate_signatures(&doc, &key_provider)
109+
.await
110+
.unwrap();
111+
assert!(is_valid);
112+
}
113+
114+
#[tokio::test]
115+
async fn test_invalid_proposal_doc_wrong_role() {
116+
let (sk, _pk, kid) = create_dummy_key_pair(RoleId::Role0).unwrap();
117+
118+
// Create a main proposal doc, contain all fields mention in the document (except
119+
// collaborations and revocations)
120+
let doc = Builder::new()
121+
.with_json_metadata(serde_json::json!({
122+
"content-type": ContentType::Json.to_string(),
123+
"content-encoding": ContentEncoding::Brotli.to_string(),
124+
"type": doc_types::PROPOSAL.clone(),
125+
"id": UuidV7::new(),
126+
"ver": UuidV7::new(),
127+
"template": {
128+
"id": PROPOSAL_TEMPLATE_DOC.doc_id().unwrap(),
129+
"ver": PROPOSAL_TEMPLATE_DOC.doc_ver().unwrap(),
130+
},
131+
"parameters": {
132+
"id": DUMMY_BRAND_DOC.doc_id().unwrap(),
133+
"ver": DUMMY_BRAND_DOC.doc_ver().unwrap(),
134+
}
135+
}))
136+
.unwrap()
137+
.with_json_content(&serde_json::json!({}))
138+
.unwrap()
139+
.add_signature(|m| sk.sign(&m).to_vec(), kid)
140+
.unwrap()
141+
.build()
142+
.unwrap();
143+
144+
let mut provider = TestCatalystSignedDocumentProvider::default();
145+
146+
provider.add_document(None, &PROPOSAL_TEMPLATE_DOC).unwrap();
147+
provider.add_document(None, &DUMMY_BRAND_DOC).unwrap();
148+
149+
let is_valid = validator::validate(&doc, &provider).await.unwrap();
150+
assert!(!is_valid);
93151
}
94152

95153
#[tokio::test]

rust/signed_doc/tests/submission.rs

Lines changed: 60 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,16 @@
55
use std::sync::LazyLock;
66

77
use catalyst_signed_doc::{
8-
doc_types::deprecated, providers::tests::TestCatalystSignedDocumentProvider, *,
8+
doc_types::deprecated,
9+
providers::tests::{TestCatalystSignedDocumentProvider, TestVerifyingKeyProvider},
10+
*,
911
};
12+
use catalyst_types::catalyst_id::role_index::RoleId;
13+
use ed25519_dalek::ed25519::signature::Signer;
14+
15+
use crate::common::create_dummy_key_pair;
16+
17+
mod common;
1018

1119
#[allow(clippy::unwrap_used)]
1220
static DUMMY_PROPOSAL_DOC: LazyLock<CatalystSignedDocument> = LazyLock::new(|| {
@@ -51,6 +59,10 @@ static DUMMY_BRAND_DOC: LazyLock<CatalystSignedDocument> = LazyLock::new(|| {
5159
// `parameters` value as `doc`.
5260
#[tokio::test]
5361
async fn test_valid_submission_action() {
62+
let (sk, pk, kid) = create_dummy_key_pair(RoleId::Proposer).unwrap();
63+
let mut key_provider = TestVerifyingKeyProvider::default();
64+
key_provider.add_pk(kid.clone(), pk);
65+
5466
// Create a main proposal submission doc, contain all fields mention in the document
5567
let doc = Builder::new()
5668
.with_json_metadata(serde_json::json!({
@@ -73,6 +85,8 @@ async fn test_valid_submission_action() {
7385
"action": "final"
7486
}))
7587
.unwrap()
88+
.add_signature(|m| sk.sign(&m).to_vec(), kid)
89+
.unwrap()
7690
.build()
7791
.unwrap();
7892

@@ -83,6 +97,51 @@ async fn test_valid_submission_action() {
8397

8498
let is_valid = validator::validate(&doc, &provider).await.unwrap();
8599
assert!(is_valid, "{:?}", doc.problem_report());
100+
101+
let is_valid = validator::validate_signatures(&doc, &key_provider)
102+
.await
103+
.unwrap();
104+
assert!(is_valid);
105+
}
106+
107+
#[tokio::test]
108+
async fn test_invalid_submission_action_wrong_role() {
109+
let (sk, _pk, kid) = create_dummy_key_pair(RoleId::Role0).unwrap();
110+
111+
// Create a main proposal submission doc, contain all fields mention in the document
112+
let doc = Builder::new()
113+
.with_json_metadata(serde_json::json!({
114+
"content-type": ContentType::Json.to_string(),
115+
"content-encoding": ContentEncoding::Brotli.to_string(),
116+
"type": doc_types::PROPOSAL_SUBMISSION_ACTION.clone(),
117+
"id": UuidV7::new(),
118+
"ver": UuidV7::new(),
119+
"ref": {
120+
"id": DUMMY_PROPOSAL_DOC.doc_id().unwrap(),
121+
"ver": DUMMY_PROPOSAL_DOC.doc_ver().unwrap(),
122+
},
123+
"parameters": {
124+
"id": DUMMY_BRAND_DOC.doc_id().unwrap(),
125+
"ver": DUMMY_BRAND_DOC.doc_ver().unwrap(),
126+
}
127+
}))
128+
.unwrap()
129+
.with_json_content(&serde_json::json!({
130+
"action": "final"
131+
}))
132+
.unwrap()
133+
.add_signature(|m| sk.sign(&m).to_vec(), kid)
134+
.unwrap()
135+
.build()
136+
.unwrap();
137+
138+
let mut provider = TestCatalystSignedDocumentProvider::default();
139+
140+
provider.add_document(None, &DUMMY_PROPOSAL_DOC).unwrap();
141+
provider.add_document(None, &DUMMY_BRAND_DOC).unwrap();
142+
143+
let is_valid = validator::validate(&doc, &provider).await.unwrap();
144+
assert!(!is_valid);
86145
}
87146

88147
#[tokio::test]

0 commit comments

Comments
 (0)