mirror of
https://github.com/Noratrieb/haesli.git
synced 2026-01-14 19:55:03 +01:00
fix
This commit is contained in:
parent
dbc577abbc
commit
504757b324
7 changed files with 52 additions and 29 deletions
30
Cargo.lock
generated
30
Cargo.lock
generated
|
|
@ -17,21 +17,6 @@ dependencies = [
|
||||||
"memchr",
|
"memchr",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "amqp"
|
|
||||||
version = "0.1.0"
|
|
||||||
dependencies = [
|
|
||||||
"anyhow",
|
|
||||||
"clap 3.1.6",
|
|
||||||
"haesli_core",
|
|
||||||
"haesli_dashboard",
|
|
||||||
"haesli_transport",
|
|
||||||
"tokio",
|
|
||||||
"tracing",
|
|
||||||
"tracing-subscriber",
|
|
||||||
"tracing-tree",
|
|
||||||
]
|
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "ansi_term"
|
name = "ansi_term"
|
||||||
version = "0.12.1"
|
version = "0.12.1"
|
||||||
|
|
@ -434,6 +419,21 @@ dependencies = [
|
||||||
"wasi 0.10.2+wasi-snapshot-preview1",
|
"wasi 0.10.2+wasi-snapshot-preview1",
|
||||||
]
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "haesli"
|
||||||
|
version = "0.1.0"
|
||||||
|
dependencies = [
|
||||||
|
"anyhow",
|
||||||
|
"clap 3.1.6",
|
||||||
|
"haesli_core",
|
||||||
|
"haesli_dashboard",
|
||||||
|
"haesli_transport",
|
||||||
|
"tokio",
|
||||||
|
"tracing",
|
||||||
|
"tracing-subscriber",
|
||||||
|
"tracing-tree",
|
||||||
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "haesli_core"
|
name = "haesli_core"
|
||||||
version = "0.1.0"
|
version = "0.1.0"
|
||||||
|
|
|
||||||
|
|
@ -10,7 +10,7 @@ members = [
|
||||||
]
|
]
|
||||||
|
|
||||||
[package]
|
[package]
|
||||||
name = "amqp"
|
name = "haesli"
|
||||||
version = "0.1.0"
|
version = "0.1.0"
|
||||||
edition = "2021"
|
edition = "2021"
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -9,6 +9,7 @@ use haesli_core::{
|
||||||
};
|
};
|
||||||
use parking_lot::Mutex;
|
use parking_lot::Mutex;
|
||||||
use tokio::sync::mpsc;
|
use tokio::sync::mpsc;
|
||||||
|
use tracing::debug;
|
||||||
|
|
||||||
use crate::{queue_worker::QueueTask, Result};
|
use crate::{queue_worker::QueueTask, Result};
|
||||||
|
|
||||||
|
|
@ -25,7 +26,7 @@ pub fn declare(channel: Channel, queue_declare: QueueDeclare) -> Result<Method>
|
||||||
} = queue_declare;
|
} = queue_declare;
|
||||||
|
|
||||||
// 2.1.4.1 - If no queue name is given, chose a name
|
// 2.1.4.1 - If no queue name is given, chose a name
|
||||||
let queue_name = if queue_name.is_empty() {
|
let queue_name = if !queue_name.is_empty() {
|
||||||
queue_name
|
queue_name
|
||||||
} else {
|
} else {
|
||||||
format!("q_{}", haesli_core::random_uuid())
|
format!("q_{}", haesli_core::random_uuid())
|
||||||
|
|
@ -63,6 +64,8 @@ pub fn declare(channel: Channel, queue_declare: QueueDeclare) -> Result<Method>
|
||||||
event_send,
|
event_send,
|
||||||
});
|
});
|
||||||
|
|
||||||
|
debug!(%queue_name, "Creating queue");
|
||||||
|
|
||||||
{
|
{
|
||||||
let mut global_data_lock = global_data.lock();
|
let mut global_data_lock = global_data.lock();
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -224,7 +224,9 @@ impl TransportConnection {
|
||||||
}
|
}
|
||||||
|
|
||||||
async fn recv_method(&mut self) -> Result<Method> {
|
async fn recv_method(&mut self) -> Result<Method> {
|
||||||
let start_ok_frame = frame::read_frame(&mut self.stream, self.max_frame_size).await?;
|
let start_ok_frame = frame::read_frame(&mut self.stream, self.max_frame_size)
|
||||||
|
.await
|
||||||
|
.context("read from stream, peer disconnected")?;
|
||||||
|
|
||||||
ensure_conn(start_ok_frame.kind == FrameType::Method)?;
|
ensure_conn(start_ok_frame.kind == FrameType::Method)?;
|
||||||
|
|
||||||
|
|
@ -320,7 +322,7 @@ impl TransportConnection {
|
||||||
loop {
|
loop {
|
||||||
select! {
|
select! {
|
||||||
frame = frame::read_frame(&mut self.stream, self.max_frame_size) => {
|
frame = frame::read_frame(&mut self.stream, self.max_frame_size) => {
|
||||||
let frame = frame?;
|
let frame = frame.context("read from stream, peer disconnected")?;
|
||||||
self.handle_frame(frame).await?;
|
self.handle_frame(frame).await?;
|
||||||
}
|
}
|
||||||
queued_method = self.event_receiver.recv() => {
|
queued_method = self.event_receiver.recv() => {
|
||||||
|
|
|
||||||
|
|
@ -283,15 +283,15 @@ pub async fn read_frame<R>(r: &mut R, max_frame_size: MaxFrameSize) -> Result<Fr
|
||||||
where
|
where
|
||||||
R: AsyncReadExt + Unpin + Send,
|
R: AsyncReadExt + Unpin + Send,
|
||||||
{
|
{
|
||||||
let kind = r.read_u8().await.context("read type")?;
|
let kind = r.read_u8().await?;
|
||||||
let channel = r.read_u16().await.context("read channel")?;
|
let channel = r.read_u16().await?;
|
||||||
let channel = ChannelNum::new(channel);
|
let channel = ChannelNum::new(channel);
|
||||||
let size = r.read_u32().await.context("read size")?;
|
let size = r.read_u32().await?;
|
||||||
|
|
||||||
let mut payload = vec![0; size.try_into().unwrap()];
|
let mut payload = vec![0; size.try_into().unwrap()];
|
||||||
r.read_exact(&mut payload).await.context("read payload")?;
|
r.read_exact(&mut payload).await?;
|
||||||
|
|
||||||
let frame_end = r.read_u8().await.context("read frame end")?;
|
let frame_end = r.read_u8().await?;
|
||||||
|
|
||||||
if frame_end != REQUIRED_FRAME_END {
|
if frame_end != REQUIRED_FRAME_END {
|
||||||
return Err(ProtocolError::Fatal.into());
|
return Err(ProtocolError::Fatal.into());
|
||||||
|
|
|
||||||
16
test-js/src/declare-server-named-queue.js
Normal file
16
test-js/src/declare-server-named-queue.js
Normal file
|
|
@ -0,0 +1,16 @@
|
||||||
|
import { assert, connectAmqp } from './utils/utils.js';
|
||||||
|
|
||||||
|
const connection = await connectAmqp();
|
||||||
|
|
||||||
|
const channel = await connection.createChannel();
|
||||||
|
|
||||||
|
const reply = await channel.assertQueue('');
|
||||||
|
|
||||||
|
assert(reply.messageCount === 0, 'Message found in queue');
|
||||||
|
assert(reply.consumerCount === 0, 'Consumer listening on queue');
|
||||||
|
assert(reply.queue !== '', 'Wrong queue name returned');
|
||||||
|
|
||||||
|
console.log(`created queue '${reply.queue}'`);
|
||||||
|
|
||||||
|
await channel.close();
|
||||||
|
await connection.close();
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
use std::{path::Path, process::Command, thread::sleep, time::Duration};
|
use std::{path::Path, process::Command, thread, time::Duration};
|
||||||
|
|
||||||
use anyhow::{ensure, Context, Result};
|
use anyhow::{ensure, Context, Result};
|
||||||
|
|
||||||
|
|
@ -15,17 +15,19 @@ pub fn main() -> Result<()> {
|
||||||
.context("cargo build")?;
|
.context("cargo build")?;
|
||||||
ensure!(status.success(), "cargo build failed");
|
ensure!(status.success(), "cargo build failed");
|
||||||
|
|
||||||
let mut haesli_server = Command::new("target/debug/amqp")
|
let server_binary = project_root.join("target/debug/haesli");
|
||||||
|
let mut server_process = Command::new(&server_binary)
|
||||||
.env("RUST_LOG", "trace")
|
.env("RUST_LOG", "trace")
|
||||||
.spawn()
|
.spawn()
|
||||||
.context("target/debug/amqp run")?;
|
.context(server_binary.display().to_string())
|
||||||
|
.context("run server binary")?;
|
||||||
|
|
||||||
// give it time for startup
|
// give it time for startup
|
||||||
sleep(Duration::from_secs(1));
|
thread::sleep(Duration::from_secs(1));
|
||||||
|
|
||||||
let test_result = run_js(&test_js_root);
|
let test_result = run_js(&test_js_root);
|
||||||
|
|
||||||
haesli_server.kill().context("killing amqp server")?;
|
server_process.kill().context("killing amqp server")?;
|
||||||
|
|
||||||
test_result
|
test_result
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue