@@ -75,15 +75,23 @@ fn sbtc<F: Into<f64>>(btc: F) -> SignedAmount {
75
75
SignedAmount :: from_btc ( btc. into ( ) ) . unwrap ( )
76
76
}
77
77
78
- fn main ( ) {
79
- let rpc_url = std:: env:: var ( "RPC_URL" ) . expect ( "RPC_URL must be set" ) ;
80
- let auth = if let Ok ( cookie) = std:: env:: var ( "RPC_COOKIE" ) {
81
- Auth :: CookieFile ( cookie. into ( ) )
78
+ fn get_rpc_url ( ) -> String {
79
+ return std:: env:: var ( "RPC_URL" ) . expect ( "RPC_URL must be set" ) ;
80
+ }
81
+
82
+ fn get_auth ( ) -> bitcoincore_rpc:: Auth {
83
+ if let Ok ( cookie) = std:: env:: var ( "RPC_COOKIE" ) {
84
+ return Auth :: CookieFile ( cookie. into ( ) ) ;
82
85
} else if let Ok ( user) = std:: env:: var ( "RPC_USER" ) {
83
- Auth :: UserPass ( user, std:: env:: var ( "RPC_PASS" ) . unwrap_or_default ( ) )
86
+ return Auth :: UserPass ( user, std:: env:: var ( "RPC_PASS" ) . unwrap_or_default ( ) ) ;
84
87
} else {
85
88
panic ! ( "Either RPC_COOKIE or RPC_USER + RPC_PASS must be set." ) ;
86
89
} ;
90
+ }
91
+
92
+ fn main ( ) {
93
+ let rpc_url = get_rpc_url ( ) ;
94
+ let auth = get_auth ( ) ;
87
95
88
96
let cl = Client :: new ( rpc_url, auth) . unwrap ( ) ;
89
97
@@ -137,6 +145,7 @@ fn main() {
137
145
test_ping ( & cl) ;
138
146
test_get_peer_info ( & cl) ;
139
147
test_rescan_blockchain ( & cl) ;
148
+ test_create_wallet ( & cl) ;
140
149
//TODO import_multi(
141
150
//TODO verify_message(
142
151
//TODO wait_for_new_block(&self, timeout: u64) -> Result<json::BlockRef> {
@@ -148,7 +157,6 @@ fn main() {
148
157
//TODO add_multisig_address(
149
158
//TODO load_wallet(&self, wallet: &str) -> Result<json::LoadWalletResult> {
150
159
//TODO unload_wallet(&self, wallet: Option<&str>) -> Result<()> {
151
- //TODO create_wallet(
152
160
//TODO backup_wallet(&self, destination: Option<&str>) -> Result<()> {
153
161
test_stop ( cl) ;
154
162
}
@@ -778,6 +786,105 @@ fn test_rescan_blockchain(cl: &Client) {
778
786
assert_eq ! ( stop, Some ( count - 1 ) ) ;
779
787
}
780
788
789
+ fn test_create_wallet ( cl : & Client ) {
790
+ let wallet_names = vec ! [ "alice" , "bob" , "carol" , "denise" , "emily" ] ;
791
+
792
+ struct WalletParams < ' a > {
793
+ name : & ' a str ,
794
+ disable_private_keys : Option < bool > ,
795
+ blank : Option < bool > ,
796
+ passphrase : Option < & ' a str > ,
797
+ avoid_reuse : Option < bool > ,
798
+ }
799
+
800
+ let mut wallet_params = vec ! [
801
+ WalletParams {
802
+ name: wallet_names[ 0 ] ,
803
+ disable_private_keys: None ,
804
+ blank: None ,
805
+ passphrase: None ,
806
+ avoid_reuse: None ,
807
+ } ,
808
+ WalletParams {
809
+ name: wallet_names[ 1 ] ,
810
+ disable_private_keys: Some ( true ) ,
811
+ blank: None ,
812
+ passphrase: None ,
813
+ avoid_reuse: None ,
814
+ } ,
815
+ WalletParams {
816
+ name: wallet_names[ 2 ] ,
817
+ disable_private_keys: None ,
818
+ blank: Some ( true ) ,
819
+ passphrase: None ,
820
+ avoid_reuse: None ,
821
+ }
822
+ ] ;
823
+
824
+ if version ( ) >= 190000 {
825
+ wallet_params. push (
826
+ WalletParams {
827
+ name : wallet_names[ 3 ] ,
828
+ disable_private_keys : None ,
829
+ blank : None ,
830
+ passphrase : Some ( "pass" ) ,
831
+ avoid_reuse : None ,
832
+ }
833
+ ) ;
834
+ wallet_params. push (
835
+ WalletParams {
836
+ name : wallet_names[ 4 ] ,
837
+ disable_private_keys : None ,
838
+ blank : None ,
839
+ passphrase : None ,
840
+ avoid_reuse : Some ( true ) ,
841
+ }
842
+ ) ;
843
+ }
844
+
845
+ for wallet_param in wallet_params {
846
+ let result = cl
847
+ . create_wallet (
848
+ wallet_param. name ,
849
+ wallet_param. disable_private_keys ,
850
+ wallet_param. blank ,
851
+ wallet_param. passphrase ,
852
+ wallet_param. avoid_reuse ,
853
+ )
854
+ . unwrap ( ) ;
855
+
856
+ assert_eq ! ( result. name, wallet_param. name) ;
857
+ let expected_warning = match ( wallet_param. passphrase , wallet_param. avoid_reuse ) {
858
+ ( None , Some ( true ) ) => Some ( "Empty string given as passphrase, wallet will not be encrypted." . to_string ( ) ) ,
859
+ _ => Some ( "" . to_string ( ) ) ,
860
+ } ;
861
+ assert_eq ! ( result. warning, expected_warning) ;
862
+
863
+ let wallet_client_url = format ! ( "{}{}{}" , get_rpc_url( ) , "/wallet/" , wallet_param. name) ;
864
+ let wallet_client = Client :: new ( wallet_client_url, get_auth ( ) ) . unwrap ( ) ;
865
+ let wallet_info = wallet_client. get_wallet_info ( ) . unwrap ( ) ;
866
+
867
+ assert_eq ! ( wallet_info. wallet_name, wallet_param. name) ;
868
+
869
+ let has_private_keys = !wallet_param. disable_private_keys . unwrap_or ( false ) ;
870
+ assert_eq ! ( wallet_info. private_keys_enabled, has_private_keys) ;
871
+ let has_hd_seed = has_private_keys && !wallet_param. blank . unwrap_or ( false ) ;
872
+ assert_eq ! ( wallet_info. hd_seed_id. is_some( ) , has_hd_seed) ;
873
+ let has_avoid_reuse = wallet_param. avoid_reuse . unwrap_or ( false ) ;
874
+ assert_eq ! ( wallet_info. avoid_reuse. unwrap_or( false ) , has_avoid_reuse) ;
875
+ }
876
+
877
+ let mut wallet_list = cl. list_wallets ( ) . unwrap ( ) ;
878
+
879
+ wallet_list. sort ( ) ;
880
+
881
+ // Default wallet
882
+ assert_eq ! ( wallet_list. remove( 0 ) , "" ) ;
883
+
884
+ // Created wallets
885
+ assert ! ( wallet_list. iter( ) . zip( wallet_names) . all( |( a, b) | a == b) ) ;
886
+ }
887
+
781
888
fn test_stop ( cl : Client ) {
782
889
println ! ( "Stopping: '{}'" , cl. stop( ) . unwrap( ) ) ;
783
890
}
0 commit comments