Fix concurrency bug while testing

This commit is contained in:
2022-01-17 17:09:54 +01:00
parent f44a2958c1
commit 267cdb89c6
9 changed files with 67 additions and 44 deletions

View File

@@ -44,6 +44,6 @@ pub fn export(filters: Vec<&str>) -> Result<Vec<Task>, Error> {
tasks
}
pub fn add(add_args: Vec<&str>) -> Result<u64, Error> {
taskwarrior::add(add_args)
pub async fn add(add_args: Vec<&str>) -> Result<u64, Error> {
taskwarrior::add(add_args).await
}

View File

@@ -1,7 +1,7 @@
use actix_web::{dev::Server, http, middleware, web, App, HttpResponse, HttpServer};
use contextswitch_types::TaskDefinition;
use listenfd::ListenFd;
use serde::{Deserialize, Serialize};
use serde::Deserialize;
use serde_json::json;
use std::env;
use std::io::Error;
@@ -35,7 +35,7 @@ async fn list_tasks(task_query: web::Query<TaskQuery>) -> Result<HttpResponse, E
#[tracing::instrument(level = "debug", skip_all, fields(definition = %task_definition.definition))]
async fn add_task(task_definition: web::Json<TaskDefinition>) -> Result<HttpResponse, Error> {
let task_id = contextswitch::add(task_definition.definition.split(' ').collect())?;
let task_id = contextswitch::add(task_definition.definition.split(' ').collect()).await?;
Ok(HttpResponse::Ok()
.content_type("application/json")

View File

@@ -8,6 +8,7 @@ use std::io::{Error, ErrorKind};
use std::path::Path;
use std::process::Command;
use std::str;
use tokio::sync::Mutex;
use tracing::debug;
use uuid::Uuid;
@@ -109,14 +110,17 @@ pub fn export(filters: Vec<&str>) -> Result<Vec<Task>, Error> {
}
#[tracing::instrument(level = "debug")]
pub fn add(add_args: Vec<&str>) -> Result<u64, Error> {
pub async fn add(add_args: Vec<&str>) -> Result<u64, Error> {
lazy_static! {
static ref RE: Regex = Regex::new(r"Created task (?P<id>\d+).").unwrap();
static ref LOCK: Mutex<u32> = Mutex::new(0);
}
let _lock = LOCK.lock().await;
let mut args = vec!["add"];
args.extend(add_args);
let add_output = Command::new("task").args(args).output()?;
let output = String::from_utf8(add_output.stdout).unwrap();
lazy_static! {
static ref RE: Regex = Regex::new(r"Created task (?P<id>\d+).").unwrap();
}
let task_id_capture = RE.captures(&output).ok_or_else(|| {
Error::new(
ErrorKind::Other,