mirror of
https://gitlab.cern.ch/wotsubo/PSBoardDataBase.git
synced 2025-06-08 05:55:42 +09:00
300 lines
11 KiB
Julia
300 lines
11 KiB
Julia
using Test
|
|
using PSBoardDataBase
|
|
using StaticArrays
|
|
using CSV, DataFrames
|
|
using SQLite, DBInterface
|
|
using JLD2
|
|
using Dates
|
|
|
|
# hack for LanguageServer
|
|
true || include("../src/PSBoardDataBase.jl")
|
|
|
|
@testset "PSBoardDataBase" begin
|
|
@testset "parse master log" begin
|
|
masterlog_metadata::PSBoardDataBase.QaqcMasterLog.QaqcMasterLogMetadata =
|
|
PSBoardDataBase.QaqcMasterLog.parse_master_log("input/log/57_long.log")
|
|
@test masterlog_metadata.shifters == "Otsubo"
|
|
@test masterlog_metadata.timestamp == DateTime(2024, 07, 26, 10, 33, 05)
|
|
@test masterlog_metadata.runid == 57
|
|
@test masterlog_metadata.shiftscript_version == v"1.0.2"
|
|
end
|
|
|
|
@testset "parse clk log" begin
|
|
@test PSBoardDataBase.ClockParser.get_skew("input/slavelogs/main/230_51_clk.txt") ==
|
|
14.178571428571429
|
|
@test PSBoardDataBase.ClockParser.get_skew("input/slavelogs/main/448_103_clk.txt") ≈
|
|
12.000000000000000
|
|
@test PSBoardDataBase.ClockParser.get_skew("input/slavelogs/main/209_51_clk.txt") ==
|
|
12.571428571428571
|
|
|
|
@test PSBoardDataBase.ClockParser.get_skew_and_riseup(
|
|
"input/slavelogs/main/230_51_clk.txt",
|
|
) === (14.178571428571429, 14.196428571428571 - 14.107142857142858)
|
|
@test PSBoardDataBase.ClockParser.get_skew_and_riseup(
|
|
"input/slavelogs/main/448_103_clk.txt",
|
|
) == (12.0, 12.053571428571429 - 11.982142857142858)
|
|
@test PSBoardDataBase.ClockParser.get_skew(
|
|
"input/slavelogs/main/444_103_clk.txt",
|
|
) == PSBoardDataBase.ClockParser.get_skew_and_riseup(
|
|
"input/slavelogs/main/444_103_clk.txt",
|
|
)[1]
|
|
|
|
@test PSBoardDataBase.ClockParser.count_riseup(
|
|
"input/slavelogs/main/230_51_clk.txt",
|
|
) == 1
|
|
@test PSBoardDataBase.ClockParser.count_riseup(
|
|
"input/slavelogs/main/444_103_clk.txt",
|
|
) == 22
|
|
end
|
|
|
|
@testset "Slave Log parser" begin
|
|
@testset "AsdtpResult" begin
|
|
lines = Iterators.Stateful(
|
|
Iterators.drop(eachline("./input/slavelogs/main/430_100.txt"), 2280),
|
|
)
|
|
result_asdtp = PSBoardDataBase.SlaveLogParser.parse_asdtp_section!(lines)
|
|
|
|
@test result_asdtp == PSBoardDataBase.SlaveLogParser.AsdtpResult(
|
|
1,
|
|
0,
|
|
true,
|
|
fill(
|
|
PSBoardDataBase.SlaveLogParser.AsdtpMeasurement.(fill((0, 1, 0), 32)),
|
|
8,
|
|
),
|
|
0,
|
|
1,
|
|
1,
|
|
0,
|
|
0x1,
|
|
0x1,
|
|
0xff,
|
|
0x0,
|
|
0x0,
|
|
0x0,
|
|
MVector((0x1001, 0x2001, 0x3001, 0x4001, 0x5001, 0x6001, 0x7001, 0x8001)),
|
|
)
|
|
|
|
lines = Iterators.Stateful(
|
|
Iterators.drop(eachline("./input/slavelogs/main/525_244.txt"), 2280),
|
|
)
|
|
result_asdtp = PSBoardDataBase.SlaveLogParser.parse_asdtp_section!(lines)
|
|
@test result_asdtp.reconfig_done == 0
|
|
end
|
|
|
|
@testset "Power" begin
|
|
lines = Iterators.Stateful(
|
|
Iterators.drop(eachline("./input/slavelogs/main/430_100.txt"), 1915),
|
|
)
|
|
result = PSBoardDataBase.SlaveLogParser.parse_power_section!(lines)
|
|
@test result.result_3v3d == 3.43
|
|
@test result.result_3v3a == 2.91
|
|
@test result.result_n3va == -2.97
|
|
|
|
lines = Iterators.Stateful(
|
|
Iterators.drop(eachline("./input/slavelogs/main/525_244.txt"), 1915),
|
|
)
|
|
result = PSBoardDataBase.SlaveLogParser.parse_power_section!(lines)
|
|
@test result.result_3v3d == 3.47
|
|
@test result.result_3v3a == 2.91
|
|
@test result.result_n3va == -3.01
|
|
|
|
lines = Iterators.Stateful(
|
|
Iterators.drop(eachline("./input/slavelogs/main/127_172.txt"), 17),
|
|
)
|
|
result = PSBoardDataBase.SlaveLogParser.parse_power_section!(lines)
|
|
@test result.result_3v3d == 7.65
|
|
@test result.result_3v3a == 3.80
|
|
@test result.result_n3va == -2.87
|
|
@test result.fpga_temp == -63.21
|
|
end
|
|
|
|
@testset "Recov" begin
|
|
lines = Iterators.Stateful(
|
|
Iterators.drop(eachline("./input/slavelogs/main/430_100.txt"), 1912),
|
|
)
|
|
@test PSBoardDataBase.SlaveLogParser.parse_recov_section!(lines)
|
|
|
|
lines = Iterators.Stateful(
|
|
Iterators.drop(eachline("./input/slavelogs/main/525_244.txt"), 1912),
|
|
)
|
|
@test PSBoardDataBase.SlaveLogParser.parse_recov_section!(lines)
|
|
|
|
# Maybe add more cases
|
|
end
|
|
|
|
@testset "Integrated" begin
|
|
result = PSBoardDataBase.SlaveLogParser.parse_slavelog_file(
|
|
"./input/slavelogs/main/430_100.txt",
|
|
)
|
|
@test result isa NamedTuple
|
|
@test result.asdtp |> length |> ==(1)
|
|
@test result.power |> length |> ==(1)
|
|
@test result.power[1].result_3v3d == 3.43
|
|
@test result.recov[1]
|
|
|
|
@test PSBoardDataBase.SlaveLogParser.parse_slavelog_file(
|
|
"./input/slavelogs/main/525_244.txt",
|
|
) isa NamedTuple
|
|
|
|
result = PSBoardDataBase.SlaveLogParser.parse_slavelog_file(
|
|
"./input/slavelogs/main/525_245_longrun.txt",
|
|
)
|
|
@test result isa NamedTuple
|
|
# @test result.asdtp |> length |> ==(100)
|
|
@test result.power |> length |> ==(0)
|
|
@info "" result.asdtp |> length result.power |> length
|
|
@test readlines("./input/slavelogs/main/525_245_longrun.txt") |>
|
|
filter(contains("=== Test Power Start ==")) |>
|
|
length |>
|
|
==(length(result.power))
|
|
|
|
result = PSBoardDataBase.SlaveLogParser.parse_slavelog_file(
|
|
"./input/slavelogs/main/364_88_longrun.txt",
|
|
)
|
|
@test result isa NamedTuple
|
|
@test result.asdtp |> length |> ==(100)
|
|
@test result.power |> length |> ==(0)
|
|
@info "" result.asdtp |> length result.power |> length
|
|
@test readlines("./input/slavelogs/main/364_88_longrun.txt") |>
|
|
filter(contains("=== Test Power Start ==")) |>
|
|
length |>
|
|
==(length(result.power))
|
|
end
|
|
end
|
|
|
|
@testset "Download data csv" begin
|
|
out = tempname()
|
|
@test CSV.read(
|
|
PSBoardDataBase.DownloadCSVs.download_single_run_csv(out),
|
|
DataFrame,
|
|
) isa DataFrame
|
|
@test CSV.read(
|
|
PSBoardDataBase.DownloadCSVs.download_runlist_csv(out),
|
|
DataFrame,
|
|
) isa DataFrame
|
|
@test CSV.read(
|
|
PSBoardDataBase.DownloadCSVs.download_dispatch_csv(out),
|
|
DataFrame,
|
|
) isa DataFrame
|
|
@test CSV.read(
|
|
PSBoardDataBase.DownloadCSVs.download_hundred_run_csv(out),
|
|
DataFrame,
|
|
) isa DataFrame
|
|
@test CSV.read(PSBoardDataBase.DownloadCSVs.download_jathub_csv(out), DataFrame) isa
|
|
DataFrame
|
|
end
|
|
|
|
@testset "prepare dataframe" begin
|
|
single_result_df =
|
|
CSV.read(PSBoardDataBase.DownloadCSVs.download_single_run_csv(), DataFrame)
|
|
@test PSBoardDataBase.prepare_single_result_df(single_result_df) isa DataFrame
|
|
|
|
@test PSBoardDataBase.prepare_dispatch_table(
|
|
CSV.read(PSBoardDataBase.DownloadCSVs.download_dispatch_csv(), DataFrame),
|
|
) isa DataFrame
|
|
|
|
@test PSBoardDataBase.prepare_100test_table(
|
|
CSV.read(PSBoardDataBase.DownloadCSVs.download_hundred_run_csv(), DataFrame),
|
|
) isa DataFrame
|
|
end
|
|
|
|
@testset "full integrated test" begin
|
|
dbpath = tempname()
|
|
jld2path = tempname()
|
|
db = PSBoardDataBase.create_empty_database(dbpath)
|
|
jld2_slavelog = jldopen(jld2path, "w")
|
|
@info "" db jld2_slavelog
|
|
|
|
@test PSBoardDataBase.insert_version_info(db) |> isnothing
|
|
let stmt
|
|
stmt = DBInterface.prepare(
|
|
db,
|
|
sql"""
|
|
SELECT * FROM versions
|
|
""",
|
|
)
|
|
result = DBInterface.execute(stmt) |> DataFrame
|
|
@test nrow(result) |> ==(1)
|
|
end
|
|
|
|
@test PSBoardDataBase.insert_qaqc_campaign_id(db) |> isnothing
|
|
jathub_list_df =
|
|
CSV.read(PSBoardDataBase.DownloadCSVs.download_jathub_csv(), DataFrame)
|
|
@test PSBoardDataBase.insert_qaqc_positions(db, jathub_list_df) |> isnothing
|
|
|
|
single_result_df =
|
|
CSV.read(PSBoardDataBase.DownloadCSVs.download_single_run_csv(), DataFrame)
|
|
runlist_table =
|
|
CSV.read(PSBoardDataBase.DownloadCSVs.download_runlist_csv(), DataFrame)
|
|
|
|
@test PSBoardDataBase.add_psboard_ids(db, single_result_df) |> isnothing
|
|
@test PSBoardDataBase.add_qaqc_runlist_from_runlist(db, runlist_table) |> isnothing
|
|
|
|
@test PSBoardDataBase.add_qaqc_single_result(db, single_result_df, runlist_table) |>
|
|
isnothing
|
|
|
|
dispatch_table =
|
|
CSV.read(PSBoardDataBase.DownloadCSVs.download_dispatch_csv(), DataFrame)
|
|
|
|
@test PSBoardDataBase.add_qaqc_dispatch(db, dispatch_table) |> isnothing
|
|
|
|
if haskey(ENV, "LOCAL_TEST")
|
|
@test PSBoardDataBase.add_qaqc_runlist_from_masterlogs(db, "input/log/") |>
|
|
isnothing
|
|
|
|
extra_100test_result_df =
|
|
CSV.read(PSBoardDataBase.DownloadCSVs.download_hundred_run_csv(), DataFrame)
|
|
|
|
@test PSBoardDataBase.add_qaqc_100test_result(
|
|
db,
|
|
extra_100test_result_df,
|
|
"input/slavelogs/",
|
|
jld2_slavelog,
|
|
) |> isnothing
|
|
|
|
@test PSBoardDataBase.add_skew_from_slave_clk_logs(db, "input/slavelogs/") |>
|
|
isnothing
|
|
|
|
@test PSBoardDataBase.add_slavelog_result(
|
|
db,
|
|
"input/slavelogs/",
|
|
jld2_slavelog,
|
|
) |> isnothing
|
|
|
|
run(`sqlitebrowser $dbpath`)
|
|
|
|
@test PSBoardDataBase.create_database(
|
|
tempname();
|
|
masterlog_dir = "input/log/",
|
|
slavelog_dir = "input/slavelogs/",
|
|
slavelog_result = tempname(),
|
|
) isa SQLite.DB
|
|
end
|
|
|
|
@testset "DbConnection" begin
|
|
conn = PSBoardDataBase.DispatchChecker.DbConnection(db)
|
|
|
|
@test conn.df_single_result isa DataFrame
|
|
@info "" conn.df_single_result |> nrow conn.df_extra_results |> nrow
|
|
|
|
if haskey(ENV, "LOCAL_TEST")
|
|
@test PSBoardDataBase.DispatchChecker.is_dispatchable(conn, 443)
|
|
@test PSBoardDataBase.DispatchChecker.is_dispatchable(conn, 706) |>
|
|
ismissing
|
|
end
|
|
end
|
|
end
|
|
end
|
|
|
|
using Aqua
|
|
|
|
@testset "Aqua.jl" begin
|
|
Aqua.test_all(
|
|
PSBoardDataBase;
|
|
# ambiguities = (exclude = [], broken = true),
|
|
stale_deps = (ignore = Symbol[:Documenter],),
|
|
# deps_compat = (ignore = Symbol[],),
|
|
# piracies = false,
|
|
)
|
|
end
|