Skip to content

Commit 45ebb8d

Browse files
feat: change node certification when node resources updated (#458)
1 parent d38ff08 commit 45ebb8d

File tree

2 files changed

+106
-0
lines changed

2 files changed

+106
-0
lines changed

substrate-node/pallets/pallet-tfgrid/src/lib.rs

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1055,6 +1055,17 @@ pub mod pallet {
10551055
NodesByFarmID::<T>::insert(farm_id, nodes_by_farm);
10561056
};
10571057

1058+
// If the resources on a certified node changed, reset the certification level to DIY
1059+
if stored_node.resources != resources
1060+
&& stored_node.certification == NodeCertification::Certified
1061+
{
1062+
stored_node.certification = NodeCertification::Diy;
1063+
Self::deposit_event(Event::NodeCertificationSet(
1064+
node_id,
1065+
stored_node.certification,
1066+
));
1067+
}
1068+
10581069
stored_node.farm_id = farm_id;
10591070
stored_node.resources = resources;
10601071
stored_node.location = location;

substrate-node/pallets/pallet-tfgrid/src/tests.rs

Lines changed: 95 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -705,6 +705,101 @@ fn update_node_moved_from_farm_list_works() {
705705
});
706706
}
707707

708+
#[test]
709+
fn update_certified_node_resources_loses_certification_works() {
710+
ExternalityBuilder::build().execute_with(|| {
711+
create_entity();
712+
create_twin();
713+
create_farm();
714+
create_node();
715+
716+
assert_ok!(TfgridModule::add_node_certifier(
717+
RawOrigin::Root.into(),
718+
alice()
719+
));
720+
721+
assert_ok!(TfgridModule::set_node_certification(
722+
Origin::signed(alice()),
723+
1,
724+
NodeCertification::Certified
725+
));
726+
727+
let node = TfgridModule::nodes(1).unwrap();
728+
assert_eq!(node.certification, NodeCertification::Certified);
729+
730+
// Change cores to 2
731+
let mut node_resources = node.resources;
732+
node_resources.cru = 2;
733+
734+
assert_ok!(TfgridModule::update_node(
735+
Origin::signed(alice()),
736+
1,
737+
1,
738+
node_resources,
739+
node.location,
740+
node.country,
741+
node.city,
742+
Vec::new().try_into().unwrap(),
743+
true,
744+
true,
745+
"some_serial".as_bytes().to_vec(),
746+
));
747+
748+
let our_events = System::events();
749+
assert_eq!(
750+
our_events.contains(&record(MockEvent::TfgridModule(
751+
TfgridEvent::<TestRuntime>::NodeCertificationSet(1, NodeCertification::Diy)
752+
))),
753+
true
754+
);
755+
756+
let node = TfgridModule::nodes(1).unwrap();
757+
assert_eq!(node.certification, NodeCertification::Diy);
758+
});
759+
}
760+
761+
#[test]
762+
fn update_certified_node_same_resources_keeps_certification_works() {
763+
ExternalityBuilder::build().execute_with(|| {
764+
create_entity();
765+
create_twin();
766+
create_farm();
767+
create_node();
768+
769+
assert_ok!(TfgridModule::add_node_certifier(
770+
RawOrigin::Root.into(),
771+
alice()
772+
));
773+
774+
assert_ok!(TfgridModule::set_node_certification(
775+
Origin::signed(alice()),
776+
1,
777+
NodeCertification::Certified
778+
));
779+
780+
let node = TfgridModule::nodes(1).unwrap();
781+
assert_eq!(node.certification, NodeCertification::Certified);
782+
783+
// Don't change resources
784+
assert_ok!(TfgridModule::update_node(
785+
Origin::signed(alice()),
786+
1,
787+
1,
788+
node.resources,
789+
node.location,
790+
node.country,
791+
node.city,
792+
Vec::new().try_into().unwrap(),
793+
true,
794+
true,
795+
"some_serial".as_bytes().to_vec(),
796+
));
797+
798+
let node = TfgridModule::nodes(1).unwrap();
799+
assert_eq!(node.certification, NodeCertification::Certified);
800+
});
801+
}
802+
708803
#[test]
709804
fn create_node_with_interfaces_works() {
710805
ExternalityBuilder::build().execute_with(|| {

0 commit comments

Comments
 (0)