PSBoardDataBase/test/runtests.jl
Wataru Otsubo 3b490cd28c new(slavelog parser): parser for asdtp section
- a lot of boilerplates...
- there should be smarter way
2024-10-25 22:50:48 +09:00

216 lines
7.9 KiB
Julia

using Test
using PSBoardDataBase
using StaticArrays
using CSV, DataFrames
using SQLite, DBInterface
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
lines = Iterators.Stateful(
Iterators.drop(eachline("./input/slavelogs/main/430_100.txt"), 2280),
)
result_asdtp = PSBoardDataBase.SlaveLogParser.parse_asdtp_section!(lines)
# target = 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)),
# )
# @info "" target == result_asdtp zip(result_asdtp.pp_pllds, target.pp_pllds) |>
# collect result_asdtp.pp_pllds == target.pp_pllds Iterators.filter(
# x -> x[1] != x[2],
# zip(result_asdtp.pp_pllds, target.pp_pllds),
# ) |> collect
# @info "" map(fieldnames(typeof(result_asdtp))) do field
# (; field, diff = getfield(result_asdtp, field) == getfield(target, field))
# end
@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)),
)
@info "pass"
lines = Iterators.Stateful(
Iterators.drop(eachline("./input/slavelogs/main/525_244.txt"), 2280),
)
PSBoardDataBase.SlaveLogParser.parse_asdtp_section!(lines)
# PSBoardDataBase.SlaveLogParser.parse_slavelog_file(
# "./input/slavelogs/main/525_244.txt",
# )
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()
db = PSBoardDataBase.create_database(dbpath)
@info "" db
@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) |>
isnothing
@test PSBoardDataBase.add_skew_from_slave_clk_logs(db, "input/slavelogs/") |>
isnothing
run(`sqlitebrowser $dbpath`)
@test PSBoardDataBase.create_database_from_exported_csvs(
tempname();
masterlog_dir = "input/log/",
slavelog_dir = "input/slavelogs/",
) 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