diff --git a/deltachat-jsonrpc/src/lib.rs b/deltachat-jsonrpc/src/lib.rs index e877c2079..90a1a1512 100644 --- a/deltachat-jsonrpc/src/lib.rs +++ b/deltachat-jsonrpc/src/lib.rs @@ -50,4 +50,45 @@ mod tests { Ok(()) } + + #[tokio::test(flavor = "multi_thread")] + async fn test_batch_set_config() -> anyhow::Result<()> { + let tmp_dir = TempDir::new().unwrap().path().into(); + let accounts = Accounts::new(tmp_dir).await?; + let api = CommandApi::new(accounts); + + let (sender, mut receiver) = unbounded::(); + + let (client, mut rx) = RpcClient::new(); + let session = RpcSession::new(client, api); + tokio::spawn({ + async move { + while let Some(message) = rx.next().await { + let message = serde_json::to_string(&message)?; + sender.send(message).await?; + } + let res: Result<(), anyhow::Error> = Ok(()); + res + } + }); + + { + let request = r#"{"jsonrpc":"2.0","method":"add_account","params":[],"id":1}"#; + let response = r#"{"jsonrpc":"2.0","id":1,"result":1}"#; + session.handle_incoming(request).await; + let result = receiver.next().await; + println!("{:?}", result); + assert_eq!(result, Some(response.to_owned())); + } + { + let request = r#"{"jsonrpc":"2.0","method":"batch_set_config","id":2,"params":[1,{"addr":"","mail_user":"","mail_pw":"","mail_server":"","mail_port":"","mail_security":"","imap_certificate_checks":"","send_user":"","send_pw":"","send_server":"","send_port":"","send_security":"","smtp_certificate_checks":"","socks5_enabled":"0","socks5_host":"","socks5_port":"","socks5_user":"","socks5_password":""}]}"#; + let response = r#"{"jsonrpc":"2.0","id":2,"result":null}"#; + session.handle_incoming(request).await; + let result = receiver.next().await; + println!("{:?}", result); + assert_eq!(result, Some(response.to_owned())); + } + + Ok(()) + } } diff --git a/node/segfault2.js b/node/segfault2.js new file mode 100644 index 000000000..28040b51b --- /dev/null +++ b/node/segfault2.js @@ -0,0 +1,50 @@ +const { default: dc } = require('./dist') + +const ac = new dc('test1233490') + +console.log('[1]') + +ac.startJsonRpcHandler(console.log) + +console.log('[2]') +console.log( + ac.jsonRpcRequest( + JSON.stringify({ + jsonrpc: '2.0', + method: 'batch_set_config', + id: 3, + params: [ + 69, + { + addr: '', + mail_user: '', + mail_pw: '', + mail_server: '', + mail_port: '', + mail_security: '', + imap_certificate_checks: '', + send_user: '', + send_pw: '', + send_server: '', + send_port: '', + send_security: '', + smtp_certificate_checks: '', + socks5_enabled: '0', + socks5_host: '', + socks5_port: '', + socks5_user: '', + socks5_password: '', + }, + ], + }) + ) +) + +console.log('[3]') + +setTimeout(() => { + console.log('[4]') + ac.close() // This segfaults -> TODO Findout why? + + console.log('still living') +}, 1000)