sui_cluster_test/test_case/
fullnode_build_publish_transaction_test.rs

1// Copyright (c) Mysten Labs, Inc.
2// SPDX-License-Identifier: Apache-2.0
3
4use crate::{TestCaseImpl, TestContext};
5use async_trait::async_trait;
6use jsonrpsee::rpc_params;
7use sui_json_rpc_types::SuiTransactionBlockEffectsAPI;
8use sui_move_build::test_utils::compile_basics_package;
9use sui_types::{base_types::ObjectID, object::Owner};
10
11pub struct FullNodeBuildPublishTransactionTest;
12
13#[async_trait]
14impl TestCaseImpl for FullNodeBuildPublishTransactionTest {
15    fn name(&self) -> &'static str {
16        "FullNodeBuildPublishTransaction"
17    }
18
19    fn description(&self) -> &'static str {
20        "Test building publish transaction via full node"
21    }
22
23    async fn run(&self, ctx: &mut TestContext) -> Result<(), anyhow::Error> {
24        let compiled_package = compile_basics_package();
25        let all_module_bytes =
26            compiled_package.get_package_base64(/* with_unpublished_deps */ false);
27        let dependencies = compiled_package.get_dependency_storage_package_ids();
28
29        let params = rpc_params![
30            ctx.get_wallet_address(),
31            all_module_bytes,
32            dependencies,
33            None::<ObjectID>,
34            // Doesn't need to be scaled by RGP since most of the cost is storage
35            50_000_000.to_string()
36        ];
37
38        let data = ctx
39            .build_transaction_remotely("unsafe_publish", params)
40            .await?;
41        let response = ctx.sign_and_execute(data, "publish basics package").await;
42        response
43            .effects
44            .as_ref()
45            .unwrap()
46            .created()
47            .iter()
48            .find(|obj_ref| obj_ref.owner == Owner::Immutable)
49            .unwrap();
50
51        Ok(())
52    }
53}