fix: auth is per test, so in-memory is sufficient
This commit is contained in:
parent
9d59085608
commit
bd6afe2fd9
11 changed files with 20 additions and 226 deletions
|
@ -1,16 +0,0 @@
|
||||||
{
|
|
||||||
"db_name": "PostgreSQL",
|
|
||||||
"query": "\n UPDATE\n ftest_jobs\n SET\n job_state = (SELECT ID FROM ftest_job_states WHERE name = $1),\n scheduled_at = $2\n WHERE auth = $3;",
|
|
||||||
"describe": {
|
|
||||||
"columns": [],
|
|
||||||
"parameters": {
|
|
||||||
"Left": [
|
|
||||||
"Text",
|
|
||||||
"Timestamptz",
|
|
||||||
"Text"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"nullable": []
|
|
||||||
},
|
|
||||||
"hash": "1a317e97df24ca0cd8e9e70e400757943787cc5698f1f78942150eea869abcc3"
|
|
||||||
}
|
|
|
@ -1,17 +0,0 @@
|
||||||
{
|
|
||||||
"db_name": "PostgreSQL",
|
|
||||||
"query": "INSERT INTO ftest_jobs\n (commit_hash, job_state, auth, created_at)\n VALUES ($1, (SELECT ID FROM ftest_job_states WHERE name = $2), $3, $4)",
|
|
||||||
"describe": {
|
|
||||||
"columns": [],
|
|
||||||
"parameters": {
|
|
||||||
"Left": [
|
|
||||||
"Varchar",
|
|
||||||
"Text",
|
|
||||||
"Varchar",
|
|
||||||
"Timestamptz"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"nullable": []
|
|
||||||
},
|
|
||||||
"hash": "1b8b3e3dac6353829abcd3c49617542415b79ed6cbc2e7468e60b078dad5b53d"
|
|
||||||
}
|
|
|
@ -1,52 +0,0 @@
|
||||||
{
|
|
||||||
"db_name": "PostgreSQL",
|
|
||||||
"query": "\n SELECT\n ftest_jobs.ID,\n ftest_jobs.commit_hash,\n ftest_job_states.name,\n ftest_jobs.created_at,\n ftest_jobs.scheduled_at,\n ftest_jobs.finished_at\n\n FROM ftest_jobs\n INNER JOIN\n ftest_job_states\n ON\n ftest_job_states.ID = ftest_jobs.job_state\n WHERE\n ftest_job_states.name = $1;",
|
|
||||||
"describe": {
|
|
||||||
"columns": [
|
|
||||||
{
|
|
||||||
"ordinal": 0,
|
|
||||||
"name": "id",
|
|
||||||
"type_info": "Int4"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"ordinal": 1,
|
|
||||||
"name": "commit_hash",
|
|
||||||
"type_info": "Varchar"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"ordinal": 2,
|
|
||||||
"name": "name",
|
|
||||||
"type_info": "Varchar"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"ordinal": 3,
|
|
||||||
"name": "created_at",
|
|
||||||
"type_info": "Timestamptz"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"ordinal": 4,
|
|
||||||
"name": "scheduled_at",
|
|
||||||
"type_info": "Timestamptz"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"ordinal": 5,
|
|
||||||
"name": "finished_at",
|
|
||||||
"type_info": "Timestamptz"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"parameters": {
|
|
||||||
"Left": [
|
|
||||||
"Text"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"nullable": [
|
|
||||||
false,
|
|
||||||
false,
|
|
||||||
false,
|
|
||||||
false,
|
|
||||||
true,
|
|
||||||
true
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"hash": "74bacf397f38e738e9d8dcc9ad5cc5c07915bff6276bd5005fd7221a76741e8b"
|
|
||||||
}
|
|
|
@ -1,52 +0,0 @@
|
||||||
{
|
|
||||||
"db_name": "PostgreSQL",
|
|
||||||
"query": "\n SELECT\n ftest_jobs.ID,\n ftest_jobs.commit_hash,\n ftest_job_states.name,\n ftest_jobs.created_at,\n ftest_jobs.scheduled_at,\n ftest_jobs.finished_at\n\n FROM ftest_jobs\n INNER JOIN\n ftest_job_states\n ON\n ftest_job_states.ID = ftest_jobs.job_state\n WHERE\n ftest_jobs.commit_hash = $1",
|
|
||||||
"describe": {
|
|
||||||
"columns": [
|
|
||||||
{
|
|
||||||
"ordinal": 0,
|
|
||||||
"name": "id",
|
|
||||||
"type_info": "Int4"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"ordinal": 1,
|
|
||||||
"name": "commit_hash",
|
|
||||||
"type_info": "Varchar"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"ordinal": 2,
|
|
||||||
"name": "name",
|
|
||||||
"type_info": "Varchar"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"ordinal": 3,
|
|
||||||
"name": "created_at",
|
|
||||||
"type_info": "Timestamptz"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"ordinal": 4,
|
|
||||||
"name": "scheduled_at",
|
|
||||||
"type_info": "Timestamptz"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"ordinal": 5,
|
|
||||||
"name": "finished_at",
|
|
||||||
"type_info": "Timestamptz"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"parameters": {
|
|
||||||
"Left": [
|
|
||||||
"Text"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"nullable": [
|
|
||||||
false,
|
|
||||||
false,
|
|
||||||
false,
|
|
||||||
false,
|
|
||||||
true,
|
|
||||||
true
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"hash": "8f43686f9512d4e3f75e000515bdc90dd7c999a585e6b7b79459545bb583daa0"
|
|
||||||
}
|
|
|
@ -1,16 +0,0 @@
|
||||||
{
|
|
||||||
"db_name": "PostgreSQL",
|
|
||||||
"query": "\n UPDATE\n ftest_jobs\n SET\n job_state = (SELECT ID FROM ftest_job_states WHERE name = $1),\n finished_at = $2\n WHERE auth = $3;",
|
|
||||||
"describe": {
|
|
||||||
"columns": [],
|
|
||||||
"parameters": {
|
|
||||||
"Left": [
|
|
||||||
"Text",
|
|
||||||
"Timestamptz",
|
|
||||||
"Text"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"nullable": []
|
|
||||||
},
|
|
||||||
"hash": "985c4f76d8ccef02d4c1c47628fa1360c49cf7d0f1eb4eeea73117cda7eefe91"
|
|
||||||
}
|
|
|
@ -1,14 +0,0 @@
|
||||||
{
|
|
||||||
"db_name": "PostgreSQL",
|
|
||||||
"query": "INSERT INTO ftest_job_states\n (name) VALUES ($1) ON CONFLICT (name) DO NOTHING;",
|
|
||||||
"describe": {
|
|
||||||
"columns": [],
|
|
||||||
"parameters": {
|
|
||||||
"Left": [
|
|
||||||
"Varchar"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"nullable": []
|
|
||||||
},
|
|
||||||
"hash": "c43b464586d8b356ef09ebff65649f86699411f7a0c1bc2db5ab6125cd5c2828"
|
|
||||||
}
|
|
|
@ -1,14 +0,0 @@
|
||||||
{
|
|
||||||
"db_name": "PostgreSQL",
|
|
||||||
"query": "\n DELETE FROM\n ftest_jobs\n WHERE commit_hash = $1;",
|
|
||||||
"describe": {
|
|
||||||
"columns": [],
|
|
||||||
"parameters": {
|
|
||||||
"Left": [
|
|
||||||
"Text"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"nullable": []
|
|
||||||
},
|
|
||||||
"hash": "f41b0fa86f004be0f412517ae43aa8107433f6593077ee4197ff80cf2dc1f643"
|
|
||||||
}
|
|
|
@ -1,22 +0,0 @@
|
||||||
{
|
|
||||||
"db_name": "PostgreSQL",
|
|
||||||
"query": "SELECT EXISTS (SELECT 1 from ftest_job_states WHERE name = $1)",
|
|
||||||
"describe": {
|
|
||||||
"columns": [
|
|
||||||
{
|
|
||||||
"ordinal": 0,
|
|
||||||
"name": "exists",
|
|
||||||
"type_info": "Bool"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"parameters": {
|
|
||||||
"Left": [
|
|
||||||
"Text"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"nullable": [
|
|
||||||
null
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"hash": "f93894995de10d5eb0dc6fd249fd93e22354dfe90d461c4a8e7469887cef63d6"
|
|
||||||
}
|
|
|
@ -6,7 +6,6 @@ CREATE TABLE IF NOT EXISTS ftest_job_states (
|
||||||
CREATE TABLE IF NOT EXISTS ftest_jobs (
|
CREATE TABLE IF NOT EXISTS ftest_jobs (
|
||||||
commit_hash VARCHAR(40) NOT NULL UNIQUE,
|
commit_hash VARCHAR(40) NOT NULL UNIQUE,
|
||||||
job_state INTEGER references ftest_job_states(ID) ON DELETE CASCADE,
|
job_state INTEGER references ftest_job_states(ID) ON DELETE CASCADE,
|
||||||
auth VARCHAR(32) NOT NULL UNIQUE,
|
|
||||||
created_at timestamptz NOT NULL DEFAULT now(),
|
created_at timestamptz NOT NULL DEFAULT now(),
|
||||||
scheduled_at timestamptz DEFAULT NULL,
|
scheduled_at timestamptz DEFAULT NULL,
|
||||||
finished_at timestamptz DEFAULT NULL,
|
finished_at timestamptz DEFAULT NULL,
|
||||||
|
|
31
src/db.rs
31
src/db.rs
|
@ -134,26 +134,24 @@ impl Database {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
pub async fn add_job(&self, commit_hash: &str) -> ServiceResult<String> {
|
pub async fn add_job(&self, commit_hash: &str) -> ServiceResult<()> {
|
||||||
let auth = crate::utils::get_random(32);
|
|
||||||
let now = now_unix_time_stamp();
|
let now = now_unix_time_stamp();
|
||||||
|
|
||||||
sqlx::query!(
|
sqlx::query!(
|
||||||
"INSERT INTO ftest_jobs
|
"INSERT INTO ftest_jobs
|
||||||
(commit_hash, job_state, auth, created_at)
|
(commit_hash, job_state, created_at)
|
||||||
VALUES ($1, (SELECT ID FROM ftest_job_states WHERE name = $2), $3, $4)",
|
VALUES ($1, (SELECT ID FROM ftest_job_states WHERE name = $2), $3)",
|
||||||
commit_hash,
|
commit_hash,
|
||||||
&JOB_STATE_CREATE.name,
|
&JOB_STATE_CREATE.name,
|
||||||
&auth,
|
|
||||||
now
|
now
|
||||||
)
|
)
|
||||||
.execute(&self.pool)
|
.execute(&self.pool)
|
||||||
.await
|
.await
|
||||||
.map_err(map_register_err)?;
|
.map_err(map_register_err)?;
|
||||||
Ok(auth)
|
Ok(())
|
||||||
}
|
}
|
||||||
|
|
||||||
pub async fn mark_job_scheduled(&self, auth: &str) -> ServiceResult<()> {
|
pub async fn mark_job_scheduled(&self, commit_hash: &str) -> ServiceResult<()> {
|
||||||
let now = now_unix_time_stamp();
|
let now = now_unix_time_stamp();
|
||||||
sqlx::query!(
|
sqlx::query!(
|
||||||
"
|
"
|
||||||
|
@ -162,10 +160,10 @@ impl Database {
|
||||||
SET
|
SET
|
||||||
job_state = (SELECT ID FROM ftest_job_states WHERE name = $1),
|
job_state = (SELECT ID FROM ftest_job_states WHERE name = $1),
|
||||||
scheduled_at = $2
|
scheduled_at = $2
|
||||||
WHERE auth = $3;",
|
WHERE commit_hash = $3;",
|
||||||
&JOB_STATE_RUNNING.name,
|
&JOB_STATE_RUNNING.name,
|
||||||
now,
|
now,
|
||||||
auth,
|
commit_hash,
|
||||||
)
|
)
|
||||||
.execute(&self.pool)
|
.execute(&self.pool)
|
||||||
.await
|
.await
|
||||||
|
@ -174,7 +172,7 @@ impl Database {
|
||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
|
|
||||||
pub async fn mark_job_finished(&self, auth: &str) -> ServiceResult<()> {
|
pub async fn mark_job_finished(&self, commit_hash: &str) -> ServiceResult<()> {
|
||||||
let now = now_unix_time_stamp();
|
let now = now_unix_time_stamp();
|
||||||
sqlx::query!(
|
sqlx::query!(
|
||||||
"
|
"
|
||||||
|
@ -183,10 +181,10 @@ impl Database {
|
||||||
SET
|
SET
|
||||||
job_state = (SELECT ID FROM ftest_job_states WHERE name = $1),
|
job_state = (SELECT ID FROM ftest_job_states WHERE name = $1),
|
||||||
finished_at = $2
|
finished_at = $2
|
||||||
WHERE auth = $3;",
|
WHERE commit_hash = $3;",
|
||||||
&JOB_STATE_FINISH.name,
|
&JOB_STATE_FINISH.name,
|
||||||
now,
|
now,
|
||||||
auth,
|
commit_hash,
|
||||||
)
|
)
|
||||||
.execute(&self.pool)
|
.execute(&self.pool)
|
||||||
.await
|
.await
|
||||||
|
@ -272,7 +270,7 @@ impl Database {
|
||||||
let res = sqlx::query_as!(
|
let res = sqlx::query_as!(
|
||||||
SchedulerJob,
|
SchedulerJob,
|
||||||
"SELECT
|
"SELECT
|
||||||
auth, commit_hash
|
commit_hash
|
||||||
FROM
|
FROM
|
||||||
ftest_jobs
|
ftest_jobs
|
||||||
WHERE
|
WHERE
|
||||||
|
@ -319,7 +317,6 @@ pub fn map_row_not_found_err(e: sqlx::Error, row_not_found: ServiceError) -> Ser
|
||||||
#[derive(Clone, Debug, PartialEq, Eq)]
|
#[derive(Clone, Debug, PartialEq, Eq)]
|
||||||
pub struct SchedulerJob {
|
pub struct SchedulerJob {
|
||||||
pub commit_hash: String,
|
pub commit_hash: String,
|
||||||
pub auth: String,
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#[derive(Clone, Debug, PartialEq, Eq)]
|
#[derive(Clone, Debug, PartialEq, Eq)]
|
||||||
|
@ -414,7 +411,7 @@ mod tests {
|
||||||
let _ = db.delete_job(COMMIT_HASH).await;
|
let _ = db.delete_job(COMMIT_HASH).await;
|
||||||
let _ = db.delete_job(COMMIT_HASH2).await;
|
let _ = db.delete_job(COMMIT_HASH2).await;
|
||||||
|
|
||||||
let auth = db.add_job(COMMIT_HASH).await.unwrap();
|
db.add_job(COMMIT_HASH).await.unwrap();
|
||||||
let job = db.get_job(COMMIT_HASH).await.unwrap();
|
let job = db.get_job(COMMIT_HASH).await.unwrap();
|
||||||
db.add_job(COMMIT_HASH2).await.unwrap();
|
db.add_job(COMMIT_HASH2).await.unwrap();
|
||||||
let job2 = db.get_job(COMMIT_HASH2).await.unwrap();
|
let job2 = db.get_job(COMMIT_HASH2).await.unwrap();
|
||||||
|
@ -432,7 +429,7 @@ mod tests {
|
||||||
vec![job, job2.clone()]
|
vec![job, job2.clone()]
|
||||||
);
|
);
|
||||||
|
|
||||||
db.mark_job_scheduled(&auth).await.unwrap();
|
db.mark_job_scheduled(COMMIT_HASH).await.unwrap();
|
||||||
let job = db.get_job(COMMIT_HASH).await.unwrap();
|
let job = db.get_job(COMMIT_HASH).await.unwrap();
|
||||||
assert!(job.scheduled_at.is_some());
|
assert!(job.scheduled_at.is_some());
|
||||||
assert_eq!(
|
assert_eq!(
|
||||||
|
@ -440,7 +437,7 @@ mod tests {
|
||||||
vec![job]
|
vec![job]
|
||||||
);
|
);
|
||||||
|
|
||||||
db.mark_job_finished(&auth).await.unwrap();
|
db.mark_job_finished(COMMIT_HASH).await.unwrap();
|
||||||
let job = db.get_job(COMMIT_HASH).await.unwrap();
|
let job = db.get_job(COMMIT_HASH).await.unwrap();
|
||||||
assert!(job.finished_at.is_some());
|
assert!(job.finished_at.is_some());
|
||||||
assert_eq!(
|
assert_eq!(
|
||||||
|
|
|
@ -10,12 +10,14 @@ use url::Url;
|
||||||
use super::results::*;
|
use super::results::*;
|
||||||
use crate::complaince::result::Result as CResult;
|
use crate::complaince::result::Result as CResult;
|
||||||
use crate::complaince::suite::Suite;
|
use crate::complaince::suite::Suite;
|
||||||
|
use crate::utils::get_random;
|
||||||
|
|
||||||
pub struct SuiteRunnerState {
|
pub struct SuiteRunnerState {
|
||||||
suite: Suite,
|
suite: Suite,
|
||||||
tests: HashMap<String, TestRunnerState>,
|
tests: HashMap<String, TestRunnerState>,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[derive(Debug)]
|
||||||
pub struct TestRunnerState {
|
pub struct TestRunnerState {
|
||||||
rx: Receiver<CResult>,
|
rx: Receiver<CResult>,
|
||||||
container_name: String,
|
container_name: String,
|
||||||
|
@ -25,21 +27,21 @@ impl SuiteRunnerState {
|
||||||
pub async fn run(
|
pub async fn run(
|
||||||
container_host: &Url,
|
container_host: &Url,
|
||||||
suite: &crate::complaince::suite::Suite,
|
suite: &crate::complaince::suite::Suite,
|
||||||
auth: &str,
|
|
||||||
ctx: &crate::ctx::ArcCtx,
|
ctx: &crate::ctx::ArcCtx,
|
||||||
) -> ArchivableSuiteResult {
|
) -> ArchivableSuiteResult {
|
||||||
let state = Self::launch_suite(container_host, suite, auth, &ctx);
|
let state = Self::launch_suite(container_host, suite, &ctx);
|
||||||
state.collect_results(&ctx).await
|
state.collect_results(&ctx).await
|
||||||
}
|
}
|
||||||
|
|
||||||
fn launch_suite(
|
fn launch_suite(
|
||||||
container_host: &Url,
|
container_host: &Url,
|
||||||
suite: &crate::complaince::suite::Suite,
|
suite: &crate::complaince::suite::Suite,
|
||||||
auth: &str,
|
|
||||||
ctx: &crate::ctx::ArcCtx,
|
ctx: &crate::ctx::ArcCtx,
|
||||||
) -> Self {
|
) -> Self {
|
||||||
let mut tests = HashMap::with_capacity(suite.tests.len());
|
let mut tests = HashMap::with_capacity(suite.tests.len());
|
||||||
for test in suite.tests.iter() {
|
for test in suite.tests.iter() {
|
||||||
|
let auth = get_random(32);
|
||||||
|
println!("starting test {}", test.name);
|
||||||
let mut env = HashMap::new();
|
let mut env = HashMap::new();
|
||||||
env.insert("FTEST_AUTH".into(), auth.to_owned());
|
env.insert("FTEST_AUTH".into(), auth.to_owned());
|
||||||
env.insert(
|
env.insert(
|
||||||
|
@ -75,6 +77,7 @@ impl SuiteRunnerState {
|
||||||
},
|
},
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
println!("{:?}", tests);
|
||||||
SuiteRunnerState {
|
SuiteRunnerState {
|
||||||
suite: suite.clone(),
|
suite: suite.clone(),
|
||||||
tests,
|
tests,
|
||||||
|
@ -193,7 +196,6 @@ mod tests {
|
||||||
#[actix_rt::test]
|
#[actix_rt::test]
|
||||||
async fn suite_runner_works() {
|
async fn suite_runner_works() {
|
||||||
const LOGS: &str = "SUITE RUNNER LOG STRING";
|
const LOGS: &str = "SUITE RUNNER LOG STRING";
|
||||||
const AUTH: &str = "asdfasdfasdfadsf";
|
|
||||||
|
|
||||||
let settings = Settings::new().unwrap();
|
let settings = Settings::new().unwrap();
|
||||||
let ctx = Ctx::new(settings.clone()).await;
|
let ctx = Ctx::new(settings.clone()).await;
|
||||||
|
@ -227,7 +229,6 @@ mod tests {
|
||||||
let state = SuiteRunnerState::launch_suite(
|
let state = SuiteRunnerState::launch_suite(
|
||||||
&Url::parse("http://suite_runner_works.service").unwrap(),
|
&Url::parse("http://suite_runner_works.service").unwrap(),
|
||||||
&suite,
|
&suite,
|
||||||
AUTH,
|
|
||||||
&ctx,
|
&ctx,
|
||||||
);
|
);
|
||||||
assert_eq!(state.tests.len(), 2);
|
assert_eq!(state.tests.len(), 2);
|
||||||
|
|
Loading…
Add table
Reference in a new issue