test that calls without __TAURI_INVOKE_KEY__ fail

This commit is contained in:
Chip Reed 2024-06-05 06:49:51 +02:00
parent 8f759c6a81
commit b4fc721417
No known key found for this signature in database
9 changed files with 122 additions and 3 deletions

9
Cargo.lock generated
View File

@ -1921,6 +1921,15 @@ dependencies = [
"cfg-if",
]
[[package]]
name = "invoke-key"
version = "0.1.0"
dependencies = [
"tauri",
"tauri-build",
"tracing",
]
[[package]]
name = "io-lifetimes"
version = "1.0.11"

View File

@ -13,7 +13,8 @@ members = [
# integration tests
"core/tests/restart",
"core/tests/app-updater",
"core/tests/uninitialized-ipc"
"core/tests/uninitialized-ipc",
"core/tests/invoke-key"
]
exclude = [

View File

@ -1569,11 +1569,13 @@ impl<R: Runtime> Window<R> {
return Err(Error::InvokeKey);
}
None => {
let error = "received ipc message without a __TAURI_INVOKE_KEY__";
#[cfg(feature = "tracing")]
tracing::error!("received ipc message without a __TAURI_INVOKE_KEY__");
tracing::error!(error);
#[cfg(not(feature = "tracing"))]
eprintln!("received ipc message without a __TAURI_INVOKE_KEY__");
eprintln!(error);
return Err(Error::InvokeKey);
}

View File

@ -0,0 +1,15 @@
[package]
name = "invoke-key"
version = "0.1.0"
edition = "2021"
[build-dependencies]
tauri-build = { path = "../../tauri-build", features = [] }
[dependencies]
tauri = { path = "../../tauri", features = ["tracing"] }
tracing = "0.1"
[features]
default = ["custom-protocol"]
custom-protocol = ["tauri/custom-protocol"]

View File

@ -0,0 +1,7 @@
// Copyright 2019-2023 Tauri Programme within The Commons Conservancy
// SPDX-License-Identifier: Apache-2.0
// SPDX-License-Identifier: MIT
fn main() {
tauri_build::build()
}

View File

@ -0,0 +1,7 @@
<script>
window.__TAURI_POST_MESSAGE__({
cmd: 'error_if_called',
callback: 0,
error: 0
})
</script>

View File

@ -0,0 +1,24 @@
// Copyright 2019-2024 Tauri Programme within The Commons Conservancy
// SPDX-License-Identifier: Apache-2.0
// SPDX-License-Identifier: MIT
#![cfg_attr(not(debug_assertions), windows_subsystem = "windows")]
use tauri::{command, generate_context, generate_handler, Builder};
mod subscriber;
#[command]
fn error_if_called() {
std::process::exit(1)
}
fn main() {
tracing::subscriber::set_global_default(subscriber::InvokeKeyErrorSubscriber)
.expect("unable to set tracing global subscriber");
Builder::default()
.invoke_handler(generate_handler![error_if_called])
.run(generate_context!())
.expect("error while running tauri application");
}

View File

@ -0,0 +1,44 @@
use std::fmt::Debug;
use tracing::{
field::{Field, Visit},
span::{Attributes, Record},
Event, Id, Level, Metadata, Subscriber,
};
pub struct InvokeKeyErrorSubscriber;
impl Subscriber for InvokeKeyErrorSubscriber {
fn enabled(&self, metadata: &Metadata<'_>) -> bool {
metadata.is_event() && *metadata.level() == Level::ERROR
}
fn new_span(&self, _: &Attributes<'_>) -> Id {
// shouldn't be called because we only enable events
unimplemented!()
}
fn record(&self, _: &Id, _: &Record<'_>) {}
fn record_follows_from(&self, _: &Id, _: &Id) {}
fn event(&self, event: &Event<'_>) {
event.record(&mut InvokeKeyExitVisit)
}
fn enter(&self, _: &Id) {}
fn exit(&self, _: &Id) {}
}
struct InvokeKeyExitVisit;
impl Visit for InvokeKeyExitVisit {
fn record_str(&mut self, field: &Field, value: &str) {
if field.name() == "error" && value == "received ipc message without a __TAURI_INVOKE_KEY__" {
std::process::exit(0)
}
}
fn record_debug(&mut self, _: &Field, _: &dyn Debug) {}
}

View File

@ -0,0 +1,10 @@
{
"$schema": "../../../core/tauri-config-schema/schema.json",
"build": {
"distDir": "index.html",
"devPath": "index.html"
},
"tauri": {
"windows": [{}]
}
}