diff --git a/cal_tools/cal_tools/agipdlib.py b/cal_tools/cal_tools/agipdlib.py
index a098b07b83a7af795b8000c0aced7f4eca62c6bb..1b8da40f52e87768da0b880d9a7da41f7d75e6a5 100644
--- a/cal_tools/cal_tools/agipdlib.py
+++ b/cal_tools/cal_tools/agipdlib.py
@@ -17,7 +17,7 @@ from cal_tools.agipdutils import (
 )
 from cal_tools.enums import AgipdGainMode, BadPixels, SnowResolution
 from cal_tools.tools import get_constant_from_db_and_time
-from iCalibrationDB import Conditions
+from iCalibrationDB import Conditions, Constants
 
 from cal_tools.cython import agipdalgs as calgs
 
@@ -1272,7 +1272,8 @@ class AgipdCorrections:
         return when
 
     def initialize_from_db(self, karabo_id: str, karabo_da: str,
-                           cal_db_interface: str, creation_time: str,
+                           cal_db_interface: str,
+                           creation_time: 'datetime.datetime',
                            memory_cells: float, bias_voltage: int,
                            photon_energy: float, gain_setting: float,
                            acquisition_rate: float, module_idx: int,
diff --git a/cal_tools/cal_tools/tools.py b/cal_tools/cal_tools/tools.py
index 7572e7d18911d92abfba522c31dcf8f453745461..587bb8970a0a645d8bfbe6113669e4c42f1e4953 100644
--- a/cal_tools/cal_tools/tools.py
+++ b/cal_tools/cal_tools/tools.py
@@ -398,6 +398,10 @@ def get_pdu_from_db(karabo_id: str, karabo_da: Union[str, list],
 
     :param karabo_id: Karabo identifier.
     :param karabo_da: Karabo data aggregator.
+    :param constant: Calibration constant object to 
+                     intialize CalibrationConstantMetadata class.
+    :param condition: Detector condition object to
+                      intialize CalibrationConstantMetadata class.
     :param cal_db_interface: Interface string, e.g. "tcp://max-exfl016:8015".
     :param snapshot_at: Database snapshot.
     :param timeout: Calibration Database timeout.
@@ -570,6 +574,8 @@ def send_to_db(db_module: str, karabo_id: str, constant, condition,
     :param constant: Calibration constant known for given detector
     :param condition: Calibration condition
     :param file_loc: Location of raw data.
+    :param report_path: xfel-calbrate report path to inject along with
+                        the calibration constant versions to the database.
     :param cal_db_interface: Interface string, e.g. "tcp://max-exfl016:8015"
     :param creation_time: Latest time for constant to be created
     :param timeout: Timeout for zmq request
diff --git a/tests/test_cal_tools.py b/tests/test_cal_tools.py
index c7656d1770a4bec28f935eae2c282306940b1b60..7ee13b577056da2017de34bd4a684d01d0fa120b 100644
--- a/tests/test_cal_tools.py
+++ b/tests/test_cal_tools.py
@@ -2,8 +2,14 @@ from datetime import datetime
 from pathlib import Path
 
 import pytest
+from cal_tools.agipdlib import AgipdCorrections
 from cal_tools.plotting import show_processed_modules
-from cal_tools.tools import get_dir_creation_date, module_index_to_qm
+from cal_tools.tools import (
+    get_dir_creation_date,
+    get_pdu_from_db,
+    module_index_to_qm,
+)
+from iCalibrationDB import Conditions, Constants
 
 
 def test_show_processed_modules():
@@ -32,6 +38,108 @@ def test_dir_creation_date():
     assert str(date) == '2019-12-16 08:52:25.196603'
 
 
+# AGIPD dark offset metadata
+constant = Constants.AGIPD.Offset()
+mem_cells = 352
+bias_voltage = 300
+acq_rate = 1.1
+gain_setting = 0
+photon_energy = 9.2
+condition = Conditions.Dark.AGIPD(memory_cells=mem_cells,
+                                  bias_voltage=bias_voltage,
+                                  acquisition_rate=acq_rate,
+                                  gain_setting=gain_setting)
+cal_db_interface = "tcp://max-exfl017:8020"
+
+
+def test_get_pdu_from_db():
+
+    # A karabo_da str returns a list of one element.
+    pdu_dict = get_pdu_from_db(karabo_id="TEST_DET_CI-2",
+                               karabo_da="TEST_DAQ_DA_01",
+                               constant=constant,
+                               condition=condition,
+                               cal_db_interface=cal_db_interface,
+                               snapshot_at="2021-03-01 09:44:00+00:00",
+                               timeout=30000)
+    assert len(pdu_dict) == 1
+    assert pdu_dict[0] == 'PHYSICAL_DETECTOR_UNIT-1_DO_NOT_DELETE'
+
+    # A list of karabo_das to return thier PDUs, if available.
+    pdu_dict = get_pdu_from_db(karabo_id="TEST_DET_CI-2",
+                               karabo_da=["TEST_DAQ_DA_01", "TEST_DAQ_DA_02",
+                                          "UNAVAILABLE_DA"],
+                               constant=constant,
+                               condition=condition,
+                               cal_db_interface=cal_db_interface,
+                               snapshot_at="2021-03-01 09:44:00+00:00",
+                               timeout=30000)
+
+    assert pdu_dict == ['PHYSICAL_DETECTOR_UNIT-1_DO_NOT_DELETE',
+                        'PHYSICAL_DETECTOR_UNIT-2_DO_NOT_DELETE',
+                        None]
+
+    # "all" is used to return all corresponding units for a karabo_id.
+    pdu_dict = get_pdu_from_db(karabo_id="TEST_DET_CI-2",
+                               karabo_da="all",
+                               constant=constant,
+                               condition=condition,
+                               cal_db_interface="tcp://max-exfl017:8020",
+                               snapshot_at="2021-03-01 09:44:00+00:00",
+                               timeout=30000)
+
+    assert len(pdu_dict) == 3
+    assert pdu_dict == ['PHYSICAL_DETECTOR_UNIT-1_DO_NOT_DELETE',
+                        'PHYSICAL_DETECTOR_UNIT-2_DO_NOT_DELETE',
+                        'PHYSICAL_DETECTOR_UNIT-3_DO_NOT_DELETE']
+
+
+def test_initialize_from_db():
+    creation_time = datetime.strptime("2020-01-07 13:26:48.00",
+                                      "%Y-%m-%d %H:%M:%S.%f")
+
+    agipd_corr = AgipdCorrections(max_cells=mem_cells,
+                                  max_pulses=[0, 500, 1])
+
+    agipd_corr.allocate_constants(modules=[0],
+                                  constant_shape=(3, mem_cells, 512, 128))
+
+    dark_const_time_dict = agipd_corr.initialize_from_db(
+        karabo_id="TEST_DET_CI-2",
+        karabo_da="TEST_DAQ_DA_01",
+        cal_db_interface=cal_db_interface,
+        creation_time=creation_time,
+        memory_cells=mem_cells,
+        bias_voltage=bias_voltage,
+        photon_energy=photon_energy,
+        gain_setting=gain_setting,
+        acquisition_rate=acq_rate,
+        module_idx=0,
+        only_dark=False,
+    )
+
+    assert dark_const_time_dict == {
+        "Offset": None,
+        "Noise": None,
+        "ThresholdsDark": None,
+        "BadPixelsDark": None,
+    }
+
+    dark_const_time_dict = agipd_corr.initialize_from_db(
+        karabo_id="SPB_DET_AGIPD1M-1",
+        karabo_da="AGIPD00",
+        cal_db_interface=cal_db_interface,
+        creation_time=creation_time,
+        memory_cells=mem_cells, bias_voltage=bias_voltage,
+        photon_energy=photon_energy, gain_setting=gain_setting,
+        acquisition_rate=acq_rate, module_idx=0,
+        only_dark=False)
+    # A retrieved constant has a value of datetime creation_time
+    assert isinstance(dark_const_time_dict["Offset"], datetime)
+    assert list(dark_const_time_dict.keys()) == [
+        "Offset", "Noise", "ThresholdsDark", "BadPixelsDark"]
+
+
 def test_module_index_to_qm():
 
     assert module_index_to_qm(0) == 'Q1M1'