diff --git a/src/cal_tools/agipdlib.py b/src/cal_tools/agipdlib.py
index b3198241bdf17f7338904fa09be83291e146ba6e..9405781c929558f7f6dc84e50bcfdb19399883d8 100644
--- a/src/cal_tools/agipdlib.py
+++ b/src/cal_tools/agipdlib.py
@@ -261,6 +261,7 @@ class AgipdCtrl:
                 raise ValueError(error)
             return default_voltage
 
+
     def get_integration_time(self) -> int:
         """Read integration time from the FPGA device.
 
diff --git a/tests/conftest.py b/tests/conftest.py
index fd71bd602e4b7921a05c95639f2ddce0c797f558..e6ee787debd2a8ca9e4443a68c8ef64ed6a7e14f 100644
--- a/tests/conftest.py
+++ b/tests/conftest.py
@@ -1,10 +1,36 @@
 import socket
 from functools import lru_cache
 from pathlib import Path
+from tempfile import TemporaryDirectory
 
+import extra_data.tests.make_examples as make_examples
 import pytest
 
 
+@pytest.fixture(scope='session')
+def mock_agipd1m_run():
+    with TemporaryDirectory() as td:
+        make_examples.make_agipd1m_run(td)
+        yield td
+
+
+@pytest.fixture(scope='session')
+def mock_agipd1m_run_old():
+    # No gain.value or bunchStructure.repetitionRate in /CONTROL/
+    with TemporaryDirectory() as td:
+        make_examples.make_agipd1m_run(
+            td, rep_rate=False, gain_setting=False, integration_time=False)
+        yield td
+
+
+@pytest.fixture(scope='session')
+def mock_agipd500k_run():
+    # No gain.value or bunchStructure.repetitionRate in /CONTROL/
+    with TemporaryDirectory() as td:
+        make_examples.make_agipd500k_run(td)
+        yield td
+
+
 def pytest_addoption(parser):
     parser.addoption(
         "--no-gpfs",
diff --git a/tests/test_agipdlib.py b/tests/test_agipdlib.py
new file mode 100644
index 0000000000000000000000000000000000000000..dc1dd92c497bad2d2a73b08a9b486f6ccb593493
--- /dev/null
+++ b/tests/test_agipdlib.py
@@ -0,0 +1,209 @@
+from datetime import datetime
+
+from extra_data import RunDirectory
+
+from cal_tools.agipdlib import AgipdCtrl
+
+SPB_AGIPD_INST_SRC = 'SPB_DET_AGIPD1M-1/DET/0CH0:xtdf'
+CTRL_SRC = 'SPB_IRU_AGIPD1M1/MDL/FPGA_COMP'
+
+
+def test_get_acq_rate_run(mock_agipd1m_run):
+    # Current up to date data with acq_rate stored
+    # as repetition rate in slow data.
+    agipd_ctrl = AgipdCtrl(
+        run_dc=RunDirectory(mock_agipd1m_run),
+        image_src=SPB_AGIPD_INST_SRC,
+        ctrl_src=CTRL_SRC)
+
+    acq_rate = agipd_ctrl.get_acq_rate()
+    assert isinstance(acq_rate, float)
+    assert acq_rate == 4.5
+
+
+def test_get_acq_rate_fast(mock_agipd1m_run):
+    # Current up to date data with acq_rate stored
+    # as repetition rate in slow data.
+    agipd_ctrl = AgipdCtrl(
+        run_dc=RunDirectory(mock_agipd1m_run),
+        image_src=SPB_AGIPD_INST_SRC,
+        ctrl_src=CTRL_SRC)
+
+    acq_rate = agipd_ctrl._get_acq_rate_run()
+    assert isinstance(acq_rate, float)
+    assert acq_rate == 4.5
+
+
+def test_get_acq_rate_instr(mock_agipd1m_run_old):
+
+    # Old data with no stored acq_rate in slow data.
+    # Reading acq_rate from fast data.
+    agipd_ctrl = AgipdCtrl(
+        run_dc=RunDirectory(mock_agipd1m_run_old),
+        image_src=SPB_AGIPD_INST_SRC,
+        ctrl_src=None)
+    acq_rate = agipd_ctrl.get_acq_rate()
+    assert isinstance(acq_rate, float)
+    assert acq_rate == 4.5
+
+
+def test_get_acq_rate(mock_agipd1m_run, mock_agipd1m_run_old):
+
+    # Current up to date data with acq_rate stored
+    # as repetition rate in slow data.
+    agipd_ctrl = AgipdCtrl(
+        run_dc=RunDirectory(mock_agipd1m_run),
+        image_src=SPB_AGIPD_INST_SRC,
+        ctrl_src=CTRL_SRC)
+
+    acq_rate = agipd_ctrl._get_acq_rate_instr()
+    assert isinstance(acq_rate, float)
+    assert acq_rate == 4.5
+
+    # Old data with no stored acq_rate in slow data.
+    # Reading acq_rate from fast data.
+    agipd_ctrl = AgipdCtrl(
+        run_dc=RunDirectory(mock_agipd1m_run_old),
+        image_src=SPB_AGIPD_INST_SRC,
+        ctrl_src=None)
+    acq_rate = agipd_ctrl.get_acq_rate()
+    assert isinstance(acq_rate, float)
+    assert acq_rate == 4.5
+
+
+def test_get_num_cells(mock_agipd1m_run):
+
+    # Reading number of memory cells from fast data.
+    agipd_ctrl = AgipdCtrl(
+        run_dc=RunDirectory(mock_agipd1m_run),
+        image_src=SPB_AGIPD_INST_SRC,
+        ctrl_src=None)
+    mem_cells = agipd_ctrl.get_num_cells()
+    assert isinstance(mem_cells, int)
+    assert mem_cells == 64
+
+
+def test_get_gain_setting_run(mock_agipd1m_run):
+    # Reading gain setting from slow data.
+    agipd_ctrl = AgipdCtrl(
+        run_dc=RunDirectory(mock_agipd1m_run),
+        image_src=SPB_AGIPD_INST_SRC,
+        ctrl_src=CTRL_SRC)
+    gain_setting = agipd_ctrl._get_gain_setting_run()
+    assert isinstance(gain_setting, int)
+    assert gain_setting == 0
+
+
+def test_get_gain_setting_run_old(mock_agipd1m_run_old):
+
+    # Reading gain setting from setupr and .....
+    agipd_ctrl = AgipdCtrl(
+        run_dc=RunDirectory(mock_agipd1m_run_old),
+        image_src=SPB_AGIPD_INST_SRC,
+        ctrl_src=CTRL_SRC)
+    gain_setting = agipd_ctrl._get_gain_setting_run_old()
+    assert isinstance(gain_setting, int)
+    assert gain_setting == 0
+
+
+def test_get_gain_setting(mock_agipd1m_run, mock_agipd1m_run_old):
+
+    # Reading gain setting from slow data.
+    agipd_ctrl = AgipdCtrl(
+        run_dc=RunDirectory(mock_agipd1m_run),
+        image_src=SPB_AGIPD_INST_SRC,
+        ctrl_src=CTRL_SRC)
+    gain_setting = agipd_ctrl.get_gain_setting()
+    assert isinstance(gain_setting, int)
+    assert gain_setting == 0
+
+    # Reading gain setting from setupr and .....
+    agipd_ctrl = AgipdCtrl(
+        run_dc=RunDirectory(mock_agipd1m_run_old),
+        image_src=SPB_AGIPD_INST_SRC,
+        ctrl_src=CTRL_SRC)
+    gain_setting = agipd_ctrl.get_gain_setting()
+    assert isinstance(gain_setting, int)
+    assert gain_setting == 0
+
+    # Old data without gain setting.
+    agipd_ctrl = AgipdCtrl(
+        run_dc=RunDirectory(mock_agipd1m_run_old),
+        image_src=SPB_AGIPD_INST_SRC,
+        ctrl_src=CTRL_SRC)
+
+    gain_setting = agipd_ctrl.get_gain_setting(
+        creation_time=datetime.strptime(
+            "2019-12-16T08:52:25",
+            "%Y-%m-%dT%H:%M:%S"))
+
+    assert gain_setting is None
+
+
+def test_get_bias_voltage(
+    mock_agipd1m_run,
+    mock_agipd500k_run,
+    mock_agipd1m_run_old
+):
+    # Read bias voltage for HED_DET_AGIPD500K from slow data.
+    agipd_ctrl = AgipdCtrl(
+        run_dc=RunDirectory(mock_agipd500k_run),
+        image_src=SPB_AGIPD_INST_SRC,
+        ctrl_src=CTRL_SRC)
+    bias_voltage = agipd_ctrl.get_bias_voltage(
+        karabo_id_control="HED_EXP_AGIPD500K2G")
+    assert isinstance(bias_voltage, int)
+    assert bias_voltage == 200
+
+    # Read bias voltage for SPB_DET_AGIPD1M-1 and MID_DET_AGIPD1M-1
+    # from slow data.
+    agipd_ctrl = AgipdCtrl(
+        run_dc=RunDirectory(mock_agipd1m_run),
+        image_src=SPB_AGIPD_INST_SRC,
+        ctrl_src=CTRL_SRC)
+    bias_voltage = agipd_ctrl.get_bias_voltage(
+        karabo_id_control="SPB_IRU_AGIPD1M1")
+    assert isinstance(bias_voltage, int)
+    assert bias_voltage == 300
+
+    # Read bias voltage for SPB_DET_AGIPD1M-1 and MID_DET_AGIPD1M-1
+    # from slow data.
+    agipd_ctrl = AgipdCtrl(
+        run_dc=RunDirectory(mock_agipd1m_run_old),
+        image_src=SPB_AGIPD_INST_SRC,
+        ctrl_src=CTRL_SRC)
+    bias_voltage = agipd_ctrl.get_bias_voltage(
+        karabo_id_control="SPB_IRU_AGIPD1M1")
+    assert isinstance(bias_voltage, int)
+    assert bias_voltage == 300
+
+
+def test_get_integration_time(mock_agipd1m_run, mock_agipd1m_run_old):
+    # Read integration time.
+    agipd_ctrl = AgipdCtrl(
+        run_dc=RunDirectory(mock_agipd1m_run),
+        image_src=SPB_AGIPD_INST_SRC,
+        ctrl_src=CTRL_SRC)
+    integration_time = agipd_ctrl.get_integration_time()
+    assert isinstance(integration_time, int)
+    assert integration_time == 15
+
+    # Integration time is not available in slow data.
+    agipd_ctrl = AgipdCtrl(
+        run_dc=RunDirectory(mock_agipd1m_run_old),
+        image_src=SPB_AGIPD_INST_SRC,
+        ctrl_src=CTRL_SRC)
+    integration_time = agipd_ctrl.get_integration_time()
+    assert isinstance(integration_time, int)
+    assert integration_time == 12
+
+
+def test_get_gain_mode(mock_agipd1m_run):
+    # Read gain mode from slow data.
+    agipd_ctrl = AgipdCtrl(
+        run_dc=RunDirectory(mock_agipd1m_run),
+        image_src=SPB_AGIPD_INST_SRC,
+        ctrl_src=CTRL_SRC)
+    gain_mode = agipd_ctrl.get_gain_mode()
+    assert isinstance(gain_mode, int)
+    assert gain_mode == 0