wip try test that we see INFO events from the core

This commit is contained in:
holger krekel
2019-07-15 22:51:57 +02:00
parent 3e3403d3d7
commit 9ad4c9a6fe
5 changed files with 37 additions and 3 deletions

View File

@@ -20,6 +20,7 @@ def py_dc_callback(ctx, evt, data1, data2):
CFFI only allows us to set one global event handler, so this one CFFI only allows us to set one global event handler, so this one
looks up the correct event handler for the given context. looks up the correct event handler for the given context.
""" """
print("py_dc_callback", evt, data1, data2, ctx)
try: try:
callback = _DC_CALLBACK_MAP.get(ctx, lambda *a: 0) callback = _DC_CALLBACK_MAP.get(ctx, lambda *a: 0)
except AttributeError: except AttributeError:
@@ -54,6 +55,7 @@ def py_dc_callback(ctx, evt, data1, data2):
def set_context_callback(dc_context, func): def set_context_callback(dc_context, func):
print("set_context_callback", dc_context, func)
_DC_CALLBACK_MAP[dc_context] = func _DC_CALLBACK_MAP[dc_context] = func

View File

@@ -1,12 +1,26 @@
from __future__ import print_function from __future__ import print_function
import pytest import pytest
from deltachat import capi, Account, const from deltachat import capi, Account, const, set_context_callback
from deltachat.cutil import as_dc_charpointer
from queue import Queue
def test_empty_context(): def test_empty_context():
ctx = capi.lib.dc_context_new(capi.ffi.NULL, capi.ffi.NULL, capi.ffi.NULL) ctx = capi.lib.dc_context_new(capi.ffi.NULL, capi.ffi.NULL, capi.ffi.NULL)
capi.lib.dc_close(ctx) capi.lib.dc_close(ctx)
def test_set_context():
ctx = capi.lib.dc_context_new(capi.ffi.NULL, capi.ffi.NULL, capi.ffi.NULL)
q = Queue()
set_context_callback(ctx, lambda *args: q.put(args))
name = as_dc_charpointer("ein")
email = as_dc_charpointer("ein@kontakt.org")
contact_id = capi.lib.dc_create_contact(ctx, name, email)
capi.lib.dc_close(ctx)
q.get(timeout=10)
def test_wrong_db(tmpdir): def test_wrong_db(tmpdir):
tmpdir.join("hello.db").write("123") tmpdir.join("hello.db").write("123")

View File

@@ -70,6 +70,7 @@ impl Context {
} }
pub fn call_cb(&self, event: Event, data1: uintptr_t, data2: uintptr_t) -> uintptr_t { pub fn call_cb(&self, event: Event, data1: uintptr_t, data2: uintptr_t) -> uintptr_t {
println!("call_cb: called");
if let Some(cb) = self.cb { if let Some(cb) = self.cb {
unsafe { cb(self, event, data1, data2) } unsafe { cb(self, event, data1, data2) }
} else { } else {
@@ -135,7 +136,7 @@ pub fn dc_context_new(
userdata: *mut libc::c_void, userdata: *mut libc::c_void,
os_name: *const libc::c_char, os_name: *const libc::c_char,
) -> Context { ) -> Context {
Context { let context = Context {
blobdir: Arc::new(RwLock::new(std::ptr::null_mut())), blobdir: Arc::new(RwLock::new(std::ptr::null_mut())),
dbfile: Arc::new(RwLock::new(std::ptr::null_mut())), dbfile: Arc::new(RwLock::new(std::ptr::null_mut())),
inbox: Arc::new(RwLock::new({ inbox: Arc::new(RwLock::new({
@@ -179,7 +180,12 @@ pub fn dc_context_new(
))), ))),
probe_imap_network: Arc::new(RwLock::new(0)), probe_imap_network: Arc::new(RwLock::new(0)),
perform_inbox_jobs_needed: Arc::new(RwLock::new(0)), perform_inbox_jobs_needed: Arc::new(RwLock::new(0)),
} };
println!("context created");
info!(context, 0, "context created");
context
} }
unsafe fn cb_receive_imf( unsafe fn cb_receive_imf(
@@ -284,13 +290,21 @@ pub unsafe fn dc_context_unref(context: &mut Context) {
} }
pub unsafe fn dc_close(context: &Context) { pub unsafe fn dc_close(context: &Context) {
println!("disconnecting inbox watch yooaa");
info!(
context,
0,
"disconnecting INBOX-watch",
);
context.inbox.read().unwrap().disconnect(context); context.inbox.read().unwrap().disconnect(context);
info!(context, 0, "disconnecting sentbox-thread",);
context context
.sentbox_thread .sentbox_thread
.read() .read()
.unwrap() .unwrap()
.imap .imap
.disconnect(context); .disconnect(context);
info!(context, 0, "disconnecting mvbox-thread",);
context context
.mvbox_thread .mvbox_thread
.read() .read()
@@ -298,8 +312,10 @@ pub unsafe fn dc_close(context: &Context) {
.imap .imap
.disconnect(context); .disconnect(context);
info!(context, 0, "disconnecting SMTP");
context.smtp.clone().lock().unwrap().disconnect(); context.smtp.clone().lock().unwrap().disconnect();
info!(context, 0, "closing SQL");
context.sql.close(context); context.sql.close(context);
let mut dbfile = context.dbfile.write().unwrap(); let mut dbfile = context.dbfile.write().unwrap();
free(*dbfile as *mut libc::c_void); free(*dbfile as *mut libc::c_void);

View File

@@ -95,6 +95,7 @@ macro_rules! info {
info!($ctx, $data1, $msg,) info!($ctx, $data1, $msg,)
}; };
($ctx:expr, $data1:expr, $msg:expr, $($args:expr),* $(,)?) => {{ ($ctx:expr, $data1:expr, $msg:expr, $($args:expr),* $(,)?) => {{
println!("xxx");
let formatted = format!($msg, $($args),*); let formatted = format!($msg, $($args),*);
let formatted_c = $crate::dc_tools::to_cstring(formatted); let formatted_c = $crate::dc_tools::to_cstring(formatted);
$ctx.call_cb($crate::constants::Event::INFO, $data1 as uintptr_t, $ctx.call_cb($crate::constants::Event::INFO, $data1 as uintptr_t,

View File

@@ -467,6 +467,7 @@ impl Imap {
} }
fn unsetup_handle(&self, context: &Context) { fn unsetup_handle(&self, context: &Context) {
info!(context, 0, "IMAP unsetup_handle starts");
let session = self.session.lock().unwrap().0.take(); let session = self.session.lock().unwrap().0.take();
if session.is_some() { if session.is_some() {
match session.unwrap().close() { match session.unwrap().close() {