• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

PrincetonUniversity / slurmise / 19443270205

17 Nov 2025 08:17PM UTC coverage: 93.197% (+0.1%) from 93.08%
19443270205

Pull #58

github

web-flow
Merge c0fd25661 into 9e2caaae9
Pull Request #58: Bugfix job database.iterate jobs

142 of 155 branches covered (91.61%)

Branch coverage included in aggregate %.

23 of 26 new or added lines in 8 files covered. (88.46%)

20 existing lines in 2 files now uncovered.

1543 of 1653 relevant lines covered (93.35%)

2.8 hits per line

Source File
Press 'n' to go to next uncovered line, 'b' for previous

67.92
/tests/test_api.py
1
import multiprocessing
3✔
2
import time
3✔
3
from unittest import mock
3✔
4

5
import pytest
3✔
6

7
from slurmise.api import Slurmise
3✔
8
from slurmise.job_data import JobData
3✔
9
from slurmise.job_database import JobDatabase
3✔
10

11

12
def slurmise_record(toml, process_id, error_queue):
3✔
UNCOV
13
    def mock_metadata(kwargs):
×
UNCOV
14
        return {
×
15
            "slurm_id": kwargs["slurm_id"],
16
            "job_name": "nupack",
17
            "state": "COMPLETED",
18
            "partition": "",
19
            "elapsed_seconds": 97201,
20
            "CPUs": 1,
21
            "memory_per_cpu": 0,
22
            "memory_per_node": 0,
23
            "max_rss": 232,
24
            "step_id": "external",
25
        }
26

27
    try:
×
UNCOV
28
        time.sleep(process_id * 0.1)
×
UNCOV
29
        with mock.patch(
×
30
            "slurmise.slurm.parse_slurm_job_metadata",
31
            side_effect=lambda *args, **kwargs: mock_metadata(kwargs),
32
        ):
33
            slurmise = Slurmise(toml)
×
34
            time.sleep(process_id * 0.1)
×
35
            for i in range(10):
×
36
                slurmise.record("nupack monomer -T 2 -C simple", slurm_id=str(process_id * 100 + i))
×
37
                time.sleep(process_id * 0.1)
×
UNCOV
38
    except Exception as e:  # noqa: BLE001
×
UNCOV
39
        error_queue.put(f"PID {process_id}: {e}")
×
40

41

42
def test_multiple_slurmise_instances(simple_toml):
3✔
43
    processes = []
3✔
44
    error_queue = multiprocessing.Queue()
3✔
45
    for i in range(10):
3✔
46
        p = multiprocessing.Process(target=slurmise_record, args=(simple_toml.toml, i, error_queue))
3✔
47
        processes.append(p)
3✔
48
        p.start()
3✔
49

50
    [p.join() for p in processes]
3✔
51

52
    if not error_queue.empty():
3✔
53
        while not error_queue.empty():
×
UNCOV
54
            print(error_queue.get())
×
UNCOV
55
        pytest.fail("Child prcess had error")
×
56

57

58
def test_job_data_from_dict(simple_toml):
3✔
59
    slurmise = Slurmise(simple_toml.toml)
3✔
60
    result = slurmise.job_data_from_dict(
3✔
61
        {"threads": 3, "complexity": "simple"},
62
        "nupack",
63
    )
64
    assert result.categorical == {"complexity": "simple"}
3✔
65
    assert result.numerical == {"threads": 3}
3✔
66

67

68
def test_update_all_models_empty_database(simple_toml):
3✔
69
    slurmise = Slurmise(simple_toml.toml)
3✔
70
    slurmise.update_all_models()
3✔
71

72

73
# TODO avoid rewriting duplicated logic to fixtures in tests/test_job_database.py
74
def test_update_all_models(simple_toml, tmp_path):
3✔
75
    hdf5_path = tmp_path / "test_db.h5"
3✔
76
    slurmise = Slurmise(simple_toml.toml)
3✔
77
    slurmise.configuration.db_filename = str(hdf5_path)
3✔
78

79
    with JobDatabase.get_database(hdf5_path) as db:
3✔
80
        for job_id in range(50):
3✔
81
            db.record(
3✔
82
                JobData(
83
                    job_name="nupack",
84
                    slurm_id=str(job_id),
85
                    categorical={"complexity": "simple"},
86
                    numerical={"threads": 2},
87
                    memory=200,
88
                    runtime=3600,
89
                )
90
            )
91

92
    slurmise.update_all_models()
3✔
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2026 Coveralls, Inc